diff --git a/code/controllers/subsystems/transcore_vr.dm b/code/controllers/subsystems/transcore_vr.dm
index 6b0815999b..f185c4bbb8 100644
--- a/code/controllers/subsystems/transcore_vr.dm
+++ b/code/controllers/subsystems/transcore_vr.dm
@@ -112,10 +112,11 @@ SUBSYSTEM_DEF(transcore)
if(since_backup < overdue_time)
curr_MR.dead_state = MR_NORMAL
else
- if(curr_MR.dead_state != MR_DEAD) //First time switching to dead
+/* if(curr_MR.dead_state != MR_DEAD) //First time switching to dead //Remove auto notification! Ghosts have a button to notify, so no more false flags.
if(curr_MR.do_notify)
db.notify(curr_MR)
curr_MR.last_notification = world.time
+*/
curr_MR.dead_state = MR_DEAD
if(MC_TICK_CHECK)
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 267871366b..fcf5d64e7e 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -9,6 +9,8 @@
return
for(var/obj/item/W in M)
+ if(istype(W, /obj/item/weapon/implant/backup) || istype(W, /obj/item/device/nif)) //VOREStation Edit - There's basically no reason to remove either of these
+ continue //VOREStation Edit
M.drop_from_inventory(W)
log_admin("[key_name(usr)] made [key_name(M)] drop everything!")
diff --git a/code/modules/mob/dead/observer/observer_vr.dm b/code/modules/mob/dead/observer/observer_vr.dm
index 1fb9d913c9..c6ea1050d9 100644
--- a/code/modules/mob/dead/observer/observer_vr.dm
+++ b/code/modules/mob/dead/observer/observer_vr.dm
@@ -68,8 +68,14 @@
var/datum/transcore_db/db = SStranscore.db_by_mind_name(mind.name)
if(db)
var/datum/transhuman/mind_record/record = db.backed_up[src.mind.name]
- if(!(record.dead_state == MR_DEAD))
- to_chat(src, "Your backup is not past-due yet.")
+ if(!(record.dead_state == MR_DEAD))
+ if((world.time - timeofdeath ) > 5 MINUTES) //Allows notify transcore to be used if you have an entry but for some reason weren't marked as dead
+ record.dead_state = MR_DEAD //Such as if you got scanned but didn't take an implant. It's a little funky, but I mean, you got scanned
+ db.notify(record) //So you probably will want to let someone know if you die.
+ record.last_notification = world.time
+ to_chat(src, "New notification has been sent.")
+ else
+ to_chat(src, "Your backup is not past-due yet.")
else if((world.time - record.last_notification) < 5 MINUTES)
to_chat(src, "Too little time has passed since your last notification.")
else
@@ -78,7 +84,7 @@
to_chat(src, "New notification has been sent.")
else
to_chat(src,"No backup record could be found, sorry.")
-
+/*
/mob/observer/dead/verb/backup_delay()
set category = "Ghost"
set name = "Cancel Transcore Notification"
@@ -97,7 +103,7 @@
to_chat(src, "Overdue mind backup notification delayed successfully.")
else
to_chat(src,"No backup record could be found, sorry.")
-
+*/
/mob/observer/dead/verb/findghostpod() //Moves the ghost instead of just changing the ghosts's eye -Nodrak
set category = "Ghost"
set name = "Find Ghost Pod"
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index 363353c2ec..85d0720670 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -485,9 +485,10 @@ This function completely restores a damaged organ to perfect condition.
// remove embedded objects and drop them on the floor
for(var/obj/implanted_object in implants)
- if(!istype(implanted_object,/obj/item/weapon/implant) && !istype(implanted_object,/obj/item/device/nif)) // We don't want to remove REAL implants. Just shrapnel etc. //VOREStation Edit - NIFs pls
- implanted_object.loc = get_turf(src)
- implants -= implanted_object
+ if(istype(implanted_object,/obj/item/weapon/implant) || istype(implanted_object,/obj/item/device/nif)) // We don't want to remove REAL implants. Just shrapnel etc. //VOREStation Edit - NIFs pls
+ continue
+ implanted_object.loc = get_turf(src)
+ implants -= implanted_object
if(!owner.has_embedded_objects())
owner.clear_alert("embeddedobject")
diff --git a/code/modules/resleeving/autoresleever.dm b/code/modules/resleeving/autoresleever.dm
new file mode 100644
index 0000000000..bbef48b8ae
--- /dev/null
+++ b/code/modules/resleeving/autoresleever.dm
@@ -0,0 +1,173 @@
+/obj/machinery/transhuman/autoresleever
+ name = "automatic resleever"
+ desc = "Uses advanced technology to detect when someone needs to be resleeved, and automatically prints and sleeves them into a new body. It even generates its own biomass!"
+ icon = 'icons/obj/machines/autoresleever.dmi'
+ icon_state = "autoresleever"
+ density = TRUE
+ anchored = TRUE
+ var/equip_body = FALSE //If true, this will spawn the person with equipment
+ var/default_job = USELESS_JOB //The job that will be assigned if equip_body is true and the ghost doesn't have a job
+ var/ghost_spawns = FALSE //If true, allows ghosts who haven't been spawned yet to spawn
+ var/vore_respawn = 15 MINUTES //The time to wait if you died from vore
+ var/respawn = 30 MINUTES //The time to wait if you didn't die from vore
+ var/spawn_slots = -1 //How many people can be spawned from this? If -1 it's unlimited
+ var/spawntype //The kind of mob that will be spawned, if set.
+ var/update_i = FALSE
+
+/obj/machinery/transhuman/autoresleever/update_icon()
+ . = ..()
+ if(stat)
+ icon_state = "autoresleever-o"
+ else
+ icon_state = "autoresleever"
+
+/obj/machinery/transhuman/autoresleever/power_change()
+ . = ..()
+ update_icon()
+
+/obj/machinery/transhuman/autoresleever/attack_ghost(mob/observer/dead/user as mob)
+ update_icon()
+ if(spawn_slots == 0)
+ to_chat(user, "There are no more respawn slots.")
+ return
+ if(user.mind)
+ if(user.mind.vore_death)
+ if(vore_respawn <= world.time - user.timeofdeath)
+ autoresleeve(user)
+ else
+ to_chat(user, "You must wait [((vore_respawn - (world.time - user.timeofdeath)) * 0.1) / 60] minutes to use \the [src].")
+ return
+ else if(respawn <= world.time - user.timeofdeath)
+ autoresleeve(user)
+ else
+ to_chat(user, "You must wait [((respawn - (world.time - user.timeofdeath)) * 0.1) /60] minutes to use \the [src].")
+ return
+ else if(spawntype)
+ if(tgui_alert(user, "This [src] spawns something special, would you like to play as it?", "Creachur", list("No","Yes")) == "Yes")
+ autoresleeve(user)
+ else if(ghost_spawns)
+ if(tgui_alert(user, "Would you like to be spawned here as your presently loaded character?", "Spawn here", list("No","Yes")) == "Yes")
+ autoresleeve(user)
+ else
+ to_chat(user, "You need to have been spawned in order to respawn here.")
+
+/obj/machinery/transhuman/autoresleever/attackby(var/mob/user) //Let's not let people mess with this.
+ update_icon()
+ if(istype(user,/mob/observer/dead))
+ attack_ghost(user)
+ else
+ return
+
+/obj/machinery/transhuman/autoresleever/proc/autoresleeve(var/mob/observer/dead/ghost)
+ if(stat)
+ to_chat(ghost, "This machine is not functioning...")
+ return
+ if(!istype(ghost,/mob/observer/dead))
+ return
+
+ if(ghost.mind && ghost.mind.current && ghost.mind.current.stat != DEAD)
+ to_chat(ghost, "Your body is still alive, you cannot be resleeved.")
+ return
+
+ var/client/ghost_client = ghost.client
+
+ //Name matching is ugly but mind doesn't persist to look at.
+ var/charjob
+ var/datum/data/record/record_found
+ record_found = find_general_record("name",ghost_client.prefs.real_name)
+
+ //Found their record, they were spawned previously
+ if(record_found)
+ charjob = record_found.fields["real_rank"]
+ else if(equip_body || ghost_spawns)
+ charjob = default_job
+ else
+ to_chat(ghost, "It appears as though your loaded character has not been spawned this round, or has quit the round. If you died as a different character, please load them, and try again.")
+ return
+
+ //For logging later
+ var/player_key = ghost_client.key
+ var/picked_ckey = ghost_client.ckey
+ var/picked_slot = ghost_client.prefs.default_slot
+
+ var/spawnloc = get_turf(src)
+ //Did we actually get a loc to spawn them?
+ if(!spawnloc)
+ to_chat(ghost, "Could not find a valid location to spawn your character.")
+ return
+
+ if(spawntype)
+ var/spawnthing = new spawntype(spawnloc)
+ if(isliving(spawnthing))
+ var/mob/living/L = spawnthing
+ L.key = player_key
+ L.ckey = picked_ckey
+ log_admin("[L.ckey]'s has been spawned as [L] via \the [src].")
+ message_admins("[L.ckey]'s has been spawned as [L] via \the [src].")
+ else
+ to_chat(ghost, "You can't play as a [spawnthing]...")
+ return
+ if(spawn_slots == -1)
+ return
+ else if(spawn_slots == 0)
+ return
+ else
+ spawn_slots --
+ return
+
+ if(tgui_alert(ghost, "Would you like to be resleeved?", "Resleeve", list("No","Yes")) == "No")
+ return
+ var/mob/living/carbon/human/new_character
+ new_character = new(spawnloc)
+
+ //We were able to spawn them, right?
+ if(!new_character)
+ to_chat(ghost, "Something went wrong and spawning failed.")
+ return
+
+ //Write the appearance and whatnot out to the character
+ ghost_client.prefs.copy_to(new_character)
+ if(new_character.dna)
+ new_character.dna.ResetUIFrom(new_character)
+ new_character.sync_organ_dna()
+
+ new_character.key = player_key
+
+ //Were they any particular special role? If so, copy.
+ if(new_character.mind)
+ new_character.mind.loaded_from_ckey = picked_ckey
+ new_character.mind.loaded_from_slot = picked_slot
+
+ var/datum/antagonist/antag_data = get_antag_data(new_character.mind.special_role)
+ if(antag_data)
+ antag_data.add_antagonist(new_character.mind)
+ antag_data.place_mob(new_character)
+
+ for(var/lang in ghost_client.prefs.alternate_languages)
+ var/datum/language/chosen_language = GLOB.all_languages[lang]
+ if(chosen_language)
+ if(is_lang_whitelisted(src,chosen_language) || (new_character.species && (chosen_language.name in new_character.species.secondary_langs)))
+ new_character.add_language(lang)
+
+ //If desired, apply equipment.
+ if(equip_body)
+ if(charjob)
+ job_master.EquipRank(new_character, charjob, 1)
+ new_character.mind.assigned_role = charjob
+ new_character.mind.role_alt_title = job_master.GetPlayerAltTitle(new_character, charjob)
+
+ //A redraw for good measure
+ new_character.regenerate_icons()
+
+ new_character.update_transform()
+
+ log_admin("[new_character.ckey]'s character [new_character.real_name] has been auto-resleeved.")
+ message_admins("[new_character.ckey]'s character [new_character.real_name] has been auto-resleeved.")
+
+ if(spawn_slots == -1)
+ return
+ else if(spawn_slots == 0)
+ return
+ else
+ spawn_slots --
+ return
diff --git a/icons/obj/machines/autoresleever.dmi b/icons/obj/machines/autoresleever.dmi
new file mode 100644
index 0000000000..1c1bb50706
Binary files /dev/null and b/icons/obj/machines/autoresleever.dmi differ
diff --git a/maps/stellardelight/stellar_delight1.dmm b/maps/stellardelight/stellar_delight1.dmm
index d74e93ac79..8de74aeb86 100644
--- a/maps/stellardelight/stellar_delight1.dmm
+++ b/maps/stellardelight/stellar_delight1.dmm
@@ -2075,6 +2075,10 @@
/obj/machinery/computer/transhuman/resleeving{
dir = 8
},
+/obj/item/device/radio/intercom{
+ dir = 4;
+ pixel_x = 24
+ },
/turf/simulated/floor/tiled/eris/white/bluecorner,
/area/stellardelight/deck1/resleeving)
"ew" = (
@@ -6726,7 +6730,7 @@
dir = 5
},
/obj/machinery/button/remote/airlock{
- desc = "A remote control switch for the medbay foyer.";
+ desc = "A remote control switch for the cleaning room exit.";
dir = 4;
id = "resleeveexit";
name = "Door Control";
@@ -7381,6 +7385,14 @@
/obj/effect/floor_decal/steeldecal/steel_decals4{
dir = 1
},
+/obj/machinery/button/remote/airlock{
+ desc = "A remote control switch for the cleaning room.";
+ dir = 4;
+ id = "resleeveclean";
+ name = "Door Control";
+ pixel_x = -27;
+ pixel_y = -27
+ },
/turf/simulated/floor/tiled/eris/white/bluecorner,
/area/stellardelight/deck1/resleeving)
"pC" = (
@@ -7970,7 +7982,7 @@
/turf/simulated/floor/carpet,
/area/chapel/main)
"qR" = (
-/obj/structure/table/glass,
+/obj/machinery/transhuman/autoresleever,
/turf/simulated/floor/tiled/dark,
/area/stellardelight/deck1/resleeving)
"qS" = (
@@ -16013,16 +16025,6 @@
/obj/effect/floor_decal/milspec/color/black,
/turf/simulated/floor/tiled/dark,
/area/security/armoury)
-"Ij" = (
-/obj/structure/bed/chair{
- dir = 1
- },
-/obj/item/device/radio/intercom{
- dir = 8;
- pixel_x = -24
- },
-/turf/simulated/floor/tiled/eris/white/bluecorner,
-/area/stellardelight/deck1/resleeving)
"Ik" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -20510,8 +20512,9 @@
/obj/machinery/door/airlock/angled_bay/standard/color{
dir = 8;
door_color = "#ffffff";
+ id_tag = "resleeveclean";
name = "Cleaning Room";
- req_access = null;
+ req_access = list(5);
stripe_color = "#5a96bb"
},
/turf/simulated/floor/tiled/steel_ridged,
@@ -33859,7 +33862,7 @@ dH
oW
vb
pA
-Ij
+hv
CG
ZB
hg
diff --git a/maps/tether/tether-01-surface1.dmm b/maps/tether/tether-01-surface1.dmm
index cdba4f64c5..cfafaa8e6f 100644
--- a/maps/tether/tether-01-surface1.dmm
+++ b/maps/tether/tether-01-surface1.dmm
@@ -2264,6 +2264,11 @@
/obj/effect/floor_decal/steeldecal/steel_decals4{
dir = 5
},
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/lowerhall)
"adS" = (
@@ -2288,6 +2293,11 @@
name = "Mental Health";
req_one_access = list()
},
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/lowerhall)
"adV" = (
@@ -2358,6 +2368,11 @@
pixel_x = -26;
pixel_y = -26
},
+/obj/structure/cable/green{
+ d1 = 2;
+ d2 = 4;
+ icon_state = "2-4"
+ },
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/lowerhall)
"adY" = (
@@ -2379,6 +2394,11 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/lowerhall)
"adZ" = (
@@ -2552,11 +2572,11 @@
/turf/simulated/floor/carpet/blue,
/area/tether/surfacebase/medical/mentalhealth)
"aem" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
},
/turf/simulated/floor/tiled,
/area/tether/surfacebase/lowernorthhall)
@@ -2824,6 +2844,13 @@
/obj/effect/floor_decal/corner/paleblue/bordercorner2{
dir = 5
},
+/obj/structure/disposalpipe/trunk{
+ dir = 4
+ },
+/obj/machinery/disposal/wall{
+ dir = 8;
+ name = "auto-resleeving equipment deposit"
+ },
/turf/simulated/floor/tiled,
/area/tether/surfacebase/lowernorthhall)
"aeE" = (
@@ -3295,6 +3322,17 @@
/obj/effect/floor_decal/steeldecal/steel_decals4{
dir = 4
},
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 4;
+ icon_state = "1-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
/turf/simulated/floor/tiled,
/area/tether/surfacebase/lowernorthhall)
"afp" = (
@@ -3345,6 +3383,17 @@
/obj/effect/floor_decal/corner/paleblue/bordercorner2{
dir = 4
},
+/obj/structure/cable/green{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/tether/surfacebase/lowernorthhall)
"aft" = (
@@ -3381,6 +3430,7 @@
dir = 4;
pixel_x = 24
},
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
/turf/simulated/floor/plating,
/area/maintenance/lowmedbaymaint)
"afz" = (
@@ -8206,12 +8256,6 @@
dir = 4
},
/obj/random/junk,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
/turf/simulated/floor/plating,
/area/maintenance/lowmedbaymaint)
"anG" = (
@@ -11278,11 +11322,13 @@
icon_state = "1-4"
},
/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
/obj/structure/disposalpipe/segment{
dir = 8;
icon_state = "pipe-c"
},
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
/turf/simulated/floor/plating,
/area/maintenance/lowmedbaymaint)
"asU" = (
@@ -13876,6 +13922,11 @@
/obj/machinery/door/firedoor/glass/hidden/steel{
dir = 1
},
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/lowerhall)
"awZ" = (
@@ -15870,12 +15921,12 @@
d2 = 8;
icon_state = "2-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/maintenance/lowmedbaymaint)
"azU" = (
@@ -30423,13 +30474,19 @@
/turf/simulated/floor/tiled,
/area/hallway/lower/first_west)
"bbI" = (
-/obj/item/weapon/tool/wrench{
- desc = "The lower jaw seems to keep jiggling...";
- name = "loose wrench";
- toolspeed = 3
+/obj/machinery/vending/loadout/uniform,
+/obj/machinery/light{
+ dir = 8
},
-/turf/simulated/floor/plating,
-/area/maintenance/lowmedbaymaint)
+/obj/effect/floor_decal/borderfloorwhite{
+ dir = 9
+ },
+/obj/effect/floor_decal/corner/paleblue/border{
+ dir = 9
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled/white,
+/area/tether/surfacebase/medical/autoresleeving)
"bbJ" = (
/obj/structure/cable/green,
/obj/structure/cable/green{
@@ -30470,9 +30527,15 @@
/turf/simulated/floor,
/area/maintenance/substation/SurfMedsubstation)
"bbM" = (
-/obj/random/cigarettes,
-/turf/simulated/floor/plating,
-/area/maintenance/lowmedbaymaint)
+/obj/machinery/transhuman/autoresleever,
+/obj/effect/floor_decal/borderfloorwhite{
+ dir = 1
+ },
+/obj/effect/floor_decal/corner/paleblue/border{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/tether/surfacebase/medical/autoresleeving)
"bbN" = (
/obj/structure/cable/green{
d1 = 4;
@@ -30628,9 +30691,19 @@
/turf/simulated/floor,
/area/maintenance/substation/SurfMedsubstation)
"bbZ" = (
-/obj/random/junk,
-/turf/simulated/floor/plating,
-/area/maintenance/lowmedbaymaint)
+/obj/structure/disposalpipe/trunk{
+ dir = 2
+ },
+/obj/machinery/disposal/deliveryChute,
+/obj/structure/plasticflaps,
+/obj/effect/floor_decal/borderfloorwhite{
+ dir = 1
+ },
+/obj/effect/floor_decal/corner/paleblue/border{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/tether/surfacebase/medical/autoresleeving)
"bca" = (
/obj/effect/floor_decal/borderfloor,
/obj/effect/floor_decal/corner/brown/border,
@@ -31706,12 +31779,6 @@
},
/turf/simulated/floor/plating,
/area/maintenance/lower/trash_pit)
-"bTE" = (
-/obj/structure/railing{
- dir = 1
- },
-/turf/simulated/floor/plating,
-/area/maintenance/lowmedbaymaint)
"bWg" = (
/obj/machinery/vending/loadout/costume{
dir = 4
@@ -31803,12 +31870,11 @@
/turf/simulated/floor/tiled/monotile,
/area/crew_quarters/locker/laundry_arrival)
"cqg" = (
-/obj/structure/railing{
- dir = 1
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/machinery/atmospherics/unary/vent_pump/on,
-/turf/simulated/floor/plating,
-/area/maintenance/lowmedbaymaint)
+/turf/simulated/wall,
+/area/tether/surfacebase/medical/autoresleeving)
"cqZ" = (
/obj/effect/floor_decal/borderfloor{
dir = 8
@@ -32326,6 +32392,10 @@
},
/turf/simulated/floor/plating,
/area/maintenance/lowmedbaymaint)
+"dUK" = (
+/obj/structure/disposalpipe/segment,
+/turf/simulated/wall,
+/area/tether/surfacebase/medical/autoresleeving)
"dYd" = (
/obj/machinery/firealarm{
layer = 3.3;
@@ -32773,10 +32843,24 @@
/turf/simulated/floor/plating,
/area/tether/surfacebase/funny/clownoffice)
"fKm" = (
-/obj/random/junk,
-/obj/random/maintenance/cargo,
-/turf/simulated/floor/plating,
-/area/maintenance/lowmedbaymaint)
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
+ },
+/obj/effect/floor_decal/borderfloorwhite{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/paleblue/border{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/white,
+/area/tether/surfacebase/medical/autoresleeving)
"fLB" = (
/obj/effect/floor_decal/steeldecal/steel_decals6{
dir = 5
@@ -33806,13 +33890,21 @@
/turf/simulated/floor/tiled,
/area/rnd/hallway)
"idk" = (
-/obj/item/weapon/tool/wirecutters{
- desc = "It gets jammed a lot.";
- name = "janky wirecutters";
- toolspeed = 2
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 22
},
-/turf/simulated/floor/plating,
-/area/maintenance/lowmedbaymaint)
+/obj/effect/floor_decal/borderfloorwhite{
+ dir = 6
+ },
+/obj/effect/floor_decal/corner/paleblue/border{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/white,
+/area/tether/surfacebase/medical/autoresleeving)
"iee" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -33895,6 +33987,25 @@
/obj/item/device/radio/beacon,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/surface_one_hall)
+"itj" = (
+/obj/structure/cable/green{
+ d2 = 8;
+ icon_state = "0-8"
+ },
+/obj/machinery/power/apc{
+ dir = 4;
+ name = "east bump";
+ nightshift_setting = 2;
+ pixel_x = 24
+ },
+/obj/effect/floor_decal/borderfloorwhite{
+ dir = 6
+ },
+/obj/effect/floor_decal/corner/paleblue/border{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/white,
+/area/tether/surfacebase/medical/autoresleeving)
"iue" = (
/turf/simulated/floor/looking_glass{
dir = 1
@@ -34049,9 +34160,6 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
/turf/simulated/floor/plating,
/area/maintenance/lowmedbaymaint)
"jhN" = (
@@ -34822,9 +34930,13 @@
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_laundry)
"lbd" = (
-/obj/random/maintenance/cargo,
-/turf/simulated/floor/plating,
-/area/maintenance/lowmedbaymaint)
+/obj/effect/floor_decal/borderfloorwhite/corner,
+/obj/effect/floor_decal/corner/paleblue/bordercorner,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/tether/surfacebase/medical/autoresleeving)
"lbu" = (
/obj/effect/floor_decal/borderfloorwhite,
/obj/effect/floor_decal/corner/paleblue/border,
@@ -35003,6 +35115,25 @@
/obj/machinery/holoposter,
/turf/simulated/wall,
/area/hallway/lower/first_west)
+"lBv" = (
+/obj/machinery/door/airlock/maintenance/medical{
+ id_tag = "autor";
+ name = "Auto-Resleeving";
+ req_access = list(5)
+ },
+/obj/structure/cable/green{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/tether/surfacebase/medical/autoresleeving)
"lBO" = (
/obj/structure/cable{
d1 = 1;
@@ -35148,9 +35279,32 @@
/turf/simulated/floor/tiled,
/area/tether/surfacebase/surface_one_hall)
"lPQ" = (
-/obj/item/stack/cable_coil/random_belt,
-/turf/simulated/floor/plating,
-/area/maintenance/lowmedbaymaint)
+/obj/machinery/button/remote/airlock{
+ desc = "A remote control door switch.";
+ id = "autor";
+ name = "Exit Button";
+ pixel_x = -26;
+ pixel_y = -26
+ },
+/obj/structure/cable/green{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/effect/floor_decal/borderfloorwhite{
+ dir = 10
+ },
+/obj/effect/floor_decal/corner/paleblue/border{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/turf/simulated/floor/tiled/white,
+/area/tether/surfacebase/medical/autoresleeving)
"lQu" = (
/obj/item/weapon/reagent_containers/glass/bucket,
/obj/structure/table/steel,
@@ -36375,9 +36529,22 @@
/turf/simulated/floor/carpet/gaycarpet,
/area/tether/surfacebase/funny/clownoffice)
"oPH" = (
-/obj/random/pizzabox,
-/turf/simulated/floor/plating,
-/area/maintenance/lowmedbaymaint)
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/item/device/radio/intercom{
+ dir = 1;
+ pixel_y = 24
+ },
+/obj/effect/floor_decal/borderfloorwhite{
+ dir = 5
+ },
+/obj/effect/floor_decal/corner/paleblue/border{
+ dir = 5
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/tiled/white,
+/area/tether/surfacebase/medical/autoresleeving)
"oQm" = (
/obj/effect/floor_decal/borderfloor/corner,
/obj/structure/cable{
@@ -36818,6 +36985,15 @@
"qwV" = (
/turf/simulated/wall,
/area/tether/surfacebase/security/brig)
+"qBa" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/maintenance/lowmedbaymaint)
"qBb" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
@@ -37024,12 +37200,12 @@
/turf/simulated/floor/plating,
/area/maintenance/lowmedbaymaint)
"qVi" = (
-/obj/structure/railing{
- dir = 1
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
},
-/obj/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor/plating,
-/area/maintenance/lowmedbaymaint)
+/turf/simulated/wall,
+/area/tether/surfacebase/medical/autoresleeving)
"qWk" = (
/obj/machinery/light,
/obj/structure/disposalpipe/segment{
@@ -37649,6 +37825,10 @@
},
/turf/simulated/floor/tiled,
/area/engineering/atmos)
+"sOx" = (
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/turf/simulated/floor/plating,
+/area/maintenance/lowmedbaymaint)
"sQc" = (
/obj/structure/sign/securearea{
desc = "A warning sign which reads 'HIGH VOLTAGE'";
@@ -38176,10 +38356,17 @@
/turf/simulated/floor/tiled/techfloor,
/area/maintenance/lower/xenoflora)
"utQ" = (
-/obj/fiftyspawner/steel,
-/obj/random/junk,
-/turf/simulated/floor/plating,
-/area/maintenance/lowmedbaymaint)
+/obj/structure/disposalpipe/segment,
+/obj/effect/floor_decal/borderfloorwhite,
+/obj/effect/floor_decal/corner/paleblue/border,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 8
+ },
+/obj/machinery/shower{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/tether/surfacebase/medical/autoresleeving)
"uuu" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -38318,6 +38505,9 @@
},
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/lowerhall)
+"uIU" = (
+/turf/simulated/wall,
+/area/tether/surfacebase/medical/autoresleeving)
"uKS" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -38465,11 +38655,8 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+ dir = 5
},
/turf/simulated/floor/plating,
/area/maintenance/lowmedbaymaint)
@@ -53037,11 +53224,11 @@ aan
atP
awE
aeU
-aeU
-aeU
-aeU
-aef
-aef
+uIU
+uIU
+uIU
+lBv
+cqg
afE
aef
aef
@@ -53179,11 +53366,11 @@ aan
uHS
awC
aeU
-aeU
+uIU
bbI
fKm
lPQ
-bTE
+cqg
akA
aAG
tdg
@@ -53321,10 +53508,10 @@ afb
atO
awC
aeU
-aeU
+uIU
bbM
lbd
-aAI
+itj
cqg
jcT
ksK
@@ -53463,10 +53650,10 @@ afb
atO
awp
axO
-aeU
+uIU
bbZ
utQ
-lbd
+dUK
qVi
anF
ksK
@@ -53605,11 +53792,11 @@ afb
atO
awG
aed
-aeU
+uIU
oPH
idk
-bbZ
-bTE
+uIU
+sOx
vuO
ksK
tdg
@@ -53747,12 +53934,12 @@ afb
atO
awz
aeU
-aeU
+uIU
+uIU
+uIU
+uIU
axP
-axP
-axP
-axP
-vuO
+qBa
ksK
oKn
oKn
diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm
index 79250a1c3d..8d47397b50 100644
--- a/maps/tether/tether-03-surface3.dmm
+++ b/maps/tether/tether-03-surface3.dmm
@@ -39409,7 +39409,9 @@
alarms_hidden = 1;
dir = 1;
name = "north bump";
- pixel_y = 28
+ pixel_y = 28;
+ req_access = null;
+ req_one_access = list(11,67)
},
/obj/structure/cable/green{
icon_state = "0-4"
diff --git a/maps/tether/tether_areas.dm b/maps/tether/tether_areas.dm
index 7d8c998346..9718cf7ecf 100644
--- a/maps/tether/tether_areas.dm
+++ b/maps/tether/tether_areas.dm
@@ -440,6 +440,8 @@
name = "\improper Medical Central Hall"
/area/tether/surfacebase/medical/lowerhall
name = "\improper Medical Lower Hall"
+/area/tether/surfacebase/medical/autoresleeving
+ name = "\improper Medical Auto Resleeving"
//North SurfMed3-2 Stairwell
/area/tether/surfacebase/medical/uppernorthstairwell
name = "\improper Medical Stairwell"
diff --git a/vorestation.dme b/vorestation.dme
index 4d488deb8a..bda8b0f4b4 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -3723,6 +3723,7 @@
#include "code\modules\research\designs\circuits\circuits.dm"
#include "code\modules\research\designs\circuits\circuits_vr.dm"
#include "code\modules\research\designs\circuits\disks.dm"
+#include "code\modules\resleeving\autoresleever.dm"
#include "code\modules\resleeving\circuitboards.dm"
#include "code\modules\resleeving\computers.dm"
#include "code\modules\resleeving\designer.dm"