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 cf669bf1461..f1684c4cf5f 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 08a25ef3636..22fba4e6a7a 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(QDELETED(character) || QDELETED(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 6ca1bdf4f33..faeabe82c81 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 1a256c07b06..9c4d2f6b7b3 100644
Binary files a/icons/obj/device_alt.dmi and b/icons/obj/device_alt.dmi differ
diff --git a/maps/tether/tether-01-surface.dmm b/maps/tether/tether-01-surface.dmm
index 0d59cd6c94b..4ad4ce5a987 100644
--- a/maps/tether/tether-01-surface.dmm
+++ b/maps/tether/tether-01-surface.dmm
@@ -3547,7 +3547,7 @@
"bql" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/tether/surfacebase/security/breakroom)
"bqm" = (/turf/simulated/wall/r_wall,/area/vacant/vacant_site2)
"bqn" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/maintenance/engi,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/techfloor/grid,/area/vacant/vacant_site2)
-"bqo" = (/obj/structure/table/glass,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/turf/simulated/floor/tiled/white,/area/tether/surfacebase/medical/triage)
+"bqo" = (/obj/structure/table/glass,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/obj/item/device/sleevemate,/turf/simulated/floor/tiled/white,/area/tether/surfacebase/medical/triage)
"bqp" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 1},/obj/structure/closet/hydrant{pixel_x = 32},/turf/simulated/floor/tiled/white,/area/tether/surfacebase/medical/triage)
"bqq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/tether/surfacebase/reading_room)
"bqr" = (/obj/structure/table/glass,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/wood,/area/tether/surfacebase/reading_room)
diff --git a/maps/tether/tether-03-station.dmm b/maps/tether/tether-03-station.dmm
index 4af06a94b1c..3faca8be54d 100644
--- a/maps/tether/tether-03-station.dmm
+++ b/maps/tether/tether-03-station.dmm
@@ -3302,7 +3302,7 @@
"blz" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/bridge_hallway)
"blA" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/computer/crew{dir = 8},/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 6},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/reception)
"blB" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 5},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 5},/obj/item/weapon/storage/firstaid/regular{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/reception)
-"blC" = (/obj/structure/table/glass,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"blC" = (/obj/structure/table/glass,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/item/device/sleevemate,/turf/simulated/floor/tiled/white,/area/medical/reception)
"blD" = (/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 5; icon_state = "intact"; tag = "icon-intact (NORTHEAST)"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/hallway/secondary/escape/medical_escape_pod_hallway)
"blE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/escape/medical_escape_pod_hallway)
"blF" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/medical/virologyaccess)
@@ -4749,7 +4749,7 @@
"bNq" = (/obj/machinery/status_display/supply_display{pixel_y = -32},/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/floor,/area/quartermaster/storage)
"bNr" = (/obj/machinery/conveyor{dir = 5; id = "mining_inbound"},/turf/simulated/floor,/area/quartermaster/storage)
"bNs" = (/obj/structure/table/glass,/obj/item/device/flashlight/pen{pixel_x = 3; pixel_y = 3},/obj/item/device/flashlight/pen{pixel_x = -3; pixel_y = -3},/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/paleblue/border{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/resleeving)
-"bNt" = (/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/white,/area/medical/resleeving)
+"bNt" = (/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/machinery/alarm{pixel_y = 22},/obj/item/device/sleevemate,/turf/simulated/floor/tiled/white,/area/medical/resleeving)
"bNu" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/resleeving)
"bNv" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/medical/resleeving)
"bNw" = (/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor/tiled/white,/area/medical/resleeving)
@@ -4800,7 +4800,7 @@
"bOp" = (/obj/effect/landmark/start{name = "Paramedic"},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
"bOq" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bOr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/steeldecal/steel_decals10,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 1},/obj/machinery/door/airlock/medical{name = "Morgue"; req_access = list(6)},/turf/simulated/floor/tiled/white,/area/medical/morgue)
-"bOs" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/obj/structure/table/standard,/obj/structure/bedsheetbin,/turf/simulated/floor/tiled,/area/medical/biostorage)
+"bOs" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/item/device/sleevemate,/turf/simulated/floor/tiled,/area/medical/biostorage)
"bOt" = (/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/paleblue/border{dir = 10},/obj/item/weapon/hand_labeler,/obj/item/weapon/packageWrap,/obj/item/device/radio/intercom{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
"bOu" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -32},/obj/item/weapon/cane,/obj/item/weapon/cane,/turf/simulated/floor/tiled,/area/medical/biostorage)
"bOv" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/paleblue/border{dir = 10},/obj/structure/table/standard,/obj/item/clothing/gloves/sterile/nitrile,/obj/item/clothing/gloves/sterile/nitrile,/obj/item/device/defib_kit,/obj/item/device/defib_kit,/turf/simulated/floor/tiled,/area/medical/biostorage)
diff --git a/vorestation.dme b/vorestation.dme
index 17631a1faf0..9e5c46d5f59 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -844,6 +844,7 @@
#include "code\game\objects\items\devices\pipe_painter.dm"
#include "code\game\objects\items\devices\powersink.dm"
#include "code\game\objects\items\devices\scanners.dm"
+#include "code\game\objects\items\devices\scanners_vr.dm"
#include "code\game\objects\items\devices\spy_bug.dm"
#include "code\game\objects\items\devices\suit_cooling.dm"
#include "code\game\objects\items\devices\t_scanner.dm"