"
- if("rank")
- var/list/L = list( "Head of Personnel", "Colony Director", "AI" )
- //This was so silly before the change. Now it actually works without beating your head against the keyboard. /N
- if ((istype(active1, /datum/data/record) && L.Find(rank)))
- temp = "
"
. += ""
@@ -222,8 +241,8 @@
return (pref.equip_preview_mob ? TOPIC_REFRESH_UPDATE_PREVIEW : TOPIC_REFRESH)
else if(href_list["set_job"])
- if(SetJob(user, href_list["set_job"])) return (pref.equip_preview_mob ? TOPIC_REFRESH_UPDATE_PREVIEW : TOPIC_REFRESH)
-
+ if(SetJob(user, href_list["set_job"], text2num(href_list["level"])))
+ return (pref.equip_preview_mob ? TOPIC_REFRESH_UPDATE_PREVIEW : TOPIC_REFRESH)
else if(href_list["job_info"])
var/rank = href_list["job_info"]
@@ -272,7 +291,7 @@
if(job.title != new_title)
pref.player_alt_titles[job.title] = new_title
-/datum/category_item/player_setup_item/occupation/proc/SetJob(mob/user, role)
+/datum/category_item/player_setup_item/occupation/proc/SetJob(mob/user, role, level)
var/datum/job/job = job_master.GetJob(role)
if(!job)
return 0
@@ -284,77 +303,73 @@
pref.job_civilian_low |= job.flag
return 1
- if(pref.GetJobDepartment(job, 1) & job.flag)
- SetJobDepartment(job, 1)
- else if(pref.GetJobDepartment(job, 2) & job.flag)
- SetJobDepartment(job, 2)
- else if(pref.GetJobDepartment(job, 3) & job.flag)
- SetJobDepartment(job, 3)
- else//job = Never
- SetJobDepartment(job, 4)
-
+ SetJobDepartment(job, level)
return 1
+/datum/category_item/player_setup_item/occupation/proc/reset_jobhigh()
+ pref.job_civilian_med |= pref.job_civilian_high
+ pref.job_medsci_med |= pref.job_medsci_high
+ pref.job_engsec_med |= pref.job_engsec_high
+ pref.job_talon_med |= pref.job_talon_high //VOREStation Add
+ pref.job_civilian_high = 0
+ pref.job_medsci_high = 0
+ pref.job_engsec_high = 0
+ pref.job_talon_high = 0 //VOREStation Add
+
+// Level is equal to the desired new level of the job. So for a value of 4, we want to disable the job.
/datum/category_item/player_setup_item/occupation/proc/SetJobDepartment(var/datum/job/job, var/level)
- if(!job || !level) return 0
- switch(level)
- if(1)//Only one of these should ever be active at once so clear them all here
- pref.job_civilian_high = 0
- pref.job_medsci_high = 0
- pref.job_engsec_high = 0
- pref.job_talon_high = 0 //VOREStation Add
- return 1
- if(2)//Set current highs to med, then reset them
- pref.job_civilian_med |= pref.job_civilian_high
- pref.job_medsci_med |= pref.job_medsci_high
- pref.job_engsec_med |= pref.job_engsec_high
- pref.job_talon_med |= pref.job_talon_high //VOREStation Add
- pref.job_civilian_high = 0
- pref.job_medsci_high = 0
- pref.job_engsec_high = 0
- pref.job_talon_high = 0 //VOREStation Add
+ if(!job || !level)
+ return 0
switch(job.department_flag)
if(CIVILIAN)
+ pref.job_civilian_low &= ~job.flag
+ pref.job_civilian_med &= ~job.flag
+ pref.job_civilian_high &= ~job.flag
switch(level)
- if(2)
+ if(1)
+ reset_jobhigh()
pref.job_civilian_high = job.flag
- pref.job_civilian_med &= ~job.flag
- if(3)
+ if(2)
pref.job_civilian_med |= job.flag
- pref.job_civilian_low &= ~job.flag
- else
+ if(3)
pref.job_civilian_low |= job.flag
if(MEDSCI)
+ pref.job_medsci_low &= ~job.flag
+ pref.job_medsci_med &= ~job.flag
+ pref.job_medsci_high &= ~job.flag
switch(level)
- if(2)
+ if(1)
+ reset_jobhigh()
pref.job_medsci_high = job.flag
- pref.job_medsci_med &= ~job.flag
- if(3)
+ if(2)
pref.job_medsci_med |= job.flag
- pref.job_medsci_low &= ~job.flag
- else
+ if(3)
pref.job_medsci_low |= job.flag
if(ENGSEC)
+ pref.job_engsec_low &= ~job.flag
+ pref.job_engsec_med &= ~job.flag
+ pref.job_engsec_high &= ~job.flag
switch(level)
- if(2)
+ if(1)
+ reset_jobhigh()
pref.job_engsec_high = job.flag
- pref.job_engsec_med &= ~job.flag
- if(3)
+ if(2)
pref.job_engsec_med |= job.flag
- pref.job_engsec_low &= ~job.flag
- else
+ if(3)
pref.job_engsec_low |= job.flag
//VOREStation Add
if(TALON)
+ pref.job_talon_low &= ~job.flag
+ pref.job_talon_med &= ~job.flag
+ pref.job_talon_high &= ~job.flag
switch(level)
- if(2)
+ if(1)
+ reset_jobhigh()
pref.job_talon_high = job.flag
- pref.job_talon_med &= ~job.flag
- if(3)
+ if(2)
pref.job_talon_med |= job.flag
- pref.job_talon_low &= ~job.flag
- else
+ if(3)
pref.job_talon_low |= job.flag
//VOREStation Add End
diff --git a/code/modules/client/preference_setup/volume_sliders/01_volume.dm b/code/modules/client/preference_setup/volume_sliders/01_volume.dm
new file mode 100644
index 00000000000..349d88318a1
--- /dev/null
+++ b/code/modules/client/preference_setup/volume_sliders/01_volume.dm
@@ -0,0 +1,106 @@
+/datum/category_group/player_setup_category/volume_sliders
+ name = "Sound"
+ sort_order = 7
+ category_item_type = /datum/category_item/player_setup_item/volume_sliders
+
+/datum/category_item/player_setup_item/volume_sliders/volume
+ name = "General Volume"
+ sort_order = 1
+
+/datum/category_item/player_setup_item/volume_sliders/volume/load_preferences(var/savefile/S)
+ S["volume_channels"] >> pref.volume_channels
+
+/datum/category_item/player_setup_item/volume_sliders/volume/save_preferences(var/savefile/S)
+ S["volume_channels"] << pref.volume_channels
+
+/datum/category_item/player_setup_item/volume_sliders/volume/sanitize_preferences()
+ if(isnull(pref.volume_channels))
+ pref.volume_channels = list()
+
+ for(var/channel in pref.volume_channels)
+ if(!(channel in GLOB.all_volume_channels))
+ // Channel no longer exists, yeet
+ pref.volume_channels.Remove(channel)
+
+ for(var/channel in GLOB.all_volume_channels)
+ if(!(channel in pref.volume_channels))
+ pref.volume_channels["[channel]"] = 1
+ else
+ pref.volume_channels["[channel]"] = clamp(pref.volume_channels["[channel]"], 0, 2)
+
+/datum/category_item/player_setup_item/volume_sliders/volume/content(var/mob/user)
+ . += "Volume Settings "
+ for(var/channel in pref.volume_channels)
+ . += "[channel]: [pref.volume_channels[channel] * 100]% "
+ . += " "
+
+/datum/category_item/player_setup_item/volume_sliders/volume/OnTopic(var/href, var/list/href_list, var/mob/user)
+ if(href_list["change_volume"])
+ if(CanUseTopic(user))
+ var/channel = href_list["change_volume"]
+ if(!(channel in pref.volume_channels))
+ pref.volume_channels["[channel]"] = 1
+ var/value = input("Choose your volume for [channel] (0-200%)", "[channel] volume", (pref.volume_channels[channel] * 100))
+ if(isnum(value))
+ value = CLAMP(value, 0, 200)
+ pref.volume_channels["[channel]"] = (value / 100)
+ return TOPIC_REFRESH
+ return ..()
+
+/mob/proc/get_preference_volume_channel(volume_channel)
+ if(!client)
+ return 0
+ return client.get_preference_volume_channel(volume_channel)
+
+/client/proc/get_preference_volume_channel(volume_channel)
+ if(!volume_channel || !prefs)
+ return 1
+ if(!(volume_channel in prefs.volume_channels))
+ prefs.volume_channels["[volume_channel]"] = 1
+ return prefs.volume_channels["[volume_channel]"]
+
+
+// Neat little volume adjuster thing in case you don't wanna touch preferences by hand you lazy fuck
+/datum/volume_panel
+/datum/volume_panel/tgui_state(mob/user)
+ return GLOB.tgui_always_state
+
+/datum/volume_panel/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "VolumePanel", "Volume Panel")
+ ui.open()
+
+/datum/volume_panel/tgui_data(mob/user)
+ if(!user.client || !user.client.prefs)
+ return list("error" = TRUE)
+
+ var/list/data = ..()
+ data["volume_channels"] = user.client.prefs.volume_channels
+ return data
+
+/datum/volume_panel/tgui_act(action, params)
+ if(..())
+ return TRUE
+
+ if(!usr?.client?.prefs)
+ return TRUE
+
+ var/datum/preferences/P = usr.client.prefs
+ switch(action)
+ if("adjust_volume")
+ var/channel = params["channel"]
+ if(channel in P.volume_channels)
+ P.volume_channels["[channel]"] = clamp(params["vol"], 0, 2)
+ SScharacter_setup.queue_preferences_save(P)
+ return TRUE
+
+/client/verb/volume_panel()
+ set name = "Volume Panel"
+ set category = "Preferences"
+ set desc = "Allows you to adjust volume levels on the fly."
+
+ if(!volume_panel)
+ volume_panel = new(src)
+
+ volume_panel.tgui_interact(mob)
diff --git a/code/modules/client/preference_setup/global/05_media.dm b/code/modules/client/preference_setup/volume_sliders/02_media.dm
similarity index 80%
rename from code/modules/client/preference_setup/global/05_media.dm
rename to code/modules/client/preference_setup/volume_sliders/02_media.dm
index 7ae263d9ea1..97e42324a01 100644
--- a/code/modules/client/preference_setup/global/05_media.dm
+++ b/code/modules/client/preference_setup/volume_sliders/02_media.dm
@@ -2,23 +2,23 @@
var/media_volume = 1
var/media_player = 2 // 0 = VLC, 1 = WMP, 2 = HTML5, 3+ = unassigned
-/datum/category_item/player_setup_item/player_global/media
+/datum/category_item/player_setup_item/volume_sliders/media
name = "Media"
- sort_order = 5
+ sort_order = 2
-/datum/category_item/player_setup_item/player_global/media/load_preferences(var/savefile/S)
+/datum/category_item/player_setup_item/volume_sliders/media/load_preferences(var/savefile/S)
S["media_volume"] >> pref.media_volume
S["media_player"] >> pref.media_player
-/datum/category_item/player_setup_item/player_global/media/save_preferences(var/savefile/S)
+/datum/category_item/player_setup_item/volume_sliders/media/save_preferences(var/savefile/S)
S["media_volume"] << pref.media_volume
S["media_player"] << pref.media_player
-/datum/category_item/player_setup_item/player_global/media/sanitize_preferences()
+/datum/category_item/player_setup_item/volume_sliders/media/sanitize_preferences()
pref.media_volume = isnum(pref.media_volume) ? CLAMP(pref.media_volume, 0, 1) : initial(pref.media_volume)
pref.media_player = sanitize_inlist(pref.media_player, list(0, 1, 2), initial(pref.media_player))
-/datum/category_item/player_setup_item/player_global/media/content(var/mob/user)
+/datum/category_item/player_setup_item/volume_sliders/media/content(var/mob/user)
. += "Jukebox Volume:"
. += "[round(pref.media_volume * 100)]% "
. += "Media Player Type: Depending on you operating system, one of these might work better. "
@@ -30,7 +30,7 @@
. += (pref.media_player == 0) ? "VLC " : "VLC "
. += " "
-/datum/category_item/player_setup_item/player_global/media/OnTopic(var/href, var/list/href_list, var/mob/user)
+/datum/category_item/player_setup_item/volume_sliders/media/OnTopic(var/href, var/list/href_list, var/mob/user)
if(href_list["change_media_volume"])
if(CanUseTopic(user))
var/value = input("Choose your Jukebox volume (0-100%)", "Jukebox volume", round(pref.media_volume * 100))
diff --git a/code/modules/client/preference_setup/vore/01_ears.dm b/code/modules/client/preference_setup/vore/01_ears.dm
index 8a26513a01b..c36ccd4bca3 100644
--- a/code/modules/client/preference_setup/vore/01_ears.dm
+++ b/code/modules/client/preference_setup/vore/01_ears.dm
@@ -1,7 +1,7 @@
// Global stuff that will put us on the map
/datum/category_group/player_setup_category/vore
name = "VORE"
- sort_order = 7
+ sort_order = 8
category_item_type = /datum/category_item/player_setup_item/vore
// Define a place to save appearance in character setup
diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm
index 6462a142c7d..e653166b7ad 100644
--- a/code/modules/client/preference_setup/vore/07_traits.dm
+++ b/code/modules/client/preference_setup/vore/07_traits.dm
@@ -14,6 +14,7 @@
var/traits_cheating = 0 //Varedit by admins allows saving new maximums on people who apply/etc
var/starting_trait_points = STARTING_SPECIES_POINTS
var/max_traits = MAX_SPECIES_TRAITS
+ var/dirty_synth = 0 //Are you a synth
// Definition of the stuff for Ears
/datum/category_item/player_setup_item/vore/traits
@@ -82,6 +83,10 @@
/datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character)
character.custom_species = pref.custom_species
var/datum/species/selected_species = GLOB.all_species[pref.species]
+
+ if(character.isSynthetic()) //Checking if we have a synth on our hands, boys.
+ pref.dirty_synth = 1
+
if(selected_species.selects_bodytype)
var/datum/species/custom/CS = character.species
var/S = pref.custom_base ? pref.custom_base : "Human"
@@ -255,6 +260,14 @@
var/conflict = FALSE
+ user.isSynthetic() //Recheck just to be sure
+ if(pref.dirty_synth && instance.not_for_synths)//if you are a synth you can't take this trait.
+ alert("You cannot take this trait as a SYNTH.\
+ Please remove that trait, or pick another trait to add.","Error")
+ pref.dirty_synth = 0 //Just to be sure
+ return TOPIC_REFRESH
+
+
if(trait_choice in pref.pos_traits + pref.neu_traits + pref.neg_traits)
conflict = instance.name
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index e6619e66fed..f16504b3ca4 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -150,6 +150,8 @@ datum/preferences
var/examine_text_mode = 0 // Just examine text, include usage (description_info), switch to examine panel.
var/multilingual_mode = 0 // Default behaviour, delimiter-key-space, delimiter-key-delimiter, off
+ var/list/volume_channels = list()
+
/datum/preferences/New(client/C)
player_setup = new(src)
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index be8f3567f9b..213cc8f694e 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -111,7 +111,7 @@
. = FALSE
if(LAZYLEN(accessories))
for(var/obj/item/clothing/C in accessories)
- if(C.handle_low_temperature(tempcheck))
+ if(C.handle_high_temperature(tempcheck))
. = TRUE
if(max_heat_protection_temperature && max_heat_protection_temperature >= tempcheck)
diff --git a/code/modules/clothing/glasses/hud_vr.dm b/code/modules/clothing/glasses/hud_vr.dm
index 09e2af254d6..613c09e91e4 100644
--- a/code/modules/clothing/glasses/hud_vr.dm
+++ b/code/modules/clothing/glasses/hud_vr.dm
@@ -1,7 +1,9 @@
/obj/item/clothing/glasses/omnihud
name = "\improper AR glasses"
desc = "The ARG-62 AR Glasses are capable of displaying information on individuals. \
- Commonly used to allow non-augmented crew to interact with virtual interfaces."
+ Commonly used to allow non-augmented crew to interact with virtual interfaces. \
+ They are also fitted with toggleable cosmetic electrochromic lenses. \
+ The lenses will not protect against sudden bright flashes or welding."
origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 3)
var/obj/item/clothing/glasses/hud/omni/hud = null
var/mode = "civ"
@@ -45,6 +47,13 @@
spawn(20 SECONDS)
arscreen = disconnect_ar
tgarscreen = disconnect_tgar
+
+ //extra fun for non-sci variants; a small chance flip the state to the dumb 3d glasses when EMP'd
+ if(icon_state == "glasses" || icon_state == "sun")
+ if(prob(10))
+ icon_state = "3d"
+ if(ishuman(loc))
+ to_chat(loc, "The lenses of your [src.name] malfunction!")
..()
/obj/item/clothing/glasses/omnihud/proc/flashed()
@@ -55,11 +64,13 @@
prescription = !prescription
playsound(src,'sound/items/screwdriver.ogg', 50, 1)
if(prescription)
- name = "[initial(name)] (pr)"
- user.visible_message("[user] uploads new prescription data to the [src.name].")
+ user.visible_message("[user] uploads new prescription data to the [src.name] and resets the lenses.")
+ name = "[initial(name)] (pr)" //change the name *after* the text so the message above is accurate
+ icon_state = "[initial(icon_state)]" //reset the icon state just to be safe
else
+ user.visible_message("[user] deletes the prescription data on the [src.name] and resets the lenses.")
name = "[initial(name)]"
- user.visible_message("[user] deletes the prescription data on the [src.name].")
+ icon_state = "[initial(icon_state)]"
/obj/item/clothing/glasses/omnihud/attack_self(mob/user)
if(!ishuman(user))
@@ -72,6 +83,45 @@
if(!ar_interact(H))
to_chat(user, "The [src] does not have any kind of special display.")
+//cosmetic shading, doesn't enhance eye protection
+/obj/item/clothing/glasses/omnihud/verb/chromatize()
+ set name = "Toggle AR Glasses Shading"
+ set desc = "Toggle the cosmetic electrochromatic shading of your AR glasses."
+ set category = "Object"
+ set src in usr
+ if(!usr.canmove || usr.stat || usr.restrained())
+ return
+ if(icon_state == "3d")
+ to_chat(usr, "You reset the electrochromic lenses of \the [src] back to normal.")
+ if(prescription)
+ name = "[initial(name)] (pr)"
+ else
+ name = "[initial(name)]"
+ icon_state = "[initial(icon_state)]"
+ else if(prescription)
+ if(icon_state == "glasses")
+ to_chat(usr, "You darken the electrochromic lenses of \the [src] to one-way transparency.")
+ name = "[initial(name)] (shaded, pr)"
+ icon_state = "sun"
+ else if(icon_state == "sun")
+ to_chat(usr, "You restore the electrochromic lenses of \the [src] to standard two-way transparency.")
+ name = "[initial(name)] (pr)"
+ icon_state = "glasses"
+ else
+ to_chat(usr, "The [src] don't seem to support this functionality.")
+ else if(!prescription)
+ if(icon_state == "glasses")
+ to_chat(usr, "You darken the electrochromic lenses of \the [src] to one-way transparency.")
+ name = "[initial(name)] (shaded)"
+ icon_state = "sun"
+ else if(icon_state == "sun")
+ to_chat(usr, "You restore the electrochromic lenses of \the [src] to standard two-way transparency.")
+ name = "[initial(name)]"
+ icon_state = "glasses"
+ else
+ to_chat(usr, "The [src] don't seem to support this functionality.")
+ update_clothing_icon()
+
/obj/item/clothing/glasses/omnihud/proc/ar_interact(var/mob/living/carbon/human/user)
return 0 //The base models do nothing.
@@ -82,7 +132,8 @@
/obj/item/clothing/glasses/omnihud/med
name = "\improper AR-M glasses"
desc = "The ARG-62-M AR Glasses are capable of displaying information on individuals. \
- These have been upgraded with medical records access and virus database integration."
+ These have been upgraded with medical records access and virus database integration. \
+ They can also read data from active suit sensors using the crew monitoring system."
mode = "med"
action_button_name = "AR Console (Crew Monitor)"
tgarscreen_path = /datum/tgui_module/crew_monitor/glasses
@@ -96,9 +147,10 @@
/obj/item/clothing/glasses/omnihud/sec
name = "\improper AR-S glasses"
desc = "The ARG-62-S AR Glasses are capable of displaying information on individuals. \
- These have been upgraded with security records integration and flash protection."
+ These have been upgraded with security records integration and flash protection. \
+ They also have access to security alerts such as camera and motion sensor alarms."
mode = "sec"
- flash_protection = FLASH_PROTECTION_MAJOR
+ flash_protection = FLASH_PROTECTION_MODERATE //weld protection is a little too widespread
action_button_name = "AR Console (Security Alerts)"
tgarscreen_path = /datum/tgui_module/alarm_monitor/security/glasses
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_CH_WANTED,VIS_AUGMENTED)
@@ -111,7 +163,8 @@
/obj/item/clothing/glasses/omnihud/eng
name = "\improper AR-E glasses"
desc = "The ARG-62-E AR Glasses are capable of displaying information on individuals. \
- These have been upgraded with advanced electrochromic lenses to protect your eyes during welding."
+ These have been upgraded with advanced electrochromic lenses to protect your eyes during welding, \
+ and can also display a list of atmospheric, fire, and power alarms."
mode = "eng"
flash_protection = FLASH_PROTECTION_MAJOR
action_button_name = "AR Console (Station Alerts)"
@@ -125,15 +178,12 @@
/obj/item/clothing/glasses/omnihud/rnd
name = "\improper AR-R glasses"
desc = "The ARG-62-R AR Glasses are capable of displaying information on individuals. \
- These have been ... modified ... to fit into a different frame."
+ They... don't seem to do anything particularly interesting? But hey, at least they look kinda science-y."
mode = "sci"
- icon = 'icons/obj/clothing/glasses.dmi'
- icon_override = null
- icon_state = "purple"
/obj/item/clothing/glasses/omnihud/eng/meson
name = "meson scanner HUD"
- desc = "A headset equipped with a scanning lens and mounted retinal projector. They don't provide any eye protection, but they're less obtrusive than goggles."
+ desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles."
icon = 'icons/vore/custom_items_vr.dmi'
icon_override = 'icons/vore/custom_clothes_vr.dmi'
icon_state = "projector"
@@ -141,6 +191,7 @@
body_parts_covered = 0
toggleable = 1
vision_flags = SEE_TURFS //but they can spot breaches. Due to the way HUDs work, they don't provide darkvision up-close the way mesons do.
+ flash_protection = 0 //it's an open, single-eye retinal projector. there's no way it protects your eyes from flashes or welders.
/obj/item/clothing/glasses/omnihud/eng/meson/attack_self(mob/user)
if(!active)
@@ -171,10 +222,18 @@
/obj/item/clothing/glasses/omnihud/all
name = "\improper AR-B glasses"
desc = "The ARG-62-B AR Glasses are capable of displaying information on individuals. \
- These have been upgraded with every feature the lesser models have. Now we're talkin'."
+ These have been upgraded with (almost) every feature the lesser models have. Now we're talkin'. \
+ Offers full protection against bright flashes/welders and full access to system alarm monitoring."
mode = "best"
flash_protection = FLASH_PROTECTION_MAJOR
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_CH_STATUS_R,VIS_CH_BACKUP,VIS_CH_WANTED)
+ action_button_name = "AR Console (All Alerts)"
+ tgarscreen_path = /datum/tgui_module/alarm_monitor/all/glasses
+
+ ar_interact(var/mob/living/carbon/human/user)
+ if(tgarscreen)
+ tgarscreen.tgui_interact(user)
+ return 1
/obj/item/clothing/glasses/hud/security/eyepatch
name = "Security Hudpatch"
@@ -221,5 +280,4 @@
icon_state = "[icon_state]_1"
else
icon_state = initial(icon_state)
- update_clothing_icon()
-
+ update_clothing_icon()
\ No newline at end of file
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index a3da836d7c1..b23f70b1853 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -7,6 +7,7 @@
* Kitty ears
* Holiday hats
Crown of Wrath
+ Warning cone
*/
/*
@@ -288,3 +289,19 @@
/obj/item/clothing/head/psy_crown/gluttony/activate_ability(var/mob/living/wearer)
..()
wearer.add_modifier(/datum/modifier/gluttonyregeneration, 45 SECONDS)
+
+/obj/item/clothing/head/cone
+ name = "warning cone"
+ desc = "This cone is trying to warn you of something!"
+ description_info = "It looks like you can wear it in your head slot."
+ icon_state = "cone"
+ item_state = "cone"
+ drop_sound = 'sound/items/drop/shoes.ogg'
+ force = 1
+ throwforce = 3
+ throw_speed = 2
+ throw_range = 5
+ w_class = 2
+ body_parts_covered = HEAD
+ attack_verb = list("warned", "cautioned", "smashed")
+ armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index 140bf6ecc9c..cd65478a05e 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -342,7 +342,7 @@
piece.armor["bio"] = 100
else
piece.armor["bio"] = src.armor["bio"]
- playsound(src, "[!seal_target ? 'sound/machines/boltsdown.ogg' : 'sound/machines/boltsup.ogg']", 10, FALSE)
+ playsound(src,'sound/machines/rig/rigservo.ogg', 10, FALSE)
else
failed_to_seal = 1
@@ -707,7 +707,7 @@
if(istype(holder))
if(use_obj && check_slot == use_obj)
to_chat(H, "Your [use_obj.name] [use_obj.gender == PLURAL ? "retract" : "retracts"] swiftly.")
- playsound(src, 'sound/machines/boltsup.ogg', 10, FALSE)
+ playsound(src, 'sound/machines/rig/rigservo.ogg', 10, FALSE)
use_obj.canremove = 1
holder.drop_from_inventory(use_obj)
use_obj.forceMove(get_turf(src))
@@ -726,7 +726,7 @@
return
else
to_chat(H, "Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly.")
- playsound(src, 'sound/machines/boltsdown.ogg', 10, FALSE)
+ playsound(src, 'sound/machines/rig/rigservo.ogg', 10, FALSE)
if(piece == "helmet" && helmet)
helmet.update_light(H)
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 32e5e197437..6c12a2e68d6 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -892,3 +892,38 @@ obj/item/clothing/suit/kamishimo
/obj/item/clothing/suit/storage/snowsuit/science
name = "science snowsuit"
icon_state = "snowsuit_science"
+
+/obj/item/clothing/suit/caution
+ name = "wet floor sign"
+ desc = "Caution! Wet Floor!"
+ description_fluff = "Used by the janitor to passive-aggressively point at when you eventually slip on one of their mopped floors."
+ description_info = "Alt-click, or click in-hand to toggle the caution lights. It looks like you can wear it in your suit slot."
+ icon_state = "caution"
+ drop_sound = 'sound/items/drop/shoes.ogg'
+ force = 1
+ throwforce = 3
+ throw_speed = 2
+ throw_range = 5
+ w_class = 2
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO
+ attack_verb = list("warned", "cautioned", "smashed")
+ armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+
+/obj/item/clothing/suit/caution/attack_self()
+ toggle()
+
+/obj/item/clothing/suit/caution/AltClick()
+ toggle()
+
+/obj/item/clothing/suit/caution/proc/toggle()
+ if(!usr || usr.stat || usr.lying || usr.restrained() || !Adjacent(usr)) return
+ else if(src.icon_state == "caution")
+ src.icon_state = "caution_blinking"
+ src.item_state = "caution_blinking"
+ usr.show_message("You turn the wet floor sign on.")
+ playsound(src.loc, 'sound/machines/button.ogg', 30, 1)
+ else
+ src.icon_state = "caution"
+ src.item_state = "caution"
+ usr.show_message("You turn the wet floor sign off.")
+ update_clothing_icon()
\ No newline at end of file
diff --git a/code/modules/clothing/under/nanotrasen_vr.dm b/code/modules/clothing/under/nanotrasen_vr.dm
index f6eeecfb43b..65dee313479 100644
--- a/code/modules/clothing/under/nanotrasen_vr.dm
+++ b/code/modules/clothing/under/nanotrasen_vr.dm
@@ -3,29 +3,32 @@
/obj/item/clothing/under/nanotrasen
name = "NanoTrasen uniform"
desc = "A comfortable turtleneck and black trousers sporting nanotrasen symbols."
- icon_state = "navyutility"
- worn_state = "navyutility"
+ icon = 'icons/obj/clothing/uniforms_solgov.dmi'
+ icon_override = 'icons/mob/uniform_solgov.dmi'
+ item_icons = list(slot_w_uniform_str = 'icons/mob/uniform_solgov.dmi', slot_r_hand_str = "black", slot_l_hand_str = "black")
+ icon_state = "blackutility"
+ worn_state = "blackutility"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
/obj/item/clothing/under/nanotrasen/security
name = "NanoTrasen security uniform"
desc = "The security uniform of NanoTrasen's security. It looks sturdy and well padded"
- icon_state = "navyutility_sec"
- worn_state = "navyutility_sec"
+ icon_state = "blackutility_crew"
+ worn_state = "blackutility_crew"
armor = list(melee = 10, bullet = 5, laser = 5, energy = 5, bomb = 5, bio = 0, rad = 0)
/obj/item/clothing/under/nanotrasen/security/warden
name = "NanoTrasen warden uniform"
desc = "The uniform of the NanoTrasen's prison wardens. It looks sturdy and well padded. This one has gold cuffs."
- icon_state = "navyutility_com"
- worn_state = "navyutility_com"
+ icon_state = "blackutility_com"
+ worn_state = "blackutility_com"
/obj/item/clothing/under/nanotrasen/security/commander
name = "NanoTrasen security command uniform"
desc = "The uniform of the NanoTrasen's security commanding officers. It looks sturdy and well padded. This one has gold trim and red blazes."
- icon_state = "blackutility_seccom"
- worn_state = "blackutility_seccom"
+ icon_state = "blackutility_com"
+ worn_state = "blackutility_com"
//Head Gear
@@ -42,7 +45,7 @@
/obj/item/clothing/head/beret/nanotrasen
name = "NanoTrasen security beret"
desc = "A NT blue beret belonging to the NanoTrasen security forces. For personnel that are more inclined towards style than safety."
- icon_state = "beret_navy"
+ icon_state = "beret_navy_security"
//Armor
diff --git a/code/modules/clothing/under/xenos/seromi.dm b/code/modules/clothing/under/xenos/seromi.dm
index 5126ab14604..8da5e527550 100644
--- a/code/modules/clothing/under/xenos/seromi.dm
+++ b/code/modules/clothing/under/xenos/seromi.dm
@@ -37,6 +37,22 @@
name = "small command dress"
icon_state = "seromi_dress_cap"
+/obj/item/clothing/under/seromi/smock/dress/science
+ name = "small research dress"
+ icon_state = "seromi_dress_science"
+
+/obj/item/clothing/under/seromi/smock/dress/security
+ name = "small security dress"
+ icon_state = "seromi_dress_security"
+
+/obj/item/clothing/under/seromi/smock/dress/engine
+ name = "small engineering dress"
+ icon_state = "seromi_dress_engine"
+
+/obj/item/clothing/under/seromi/smock/dress/medical
+ name = "small medical dress"
+ icon_state = "seromi_dress_medical"
+
/obj/item/clothing/under/seromi/smock/uniform
name = "small command uniform"
icon_state = "seromi_captain"
diff --git a/code/modules/detectivework/microscope/dnascanner.dm b/code/modules/detectivework/microscope/dnascanner.dm
index 0b9782b2c8d..1dac4a0f58f 100644
--- a/code/modules/detectivework/microscope/dnascanner.dm
+++ b/code/modules/detectivework/microscope/dnascanner.dm
@@ -9,7 +9,6 @@
circuit = /obj/item/weapon/circuitboard/dna_analyzer
var/obj/item/weapon/forensics/swab/bloodsamp = null
- var/closed = 0
var/scanning = 0
var/scanner_progress = 0
var/scanner_rate = 5
@@ -20,80 +19,76 @@
. = ..()
default_apply_parts()
-/obj/machinery/dnaforensics/attackby(var/obj/item/W, mob/user as mob)
-
+/obj/machinery/dnaforensics/attackby(obj/item/W, mob/user)
if(bloodsamp)
- to_chat(user, "There is already a sample in the machine.")
+ to_chat(user, "There is a sample in the machine.")
return
- if(closed)
- if(!scanning)
- if(default_deconstruction_screwdriver(user, W))
- return
- if(default_deconstruction_crowbar(user, W))
- return
- else
- to_chat(user, "Open the cover before inserting the sample.")
+ if(scanning)
+ to_chat(user, "[src] is busy scanning right now.")
+ return
+
+ if(default_deconstruction_screwdriver(user, W))
+ return
+ if(default_deconstruction_crowbar(user, W))
return
var/obj/item/weapon/forensics/swab/swab = W
if(istype(swab) && swab.is_used())
user.unEquip(W)
- src.bloodsamp = swab
- swab.loc = src
- to_chat(user, "You insert \the [W] into \the [src].")
+ bloodsamp = swab
+ swab.forceMove(src)
+ to_chat(user, "You insert [W] into [src].")
+ update_icon()
else
to_chat(user, "\The [src] only accepts used swabs.")
return
-/obj/machinery/dnaforensics/ui_interact(mob/user, ui_key = "main",var/datum/nanoui/ui = null)
- if(stat & (NOPOWER)) return
- if(user.stat || user.restrained()) return
- var/list/data = list()
+/obj/machinery/dnaforensics/tgui_interact(mob/user, datum/tgui/ui)
+ if(stat & (NOPOWER))
+ return
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "DNAForensics", "QuikScan DNA Analyzer") // 540, 326
+ ui.open()
+
+/obj/machinery/dnaforensics/tgui_data(mob/user)
+ var/list/data = ..()
data["scan_progress"] = round(scanner_progress)
data["scanning"] = scanning
data["bloodsamp"] = (bloodsamp ? bloodsamp.name : "")
data["bloodsamp_desc"] = (bloodsamp ? (bloodsamp.desc ? bloodsamp.desc : "No information on record.") : "")
- data["lidstate"] = closed
+ return data
- ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data)
- if (!ui)
- ui = new(user, src, ui_key, "dnaforensics.tmpl", "QuikScan DNA Analyzer", 540, 326)
- ui.set_initial_data(data)
- ui.open()
- ui.set_auto_update(1)
-
-/obj/machinery/dnaforensics/Topic(href, href_list)
-
- if(..()) return 1
+/obj/machinery/dnaforensics/tgui_act(action, list/params)
+ if(..())
+ return TRUE
if(stat & (NOPOWER))
- return 0 // don't update UIs attached to this object
+ return FALSE // don't update UIs attached to this object
- if(href_list["scanItem"])
- if(scanning)
- scanning = 0
- else
- if(bloodsamp)
- if(closed == 1)
+ . = TRUE
+ switch(action)
+ if("scanItem")
+ if(scanning)
+ scanning = FALSE
+ update_icon()
+ else
+ if(bloodsamp)
scanner_progress = 0
- scanning = 1
+ scanning = TRUE
to_chat(usr, "Scan initiated.")
update_icon()
else
- to_chat(usr, "Please close sample lid before initiating scan.")
- else
- to_chat(usr, "Insert an item to scan.")
+ to_chat(usr, "Insert an item to scan.")
+ . = TRUE
- if(href_list["ejectItem"])
- if(bloodsamp)
- bloodsamp.forceMove(src.loc)
- bloodsamp = null
-
- if(href_list["toggleLid"])
- toggle_lid()
-
- return 1
+ if("ejectItem")
+ if(bloodsamp)
+ bloodsamp.forceMove(loc)
+ bloodsamp = null
+ scanning = FALSE
+ update_icon()
/obj/machinery/dnaforensics/process()
if(scanning)
@@ -110,7 +105,7 @@
last_process_worldtime = world.time
/obj/machinery/dnaforensics/proc/complete_scan()
- src.visible_message("[bicon(src)] makes an insistent chime.", 2)
+ visible_message("[bicon(src)] makes an insistent chime.", 2)
update_icon()
if(bloodsamp)
var/obj/item/weapon/paper/P = new(src)
@@ -127,38 +122,23 @@
data += "No DNA found. "
P.info = "[src] analysis report #[report_num] "
P.info += "Scanned item: [bloodsamp.name] [bloodsamp.desc]
" + data
- P.forceMove(src.loc)
+ P.forceMove(loc)
P.update_icon()
- scanning = 0
+ scanning = FALSE
update_icon()
return
-/obj/machinery/dnaforensics/attack_ai(mob/user as mob)
- ui_interact(user)
+/obj/machinery/dnaforensics/attack_ai(mob/user)
+ tgui_interact(user)
-/obj/machinery/dnaforensics/attack_hand(mob/user as mob)
- ui_interact(user)
-
-/obj/machinery/dnaforensics/verb/toggle_lid()
- set category = "Object"
- set name = "Toggle Lid"
- set src in oview(1)
-
- if(usr.stat || !isliving(usr))
- return
-
- if(scanning)
- to_chat(usr, "You can't do that while [src] is scanning!")
- return
-
- closed = !closed
- src.update_icon()
+/obj/machinery/dnaforensics/attack_hand(mob/user)
+ tgui_interact(user)
/obj/machinery/dnaforensics/update_icon()
..()
if(!(stat & NOPOWER) && scanning)
icon_state = "dnaworking"
- else if(closed)
+ else if(bloodsamp)
icon_state = "dnaclosed"
else
icon_state = "dnaopen"
diff --git a/code/modules/examine/descriptions/turfs.dm b/code/modules/examine/descriptions/turfs.dm
index 4319c23ffe6..a494b8cdd36 100644
--- a/code/modules/examine/descriptions/turfs.dm
+++ b/code/modules/examine/descriptions/turfs.dm
@@ -30,4 +30,37 @@
results += "[desc_panel_image("welder")]to continue deconstruction."
if(0)
results += "[desc_panel_image("crowbar")]to finish deconstruction."
- return results
\ No newline at end of file
+ return results
+
+/turf/simulated/floor/get_description_info()
+ . = ..()
+ if(broken || burnt)
+ . += "It is broken."
+
+/turf/simulated/floor/get_description_interaction()
+ . = ..()
+ if(broken || burnt)
+ if(is_plating())
+ . += "Use a welder on it to repair the damage."
+ else
+ . += "Use a crowbar on it to remove it."
+ else if(flooring)
+ if(flooring.flags & TURF_IS_FRAGILE)
+ . += "You can use a crowbar on it to remove it, but this will destroy it!"
+ else if(flooring.flags & TURF_REMOVE_CROWBAR)
+ . += "Use a crowbar on it to remove it."
+ if(flooring.flags & TURF_REMOVE_SCREWDRIVER)
+ . += "Use a screwdriver on it to remove it."
+ if(flooring.flags & TURF_REMOVE_WRENCH)
+ . += "Use a wrench on it to remove it."
+ if(flooring.flags & TURF_REMOVE_SHOVEL)
+ . += "Use a shovel on it to remove it."
+
+/turf/simulated/floor/outdoors/snow/get_description_interaction()
+ . = ..()
+ . += "Use a shovel on it to get rid of the snow and reveal the ground beneath."
+ . += "Use an empty hand on it to scoop up some snow, which you can use to make snowballs or snowmen."
+
+/turf/simulated/floor/outdoors/grass/get_description_interaction()
+ . = "Use floor tiles on it to make a plating." // using . = ..() would incorrectly say you can remove the grass with a shovel
+ . += "Use a shovel on it to dig for worms."
diff --git a/code/modules/food/drinkingglass/glass_boxes.dm b/code/modules/food/drinkingglass/glass_boxes.dm
index 7157e209c1e..2cd035843de 100644
--- a/code/modules/food/drinkingglass/glass_boxes.dm
+++ b/code/modules/food/drinkingglass/glass_boxes.dm
@@ -13,6 +13,7 @@
new /obj/item/weapon/reagent_containers/food/drinks/glass2/mug(src)
new /obj/item/weapon/reagent_containers/food/drinks/glass2/wine(src)
new /obj/item/weapon/reagent_containers/food/drinks/metaglass(src)
+ new /obj/item/weapon/reagent_containers/food/drinks/metaglass/metapint(src)
/obj/item/weapon/storage/box/glasses
name = "box of glasses"
@@ -60,6 +61,10 @@
name = "box of half-pint metamorphic glasses"
glass_type = /obj/item/weapon/reagent_containers/food/drinks/metaglass
+/obj/item/weapon/storage/box/glasses/meta/metapint
+ name = "box of metamorphic pint glasses"
+ glass_type = /obj/item/weapon/reagent_containers/food/drinks/metaglass/metapint
+
/obj/item/weapon/storage/box/glass_extras
name = "box of cocktail garnishings"
var/extra_type = /obj/item/weapon/glass_extra
diff --git a/code/modules/food/food/cans.dm b/code/modules/food/food/cans.dm
index 66a25d8dade..f4ade46de4d 100644
--- a/code/modules/food/food/cans.dm
+++ b/code/modules/food/food/cans.dm
@@ -8,7 +8,8 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/cola
name = "\improper Space Cola"
- desc = "Cola. in space."
+ desc = "Reassuringly artificial."
+ description_fluff = "The 'Space' branding was originally added to the 'Alpha Cola' product line in order to justify selling cans for 50% higher prices to 'off-world' retailers. Despite being chemically identical, Space Cola proved so popular that Centauri Provisions eventually applied the name to the entire product line - price hike and all."
icon_state = "cola"
center_of_mass = list("x"=16, "y"=10)
@@ -18,7 +19,7 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle
name = "bottled water"
- desc = "Introduced to the vending machines by Skrellian request, this water comes straight from the Martian poles."
+ desc = "Ice cold and utterly tasteless, this 'all-natural' mineral water comes 'fresh' from one of NanoTrasen's heavy-duty bottling plants in the Sivian poles."
icon_state = "waterbottle"
center_of_mass = list("x"=16, "y"=8)
drop_sound = 'sound/items/drop/food.ogg'
@@ -30,6 +31,7 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind
name = "\improper Space Mountain Wind"
desc = "Blows right through you like a space wind."
+ description_fluff = "The 'Space' branding was originally added to the 'Alpha Cola' product line in order to justify selling cans for 50% higher prices to 'off-world' retailers. Despite being chemically identical, Space Cola proved so popular that Centauri Provisions eventually applied the name to the entire product line - price hike and all."
icon_state = "space_mountain_wind"
center_of_mass = list("x"=16, "y"=8)
@@ -39,7 +41,7 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko
name = "\improper Thirteen Loko"
- desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkeness, or even death. Please Drink Responsibly."
+ desc = "The Vir Health Board has advised consumers that consumption of Thirteen Loko may result in seizures, blindness, drunkenness, or even death. Please Drink Responsibly."
icon_state = "thirteen_loko"
center_of_mass = list("x"=16, "y"=10)
@@ -50,6 +52,7 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb
name = "\improper Dr. Gibb"
desc = "A delicious mixture of 42 different flavors."
+ description_fluff = "Following a 2490 lawsuit and a spate of deaths, Gilthari Exports reminds customers that the 'Dr.' legally stands for 'Drink'."
icon_state = "dr_gibb"
center_of_mass = list("x"=16, "y"=8)
@@ -57,9 +60,21 @@
..()
reagents.add_reagent("dr_gibb", 30)
+/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb_diet
+ name = "\improper Diet Dr. Gibb"
+ desc = "A delicious mixture of 42 different flavors, one of which is water."
+ description_fluff = "Following a 2490 lawsuit and a spate of deaths, Gilthari Exports reminds customers that the 'Dr.' legally stands for 'Drink'."
+ icon_state = "diet_dr_gibb"
+ center_of_mass = list("x"=16, "y"=8)
+
+/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb_diet/Initialize()
+ ..()
+ reagents.add_reagent("diet_dr_gibb", 30)
+
/obj/item/weapon/reagent_containers/food/drinks/cans/starkist
name = "\improper Star-kist"
desc = "The taste of a star in liquid form. And, a bit of tuna...?"
+ description_fluff = "Brought back by popular demand in 2515 after a limited-run release in 2510, the cult success of this bizarre tasting soda has never truly been accounted for by economists."
icon_state = "starkist"
center_of_mass = list("x"=16, "y"=8)
@@ -70,6 +85,7 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/space_up
name = "\improper Space-Up"
desc = "Tastes like a hull breach in your mouth."
+ description_fluff = "The 'Space' branding was originally added to the 'Alpha Cola' product line in order to justify selling cans for 50% higher prices to 'off-world' retailers. Despite being chemically identical, Space Cola proved so popular that Centauri Provisions eventually applied the name to the entire product line - price hike and all."
icon_state = "space-up"
center_of_mass = list("x"=16, "y"=8)
@@ -79,7 +95,8 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime
name = "\improper Lemon-Lime"
- desc = "You wanted ORANGE. It gave you Lemon Lime."
+ desc = "You wanted ORANGE. It gave you Lemon-Lime."
+ description_fluff = "Not to be confused with 'lemon & lime soda', Lemon-Lime is specially formulated using the highly propriatary Lemon-Lime Fruit. Growing the Lemon-Lime without a license is punishable by fines or jail time. Accept no immitations."
icon_state = "lemon-lime"
center_of_mass = list("x"=16, "y"=8)
@@ -90,6 +107,7 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea
name = "\improper Vrisk Serket Iced Tea"
desc = "That sweet, refreshing southern earthy flavor. That's where it's from, right? South Earth?"
+ description_fluff = "Produced exclusively on the planet Oasis, Vrisk Serket Iced Tea is not sold outside of the Golden Crescent, let alone Earth."
icon_state = "ice_tea_can"
center_of_mass = list("x"=16, "y"=8)
@@ -100,6 +118,7 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice
name = "\improper Grapel Juice"
desc = "500 pages of rules of how to appropriately enter into a combat with this juice!"
+ description_fluff = "Strangely, this unassuming grape soda is a product of Hephaestus Industries."
icon_state = "purple_can"
center_of_mass = list("x"=16, "y"=8)
@@ -109,7 +128,8 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/tonic
name = "\improper T-Borg's Tonic Water"
- desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
+ desc = "Quinine tastes funny, but at least it'll keep the Malaria away."
+ description_fluff = "Due to its technically medicinal properties and the complexities of chemical copyright law, T-Borg's Tonic Water is a rare product of Zeng-Hu's 'LifeWater' refreshments division."
icon_state = "tonic"
center_of_mass = list("x"=16, "y"=8)
@@ -130,9 +150,22 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale
name = "\improper Classic Ginger Ale"
desc = "For when you need to be more retro than NanoTrasen already pays you for."
+ description_fluff = "'Classic' beverages is a registered trademark of the Centauri Provisions corporation."
icon_state = "gingerale"
center_of_mass = list("x"=16, "y"=8)
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale/Initialize()
. = ..()
- reagents.add_reagent("gingerale", 30)
\ No newline at end of file
+ reagents.add_reagent("gingerale", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/cans/root_beer
+ name = "\improper R&D Root Beer"
+ desc = "Guaranteed to be both Rootin' and Tootin'."
+ description_fluff = "Despite centuries of humanity's expansion, this particular soda is still produced almost exclusively on Earth, in North America."
+ icon_state = "root_beer"
+ center_of_mass = list("x"=16, "y"=10)
+
+/obj/item/weapon/reagent_containers/food/drinks/cans/root_beer/Initialize()
+ . = ..()
+ reagents.add_reagent("rootbeer", 30)
+
diff --git a/code/modules/food/food/drinks.dm b/code/modules/food/food/drinks.dm
index 816c9103396..e13d53cac80 100644
--- a/code/modules/food/food/drinks.dm
+++ b/code/modules/food/food/drinks.dm
@@ -10,6 +10,7 @@
flags = OPENCONTAINER
amount_per_transfer_from_this = 5
volume = 50
+ var/trash = null
/obj/item/weapon/reagent_containers/food/drinks/on_reagent_change()
if (reagents.reagent_list.len > 0)
@@ -20,6 +21,21 @@
price_tag = null
return
+/obj/item/weapon/reagent_containers/food/drinks/proc/On_Consume(var/mob/M)
+ if(!usr)
+ usr = M
+ if(!reagents.total_volume)
+ M.visible_message("[M] finishes drinking \the [src].","You finish drinking \the [src].")
+ if(trash)
+ usr.drop_from_inventory(src) //so icons update :[
+ if(ispath(trash,/obj/item))
+ var/obj/item/TrashItem = new trash(usr)
+ usr.put_in_hands(TrashItem)
+ else if(istype(trash,/obj/item))
+ usr.put_in_hands(trash)
+ qdel(src)
+ return
+
/obj/item/weapon/reagent_containers/food/drinks/attack_self(mob/user as mob)
if(!is_open_container())
open(user)
@@ -51,6 +67,7 @@
if(!is_open_container())
to_chat(user, "You need to open [src]!")
return 1
+ On_Consume(target,user)
return ..()
/obj/item/weapon/reagent_containers/food/drinks/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target)
@@ -114,6 +131,7 @@
/obj/item/weapon/reagent_containers/food/drinks/milk
name = "milk carton"
desc = "It's milk. White and nutritious goodness!"
+ description_fluff = "A product of NanoPastures. Who would have thought that cows would thrive in zero-G?"
icon_state = "milk"
item_state = "carton"
center_of_mass = list("x"=16, "y"=9)
@@ -126,6 +144,7 @@
/obj/item/weapon/reagent_containers/food/drinks/soymilk
name = "soymilk carton"
desc = "It's soy milk. White and nutritious goodness!"
+ description_fluff = "A product of NanoPastures. For those skeptical that cows can thrive in zero-G."
icon_state = "soymilk"
item_state = "carton"
center_of_mass = list("x"=16, "y"=9)
@@ -138,6 +157,7 @@
/obj/item/weapon/reagent_containers/food/drinks/smallmilk
name = "small milk carton"
desc = "It's milk. White and nutritious goodness!"
+ description_fluff = "A product of NanoPastures. Who would have thought that cows would thrive in zero-G?"
volume = 30
icon_state = "mini-milk"
item_state = "carton"
@@ -151,6 +171,7 @@
/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk
name = "small chocolate milk carton"
desc = "It's milk! This one is in delicious chocolate flavour."
+ description_fluff = "A product of NanoPastures. Who would have thought that cows would thrive in zero-G?"
volume = 30
icon_state = "mini-milk_choco"
item_state = "carton"
@@ -164,20 +185,25 @@
/obj/item/weapon/reagent_containers/food/drinks/coffee
name = "\improper Robust Coffee"
desc = "Careful, the beverage you're about to enjoy is extremely hot."
+ description_fluff = "Fresh coffee is almost unheard of outside of planets and stations where it is grown. Robust Coffee proudly advertises the six separate times it is freeze-dried during the production process of every cup of instant."
icon_state = "coffee"
+ trash = /obj/item/trash/coffee
center_of_mass = list("x"=15, "y"=10)
- drop_sound = 'sound/items/drop/box.ogg'
+ drop_sound = 'sound/items/drop/papercup.ogg'
/obj/item/weapon/reagent_containers/food/drinks/coffee/Initialize()
. = ..()
reagents.add_reagent("coffee", 30)
/obj/item/weapon/reagent_containers/food/drinks/tea
- name = "cup of Duke Purple Tea"
+ name = "cup of Duke Purple tea"
desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea."
- icon_state = "teacup"
+ description_fluff = "Duke Purple is NanoPasture's proprietary strain of black tea, noted for its strong but otherwise completely non-distinctive flavour."
+ icon_state = "chai_vended"
item_state = "coffee"
+ trash = /obj/item/trash/coffee
center_of_mass = list("x"=16, "y"=14)
+ drop_sound = 'sound/items/drop/papercup.ogg'
/obj/item/weapon/reagent_containers/food/drinks/tea/Initialize()
. = ..()
@@ -193,21 +219,70 @@
reagents.add_reagent("ice", 30)
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate
- name = "cup of Dutch hot coco"
- desc = "Made in Space South America."
- icon_state = "hot_coco"
+ name = "cup of Counselor's Choice hot cocoa"
+ desc = "Who needs character traits when you can enjoy a hot mug of cocoa?"
+ description_fluff = "Counselor's Choice brand hot cocoa is made with a blend of hot water and non-dairy milk powder substitute, in a compromise destined to annoy all parties."
+ icon_state = "coffee"
item_state = "coffee"
+ trash = /obj/item/trash/coffee
center_of_mass = list("x"=15, "y"=13)
+ drop_sound = 'sound/items/drop/papercup.ogg'
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate/Initialize()
..()
reagents.add_reagent("hot_coco", 30)
+/obj/item/weapon/reagent_containers/food/drinks/greentea
+ name = "cup of green tea"
+ desc = "Exceptionally traditional, delightfully subtle."
+ description_fluff = "Tea remains an important tradition in many cultures originating on Earth. Among these, green tea is probably the most traditional of the bunch... Though the vending machines of the modern era hardly do it justice."
+ icon_state = "greentea_vended"
+ item_state = "coffee"
+ trash = /obj/item/trash/coffee
+ center_of_mass = list("x"=16, "y"=14)
+ drop_sound = 'sound/items/drop/papercup.ogg'
+
+/obj/item/weapon/reagent_containers/food/drinks/greentea/Initialize()
+ . = ..()
+ reagents.add_reagent("greentea", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/chaitea
+ name = "cup of chai tea"
+ desc = "The name is redundant but the flavor is delicious!"
+ description_fluff = "Chai Tea - tea blended with a spice mix of cinnamon and cloves - borders on a national drink on Kishar."
+ icon_state = "chai_vended"
+ item_state = "coffee"
+ trash = /obj/item/trash/coffee
+ center_of_mass = list("x"=16, "y"=14)
+ drop_sound = 'sound/items/drop/papercup.ogg'
+
+/obj/item/weapon/reagent_containers/food/drinks/chaitea/Initialize()
+ . = ..()
+ reagents.add_reagent("chaitea", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/decaf
+ name = "cup of decaf coffee"
+ desc = "Coffee with all the wake-up sucked out."
+ description_fluff = "A trial run on two NanoTrasen stations in 2481 attempted to replace all vending machine coffee with decaf in order to combat an epidemic of caffeine addiction. After two days, three major industrial accidents and a death, the initiative was cancelled. Decaf is now thankfully optional."
+ icon_state = "coffee"
+ item_state = "coffee"
+ trash = /obj/item/trash/coffee
+ center_of_mass = list("x"=16, "y"=14)
+ drop_sound = 'sound/items/drop/papercup.ogg'
+
+/obj/item/weapon/reagent_containers/food/drinks/decaf/Initialize()
+ . = ..()
+ reagents.add_reagent("decaf", 30)
+
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen
name = "Cup Ramen"
desc = "Just add 10ml water, self heats! A taste that reminds you of your school years."
+ description_fluff = "Konohagakure Brand Ramen has been an instant meal staple for centuries. Cheap, quick and available in over two hundred varieties - though most taste like artifical chicken."
icon_state = "ramen"
+ trash = /obj/item/trash/ramen
center_of_mass = list("x"=16, "y"=11)
+ drop_sound = 'sound/items/drop/papercup.ogg'
+
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen/Initialize()
..()
reagents.add_reagent("dry_ramen", 30)
@@ -219,7 +294,7 @@
possible_transfer_amounts = null
volume = 10
center_of_mass = list("x"=16, "y"=12)
- drop_sound = 'sound/items/drop/paper.ogg'
+ drop_sound = 'sound/items/drop/papercup.ogg'
/obj/item/weapon/reagent_containers/food/drinks/sillycup/Initialize()
. = ..()
diff --git a/code/modules/food/food/drinks/bottle.dm b/code/modules/food/food/drinks/bottle.dm
index 89c06552f57..c79f9bd36d2 100644
--- a/code/modules/food/food/drinks/bottle.dm
+++ b/code/modules/food/food/drinks/bottle.dm
@@ -202,7 +202,7 @@
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey
name = "Uncle Git's Special Reserve"
- desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter."
+ desc = "A premium single-malt whiskey, gently matured in a highly classified location."
icon_state = "whiskeybottle"
center_of_mass = list("x"=16, "y"=3)
@@ -233,7 +233,7 @@
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla
name = "Caccavo Guaranteed Quality Tequilla"
desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!"
- icon_state = "tequillabottle"
+ icon_state = "tequilabottle"
center_of_mass = list("x"=16, "y"=3)
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla/Initialize()
@@ -252,7 +252,7 @@
/obj/item/weapon/reagent_containers/food/drinks/bottle/patron
name = "Wrapp Artiste Patron"
- desc = "Silver laced tequilla, served in space night clubs across the galaxy."
+ desc = "Silver laced tequilla, served in night clubs across the galaxy."
icon_state = "patronbottle"
center_of_mass = list("x"=16, "y"=6)
@@ -514,8 +514,9 @@
rag_underlay = "rag_small"
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer
- name = "space beer"
- desc = "Contains only water, malt and hops."
+ name = "Spacer beer"
+ desc = "A remarkably unremarkable pale lager. Barley malt, hops and yeast."
+ description_fluff = "Identical to an earlier Earth-based variety of beer, Spacer beer was rebranded at the height of humanity's first extra-solar colonization boom in the 2130s and become the go-to cheap booze for those dreaming of a brighter future in the stars. Today, the beer is advertised as 'brewed in space, for space."
icon_state = "beer"
center_of_mass = list("x"=16, "y"=12)
@@ -523,6 +524,28 @@
. = ..()
reagents.add_reagent("beer", 30)
+/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon
+ name = "Silver Dragon pilsner"
+ desc = "An earthy pale lager produced exclusively on Nisp, best served cold."
+ description_fluff = "Brewed using locally grown hops, with hints of local flora, Silver Dragon has a reputation as the beer of the frontier hunter - and those trying to look just as tough."
+ icon_state = "beer2"
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor
+ name = "Meteor beer"
+ desc = "A strong, premium beer with a hint of maize."
+ description_fluff = "Sold across human space, Meteor beer has won more awards than any single variety in history. It should be noted that Meteor's parent company Gilthari Exports, owns most alcohol awards agencies."
+ icon_state = "beerprem"
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer
+ name = "Lite-Speed Lite beer"
+ desc = "A reduced-alcohol, reduced-calorie beer for the drunk on a diet."
+ description_fluff = "Lite-Speed is Spacer Beer's light brand, and despite being widely considered inferior in every regard, it's still pretty cheap. The lower alcohol content also appeals to some Skrell, for whom full-strength beer is too strong."
+ icon_state = "beerlite"
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer/Initialize()
+ . = ..()
+ reagents.add_reagent("litebeer", 30)
+
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/cider
name = "Crisp's Cider"
desc = "Fermented apples never tasted this good."
@@ -545,6 +568,16 @@
. = ..()
reagents.add_reagent("ale", 30)
+/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale/hushedwhisper
+ name = "Hushed Whisper IPA"
+ desc = "A popular Sivian pale ale named for an infamous space pirate."
+ description_fluff = "Named for one of history's most infamous pirates, Qar’raqel, who ruled over Natuna before suffering a mysterious fate. This ale is brewed on Sif by a small company... Owned by Centauri Provisions."
+ icon_state = "alebottle2"
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale/hushedwhisper/Initialize()
+ . = ..()
+ reagents.add_reagent("ale", 30)
+
/obj/item/weapon/reagent_containers/food/drinks/bottle/sake
name = "Mono-No-Aware Luxury Sake"
desc = "Dry alcohol made from rice, a favorite of businessmen."
diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm
index d65679f6f73..ed3f8a37c57 100644
--- a/code/modules/food/food/snacks.dm
+++ b/code/modules/food/food/snacks.dm
@@ -307,8 +307,10 @@
bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/candy
- name = "candy"
- desc = "Nougat, love it or hate it."
+ name = "\improper Grandma Ellen's Hard Candy"
+ desc = "Now without nuts!"
+ description_fluff = "Hard candies were banned from many early human colony ships due to the tendency for brittle, sticky chunks to find their way inside vital equipment in zero-G conditions. This only made them all the more popular to new arrivees, and the Grandma Ellen's brand was Tau Ceti's answer to that demand."
+ icon = 'icons/obj/food_snacks.dmi'
icon_state = "candy"
trash = /obj/item/trash/candy
filling_color = "#7D5F46"
@@ -322,8 +324,10 @@
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar
- name = "protein bar"
- desc = "SwoleMAX brand protein bars, guaranteed to get you feeling perfectly overconfident."
+ name = "\improper SwoleMAX protein bar"
+ desc = "Guaranteed to get you feeling perfectly overconfident."
+ description_fluff = "NanoMed's SwoleMAX boasts the highest density of protein mush per square inch among leading protein bar brands. While formulated for strength training, this high nutrient density in a mostly-solid form makes SwoleMAX a popular alternative for spacers looking to mix up their usual diet of pastes and gooes."
+ icon = 'icons/obj/food_snacks.dmi'
icon_state = "proteinbar"
trash = /obj/item/trash/candy/proteinbar
nutriment_amt = 9
@@ -335,6 +339,21 @@
reagents.add_reagent("sugar", 4)
bitesize = 6
+/obj/item/weapon/reagent_containers/food/snacks/candy/gummy
+ name = "\improper AlliCo Gummies"
+ desc = "Somehow, there's never enough cola bottles."
+ description_fluff = "AlliCo's grab-bags of gummy candies come in over a thousand novelty shapes and dozens of flavours. Shoes, astronauts, bunny rabbits and singularities all made an appearance."
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "candy_gums"
+ trash = /obj/item/trash/candy/gums
+ nutriment_amt = 5
+ nutriment_desc = list("sugar" = 1, "artificial fruit flavour" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/candy/gummy/Initialize()
+ . = ..()
+ reagents.add_reagent("sugar", 5)
+ bitesize = 1
+
/obj/item/weapon/reagent_containers/food/snacks/candy/donor
name = "Donor Candy"
desc = "A little treat for blood donors."
@@ -362,8 +381,10 @@
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/chips
- name = "chips"
- desc = "Commander Riker's What-The-Crisps"
+ name = "\improper What-The-Crisps"
+ desc = "Commander Riker's What-The-Crisps, lightly salted."
+ description_fluff = "What-The-Crisps' retro-styled starship commander has been a marketing staple for almost 200 years."
+ icon = 'icons/obj/food_snacks.dmi'
icon_state = "chips"
trash = /obj/item/trash/chips
filling_color = "#E8C31E"
@@ -375,6 +396,20 @@
. = ..()
bitesize = 1
+/obj/item/weapon/reagent_containers/food/snacks/chips/bbq
+ name = "\improper Legendary BBQ Chips"
+ desc = "You know I can't grab your ghost chips!"
+ description_fluff = "A local brand, Legendary Chips have proudly sponsored Vir's anti-drink-piloting campaign since 2558."
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "chips_bbq"
+ trash = /obj/item/trash/chips/bbq
+ nutriment_amt = 3
+ nutriment_desc = list("salt" = 1, "barbeque sauce" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/chips/Initialize()
+ . = ..()
+ bitesize = 1
+
/obj/item/weapon/reagent_containers/food/snacks/cookie
name = "cookie"
desc = "COOKIE!!!"
@@ -388,6 +423,37 @@
. = ..()
bitesize = 1
+/obj/item/weapon/reagent_containers/food/snacks/cookiesnack
+ name = "Carps Ahoy! miniature cookies"
+ desc = "Now 100% carpotoxin free!"
+ description_fluff = "Carps Ahoy! cookies are required to sell under the 'Cap'n Choco' name in certain markets, out of concerns that children will become desensitized to the very real dangers of Space Carp."
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "cookiesnack"
+ trash = /obj/item/trash/cookiesnack
+ filling_color = "#DBC94F"
+ nutriment_amt = 3
+ nutriment_desc = list("sweetness" = 1, "stale cookie" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/cookiesnack/Initialize()
+ . = ..()
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/fruitbar
+ name = "\improper ChewMAX fruit bar"
+ desc = "Guaranteed to get you feeling comfortably superior."
+ description_fluff = "NanoMed's ChewMAX is the low-carb alternative to the SwoleMAX range! Want short-term energy but not really interested in sustaining it? Hate fat but don't entirely understand nutrition? Just really like fruit? ChewMAX is for you!"
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "fruitbar"
+ trash = /obj/item/trash/candy/fruitbar
+ nutriment_amt = 9
+ nutriment_desc = list("apricot" = 2, "sugar" = 2, "dates" = 2, "cranberry" = 2, "apple = 2")
+
+/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar/Initialize()
+ . = ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("sugar", 4)
+ bitesize = 6
+
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar
name = "Chocolate Bar"
desc = "Such sweet, fattening food."
@@ -583,6 +649,210 @@
src.name = "Frosted Jelly Donut"
reagents.add_reagent("sprinkles", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/tuna
+ name = "\improper Tuna Snax"
+ desc = "A packaged dried fish snack, guaranteed to do not contain space carp. Actual fish content may vary."
+ description_fluff = "Launched by Centuari Provisions to target the Tajaran immigrant market, Tuna Snax also found a surprising niche among Vir's sizable Scandinavian population. Elsewhere, the dried fish flakes are widely considered disgusting."
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "tuna"
+ filling_color = "#FFDEFE"
+ center_of_mass = list("x"=17, "y"=13)
+ nutriment_amt = 3
+ nutriment_desc = list("smoked fish" = 5)
+ trash = /obj/item/trash/tuna
+
+/obj/item/weapon/reagent_containers/food/snacks/tuna/Initialize()
+ . = ..()
+ reagents.add_reagent("protein", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/pistachios
+ name = "pistachios"
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "pistachios"
+ desc = "Pistachios. There is absolutely nothing remarkable about these."
+ filling_color = "#825D26"
+ center_of_mass = list("x"=17, "y"=13)
+ nutriment_desc = list("nuts" = 1)
+ nutriment_amt = 3
+ bitesize = 1
+ trash = /obj/item/trash/pistachios
+
+/obj/item/weapon/reagent_containers/food/snacks/semki
+ name = "\improper Semki"
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "semki"
+ desc = "Sunflower seeds. A favorite among both birds and gopniks."
+ filling_color = "#68645D"
+ center_of_mass = list("x"=17, "y"=13)
+ nutriment_desc = list("sunflower seeds" = 1)
+ nutriment_amt = 6
+ bitesize = 1
+ trash = /obj/item/trash/semki
+
+/obj/item/weapon/reagent_containers/food/snacks/cb01
+ name = "\improper Tau Ceti Bar"
+ desc = "A dark chocolate caramel and nougat bar made famous on Binma."
+ description_fluff = "Binma's signature chocolate bar, the Tau Ceti Bar was originally made with cheap, heavily preserved ingredients available to Sol's first colonists. The modern recipe attempts to recreate this, baffling many not accustomed to its slightly stale taste."
+ filling_color = "#552200"
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "cb01"
+ nutriment_amt = 4
+ nutriment_desc = list("stale chocolate" = 2, "nougat" = 1, "caramel" = 1)
+ w_class = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/cb01/Initialize()
+ . = ..()
+ reagents.add_reagent("sugar", 1)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cb02
+ name = "\improper Hundred-Thousand Thaler Bar"
+ desc = "An ironically cheap puffed rice caramel milk chocolate bar."
+ description_fluff = "The Hundred-Thousand Thaler bar has been the focal point of dozens of exonet and radio giveaway pranks over its long history. In 2500 the company got in on the action, offering a prize of one-hundred thousand one-hundred thousand thaler bars to one lucky entrant, who reportedly turned down the prize in favour of a 250 Thaler cash prize."
+ filling_color = "#552200"
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "cb02"
+ nutriment_amt = 4
+ nutriment_desc = list("chocolate" = 2, "caramel" = 1, "puffed rice" = 1)
+ w_class = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/cb02/Initialize()
+ . = ..()
+ reagents.add_reagent("sugar", 1)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cb03
+ name = "\improper Aerostat Bar"
+ desc = "Bubbly milk chocolate."
+ description_fluff = "An early slogan claimed the chocolate's bubbles where made with 'real Venusian gases', which is thought to have seriously harmed sales. The claim remains true, since the main production plant remains on Venus, but the company tries to avoid association with toxic air."
+ filling_color = "#552200"
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "cb03"
+ nutriment_amt = 4
+ nutriment_desc = list("chocolate" = 4)
+ w_class = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/cb03/Initialize()
+ . = ..()
+ reagents.add_reagent("sugar", 1)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cb04
+ name = "\improper Lars' Saltlakris"
+ desc = "Milk chocolate embedded with chunks of salty licorice."
+ description_fluff = "Produced exclusively in Kalmar for sale in Vir, Lars' Saltlakris is one of the system's most popular home-grown confectionaries."
+ filling_color = "#552200"
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "cb04"
+ nutriment_amt = 4
+ nutriment_desc = list("chocolate" = 2, "salt = 1", "licorice" = 1)
+ w_class = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/cb04/Initialize()
+ . = ..()
+ reagents.add_reagent("sugar", 1)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cb05
+ name = "\improper Andromeda Bar"
+ desc = "A cheap milk chocolate bar loaded with sugar."
+ description_fluff = "The galaxy's top-selling chocolate brand for almost 400 years. Also comes in dozens of varieties, including caramel, cookie, fruit and nut, and almond. This is just the basic stuff, though."
+ filling_color = "#552200"
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "cb05"
+ nutriment_amt = 3
+ nutriment_desc = list("milk chocolate" = 2)
+ w_class = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/cb05/Initialize()
+ . = ..()
+ reagents.add_reagent("sugar", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/cb06
+ name = "\improper Mocha Crunch"
+ desc = "A large latte flavored wafer chocolate bar."
+ description_fluff = "Lightly caffeinated, the Mocha Crunch is often considered to be more of an authentic coffee taste than most vending machine coffees."
+ filling_color = "#552200"
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "cb06"
+ nutriment_amt = 4
+ nutriment_desc = list("chocolate" = 2, "coffee" = 1, "vanilla wafer" = 1)
+ w_class = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/cb06/Initialize()
+ . = ..()
+ reagents.add_reagent("sugar", 1)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/cb07
+ name = "\improper TaroMilk Bar"
+ desc = "A light milk chocolate shell with a Taro paste filling. Chewy!"
+ description_fluff = "The best-selling Kishari snack finally made its way to the galactic stage in 2562. Whether it is here to stay remains to be seen, though it has found some popularity with the Skrell.."
+ filling_color = "#552200"
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "cb07"
+ nutriment_amt = 4
+ nutriment_desc = list("chocolate" = 2, "taro" = 2)
+ w_class = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/cb07/Initialize()
+ . = ..()
+ reagents.add_reagent("sugar", 1)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/cb08
+ name = "\improper Cronk Bar"
+ desc = "A large puffed malt milk chocolate bar."
+ description_fluff = "The Cronk Bar proudly 'Comes in one flavour, so you'll never pick the wrong one!'. Its enduring popularity may be in part due to a longstanding deal with the SCG Fleet to include Cronk in standard military rations."
+ filling_color = "#552200"
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "cb08"
+ nutriment_amt = 3
+ nutriment_desc = list("chocolate" = 2, "malt puffs" = 1)
+ w_class = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/cb08/Initialize()
+ . = ..()
+ reagents.add_reagent("sugar", 2)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/cb09
+ name = "\improper Kaju Mamma! Bar"
+ desc = "A massive cluster of cashews and peanuts covered in a condensed milk solid."
+ description_fluff = "Based on traditional South Asian desserts, the Kaju Mamma! is a deceptively soft, sweet bar voted 'Most allergenic candy' nineteen years running."
+ filling_color = "#552200"
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "cb09"
+ nutriment_amt = 6
+ nutriment_desc = list("peanuts" = 3, "condensed milk" = 1, "cashews" = 2)
+ w_class = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/cb09/Initialize()
+ . = ..()
+ reagents.add_reagent("sugar", 1)
+ reagents.add_reagent("milk", 1)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/cb10
+ name = "\improper Shantak Bar"
+ desc = "Nuts, nougat, peanuts, and caramel covered in chocolate."
+ description_fluff = "Despite being often mistaken for a regional favourite, the Shantak Bar is sold under different 'localized' names in almost every human system in the galaxy, and adds up to being the third best selling confection produced by Centauri Provisions."
+ filling_color = "#552200"
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "cb10"
+ nutriment_amt = 5
+ nutriment_desc = list("chocolate" = 2, "caramel" = 1, "peanuts" = 1, "nougat" = 1)
+ w_class = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/cb10/Initialize()
+ . = ..()
+ bitesize = 3
+ reagents.add_reagent("sugar", 1)
+ reagents.add_reagent("protein", 1)
+
/obj/item/weapon/reagent_containers/food/snacks/egg
name = "egg"
desc = "An egg!"
@@ -1375,8 +1645,10 @@
/obj/item/weapon/reagent_containers/food/snacks/sosjerky
name = "Scaredy's Private Reserve Beef Jerky"
+ icon = 'icons/obj/food_snacks.dmi'
icon_state = "sosjerky"
- desc = "Beef jerky made from the finest space cows."
+ desc = "Beef jerky made from the finest space-reared cows."
+ description_fluff = "Raising cows in low-gravity environments has the natural result of particularly tender meat. The jerking process largely undoes this apparent benefit, but it's just too damn efficient to ship not to."
trash = /obj/item/trash/sosjerky
filling_color = "#631212"
center_of_mass = list("x"=15, "y"=9)
@@ -1388,8 +1660,10 @@
/obj/item/weapon/reagent_containers/food/snacks/no_raisin
name = "4no Raisins"
+ icon = 'icons/obj/food_snacks.dmi'
icon_state = "4no_raisins"
desc = "Best raisins in the universe. Not sure why."
+ description_fluff = "The popularity of dried foods across the galaxy is either a direct result of ease of shipping, or a clever marketing ploy by corporations trying to cut back costs. Whatever it is, there must be SOME reason?"
trash = /obj/item/trash/raisins
filling_color = "#343834"
center_of_mass = list("x"=15, "y"=4)
@@ -1401,9 +1675,11 @@
reagents.add_reagent("nutriment", 6)
/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie
- name = "Space Twinkie"
+ name = "Spacer Snack Cake"
+ icon = 'icons/obj/food_snacks.dmi'
icon_state = "space_twinkie"
- desc = "Guaranteed to survive longer then you will."
+ desc = "Guaranteed to survive longer than you will."
+ description_fluff = "Despite Spacer advertisements consistently portraying their snack cakes as life-saving, tear-jerking survival food for spacers in all kinds of dramatic scenarios, the Spacer Snack Cake has been statistically proven to lower survival rates on all missions where it is present."
filling_color = "#FFE591"
center_of_mass = list("x"=15, "y"=11)
@@ -1414,8 +1690,10 @@
/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers
name = "Cheesie Honkers"
+ icon = 'icons/obj/food_snacks.dmi'
icon_state = "cheesie_honkers"
- desc = "Bite sized cheesie snacks that will honk all over your mouth"
+ desc = "Bite sized cheesie snacks that will honk all over your mouth."
+ description_fluff = "The origins of the flourescent orange dust produced by Cheesie Honkers is considered a trade secret, despite having been leaked on the exonet decades ago. It's the cheese."
trash = /obj/item/trash/cheesie
filling_color = "#FFA305"
center_of_mass = list("x"=15, "y"=9)
@@ -1428,8 +1706,10 @@
/obj/item/weapon/reagent_containers/food/snacks/syndicake
name = "Syndi-Cakes"
+ icon = 'icons/obj/food_snacks.dmi'
icon_state = "syndi_cakes"
desc = "An extremely moist snack cake that tastes just as good after being nuked."
+ description_fluff = "Spacer Snack Cakes' meaner, tastier cousin. The Syndi-Cakes brand was at risk of dissolution in 2429 when it was revealed that the entire production chain was a Nos Amis joint. The brand was quickly aquired by Centauri Provisions and some mild hallucinogenic 'add-ins' were axed from the recipe."
filling_color = "#FF5D05"
center_of_mass = list("x"=16, "y"=10)
trash = /obj/item/trash/syndi_cakes
@@ -2433,6 +2713,28 @@
reagents.add_reagent("mint", 1)
bitesize = 1
+/obj/item/weapon/reagent_containers/food/snacks/mint/admints
+ desc = "Spearmint, peppermint's non-festive cousin."
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "admint"
+
+/obj/item/weapon/storage/box/admints
+ name = "Ad-mints"
+ desc = "A pack of air fresheners for your mouth."
+ description_fluff = "Ad-mints earned their name, and reputation when a Major Bill's senior executive attended a meeting at a large a marketing firm and was so astounded by the quality of their complimentary mints, that he immediately bought the company - the mints company, not the ad agency - and began providing 'Ad-mints' on every MBT flight."
+ icon = 'icons/obj/food_snacks.dmi'
+ icon_state = "admint_pack"
+ item_state = "candy"
+ slot_flags = SLOT_EARS
+ w_class = 1
+ starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/mint/admints = 6)
+ can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/mint/admints)
+ use_sound = 'sound/items/drop/paper.ogg'
+ drop_sound = 'sound/items/drop/wrapper.ogg'
+ max_storage_space = 6
+ foldable = null
+ trash = /obj/item/trash/admints
+
/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup
name = "chantrelle soup"
desc = "A delicious and hearty mushroom soup."
@@ -3813,6 +4115,8 @@
/obj/item/weapon/reagent_containers/food/snacks/tastybread
name = "bread tube"
desc = "Bread in a tube. Chewy...and surprisingly tasty."
+ description_fluff = "Due to the high-fructose corn syrup content of NanoTrasen's own-brand bread tubes, many jurisdictions classify them as a confectionary."
+ icon = 'icons/obj/food_snacks.dmi'
icon_state = "tastybread"
trash = /obj/item/trash/tastybread
filling_color = "#A66829"
@@ -3827,6 +4131,8 @@
/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks
name = "\improper SkrellSnax"
desc = "Cured fungus shipped all the way from Qerr'balak, almost like jerky! Almost."
+ description_fluff = "Despite the packaging, most SkrellSnax sold in Vir are produced using locally-grown fungi in controversial Skrell-owned biodomes on the suface of Sif."
+ icon = 'icons/obj/food_snacks.dmi'
icon_state = "skrellsnacks"
filling_color = "#A66829"
center_of_mass = list("x"=15, "y"=12)
@@ -3839,8 +4145,10 @@
/obj/item/weapon/reagent_containers/food/snacks/unajerky
name = "Moghes Imported Sissalik Jerky"
+ icon = 'icons/obj/food_snacks.dmi'
icon_state = "unathitinred"
desc = "An incredibly well made jerky, shipped in all the way from Moghes."
+ description_fluff = "The exact meat and spices used in the curing of Sissalik Jerky are a well-kept secret, and thought to not exist at all outside of Hegemony space. Many have tried to replicate the flavour, but none have come close, so the brand remains a highly prized import."
trash = /obj/item/trash/unajerky
filling_color = "#631212"
center_of_mass = list("x"=15, "y"=9)
@@ -4529,8 +4837,8 @@
center_of_mass = list("x"=16, "y"=16)
do_coating_prefix = 0
bitesize = 2
-
-
+
+
/obj/item/weapon/reagent_containers/food/snacks/sausage/battered/Initialize()
. = ..()
reagents.add_reagent("protein", 6)
@@ -4561,7 +4869,7 @@
icon_state = "ratburger"
center_of_mass = list("x"=16, "y"=11)
bitesize = 2
-
+
/obj/item/weapon/reagent_containers/food/snacks/mouseburger/Initialize()
. = ..()
reagents.add_reagent("protein", 4)
@@ -6036,7 +6344,7 @@
/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice/filled/Initialize()
. = ..()
reagents.add_reagent("protein", 1)
-
+
/obj/item/weapon/reagent_containers/food/snacks/lasagna
name = "lasagna"
desc = "Meaty, tomato-y, and ready to eat-y. Favorite of cats."
diff --git a/code/modules/food/kitchen/cooking_machines/_appliance.dm b/code/modules/food/kitchen/cooking_machines/_appliance.dm
index d8c4e761ca2..297dc688f42 100644
--- a/code/modules/food/kitchen/cooking_machines/_appliance.dm
+++ b/code/modules/food/kitchen/cooking_machines/_appliance.dm
@@ -182,7 +182,7 @@
//Handles all validity checking and error messages for inserting things
/obj/machinery/appliance/proc/can_insert(var/obj/item/I, var/mob/user)
- if (istype(I.loc, /mob/living/silicon))
+ if (istype(I, /obj/item/weapon/gripper))
return 0
else if (istype(I.loc, /obj/item/rig_module))
return 0
diff --git a/code/modules/gamemaster/event2/events/security/swarm_boarder.dm b/code/modules/gamemaster/event2/events/security/swarm_boarder.dm
index 283333c6796..54dc03189b6 100644
--- a/code/modules/gamemaster/event2/events/security/swarm_boarder.dm
+++ b/code/modules/gamemaster/event2/events/security/swarm_boarder.dm
@@ -5,6 +5,7 @@
departments = list(DEPARTMENT_EVERYONE, DEPARTMENT_SECURITY, DEPARTMENT_ENGINEERING)
chaos = 60
chaotic_threshold = EVENT_CHAOS_THRESHOLD_HIGH_IMPACT
+ enabled = FALSE // Turns out they are in fact grossly OP.
var/safe_for_extended = FALSE
/datum/event2/meta/swarm_boarder/get_weight()
diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm
index 2efef5783ff..b852e10383a 100644
--- a/code/modules/materials/material_recipes.dm
+++ b/code/modules/materials/material_recipes.dm
@@ -139,6 +139,7 @@
recipes += new/datum/stack_recipe("lampshade", /obj/item/weapon/lampshade, 1, time = 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("plastic net", /obj/item/weapon/material/fishing_net, 25, time = 1 MINUTE, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("plastic fishtank", /obj/item/glass_jar/fish/plastic, 2, time = 30 SECONDS)
+ recipes += new/datum/stack_recipe("reagent tubing", /obj/item/stack/hose, 1, 4, 20, pass_stack_color = TRUE)
/material/wood/generate_recipes()
..()
diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm
index eb1a76b32c5..012e64b4ecb 100644
--- a/code/modules/materials/materials.dm
+++ b/code/modules/materials/materials.dm
@@ -824,6 +824,7 @@ var/list/name_to_material
name = "alienalloy"
display_name = "durable alloy"
stack_type = null
+ flags = MATERIAL_UNMELTABLE
icon_colour = "#6C7364"
integrity = 1200
melting_point = 6000 // Hull plating.
diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm
index 7c866dd5700..199b1ed0d0a 100644
--- a/code/modules/mining/abandonedcrates.dm
+++ b/code/modules/mining/abandonedcrates.dm
@@ -58,7 +58,7 @@
if(53 to 54)
new/obj/item/latexballon(src)
if(55 to 56)
- var/newitem = pick(typesof(/obj/item/toy/prize) - /obj/item/toy/prize)
+ var/newitem = pick(typesof(/obj/item/toy/mecha) - /obj/item/toy/mecha)
new newitem(src)
if(57 to 58)
new/obj/item/toy/syndicateballoon(src)
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index 03b23b15a64..93c711b6beb 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -33,7 +33,10 @@
/obj/machinery/mineral/processing_unit_console/attack_hand(mob/user)
if(..())
return
- interact(user)
+ if(!allowed(user))
+ to_chat(user, "Access denied.")
+ return
+ tgui_interact(user)
/obj/machinery/mineral/processing_unit_console/attackby(var/obj/item/I, var/mob/user)
if(istype(I, /obj/item/weapon/card/id))
@@ -42,97 +45,89 @@
if(!inserted_id && user.unEquip(I))
I.forceMove(src)
inserted_id = I
- interact(user)
+ SStgui.update_uis(src)
return
..()
-/obj/machinery/mineral/processing_unit_console/interact(mob/user)
- if(..())
- return
+/obj/machinery/mineral/processing_unit_console/tgui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "MiningOreProcessingConsole", name)
+ ui.open()
- if(!allowed(user))
- to_chat(user, "Access denied.")
- return
+/obj/machinery/mineral/processing_unit_console/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
+ var/list/data = ..()
+ data["unclaimedPoints"] = machine.points
- user.set_machine(src)
-
- var/dat = "
Ore processor console
"
-
- dat += "Current unclaimed points: [machine.points] "
- if(istype(inserted_id))
- dat += "You have [inserted_id.mining_points] mining points collected. Eject ID. "
- dat += "Claim points. "
+ if(inserted_id)
+ data["has_id"] = TRUE
+ data["id"] = list(
+ "name" = inserted_id.registered_name,
+ "points" = inserted_id.mining_points,
+ )
else
- dat += "No ID inserted. Insert ID. "
-
- dat += "
"
- var/datum/browser/popup = new(user, "miningvendor", "Mining Equipment Vendor", 400, 600)
- popup.set_content(dat)
- popup.open()
+ data["has_id"] = FALSE
-/obj/machinery/mineral/equipment_vendor/Topic(href, href_list)
+ return data
+
+/obj/machinery/mineral/equipment_vendor/proc/get_points(obj/item/weapon/card/id/target)
+ if(!istype(target))
+ return 0
+ return target.mining_points
+
+/obj/machinery/mineral/equipment_vendor/proc/remove_points(obj/item/weapon/card/id/target, amt)
+ target.mining_points -= amt
+
+/obj/machinery/mineral/equipment_vendor/tgui_static_data(mob/user)
+ var/list/static_data[0]
+
+ // Available items - in static data because we don't wanna compute this list every time! It hardly changes.
+ static_data["items"] = list()
+ for(var/cat in prize_list)
+ var/list/cat_items = list()
+ for(var/prize_name in prize_list[cat])
+ var/datum/data/mining_equipment/prize = prize_list[cat][prize_name]
+ cat_items[prize_name] = list("name" = prize_name, "price" = prize.cost)
+ static_data["items"][cat] = cat_items
+
+ return static_data
+
+/obj/machinery/mineral/equipment_vendor/vv_edit_var(var_name, var_value)
+ // Gotta update the static data in case an admin VV's the items for some reason..!
+ if(var_name == "prize_list")
+ dirty_items = TRUE
+ return ..()
+
+/obj/machinery/mineral/equipment_vendor/tgui_interact(mob/user, datum/tgui/ui = null)
+ // Update static data if need be
+ if(dirty_items)
+ update_tgui_static_data(user, ui)
+ dirty_items = FALSE
+
+ // Open the window
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "MiningVendor", name)
+ ui.open()
+ ui.set_autoupdate(FALSE)
+
+
+/obj/machinery/mineral/equipment_vendor/tgui_act(action, params)
if(..())
- return 1
+ return
- if(href_list["choice"])
- if(istype(inserted_id))
- if(href_list["choice"] == "eject")
- to_chat(usr, "You eject the ID from [src]'s card slot.")
- usr.put_in_hands(inserted_id)
- inserted_id = null
- else if(href_list["choice"] == "insert")
- var/obj/item/weapon/card/id/I = usr.get_active_hand()
- if(istype(I) && !inserted_id && usr.unEquip(I))
- I.forceMove(src)
- inserted_id = I
- interact(usr)
- to_chat(usr, "You insert the ID into [src]'s card slot.")
- else
- to_chat(usr, "No valid ID.")
- flick(icon_deny, src)
-
- if(href_list["purchase"])
- if(istype(inserted_id))
- var/datum/data/mining_equipment/prize = locate(href_list["purchase"])
- if (!prize || !(prize in prize_list))
- to_chat(usr, "Error: Invalid choice!")
- flick(icon_deny, src)
+ . = TRUE
+ switch(action)
+ if("logoff")
+ if(!inserted_id)
return
- if(prize.cost > inserted_id.mining_points)
- to_chat(usr, "Error: Insufficent points for [prize.equipment_name]!")
- flick(icon_deny, src)
- else
- inserted_id.mining_points -= prize.cost
- to_chat(usr, "[src] clanks to life briefly before vending [prize.equipment_name]!")
- new prize.equipment_path(drop_location())
- flick(icon_vend, src)
+ usr.put_in_hands(inserted_id)
+ inserted_id = null
+ if("purchase")
+ if(!inserted_id)
+ flick(icon_deny, src) //VOREStation Add
+ return
+ var/category = params["cat"] // meow
+ var/name = params["name"]
+ if(!(category in prize_list) || !(name in prize_list[category])) // Not trying something that's not in the list, are you?
+ flick(icon_deny, src) //VOREStation Add
+ return
+ var/datum/data/mining_equipment/prize = prize_list[category][name]
+ if(prize.cost > get_points(inserted_id)) // shouldn't be able to access this since the button is greyed out, but..
+ to_chat(usr, "You have insufficient points.")
+ flick(icon_deny, src) //VOREStation Add
+ return
+
+ remove_points(inserted_id, prize.cost)
+ new prize.equipment_path(loc)
+ flick(icon_vend, src) //VOREStation Add
else
- to_chat(usr, "Error: Please insert a valid ID!")
- flick(icon_deny, src)
- updateUsrDialog()
+ flick(icon_deny, src) //VOREStation Add
+ return FALSE
+ add_fingerprint()
+
/obj/machinery/mineral/equipment_vendor/attackby(obj/item/I, mob/user, params)
if(default_deconstruction_screwdriver(user, I))
- updateUsrDialog()
return
if(default_part_replacement(user, I))
return
@@ -201,7 +252,7 @@
if(istype(I, /obj/item/mining_voucher))
if(!powered())
return
- RedeemVoucher(I, user)
+ redeem_voucher(I, user)
return
if(istype(I,/obj/item/weapon/card/id))
if(!powered())
@@ -209,16 +260,23 @@
else if(!inserted_id && user.unEquip(I))
I.forceMove(src)
inserted_id = I
- interact(user)
+ tgui_interact(user)
return
- ..()
+ return ..()
/obj/machinery/mineral/equipment_vendor/dismantle()
if(inserted_id)
inserted_id.forceMove(loc) //Prevents deconstructing the ORM from deleting whatever ID was inside it.
. = ..()
-/obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/mining_voucher/voucher, mob/redeemer)
+/**
+ * Called when someone slaps the machine with a mining voucher
+ *
+ * Arguments:
+ * * voucher - The voucher card item
+ * * redeemer - The person holding it
+ */
+/obj/machinery/mineral/equipment_vendor/proc/redeem_voucher(obj/item/mining_voucher/voucher, mob/redeemer)
var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in list("Kinetic Accelerator", "Resonator", "Mining Drone", "Advanced Scanner", "Crusher")
if(!selection || !Adjacent(redeemer) || voucher.loc != redeemer)
return
diff --git a/code/modules/mining/ore_redemption_machine/survey_vendor.dm b/code/modules/mining/ore_redemption_machine/survey_vendor.dm
index 65b7ccc76dd..1eb8672ef64 100644
--- a/code/modules/mining/ore_redemption_machine/survey_vendor.dm
+++ b/code/modules/mining/ore_redemption_machine/survey_vendor.dm
@@ -8,109 +8,69 @@
circuit = /obj/item/weapon/circuitboard/exploration_equipment_vendor
icon_deny = "exploration-deny" //VOREStation Edit
icon_vend = "exploration-vend" //VOREStation Add
+
+/obj/machinery/mineral/equipment_vendor/survey/Initialize(mapload)
+ . = ..()
//VOREStation Edit Start - Heavily modified list
- prize_list = list(
- new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 1),
- new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 10),
- new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 30),
- new /datum/data/mining_equipment("GPS Device", /obj/item/device/gps/explorer, 10),
- new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 10),
- new /datum/data/mining_equipment("Absinthe", /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, 10),
- new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 15),
- new /datum/data/mining_equipment("Soap", /obj/item/weapon/soap/nanotrasen, 20),
- new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 90),
- new /datum/data/mining_equipment("Geiger Counter", /obj/item/device/geiger, 75),
- new /datum/data/mining_equipment("Plush Toy", /obj/random/plushie, 30),
- new /datum/data/mining_equipment("Extraction Equipment - Fulton Beacon",/obj/item/fulton_core, 300),
- new /datum/data/mining_equipment("Extraction Equipment - Fulton Pack",/obj/item/extraction_pack, 125),
- new /datum/data/mining_equipment("Umbrella", /obj/item/weapon/melee/umbrella/random, 20),
- new /datum/data/mining_equipment("Shelter Capsule", /obj/item/device/survivalcapsule, 50),
- new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card/survey, 50),
- new /datum/data/mining_equipment("Trauma Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, 25),
- new /datum/data/mining_equipment("Burn Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/burn, 25),
- new /datum/data/mining_equipment("Oxy Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, 25),
- new /datum/data/mining_equipment("Detox Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/detox, 25),
- new /datum/data/mining_equipment("Injector (L) - Glucose", /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose,50),
- new /datum/data/mining_equipment("Injector (L) - Panacea", /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity,50),
- new /datum/data/mining_equipment("Injector (L) - Trauma", /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute,50),
- new /datum/data/mining_equipment("Digital Tablet - Standard", /obj/item/modular_computer/tablet/preset/custom_loadout/standard, 50),
- new /datum/data/mining_equipment("Digital Tablet - Advanced", /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, 100),
- new /datum/data/mining_equipment("Nanopaste Tube", /obj/item/stack/nanopaste, 100),
- new /datum/data/mining_equipment("Mini-Translocator", /obj/item/device/perfect_tele/one_beacon, 120),
- new /datum/data/mining_equipment("UAV - Recon Skimmer", /obj/item/device/uav, 400),
- new /datum/data/mining_equipment("Thalers - 100", /obj/item/weapon/spacecash/c100, 100),
- new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 250),
- new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/device/survivalcapsule/luxury, 310),
- new /datum/data/mining_equipment("Bar Shelter Capsule", /obj/item/device/survivalcapsule/luxurybar, 1000),
- new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore",/obj/item/weapon/gun/magnetic/matfed, 300),
- new /datum/data/mining_equipment("Survey Tools - Shovel", /obj/item/weapon/shovel, 40),
- new /datum/data/mining_equipment("Survey Tools - Mechanical Trap", /obj/item/weapon/beartrap, 50),
- new /datum/data/mining_equipment("Defense Equipment - Smoke Bomb",/obj/item/weapon/grenade/smokebomb, 10),
- new /datum/data/mining_equipment("Defense Equipment - Razor Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/manhacks/station/locked, 100),
- new /datum/data/mining_equipment("Defense Equipment - Sentry Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/ward, 150),
- new /datum/data/mining_equipment("Defense Equipment - Steel Machete", /obj/item/weapon/material/knife/machete, 75),
- new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 50),
- new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 100),
- new /datum/data/mining_equipment("Durasteel Fishing Rod", /obj/item/weapon/material/fishing_rod/modern/strong, 750),
- new /datum/data/mining_equipment("Survival Equipment - Insulated Poncho", /obj/random/thermalponcho, 75)
- )
- //VOREStation Edit End
+ prize_list = list()
+ prize_list["Gear"] = list(
+ EQUIPMENT("Defense Equipment - Smoke Bomb", /obj/item/weapon/grenade/smokebomb, 10),
+ EQUIPMENT("Defense Equipment - Plasteel Machete", /obj/item/weapon/material/knife/machete, 50),
+ EQUIPMENT("Defense Equipment - Razor Drone Deployer", /obj/item/weapon/grenade/spawnergrenade/manhacks/station/locked, 100),
+ EQUIPMENT("Defense Equipment - Sentry Drone Deployer", /obj/item/weapon/grenade/spawnergrenade/ward, 150),
+ EQUIPMENT("Fishing Net", /obj/item/weapon/material/fishing_net, 50),
+ EQUIPMENT("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 100),
+ EQUIPMENT("Durasteel Fishing Rod", /obj/item/weapon/material/fishing_rod/modern/strong, 750),
+ EQUIPMENT("Fulton Beacon", /obj/item/fulton_core, 300),
+ EQUIPMENT("Geiger Counter", /obj/item/device/geiger, 75),
+ EQUIPMENT("GPS Device", /obj/item/device/gps/mining, 10),
+ EQUIPMENT("Jump Boots", /obj/item/clothing/shoes/bhop, 250),
+ EQUIPMENT("Mini-Translocator", /obj/item/device/perfect_tele/one_beacon, 120),
+ EQUIPMENT("Survival Equipment - Insulated Poncho", /obj/random/thermalponcho, 75),
+ )
+ prize_list["Consumables"] = list(
+ EQUIPMENT("1 Marker Beacon", /obj/item/stack/marker_beacon, 1),
+ EQUIPMENT("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 10),
+ EQUIPMENT("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 30),
+ EQUIPMENT("Fulton Pack", /obj/item/extraction_pack, 125),
+ EQUIPMENT("Injector (L) - Glucose", /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, 50),
+ EQUIPMENT("Injector (L) - Panacea", /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity, 50),
+ EQUIPMENT("Injector (L) - Trauma", /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute, 50),
+ EQUIPMENT("Nanopaste Tube", /obj/item/stack/nanopaste, 100),
+ EQUIPMENT("Point Transfer Card", /obj/item/weapon/card/mining_point_card/survey, 50),
+ EQUIPMENT("Shelter Capsule", /obj/item/device/survivalcapsule, 50),
+ EQUIPMENT("Burn Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/burn, 25),
+ EQUIPMENT("Detox Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/detox, 25),
+ EQUIPMENT("Oxy Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, 25),
+ EQUIPMENT("Trauma Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, 25),
+ )
+ prize_list["Digging Tools"] = list(
+ EQUIPMENT("Survey Tools - Shovel", /obj/item/weapon/shovel, 40),
+ EQUIPMENT("Survey Tools - Mechanical Trap", /obj/item/weapon/beartrap, 50),
+ )
+ prize_list["Miscellaneous"] = list(
+ EQUIPMENT("Absinthe", /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, 10),
+ EQUIPMENT("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 10),
+ EQUIPMENT("Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 15),
+ EQUIPMENT("Digital Tablet - Standard", /obj/item/modular_computer/tablet/preset/custom_loadout/standard, 50),
+ EQUIPMENT("Digital Tablet - Advanced", /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, 100),
+ EQUIPMENT("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed, 300),
+ EQUIPMENT("Laser Pointer", /obj/item/device/laser_pointer, 90),
+ EQUIPMENT("Luxury Shelter Capsule", /obj/item/device/survivalcapsule/luxury, 310),
+ EQUIPMENT("Bar Shelter Capsule", /obj/item/device/survivalcapsule/luxurybar, 1000),
+ EQUIPMENT("Plush Toy", /obj/random/plushie, 30),
+ EQUIPMENT("Soap", /obj/item/weapon/soap/nanotrasen, 20),
+ EQUIPMENT("Thalers - 100", /obj/item/weapon/spacecash/c100, 100),
+ EQUIPMENT("Umbrella", /obj/item/weapon/melee/umbrella/random, 20),
+ EQUIPMENT("UAV - Recon Skimmer", /obj/item/device/uav, 40),
-/obj/machinery/mineral/equipment_vendor/survey/interact(mob/user)
- user.set_machine(src)
+ )
+ //VOREStation Edit End
- var/dat
- dat +="
"
- if(istype(inserted_id))
- dat += "You have [inserted_id.survey_points] survey points collected. Eject ID. "
- else
- dat += "No ID inserted. Insert ID. "
- dat += "
"
- dat += " Equipment point cost list:
"
- for(var/datum/data/mining_equipment/prize in prize_list)
- dat += "
Current Selection: [currTag ? currTag : "None"]"
+ return data
- user << browse(dat, "window=destTagScreen;size=450x350")
- onclose(user, "destTagScreen")
+/obj/item/device/destTagger/attack_self(mob/user as mob)
+ tgui_interact(user)
- attack_self(mob/user as mob)
- openwindow(user)
- return
-
- Topic(href, href_list)
- src.add_fingerprint(usr)
- if(href_list["nextTag"] && href_list["nextTag"] in tagger_locations)
- src.currTag = href_list["nextTag"]
- openwindow(usr)
+/obj/item/device/destTagger/tgui_act(action, params)
+ if(..())
+ return TRUE
+ add_fingerprint(usr)
+ switch(action)
+ if("set_tag")
+ var/new_tag = params["tag"]
+ if(!(new_tag in GLOB.tagger_locations))
+ return FALSE
+ currTag = new_tag
+ . = TRUE
/obj/machinery/disposal/deliveryChute
name = "Delivery chute"
@@ -371,94 +375,94 @@
var/c_mode = 0
- New()
- ..()
- spawn(5)
- trunk = locate() in src.loc
- if(trunk)
- trunk.linked = src // link the pipe trunk to self
+/obj/machinery/disposal/deliveryChute/New()
+ ..()
+ spawn(5)
+ trunk = locate() in src.loc
+ if(trunk)
+ trunk.linked = src // link the pipe trunk to self
- interact()
- return
+/obj/machinery/disposal/deliveryChute/interact()
+ return
+/obj/machinery/disposal/deliveryChute/update()
+ return
+
+/obj/machinery/disposal/deliveryChute/Bumped(var/atom/movable/AM) //Go straight into the chute
+ if(istype(AM, /obj/item/projectile) || istype(AM, /obj/effect) || istype(AM, /obj/mecha)) return
+ switch(dir)
+ if(NORTH)
+ if(AM.loc.y != src.loc.y+1) return
+ if(EAST)
+ if(AM.loc.x != src.loc.x+1) return
+ if(SOUTH)
+ if(AM.loc.y != src.loc.y-1) return
+ if(WEST)
+ if(AM.loc.x != src.loc.x-1) return
+
+ if(istype(AM, /obj))
+ var/obj/O = AM
+ O.loc = src
+ else if(istype(AM, /mob))
+ var/mob/M = AM
+ M.loc = src
+ src.flush()
+
+/obj/machinery/disposal/deliveryChute/flush()
+ flushing = 1
+ flick("intake-closing", src)
+ var/obj/structure/disposalholder/H = new() // virtual holder object which actually
+ // travels through the pipes.
+ air_contents = new() // new empty gas resv.
+
+ sleep(10)
+ playsound(src, 'sound/machines/disposalflush.ogg', 50, 0, 0)
+ sleep(5) // wait for animation to finish
+
+ H.init(src) // copy the contents of disposer to holder
+
+ H.start(src) // start the holder processing movement
+ flushing = 0
+ // now reset disposal state
+ flush = 0
+ if(mode == 2) // if was ready,
+ mode = 1 // switch to charging
update()
+ return
+
+/obj/machinery/disposal/deliveryChute/attackby(var/obj/item/I, var/mob/user)
+ if(!I || !user)
return
- Bumped(var/atom/movable/AM) //Go straight into the chute
- if(istype(AM, /obj/item/projectile) || istype(AM, /obj/effect) || istype(AM, /obj/mecha)) return
- switch(dir)
- if(NORTH)
- if(AM.loc.y != src.loc.y+1) return
- if(EAST)
- if(AM.loc.x != src.loc.x+1) return
- if(SOUTH)
- if(AM.loc.y != src.loc.y-1) return
- if(WEST)
- if(AM.loc.x != src.loc.x-1) return
-
- if(istype(AM, /obj))
- var/obj/O = AM
- O.loc = src
- else if(istype(AM, /mob))
- var/mob/M = AM
- M.loc = src
- src.flush()
-
- flush()
- flushing = 1
- flick("intake-closing", src)
- var/obj/structure/disposalholder/H = new() // virtual holder object which actually
- // travels through the pipes.
- air_contents = new() // new empty gas resv.
-
- sleep(10)
- playsound(src, 'sound/machines/disposalflush.ogg', 50, 0, 0)
- sleep(5) // wait for animation to finish
-
- H.init(src) // copy the contents of disposer to holder
-
- H.start(src) // start the holder processing movement
- flushing = 0
- // now reset disposal state
- flush = 0
- if(mode == 2) // if was ready,
- mode = 1 // switch to charging
- update()
- return
-
- attackby(var/obj/item/I, var/mob/user)
- if(!I || !user)
+ if(I.is_screwdriver())
+ if(c_mode==0)
+ c_mode=1
+ playsound(src, I.usesound, 50, 1)
+ to_chat(user, "You remove the screws around the power connection.")
+ return
+ else if(c_mode==1)
+ c_mode=0
+ playsound(src, I.usesound, 50, 1)
+ to_chat(user, "You attach the screws around the power connection.")
+ return
+ else if(istype(I, /obj/item/weapon/weldingtool) && c_mode==1)
+ var/obj/item/weapon/weldingtool/W = I
+ if(W.remove_fuel(0,user))
+ playsound(src, W.usesound, 50, 1)
+ to_chat(user, "You start slicing the floorweld off the delivery chute.")
+ if(do_after(user,20 * W.toolspeed))
+ if(!src || !W.isOn()) return
+ to_chat(user, "You sliced the floorweld off the delivery chute.")
+ var/obj/structure/disposalconstruct/C = new (src.loc)
+ C.ptype = 8 // 8 = Delivery chute
+ C.update()
+ C.anchored = 1
+ C.density = 1
+ qdel(src)
+ return
+ else
+ to_chat(user, "You need more welding fuel to complete this task.")
return
-
- if(I.is_screwdriver())
- if(c_mode==0)
- c_mode=1
- playsound(src, I.usesound, 50, 1)
- to_chat(user, "You remove the screws around the power connection.")
- return
- else if(c_mode==1)
- c_mode=0
- playsound(src, I.usesound, 50, 1)
- to_chat(user, "You attach the screws around the power connection.")
- return
- else if(istype(I, /obj/item/weapon/weldingtool) && c_mode==1)
- var/obj/item/weapon/weldingtool/W = I
- if(W.remove_fuel(0,user))
- playsound(src, W.usesound, 50, 1)
- to_chat(user, "You start slicing the floorweld off the delivery chute.")
- if(do_after(user,20 * W.toolspeed))
- if(!src || !W.isOn()) return
- to_chat(user, "You sliced the floorweld off the delivery chute.")
- var/obj/structure/disposalconstruct/C = new (src.loc)
- C.ptype = 8 // 8 = Delivery chute
- C.update()
- C.anchored = 1
- C.density = 1
- qdel(src)
- return
- else
- to_chat(user, "You need more welding fuel to complete this task.")
- return
/obj/machinery/disposal/deliveryChute/Destroy()
if(trunk)
diff --git a/code/modules/research/designs/circuits/circuits.dm b/code/modules/research/designs/circuits/circuits.dm
index 425223ffe7a..008d1f486b5 100644
--- a/code/modules/research/designs/circuits/circuits.dm
+++ b/code/modules/research/designs/circuits/circuits.dm
@@ -494,7 +494,7 @@ CIRCUITS BELOW
id = "durand_main"
req_tech = list(TECH_DATA = 4)
materials = list("glass" = 2000, MAT_GRAPHITE = 1250)
- chemicals = list("pacid" = 20)
+ chemicals = list("sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/durand/main
sort_string = "NAADA"
@@ -503,7 +503,7 @@ CIRCUITS BELOW
id = "durand_peri"
req_tech = list(TECH_DATA = 4)
materials = list("glass" = 2000, MAT_GRAPHITE = 1250)
- chemicals = list("pacid" = 20)
+ chemicals = list("sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/durand/peripherals
sort_string = "NAADB"
@@ -512,7 +512,7 @@ CIRCUITS BELOW
id = "durand_targ"
req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
materials = list("glass" = 2000, MAT_GRAPHITE = 1250)
- chemicals = list("pacid" = 20)
+ chemicals = list("sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/durand/targeting
sort_string = "NAADC"
diff --git a/code/modules/research/mechfab_designs.dm b/code/modules/research/mechfab_designs.dm
index a5031055c34..8e7f31b7319 100644
--- a/code/modules/research/mechfab_designs.dm
+++ b/code/modules/research/mechfab_designs.dm
@@ -184,49 +184,49 @@
name = "Durand Torso"
id = "durand_torso"
build_path = /obj/item/mecha_parts/part/durand_torso
- time = 60
+ time = 30
materials = list(DEFAULT_WALL_MATERIAL = 41250, MAT_PLASTEEL = 15000, "silver" = 7500)
/datum/design/item/mechfab/durand/head
name = "Durand Head"
id = "durand_head"
build_path = /obj/item/mecha_parts/part/durand_head
- time = 40
+ time = 20
materials = list(DEFAULT_WALL_MATERIAL = 18750, "glass" = 7500, "silver" = 2250)
/datum/design/item/mechfab/durand/left_arm
name = "Durand Left Arm"
id = "durand_left_arm"
build_path = /obj/item/mecha_parts/part/durand_left_arm
- time = 40
+ time = 20
materials = list(DEFAULT_WALL_MATERIAL = 26250, "silver" = 2250)
/datum/design/item/mechfab/durand/right_arm
name = "Durand Right Arm"
id = "durand_right_arm"
build_path = /obj/item/mecha_parts/part/durand_right_arm
- time = 40
+ time = 20
materials = list(DEFAULT_WALL_MATERIAL = 26250, "silver" = 2250)
/datum/design/item/mechfab/durand/left_leg
name = "Durand Left Leg"
id = "durand_left_leg"
build_path = /obj/item/mecha_parts/part/durand_left_leg
- time = 40
+ time = 20
materials = list(DEFAULT_WALL_MATERIAL = 30000, "silver" = 2250)
/datum/design/item/mechfab/durand/right_leg
name = "Durand Right Leg"
id = "durand_right_leg"
build_path = /obj/item/mecha_parts/part/durand_right_leg
- time = 40
+ time = 20
materials = list(DEFAULT_WALL_MATERIAL = 30000, "silver" = 2250)
/datum/design/item/mechfab/durand/armour
name = "Durand Armour Plates"
id = "durand_armour"
build_path = /obj/item/mecha_parts/part/durand_armour
- time = 90
+ time = 60
materials = list(DEFAULT_WALL_MATERIAL = 27500, MAT_PLASTEEL = 10000, "uranium" = 7500)
/datum/design/item/mechfab/janus
@@ -1043,7 +1043,7 @@
/datum/design/item/mechfab/exointernal
category = "Exosuit Internals"
- time = 120
+ time = 30
req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 3)
/datum/design/item/mechfab/exointernal/stan_armor
diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm
index bbcda60927d..81f888155d1 100644
--- a/code/modules/research/message_server.dm
+++ b/code/modules/research/message_server.dm
@@ -113,15 +113,15 @@ var/global/list/obj/machinery/message_server/message_servers = list()
/obj/machinery/message_server/proc/send_rc_message(var/recipient = "",var/sender = "",var/message = "",var/stamp = "", var/id_auth = "", var/priority = 1)
rc_msgs += new/datum/data_rc_msg(recipient,sender,message,stamp,id_auth)
- var/authmsg = "[message] "
+ var/authmsg = "[message]\n"
if (id_auth)
- authmsg += "[id_auth] "
+ authmsg += "([id_auth])\n"
if (stamp)
- authmsg += "[stamp] "
+ authmsg += "([stamp])\n"
for (var/obj/machinery/requests_console/Console in allConsoles)
if (ckey(Console.department) == ckey(recipient))
if(Console.inoperable())
- Console.message_log += "Message lost due to console failure. Please contact [station_name()] system adminsitrator or AI for technical assistance. "
+ Console.message_log += list(list("Message lost due to console failure.","Please contact [station_name()] system adminsitrator or AI for technical assistance."))
continue
if(Console.newmessagepriority < priority)
Console.newmessagepriority = priority
@@ -131,12 +131,12 @@ var/global/list/obj/machinery/message_server/message_servers = list()
if(!Console.silent)
playsound(Console, 'sound/machines/twobeep.ogg', 50, 1)
Console.audible_message(text("[bicon(Console)] *The Requests Console beeps: 'PRIORITY Alert in [sender]'"),,5)
- Console.message_log += "High Priority message from [sender] [authmsg]"
+ Console.message_log += list(list("High Priority message from [sender]", "[authmsg]"))
else
if(!Console.silent)
playsound(Console, 'sound/machines/twobeep.ogg', 50, 1)
Console.audible_message(text("[bicon(Console)] *The Requests Console beeps: 'Message from [sender]'"),,4)
- Console.message_log += "Message from [sender] [authmsg]"
+ Console.message_log += list(list("Message from [sender]", "[authmsg]"))
Console.set_light(2)
diff --git a/code/modules/research/prosfab_designs.dm b/code/modules/research/prosfab_designs.dm
index da9cc055091..7882be40b50 100644
--- a/code/modules/research/prosfab_designs.dm
+++ b/code/modules/research/prosfab_designs.dm
@@ -193,6 +193,34 @@
materials = list(DEFAULT_WALL_MATERIAL = 5625, "glass" = 5625)
// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2)
+/datum/design/item/prosfab/pros/internal/hydraulic
+ name = "Hydraulic Hub"
+ id = "pros_hydraulic"
+ build_path = /obj/item/organ/internal/heart/machine
+ time = 15
+ materials = list(DEFAULT_WALL_MATERIAL = 7500, MAT_PLASTIC = 3000)
+
+/datum/design/item/prosfab/pros/internal/reagcycler
+ name = "Reagent Cycler"
+ id = "pros_reagcycler"
+ build_path = /obj/item/organ/internal/stomach/machine
+ time = 15
+ materials = list(DEFAULT_WALL_MATERIAL = 7500, MAT_PLASTIC = 3000)
+
+/datum/design/item/prosfab/pros/internal/heatsink
+ name = "Heatsink"
+ id = "pros_heatsink"
+ build_path = /obj/item/organ/internal/robotic/heatsink
+ time = 15
+ materials = list(DEFAULT_WALL_MATERIAL = 7500, MAT_PLASTIC = 3000)
+
+/datum/design/item/prosfab/pros/internal/diagnostic
+ name = "Diagnostic Controller"
+ id = "pros_diagnostic"
+ build_path = /obj/item/organ/internal/robotic/diagnostic
+ time = 15
+ materials = list(DEFAULT_WALL_MATERIAL = 7500, MAT_PLASTIC = 3000)
+
/datum/design/item/prosfab/pros/internal/heart
name = "Prosthetic Heart"
id = "pros_heart"
diff --git a/code/modules/rogueminer_vr/zone_console.dm b/code/modules/rogueminer_vr/zone_console.dm
index be367629ca5..56544479a3f 100644
--- a/code/modules/rogueminer_vr/zone_console.dm
+++ b/code/modules/rogueminer_vr/zone_console.dm
@@ -36,17 +36,19 @@
add_fingerprint(user)
if(stat & (BROKEN|NOPOWER))
return
- user.set_machine(src)
- ui_interact(user)
-
-/obj/machinery/computer/roguezones/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
- user.set_machine(src)
+ tgui_interact(user)
+/obj/machinery/computer/roguezones/tgui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "RogueZones", name)
+ ui.open()
+/obj/machinery/computer/roguezones/tgui_data(mob/user)
var/chargePercent = min(100, ((((world.time - rm_controller.last_scan) / 10) / 60) / rm_controller.scan_wait) * 100)
var/curZoneOccupied = rm_controller.current_zone ? rm_controller.current_zone.is_occupied() : 0
- var/list/data = list()
+ var/list/data = ..()
data["timeout_percent"] = chargePercent
data["diffstep"] = rm_controller.diffstep
data["difficulty"] = rm_controller.diffstep_strs[rm_controller.diffstep]
@@ -80,32 +82,24 @@
// Permit emergency recall of the shuttle if its stranded in a zone with just dead people.
data["can_recall_shuttle"] = (shuttle_control && (shuttle_control.z in using_map.belter_belt_z) && !curZoneOccupied)
+ return data
- ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
- if (!ui)
- ui = new(user, src, ui_key, "zone_console.tmpl", src.name, 600, 400)
- ui.set_initial_data(data)
- ui.open()
- ui.set_auto_update(5)
-
-/obj/machinery/computer/roguezones/Topic(href, href_list)
+/obj/machinery/computer/roguezones/tgui_act(action, list/params)
if(..())
- return 1
- usr.set_machine(src)
- if (href_list["action"])
- switch(href_list["action"])
- if ("scan_for_new")
- scan_for_new_zone()
- if ("point_at_old")
- point_at_old_zone()
- if ("recall_shuttle")
- failsafe_shuttle_recall()
+ return TRUE
+ switch(action)
+ if("scan_for_new")
+ scan_for_new_zone()
+ . = TRUE
+ if("recall_shuttle")
+ failsafe_shuttle_recall()
+ . = TRUE
- src.add_fingerprint(usr)
- SSnanoui.update_uis(src)
+ add_fingerprint(usr)
/obj/machinery/computer/roguezones/proc/scan_for_new_zone()
- if(scanning) return
+ if(scanning)
+ return
//Set some kinda scanning var to pause UI input on console
rm_controller.last_scan = world.time
@@ -137,9 +131,6 @@
return
-/obj/machinery/computer/roguezones/proc/point_at_old_zone()
-
- return
/obj/machinery/computer/roguezones/proc/failsafe_shuttle_recall()
if(!shuttle_control)
diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm
index 4920ffb5131..a66c62750a1 100644
--- a/code/modules/shieldgen/emergency_shield.dm
+++ b/code/modules/shieldgen/emergency_shield.dm
@@ -1,5 +1,5 @@
/obj/machinery/shield
- name = "Emergency energy shield"
+ name = "emergency energy shield"
desc = "An energy shield used to contain hull breaches."
icon = 'icons/effects/effects.dmi'
icon_state = "shield-old"
diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm
index 2a6a859c43e..b510c8b36b2 100644
--- a/code/modules/shieldgen/sheldwallgen.dm
+++ b/code/modules/shieldgen/sheldwallgen.dm
@@ -1,6 +1,6 @@
////FIELD GEN START //shameless copypasta from fieldgen, powersink, and grille
/obj/machinery/shieldwallgen
- name = "Shield Generator"
+ name = "shield generator"
desc = "A shield generator."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "Shield_Gen"
diff --git a/code/modules/shieldgen/shield_generator.dm b/code/modules/shieldgen/shield_generator.dm
index 824eb86f66f..cc3d2f1b25b 100644
--- a/code/modules/shieldgen/shield_generator.dm
+++ b/code/modules/shieldgen/shield_generator.dm
@@ -400,8 +400,14 @@
spinup_counter = round(spinup_delay / idle_multiplier)
update_icon()
-/obj/machinery/power/shield_generator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
- var/data[0]
+/obj/machinery/power/shield_generator/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "OvermapShieldGenerator", name) // 500, 800
+ ui.open()
+
+/obj/machinery/power/shield_generator/tgui_data(mob/user)
+ var/list/data = list()
data["running"] = running
data["modes"] = get_flag_descriptions()
@@ -427,12 +433,7 @@
data["idle_valid_values"] = idle_valid_values
data["spinup_counter"] = spinup_counter
- ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
- if (!ui)
- ui = new(user, src, ui_key, "shield_generator.tmpl", src.name, 500, 800)
- ui.set_initial_data(data)
- ui.open()
- ui.set_auto_update(1)
+ return data
/obj/machinery/power/shield_generator/attack_hand(mob/user)
if((. = ..()))
@@ -440,99 +441,99 @@
if(panel_open && Adjacent(user))
wires.Interact(user)
return
- if(CanUseTopic(user, global.default_state) > STATUS_CLOSE)
- ui_interact(user)
- return TRUE
+ tgui_interact(user)
-/obj/machinery/power/shield_generator/CanUseTopic(var/mob/user)
+/obj/machinery/power/shield_generator/tgui_status(mob/user)
if(issilicon(user) && !Adjacent(user) && ai_control_disabled)
return STATUS_UPDATE
if(panel_open)
return min(..(), STATUS_DISABLED)
return ..()
-/obj/machinery/power/shield_generator/Topic(href, href_list, datum/topic_state/state = default_state)
- if((. = ..()))
- return
+/obj/machinery/power/shield_generator/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
+ if(..())
+ return TRUE
- if(href_list["begin_shutdown"])
- if(running < SHIELD_RUNNING) // Discharging or off
- return
- var/alert = alert(usr, "Are you sure you wish to do this? It will drain the power inside the internal storage rapidly.", "Are you sure?", "Yes", "No")
- if(!CanInteract(usr, state))
- return
- if(running < SHIELD_RUNNING)
- return
- if(alert == "Yes")
- set_idle(TRUE) // do this first to clear the field
- running = SHIELD_DISCHARGING
- return TOPIC_REFRESH
+ switch(action)
+ if("begin_shutdown")
+ if(running < SHIELD_RUNNING) // Discharging or off
+ return
+ var/alert = alert(usr, "Are you sure you wish to do this? It will drain the power inside the internal storage rapidly.", "Are you sure?", "Yes", "No")
+ if(tgui_status(usr, state) != STATUS_INTERACTIVE)
+ return
+ if(running < SHIELD_RUNNING)
+ return
+ if(alert == "Yes")
+ set_idle(TRUE) // do this first to clear the field
+ running = SHIELD_DISCHARGING
+ return TRUE
- if(href_list["start_generator"])
- if(offline_for)
- return
- set_idle(TRUE)
- return TOPIC_REFRESH
+ if("start_generator")
+ if(offline_for)
+ return
+ set_idle(TRUE)
+ return TRUE
- if(href_list["toggle_idle"])
- if(running < SHIELD_RUNNING)
- return TOPIC_HANDLED
- set_idle(text2num(href_list["toggle_idle"]))
- return TOPIC_REFRESH
+ if("toggle_idle")
+ if(running < SHIELD_RUNNING)
+ return TRUE
+ set_idle(text2num(params["toggle_idle"]))
+ return TRUE
- // Instantly drops the shield, but causes a cooldown before it may be started again. Also carries a risk of EMP at high charge.
- if(href_list["emergency_shutdown"])
- if(!running)
- return TOPIC_HANDLED
+ // Instantly drops the shield, but causes a cooldown before it may be started again. Also carries a risk of EMP at high charge.
+ if("emergency_shutdown")
+ if(!running)
+ return TRUE
- var/choice = input(usr, "Are you sure that you want to initiate an emergency shield shutdown? This will instantly drop the shield, and may result in unstable release of stored electromagnetic energy. Proceed at your own risk.") in list("Yes", "No")
- if((choice != "Yes") || !running)
- return TOPIC_HANDLED
+ var/choice = input(usr, "Are you sure that you want to initiate an emergency shield shutdown? This will instantly drop the shield, and may result in unstable release of stored electromagnetic energy. Proceed at your own risk.") in list("Yes", "No")
+ if((choice != "Yes") || !running)
+ return TRUE
- // If the shield would take 5 minutes to disperse and shut down using regular methods, it will take x1.5 (7 minutes and 30 seconds) of this time to cool down after emergency shutdown
- offline_for = round(current_energy / (SHIELD_SHUTDOWN_DISPERSION_RATE / 1.5))
- var/old_energy = current_energy
- shutdown_field()
- log_and_message_admins("has triggered \the [src]'s emergency shutdown!", usr)
- spawn()
- empulse(src, old_energy / 60000000, old_energy / 32000000, 1) // If shields are charged at 450 MJ, the EMP will be 7.5, 14.0625. 90 MJ, 1.5, 2.8125
- old_energy = 0
+ // If the shield would take 5 minutes to disperse and shut down using regular methods, it will take x1.5 (7 minutes and 30 seconds) of this time to cool down after emergency shutdown
+ offline_for = round(current_energy / (SHIELD_SHUTDOWN_DISPERSION_RATE / 1.5))
+ var/old_energy = current_energy
+ shutdown_field()
+ log_and_message_admins("has triggered \the [src]'s emergency shutdown!", usr)
+ spawn()
+ empulse(src, old_energy / 60000000, old_energy / 32000000, 1) // If shields are charged at 450 MJ, the EMP will be 7.5, 14.0625. 90 MJ, 1.5, 2.8125
+ old_energy = 0
- return TOPIC_REFRESH
+ return TRUE
if(mode_changes_locked)
- return TOPIC_REFRESH
+ return TRUE
- if(href_list["set_range"])
- var/new_range = input(usr, "Enter new field range (1-[world.maxx]). Leave blank to cancel.", "Field Radius Control", field_radius) as num
- if(!new_range)
- return TOPIC_HANDLED
- target_radius = between(1, new_range, world.maxx)
- return TOPIC_REFRESH
+ switch(action)
+ if("set_range")
+ var/new_range = input(usr, "Enter new field range (1-[world.maxx]). Leave blank to cancel.", "Field Radius Control", field_radius) as num
+ if(!new_range)
+ return TRUE
+ target_radius = between(1, new_range, world.maxx)
+ return TRUE
- if(href_list["set_input_cap"])
- var/new_cap = round(input(usr, "Enter new input cap (in kW). Enter 0 or nothing to disable input cap.", "Generator Power Control", round(input_cap / 1000)) as num)
- if(!new_cap)
- input_cap = 0
- return
- input_cap = max(0, new_cap) * 1000
- return TOPIC_REFRESH
+ if("set_input_cap")
+ var/new_cap = round(input(usr, "Enter new input cap (in kW). Enter 0 or nothing to disable input cap.", "Generator Power Control", round(input_cap / 1000)) as num)
+ if(!new_cap)
+ input_cap = 0
+ return
+ input_cap = max(0, new_cap) * 1000
+ return TRUE
- if(href_list["toggle_mode"])
- // Toggling hacked-only modes requires the hacked var to be set to 1
- if((text2num(href_list["toggle_mode"]) & (MODEFLAG_BYPASS | MODEFLAG_OVERCHARGE)) && !hacked)
- return TOPIC_HANDLED
+ if("toggle_mode")
+ // Toggling hacked-only modes requires the hacked var to be set to 1
+ if((text2num(params["toggle_mode"]) & (MODEFLAG_BYPASS | MODEFLAG_OVERCHARGE)) && !hacked)
+ return TRUE
- toggle_flag(text2num(href_list["toggle_mode"]))
- return TOPIC_REFRESH
+ toggle_flag(text2num(params["toggle_mode"]))
+ return TRUE
- if(href_list["switch_idle"])
- if(running == SHIELD_SPINNING_UP)
- return TOPIC_REFRESH
- var/new_idle = text2num(href_list["switch_idle"])
- if(new_idle in idle_valid_values)
- idle_multiplier = new_idle
- return TOPIC_REFRESH
+ if("switch_idle")
+ if(running == SHIELD_SPINNING_UP)
+ return TRUE
+ var/new_idle = text2num(params["switch_idle"])
+ if(new_idle in idle_valid_values)
+ idle_multiplier = new_idle
+ return TRUE
/obj/machinery/power/shield_generator/proc/field_integrity()
if(full_shield_strength)
diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm
index 3e3655ca5aa..93688365c0b 100644
--- a/code/modules/shuttles/shuttle_console.dm
+++ b/code/modules/shuttles/shuttle_console.dm
@@ -8,8 +8,8 @@
var/shuttle_tag // Used to coordinate data in shuttle controller.
var/hacked = 0 // Has been emagged, no access restrictions.
- var/ui_template = "shuttle_control_console.tmpl"
-
+ var/skip_act = FALSE
+ var/tgui_subtemplate = "ShuttleControlConsoleDefault"
/obj/machinery/computer/shuttle_control/attack_hand(user as mob)
if(..(user))
@@ -19,9 +19,9 @@
to_chat(user, "Access Denied.")
return 1
- ui_interact(user)
+ tgui_interact(user)
-/obj/machinery/computer/shuttle_control/proc/get_ui_data(var/datum/shuttle/autodock/shuttle)
+/obj/machinery/computer/shuttle_control/proc/shuttlerich_tgui_data(var/datum/shuttle/autodock/shuttle)
var/shuttle_state
switch(shuttle.moving_status)
if(SHUTTLE_IDLE) shuttle_state = "idle"
@@ -29,7 +29,7 @@
if(SHUTTLE_INTRANSIT) shuttle_state = "in_transit"
var/shuttle_status
- switch (shuttle.process_state)
+ switch(shuttle.process_state)
if(IDLE_STATE)
var/cannot_depart = shuttle.current_location.cannot_depart(shuttle)
if (shuttle.in_use)
@@ -55,7 +55,8 @@
"can_launch" = shuttle.can_launch(),
"can_cancel" = shuttle.can_cancel(),
"can_force" = shuttle.can_force(),
- "docking_codes" = shuttle.docking_codes
+ "docking_codes" = shuttle.docking_codes,
+ "subtemplate" = tgui_subtemplate,
)
// This is a subset of the actual checks; contains those that give messages to the user.
@@ -74,59 +75,54 @@
return FALSE
return TRUE
-/obj/machinery/computer/shuttle_control/Topic(href, href_list)
- if((. = ..()))
+/obj/machinery/computer/shuttle_control/tgui_act(action, list/params)
+ if(..())
+ return TRUE
+ if(skip_act)
return
- usr.set_machine(src)
- src.add_fingerprint(usr)
+ add_fingerprint(usr)
var/datum/shuttle/autodock/shuttle = SSshuttles.shuttles[shuttle_tag]
- if(!shuttle)
- to_chat(usr, "Unable to establish link with the shuttle.")
- return handle_topic_href(shuttle, href_list, usr)
-
-/obj/machinery/computer/shuttle_control/proc/handle_topic_href(var/datum/shuttle/autodock/shuttle, var/list/href_list, var/user)
if(!istype(shuttle))
- return TOPIC_NOACTION
+ to_chat(usr, "Unable to establish link with the shuttle.")
+ return TRUE
- if(href_list["move"])
- if(can_move(shuttle, user))
- shuttle.launch(src)
- return TOPIC_REFRESH
- return TOPIC_HANDLED
+ switch(action)
+ if("move")
+ if(can_move(shuttle, usr))
+ shuttle.launch(src)
+ return TRUE
- if(href_list["force"])
- if(can_move(shuttle, user))
- shuttle.force_launch(src)
- return TOPIC_REFRESH
- return TOPIC_HANDLED
+ if("force")
+ if(can_move(shuttle, usr))
+ shuttle.force_launch(src)
+ return TRUE
- if(href_list["cancel"])
- shuttle.cancel_launch(src)
- return TOPIC_REFRESH
+ if("cancel")
+ shuttle.cancel_launch(src)
+ return TRUE
- if(href_list["set_codes"])
- var/newcode = input("Input new docking codes", "Docking codes", shuttle.docking_codes) as text|null
- if (newcode && CanInteract(usr, global.default_state))
- shuttle.set_docking_codes(uppertext(newcode))
- return TOPIC_REFRESH
+ if("set_codes")
+ var/newcode = input("Input new docking codes", "Docking codes", shuttle.docking_codes) as text|null
+ if(newcode && !..())
+ shuttle.set_docking_codes(uppertext(newcode))
+ return TRUE
+
+/obj/machinery/computer/shuttle_control/tgui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "ShuttleControl", "[shuttle_tag] Shuttle Control") // 470, 360
+ ui.open()
// We delegate populating data to another proc to make it easier for overriding types to add their data.
-/obj/machinery/computer/shuttle_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+/obj/machinery/computer/shuttle_control/tgui_data(mob/user)
var/datum/shuttle/autodock/shuttle = SSshuttles.shuttles[shuttle_tag]
- if (!istype(shuttle))
+ if(!istype(shuttle))
to_chat(user, "Unable to establish link with the shuttle.")
return
- var/list/data = get_ui_data(shuttle)
-
- ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
- if (!ui)
- ui = new(user, src, ui_key, ui_template, "[shuttle_tag] Shuttle Control", 470, 360)
- ui.set_initial_data(data)
- ui.open()
- ui.set_auto_update(1)
+ return shuttlerich_tgui_data(shuttle)
// Call to set the linked shuttle tag; override to add behaviour to shuttle tag changes
/obj/machinery/computer/shuttle_control/proc/set_shuttle_tag(var/new_shuttle_tag)
diff --git a/code/modules/shuttles/shuttle_console_multi.dm b/code/modules/shuttles/shuttle_console_multi.dm
index 9a724a9ab75..9226caebfb7 100644
--- a/code/modules/shuttles/shuttle_console_multi.dm
+++ b/code/modules/shuttles/shuttle_console_multi.dm
@@ -1,8 +1,8 @@
/obj/machinery/computer/shuttle_control/multi
circuit = /obj/item/weapon/circuitboard/shuttle_console/multi
- ui_template = "shuttle_control_console_multi.tmpl"
+ tgui_subtemplate = "ShuttleControlConsoleMulti"
-/obj/machinery/computer/shuttle_control/multi/get_ui_data(var/datum/shuttle/autodock/multi/shuttle)
+/obj/machinery/computer/shuttle_control/multi/shuttlerich_tgui_data(var/datum/shuttle/autodock/multi/shuttle)
. = ..()
if(istype(shuttle))
. += list(
@@ -14,22 +14,28 @@
// "engines_charging" = ((shuttle.last_move + (shuttle.cooldown SECONDS)) > world.time), // Replaced by longer warmup_time
)
-/obj/machinery/computer/shuttle_control/multi/handle_topic_href(var/datum/shuttle/autodock/multi/shuttle, var/list/href_list)
- if((. = ..()) != null)
- return
+/obj/machinery/computer/shuttle_control/multi/tgui_act(action, list/params)
+ if(..())
+ return TRUE
- if(href_list["pick"])
- var/dest_key = input("Choose shuttle destination", "Shuttle Destination") as null|anything in shuttle.get_destinations()
- if(dest_key && CanInteract(usr, global.default_state))
- shuttle.set_destination(dest_key, usr)
- return TOPIC_REFRESH
+ var/datum/shuttle/autodock/multi/shuttle = SSshuttles.shuttles[shuttle_tag]
+ if(!istype(shuttle))
+ to_chat(usr, "Unable to establish link with the shuttle.")
+ return TRUE
- if(href_list["toggle_cloaked"])
- if(!shuttle.can_cloak)
- return TOPIC_HANDLED
- shuttle.cloaked = !shuttle.cloaked
- if(shuttle.legit)
- to_chat(usr, "Ship ATC inhibitor systems have been [(shuttle.cloaked ? "activated. The station will not" : "deactivated. The station will")] be notified of our arrival.")
- else
- to_chat(usr, "Ship stealth systems have been [(shuttle.cloaked ? "activated. The station will not" : "deactivated. The station will")] be warned of our arrival.")
- return TOPIC_REFRESH
+ switch(action)
+ if("pick")
+ var/dest_key = input("Choose shuttle destination", "Shuttle Destination") as null|anything in shuttle.get_destinations()
+ if(dest_key && CanInteract(usr, global.default_state))
+ shuttle.set_destination(dest_key, usr)
+ return TRUE
+
+ if("toggle_cloaked")
+ if(!shuttle.can_cloak)
+ return TRUE
+ shuttle.cloaked = !shuttle.cloaked
+ if(shuttle.legit)
+ to_chat(usr, "Ship ATC inhibitor systems have been [(shuttle.cloaked ? "activated. The station will not" : "deactivated. The station will")] be notified of our arrival.")
+ else
+ to_chat(usr, "Ship stealth systems have been [(shuttle.cloaked ? "activated. The station will not" : "deactivated. The station will")] be warned of our arrival.")
+ return TRUE
diff --git a/code/modules/shuttles/shuttles_web.dm b/code/modules/shuttles/shuttles_web.dm
index 00d9344b004..acc7dc34616 100644
--- a/code/modules/shuttles/shuttles_web.dm
+++ b/code/modules/shuttles/shuttles_web.dm
@@ -167,6 +167,8 @@
icon_screen = "flight_center"
var/list/my_doors //Should be list("id_tag" = "Pretty Door Name", ...)
var/list/my_sensors //Should be list("id_tag" = "Pretty Sensor Name", ...)
+ tgui_subtemplate = "ShuttleControlConsoleWeb"
+ skip_act = TRUE
// Note - Searching own area for doors/sensors is fine for legacy web shuttles as they are single-area.
// However if this code is copied to future multi-area shuttles, should search in all shuttle areas
@@ -205,80 +207,9 @@
return ..()
-
-// Fairly copypasta-y.
-/obj/machinery/computer/shuttle_control/web/attack_hand(mob/user)
- if(..(user))
- return
- src.add_fingerprint(user)
-
- ui_interact(user)
-
- /*
- // If nanoUI falls over and you want a non-nanoUI UI, feel free to uncomment this section.
- var/datum/shuttle/autodock/web_shuttle/WS = shuttle_controller.shuttles[shuttle_tag]
- if(!istype(WS))
- message_admins("ERROR: Shuttle computer ([src]) ([shuttle_tag]) could not find their shuttle in the shuttles list.")
- return
-
- var/list/dat = list()
- dat += "
[shuttle_tag] Ship Control"
-
- if(WS.moving_status != SHUTTLE_IDLE)
- dat += "Location: Moving "
- else
- var/area/areacheck = get_area(src)
- dat += "Location: [areacheck.name] "
-
- if((WS.last_move + WS.cooldown) > world.time)
- dat += "Engines charging. "
- else
- dat += "Engines ready. "
-
- if(WS.can_cloak)
- dat += " Toggle cloaking field "
-
- for(var/datum/shuttle_route/route in WS.current_destination.routes)
- dat += "[route.display_route(WS.current_destination)] "
-
-
- //Docking
- dat += "
"
- if(WS.skip_docking_checks())
- dat += "Docking Status: Not in use."
- else
- var/override_en = WS.docking_controller.override_enabled
- var/docking_status = WS.docking_controller.get_docking_status()
-
- dat += "Docking Status: "
- switch(docking_status)
- if("undocked")
- dat += "Undocked"
- if("docking")
- dat += "Docking"
- if("undocking")
- dat += "Undocking"
- if("docked")
- dat += "Docked"
-
- if(override_en)
- dat += " (Override Enabled)"
-
- dat += ". \[Refresh\]
"
-
- switch(docking_status)
- if("undocked")
- dat += "Dock"
- if("docked")
- dat += "Undock"
- dat += "
"
-
- user << browse(dat.Join(), "window=[shuttle_tag]shuttlecontrol;size=300x300")
- */
-
-
-/obj/machinery/computer/shuttle_control/web/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
- var/data[0]
+/obj/machinery/computer/shuttle_control/web/tgui_data(mob/user)
+ var/list/data = list()
+
var/list/routes[0]
var/datum/shuttle/autodock/web_shuttle/shuttle = SSshuttles.shuttles[shuttle_tag]
if(!istype(shuttle))
@@ -286,7 +217,7 @@
return
var/list/R = shuttle.web_master.get_available_routes()
- for (var/i = 1 to length(R))
+ for(var/i = 1 to length(R))
var/datum/shuttle_route/route = R[i]
var/travel_time = null
var/travel_modifier = shuttle.flight_time_modifier
@@ -313,7 +244,6 @@
if(SHUTTLE_INTRANSIT)
shuttle_state = "in_transit"
-
// For the progress bar.
var/elapsed_time = world.time - shuttle.depart_time
var/total_time = shuttle.arrive_time - shuttle.depart_time
@@ -322,7 +252,6 @@
if(total_time) // Need to check or we might divide by zero.
percent_finished = (elapsed_time / total_time) * 100
-
var/list/doors = list()
if(my_doors)
for(var/doorname in my_doors)
@@ -356,111 +285,90 @@
"autopilot" = shuttle.autopilot ? 1 : 0,
"can_rename" = shuttle.can_rename ? 1 : 0,
"doors" = doors,
- "sensors" = sensors
+ "sensors" = sensors,
+ "subtemplate" = tgui_subtemplate,
)
- ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
+ return data
- if(!ui)
- ui = new(user, src, ui_key, "flight.tmpl", "[shuttle.visible_name] Flight Computer", 500, 500)
- ui.set_initial_data(data)
- ui.open()
- ui.set_auto_update(1)
-
-
-/obj/machinery/computer/shuttle_control/web/Topic(href, href_list)
- if((. = ..()))
- return
-
- usr.set_machine(src)
- src.add_fingerprint(usr)
+/obj/machinery/computer/shuttle_control/web/tgui_act(action, list/params)
+ if(..())
+ return TRUE
var/datum/shuttle/autodock/web_shuttle/WS = SSshuttles.shuttles[shuttle_tag]
if(!istype(WS))
message_admins("ERROR: Shuttle computer ([src]) ([shuttle_tag]) could not find their shuttle in the shuttles list.")
return
- if(href_list["refresh"])
- ui_interact(usr)
-
- if (WS.moving_status != SHUTTLE_IDLE)
+ if(WS.moving_status != SHUTTLE_IDLE)
to_chat(usr, "[WS.visible_name] is busy moving.")
return
- if(href_list["rename_command"])
- WS.rename_shuttle(usr)
+ switch(action)
+ if("rename_command")
+ WS.rename_shuttle(usr)
- if(href_list["dock_command"])
- if(WS.autopilot)
- to_chat(usr, "The autopilot must be disabled before you can control the vessel manually.")
- return
- WS.dock()
+ if("dock_command")
+ if(WS.autopilot)
+ to_chat(usr, "The autopilot must be disabled before you can control the vessel manually.")
+ return
+ WS.dock()
- if(href_list["undock_command"])
- if(WS.autopilot)
- to_chat(usr, "The autopilot must be disabled before you can control the vessel manually.")
- return
- WS.undock()
+ if("undock_command")
+ if(WS.autopilot)
+ to_chat(usr, "The autopilot must be disabled before you can control the vessel manually.")
+ return
+ WS.undock()
- if(href_list["cloak_command"])
- if(!WS.can_cloak)
- return
- WS.cloaked = TRUE
- to_chat(usr, "Ship stealth systems have been activated. The station will not be warned of our arrival.")
+ if("toggle_cloaking")
+ if(!WS.can_cloak)
+ return
+ WS.cloaked = !WS.cloaked
+ if(WS.cloaked)
+ to_chat(usr, "Ship stealth systems have been activated. The station will not be warned of our arrival.")
+ else
+ to_chat(usr, "Ship stealth systems have been deactivated. The station will be warned of our arrival.")
- if(href_list["uncloak_command"])
- if(!WS.can_cloak)
- return
- WS.cloaked = FALSE
- to_chat(usr, "Ship stealth systems have been deactivated. The station will be warned of our arrival.")
+ if("toggle_autopilot")
+ WS.adjust_autopilot(!WS.autopilot)
- if(href_list["autopilot_on_command"])
- WS.adjust_autopilot(TRUE)
+ if("traverse")
+ if(WS.autopilot)
+ to_chat(usr, "The autopilot must be disabled before you can control the vessel manually.")
+ return
- if(href_list["autopilot_off_command"])
- WS.adjust_autopilot(FALSE)
+ if((WS.last_move + WS.cooldown) > world.time)
+ to_chat(usr, "The ship's drive is inoperable while the engines are charging.")
+ return
- if(href_list["traverse"])
- if(WS.autopilot)
- to_chat(usr, "The autopilot must be disabled before you can control the vessel manually.")
- return
+ var/index = text2num(params["traverse"])
+ var/datum/shuttle_route/new_route = WS.web_master.current_destination.routes[index]
+ if(!istype(new_route))
+ message_admins("ERROR: Shuttle computer was asked to traverse a nonexistant route.")
+ return
- if((WS.last_move + WS.cooldown) > world.time)
- to_chat(usr, "The ship's drive is inoperable while the engines are charging.")
- return
+ if(!check_docking(WS))
+ return TRUE
- var/index = text2num(href_list["traverse"])
- var/datum/shuttle_route/new_route = WS.web_master.current_destination.routes[index]
- if(!istype(new_route))
- message_admins("ERROR: Shuttle computer was asked to traverse a nonexistant route.")
- return
+ var/datum/shuttle_destination/target_destination = new_route.get_other_side(WS.web_master.current_destination)
+ if(!istype(target_destination))
+ message_admins("ERROR: Shuttle computer was asked to travel to a nonexistant destination.")
+ return
- if(!check_docking(WS))
- // updateUsrDialog()
- ui_interact(usr)
- return
+ WS.next_location = target_destination.my_landmark
+ if(!can_move(WS, usr))
+ return
- var/datum/shuttle_destination/target_destination = new_route.get_other_side(WS.web_master.current_destination)
- if(!istype(target_destination))
- message_admins("ERROR: Shuttle computer was asked to travel to a nonexistant destination.")
- return
+ WS.web_master.future_destination = target_destination
+ to_chat(usr, "[WS.visible_name] flight computer received command.")
+ WS.web_master.reset_autopath() // Deviating from the path will almost certainly confuse the autopilot, so lets just reset its memory.
- WS.next_location = target_destination.my_landmark
- if(!can_move(WS, usr))
- return
-
- WS.web_master.future_destination = target_destination
- to_chat(usr, "[WS.visible_name] flight computer received command.")
- WS.web_master.reset_autopath() // Deviating from the path will almost certainly confuse the autopilot, so lets just reset its memory.
-
- var/travel_time = new_route.travel_time * WS.flight_time_modifier
- // TODO - Leshana - Change this to use proccess stuff of autodock!
- if(new_route.interim && new_route.travel_time)
- WS.long_jump(target_destination.my_landmark, new_route.interim, travel_time / 10)
- else
- WS.short_jump(target_destination.my_landmark)
-
- ui_interact(usr)
+ var/travel_time = new_route.travel_time * WS.flight_time_modifier
+ // TODO - Leshana - Change this to use proccess stuff of autodock!
+ if(new_route.interim && new_route.travel_time)
+ WS.long_jump(target_destination.my_landmark, new_route.interim, travel_time / 10)
+ else
+ WS.short_jump(target_destination.my_landmark)
//check if we're undocked, give option to force launch
/obj/machinery/computer/shuttle_control/web/proc/check_docking(datum/shuttle/autodock/MS)
diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm
index 19f039869e3..bb39c721d0d 100644
--- a/code/modules/tgui/external.dm
+++ b/code/modules/tgui/external.dm
@@ -141,6 +141,26 @@
*/
/datum/proc/tgui_close(mob/user)
+/**
+ * verb
+ *
+ * Used by a client to fix broken TGUI windows caused by opening a UI window before assets load.
+ * Probably not very performant and forcibly destroys a bunch of windows, so it has some warnings attached.
+ * Conveniently, also allows devs to force a dev server reattach without relogging, since it yeets windows.
+ */
+/client/verb/tgui_fix_white()
+ set desc = "Only use this if you have a broken TGUI window occupying your screen!"
+ set name = "Fix TGUI"
+ set category = "OOC"
+
+ if(alert(src, "Only use this verb if you have a white TGUI window stuck on your screen.", "Fix TGUI", "Continue", "Nevermind") != "Continue")
+ return
+
+ SStgui.close_user_uis(mob)
+ if(alert(src, "Did that fix the problem?", "Fix TGUI", "Yes", "No") == "No")
+ SStgui.force_close_all_windows(mob)
+ alert(src, "UIs should be fixed now. If not, please cry to your nearest coder.", "Fix TGUI")
+
/**
* verb
*
diff --git a/code/modules/tgui/modules/_base.dm b/code/modules/tgui/modules/_base.dm
index cefe49230f8..1a1027072d9 100644
--- a/code/modules/tgui/modules/_base.dm
+++ b/code/modules/tgui/modules/_base.dm
@@ -26,6 +26,9 @@ Code is pretty much ripped verbatim from nano modules, but with un-needed stuff
if(host)
host.tgui_close(user)
+/datum/tgui_module/proc/check_eye(mob/user)
+ return -1
+
/datum/tgui_module/proc/can_still_topic(mob/user, datum/tgui_state/state)
return (tgui_status(user, state) == STATUS_INTERACTIVE)
@@ -112,4 +115,12 @@ Code is pretty much ripped verbatim from nano modules, but with un-needed stuff
. += new /obj/screen/plane_master/main{plane = TURF_PLANE}
. += new /obj/screen/plane_master/main{plane = OBJ_PLANE}
. += new /obj/screen/plane_master/main{plane = MOB_PLANE}
- . += new /obj/screen/plane_master/cloaked //Cloaked atoms!
\ No newline at end of file
+ . += new /obj/screen/plane_master/cloaked //Cloaked atoms!
+
+ //VOREStation Add - Random other plane masters
+ . += new /obj/screen/plane_master{plane = PLANE_CH_STATUS_R} //Right-side status icon
+ . += new /obj/screen/plane_master{plane = PLANE_CH_HEALTH_VR} //Health bar but transparent at 100
+ . += new /obj/screen/plane_master{plane = PLANE_CH_BACKUP} //Backup implant status
+ . += new /obj/screen/plane_master{plane = PLANE_CH_VANTAG} //Vore Antags
+ . += new /obj/screen/plane_master{plane = PLANE_AUGMENTED} //Augmented reality
+ //VOREStation Add End
\ No newline at end of file
diff --git a/code/modules/tgui/modules/alarm.dm b/code/modules/tgui/modules/alarm.dm
index 2c0c75a6e8b..b9de22c7e69 100644
--- a/code/modules/tgui/modules/alarm.dm
+++ b/code/modules/tgui/modules/alarm.dm
@@ -13,6 +13,11 @@
..()
alarm_handlers = SSalarm.all_handlers
+// Subtype for glasses_state
+/datum/tgui_module/alarm_monitor/all/glasses
+/datum/tgui_module/alarm_monitor/all/glasses/tgui_state(mob/user)
+ return GLOB.tgui_glasses_state
+
/datum/tgui_module/alarm_monitor/all/robot
/datum/tgui_module/alarm_monitor/all/robot/tgui_state(mob/user)
return GLOB.tgui_self_state
diff --git a/code/modules/tgui/modules/camera.dm b/code/modules/tgui/modules/camera.dm
index d9ac311ee36..dbb3c7ae976 100644
--- a/code/modules/tgui/modules/camera.dm
+++ b/code/modules/tgui/modules/camera.dm
@@ -141,11 +141,33 @@
var/obj/machinery/camera/C = cameras["[ckey(c_tag)]"]
active_camera = C
playsound(tgui_host(), get_sfx("terminal_type"), 25, FALSE)
-
reload_cameraview()
-
return TRUE
+ if(action == "pan")
+ var/dir = params["dir"]
+ var/turf/T = get_turf(active_camera)
+ for(var/i in 1 to 10)
+ T = get_step(T, dir)
+ if(T)
+ var/obj/machinery/camera/target
+ var/best_dist = INFINITY
+
+ var/list/possible_cameras = get_available_cameras(usr)
+ for(var/obj/machinery/camera/C in get_area(T))
+ if(!possible_cameras["[ckey(C.c_tag)]"])
+ continue
+ var/dist = get_dist(C, T)
+ if(dist < best_dist)
+ best_dist = dist
+ target = C
+
+ if(target)
+ active_camera = target
+ playsound(tgui_host(), get_sfx("terminal_type"), 25, FALSE)
+ reload_cameraview()
+ . = TRUE
+
/datum/tgui_module/camera/proc/differential_check()
var/turf/T = get_turf(active_camera)
if(T)
diff --git a/code/modules/tgui/modules/overmap.dm b/code/modules/tgui/modules/overmap.dm
new file mode 100644
index 00000000000..3b157fc0c22
--- /dev/null
+++ b/code/modules/tgui/modules/overmap.dm
@@ -0,0 +1,137 @@
+/datum/tgui_module/ship
+ var/obj/effect/overmap/visitable/ship/linked
+ var/list/viewers
+ var/extra_view = 0
+
+/datum/tgui_module/ship/New()
+ . = ..()
+ sync_linked()
+ if(linked)
+ name = "[linked.name] [name]"
+
+/datum/tgui_module/ship/Destroy()
+ if(LAZYLEN(viewers))
+ for(var/weakref/W in viewers)
+ var/M = W.resolve()
+ if(M)
+ unlook(M)
+ . = ..()
+
+/datum/tgui_module/ship/tgui_status(mob/user)
+ . = ..()
+ if(. > STATUS_DISABLED)
+ if(viewing_overmap(user))
+ look(user)
+ return
+ unlook(user)
+
+/datum/tgui_module/ship/tgui_close(mob/user)
+ . = ..()
+ user.unset_machine()
+ unlook(user)
+
+/datum/tgui_module/ship/proc/sync_linked()
+ var/obj/effect/overmap/visitable/ship/sector = get_overmap_sector(get_z(tgui_host()))
+ if(!sector)
+ return
+ return attempt_hook_up_recursive(sector)
+
+/datum/tgui_module/ship/proc/attempt_hook_up_recursive(obj/effect/overmap/visitable/ship/sector)
+ if(attempt_hook_up(sector))
+ return sector
+ for(var/obj/effect/overmap/visitable/ship/candidate in sector)
+ if((. = .(candidate)))
+ return
+
+/datum/tgui_module/ship/proc/attempt_hook_up(obj/effect/overmap/visitable/ship/sector)
+ if(!istype(sector))
+ return
+ if(sector.check_ownership(tgui_host()))
+ linked = sector
+ return 1
+
+/datum/tgui_module/ship/proc/look(var/mob/user)
+ if(linked)
+ user.set_machine(tgui_host())
+ user.reset_view(linked)
+ user.set_viewsize(world.view + extra_view)
+ GLOB.moved_event.register(user, src, /datum/tgui_module/ship/proc/unlook)
+ LAZYDISTINCTADD(viewers, weakref(user))
+
+/datum/tgui_module/ship/proc/unlook(var/mob/user)
+ user.reset_view()
+ user.set_viewsize() // reset to default
+ GLOB.moved_event.unregister(user, src, /datum/tgui_module/ship/proc/unlook)
+ LAZYREMOVE(viewers, weakref(user))
+
+/datum/tgui_module/ship/proc/viewing_overmap(mob/user)
+ return (weakref(user) in viewers)
+
+/datum/tgui_module/ship/check_eye(var/mob/user)
+ if(!get_dist(user, tgui_host()) > 1 || user.blinded || !linked)
+ unlook(user)
+ return -1
+ else
+ return 0
+
+// Navigation
+/datum/tgui_module/ship/nav
+ name = "Navigation Display"
+ tgui_id = "OvermapNavigation"
+
+/datum/tgui_module/ship/nav/tgui_interact(mob/user, datum/tgui/ui)
+ if(!linked)
+ var/obj/machinery/computer/ship/navigation/host = tgui_host()
+ if(istype(host))
+ // Real Computer path
+ host.display_reconnect_dialog(user, "Navigation")
+ return
+
+ // NTOS Path
+ if(!sync_linked())
+ to_chat(user, "You don't appear to be on a spaceship...")
+ if(ui)
+ ui.close(can_be_suspended = FALSE)
+ if(ntos)
+ var/obj/item/modular_computer/M = tgui_host()
+ if(istype(M))
+ M.kill_program()
+ return
+
+ . = ..()
+
+/datum/tgui_module/ship/nav/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
+ var/list/data = ..()
+
+ var/turf/T = get_turf(linked)
+ var/obj/effect/overmap/visitable/sector/current_sector = locate() in T
+
+ data["sector"] = current_sector ? current_sector.name : "Deep Space"
+ data["sector_info"] = current_sector ? current_sector.desc : "Not Available"
+ data["s_x"] = linked.x
+ data["s_y"] = linked.y
+ data["speed"] = round(linked.get_speed()*1000, 0.01)
+ data["accel"] = round(linked.get_acceleration()*1000, 0.01)
+ data["heading"] = linked.get_heading_degrees()
+ data["viewing"] = viewing_overmap(user)
+
+ if(linked.get_speed())
+ data["ETAnext"] = "[round(linked.ETA()/10)] seconds"
+ else
+ data["ETAnext"] = "N/A"
+
+ return data
+
+/datum/tgui_module/ship/nav/tgui_act(action, params)
+ if(..())
+ return TRUE
+
+ if(!linked)
+ return FALSE
+
+ if(action == "viewing")
+ viewing_overmap(usr) ? unlook(usr) : look(usr)
+ return TRUE
+
+/datum/tgui_module/ship/nav/ntos
+ ntos = TRUE
\ No newline at end of file
diff --git a/code/modules/turbolift/turbolift_console.dm b/code/modules/turbolift/turbolift_console.dm
index 9d8b90f8027..4d300bcfc26 100644
--- a/code/modules/turbolift/turbolift_console.dm
+++ b/code/modules/turbolift/turbolift_console.dm
@@ -131,7 +131,7 @@
lift.update_fire_mode(!lift.fire_mode)
if(lift.fire_mode)
audible_message("Firefighter Mode Activated. Door safeties disabled. Manual control engaged.")
- playsound(src, 'sound/machines/airalarm.ogg', 25, 0, 4)
+ playsound(src, 'sound/machines/airalarm.ogg', 25, 0, 4, volume_channel = VOLUME_CHANNEL_ALARMS)
else
audible_message("Firefighter Mode Deactivated. Door safeties enabled. Automatic control engaged.")
return
diff --git a/code/modules/ventcrawl/ventcrawl.dm b/code/modules/ventcrawl/ventcrawl.dm
index 9f472102fdb..44bb57e18c0 100644
--- a/code/modules/ventcrawl/ventcrawl.dm
+++ b/code/modules/ventcrawl/ventcrawl.dm
@@ -33,6 +33,9 @@ var/list/ventcrawl_machinery = list(
if(incapacitated())
to_chat(src, "You cannot ventcrawl in your current state!")
return FALSE
+ if(buckled)
+ to_chat(src, "You cannot ventcrawl while buckled!")
+ return FALSE
return ventcrawl_carry()
/mob/living/Login()
@@ -201,4 +204,4 @@ var/list/ventcrawl_machinery = list(
client.screen -= global_hud.centermarker
client.eye = src
- pipes_shown.len = 0
\ No newline at end of file
+ pipes_shown.len = 0
diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm
index e929b177e4d..ef8b3d282ec 100644
--- a/code/modules/vore/eating/belly_obj_vr.dm
+++ b/code/modules/vore/eating/belly_obj_vr.dm
@@ -194,7 +194,7 @@
else
soundfile = fancy_vore_sounds[vore_sound]
if(soundfile)
- playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises)
+ playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises, volume_channel = VOLUME_CHANNEL_VORE)
recent_sound = TRUE
//Messages if it's a mob
@@ -275,7 +275,7 @@
else
soundfile = fancy_release_sounds[release_sound]
if(soundfile)
- playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises)
+ playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises, volume_channel = VOLUME_CHANNEL_VORE)
return count
@@ -323,7 +323,7 @@
else
soundfile = fancy_release_sounds[release_sound]
if(soundfile)
- playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises)
+ playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises, volume_channel = VOLUME_CHANNEL_VORE)
return 1
@@ -589,9 +589,9 @@
struggle_snuggle = sound(get_sfx("classic_struggle_sounds"))
else
struggle_snuggle = sound(get_sfx("fancy_prey_struggle"))
- playsound(src, struggle_snuggle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises)
+ playsound(src, struggle_snuggle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises, volume_channel = VOLUME_CHANNEL_VORE)
else
- playsound(src, struggle_rustle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises)
+ playsound(src, struggle_rustle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises, volume_channel = VOLUME_CHANNEL_VORE)
if(escapable) //If the stomach has escapable enabled.
if(prob(escapechance)) //Let's have it check to see if the prey escapes first.
diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm
index 2f05ab268fd..3df20d6a2bf 100644
--- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm
+++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm
@@ -1987,4 +1987,17 @@ Departamental Swimsuits, for general use
icon_override = 'icons/vore/custom_clothes_vr.dmi'
item_state = "zenasuit_mob"
- species_restricted = null
\ No newline at end of file
+ species_restricted = null
+
+/obj/item/clothing/suit/storage/flintlock
+ name = "green jacket"
+ desc = "Flintlock's green jacket. It seems to be made of rather high quality leather."
+ icon = 'icons/vore/custom_clothes_vr.dmi'
+ icon_state = "flintlock"
+ item_state_slots = list(slot_r_hand_str = "item_greensuit", slot_l_hand_str = "item_greensuit")
+ blood_overlay_type = "coat"
+ body_parts_covered = UPPER_TORSO|ARMS
+ flags_inv = HIDEHOLSTER
+
+ icon_override = 'icons/vore/custom_clothes_vr.dmi'
+ item_state = "flintlock_mob"
\ No newline at end of file
diff --git a/code/modules/xenoarcheaology/artifacts/replicator.dm b/code/modules/xenoarcheaology/artifacts/replicator.dm
index da5b123c166..49e24f8a977 100644
--- a/code/modules/xenoarcheaology/artifacts/replicator.dm
+++ b/code/modules/xenoarcheaology/artifacts/replicator.dm
@@ -42,8 +42,8 @@
/obj/item/weapon/bikehorn,
/obj/item/weapon/surgical/bonesetter,
/obj/item/weapon/material/knife/butch,
- /obj/item/weapon/caution,
- /obj/item/weapon/caution/cone,
+ /obj/item/clothing/suit/caution,
+ /obj/item/clothing/head/cone,
/obj/item/weapon/tool/crowbar,
/obj/item/weapon/clipboard,
/obj/item/weapon/cell,
diff --git a/config/alienwhitelist.txt b/config/alienwhitelist.txt
index 37f35cba960..c87dcf2bd4b 100644
--- a/config/alienwhitelist.txt
+++ b/config/alienwhitelist.txt
@@ -14,6 +14,7 @@ bricker98 - Protean
crossexonar - Protean
chillyfang - Black-Eyed Shadekin
cgr - Protean
+draycu - Vox
flaktual - Vox
funnyman2003 - Xenochimera
flurriee - Protean
@@ -24,11 +25,13 @@ jademanique - Xenochimera
jemli - Gutter
ktccd - Diona
khanivore - Protean
+lunarfleet - Gutter
mewchild - Diona
mewchild - Vox
mrsebbi - Xenochimera
natje - Xenochimera
nerdass - Protean
+ontejbjoav - Diona
oreganovulgaris - Xenochimera
paradoxspace - Xenochimera
pearlprophet - Protean
diff --git a/config/custom_sprites.txt b/config/custom_sprites.txt
index db3930a4ae2..b99307d173f 100644
--- a/config/custom_sprites.txt
+++ b/config/custom_sprites.txt
@@ -1 +1,3 @@
-ckey-state
\ No newline at end of file
+ckey|state
+lunarfleet|Clea-Nor
+jademanique|B.A.U-Kingside
\ No newline at end of file
diff --git a/config/example/config.txt b/config/example/config.txt
index 50ee910f8d2..d56d60a5ae9 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -151,6 +151,12 @@ TRAITOR_SCALING
## If security is prohibited from being most antagonists
#PROTECT_ROLES_FROM_ANTAGONIST
+## Uncomment this to DISABLE persistence
+#PERSISTENCE_DISABLED
+
+## Uncomment this to DISABLE maploaded trash/paper/etc from being saved by the persistence system.
+#PERSISTENCE_IGNORE_MAPLOAD
+
## Comment this out to stop admins being able to choose their personal ooccolor
ALLOW_ADMIN_OOCCOLOR
diff --git a/html/changelog.html b/html/changelog.html
index 39c9522a1d7..7153910a42e 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -53,6 +53,78 @@
-->
+
20 August 2020
+
Atermonera updated:
+
+
Mapped Overmap sensors onto the Southern Cross. Deck 2, central ring, starboard side. Departmental sensor installations and dedicated rooms may be added in the future.
+
To use the new sensors, you first have to click on them, hit 'Reconnect' on the window, close the window, then reopen it to get the console to link up with the sensors properly.
+
Enabled overmap event generation. This doesn't really do anything yet because the shuttles haven't been upgraded, but it's very pretty!
+
+
BlinsKot updated:
+
+
You can now alt-click to turn on the washing machine.
+
You can now alt-click on a mech while piloting it to toggle strafing.
+
+
Cerebulon updated:
+
+
Added extended flavour text to most things related to commercial vending machines and their contents.
+
Added chewing gum, lollipops and chewing tobacco. Unwrap it and place it in your mask slot like a cigarette.
+
Added snack food, vending drink and beer brand variety.
+
New booze bottle, coffee, juice, snack and cigarette packet sprites.
+
+
Lorilili updated:
+
+
Skrellian blood is now hemocyanin-based and regenerates with copper, not iron.
+
You can now wear caution signs and warning cones.
+
You can now point using shift and middle mouse button.
+
+
Mechoid updated:
+
+
Mortiferin added in place of old Necroxadone as a normal chem recipe.
+
Necroxadone changed to a more powerful alternative to Mortiferin which works even on corpses without bloodflow.
+
Added reagent pumps. You can refill water tanks planetside!
+
Added reagent hoses. Only used player-side by tanks, pumps, and spray nozzles to move reagents from one container to another.
+
+
Meghan Rossi updated:
+
+
Cyborgs can now put things into oven dishes with their grippers
+
Cyborgs can now put oven dishes in the oven with their grippers
+
Bots that are idle in doorways (including firedoors and blastdoors) will move out of the way.
+
Multiple cleanbots will no longer attempt to clean the same tile at the same time.
+
Cleanbots will now clean tiles closer to them first.
+
You can now use duct tape on yourself.
+
Ghosts now have a toggleable security HUD. Use the 'Toggle Security HUD' verb in the ghost tab to enable it
+
Ghosts can now shift-click things to examine them.
+
Ghosts can now alt-click adjacent things to open the turf tab.
+
You can now build plating on grass with floor tiles.
+
Improved descriptions for some floors.
+
The rapid service fabricator (found on service borgs) can now produce metamorphic pint glasses.
+
The party supplies and bar supplies crates orderable from cargo now contain metamorphic pint glasses.
+
The autolathe can now produce metamorphic pint and half-pint glasses.
+
The autolathe can now produce all drinking glasses in batches of 5 or 10.
+
+
Nyria updated:
+
+
Added volume settings, available in character setup or from the Preferences tab.
+
More settings and affected sounds may be added at a later date.
+
Added a TGui window to control the new settings with shiny sliders.
+
+
Rykka Stormheart updated:
+
+
Adds a mech vs mech combat system for the toy mechs earned from arcades and found around the station.
+
You can initiate combat with yourself by hitting a toy mech with another toy mech, or fight another player if you attack a player holding a mech toy with your own mech toy while not on harm intent.
+
Each mech has its own health stat and special ability that they'll use in combat against each other.
+
+
SplinterGP updated:
+
+
Added verb for FBP's to change their monitor display.
+
Removed monitor mask item(replaced by verb).
+
+
Subber updated:
+
+
Added a new prosthetic sprite set: Cyber Solutions - Outdated.
+
+
06 August 2020
Cerebulon updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 0ca89eb0666..3a86bfb6b7d 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -5240,3 +5240,78 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
reviewed, and will likely be adjusted after sufficient feedback is gathered.
- rscadd: Blast doors and shutters (the types that go on bar/kitchen/etc) will also
throw items on their tiles.
+2020-08-20:
+ Atermonera:
+ - maptweak: Mapped Overmap sensors onto the Southern Cross. Deck 2, central ring,
+ starboard side. Departmental sensor installations and dedicated rooms may be
+ added in the future.
+ - wip: To use the new sensors, you first have to click on them, hit 'Reconnect'
+ on the window, close the window, then reopen it to get the console to link up
+ with the sensors properly.
+ - wip: Enabled overmap event generation. This doesn't really do anything yet because
+ the shuttles haven't been upgraded, but it's very pretty!
+ BlinsKot:
+ - rscadd: You can now alt-click to turn on the washing machine.
+ - rscadd: You can now alt-click on a mech while piloting it to toggle strafing.
+ Blinskot:
+ - rscadd: You can now alt-click on a mech while piloting it to toggle strafing.
+ - rscadd: You can now alt-click to turn on the washing machine.
+ Cerebulon:
+ - rscadd: Added extended flavour text to most things related to commercial vending
+ machines and their contents.
+ - rscadd: Added chewing gum, lollipops and chewing tobacco. Unwrap it and place
+ it in your mask slot like a cigarette.
+ - rscadd: Added snack food, vending drink and beer brand variety.
+ - imageadd: New booze bottle, coffee, juice, snack and cigarette packet sprites.
+ Lorilili:
+ - tweak: Skrellian blood is now hemocyanin-based and regenerates with copper, not
+ iron.
+ - rscadd: You can now wear caution signs and warning cones.
+ - rscadd: You can now point using shift and middle mouse button.
+ Mechoid:
+ - rscadd: Mortiferin added in place of old Necroxadone as a normal chem recipe.
+ - tweak: Necroxadone changed to a more powerful alternative to Mortiferin which
+ works even on corpses without bloodflow.
+ - rscadd: Added reagent pumps. You can refill water tanks planetside!
+ - rscadd: Added reagent hoses. Only used player-side by tanks, pumps, and spray
+ nozzles to move reagents from one container to another.
+ Meghan Rossi:
+ - bugfix: Cyborgs can now put things into oven dishes with their grippers
+ - bugfix: Cyborgs can now put oven dishes in the oven with their grippers
+ - tweak: Bots that are idle in doorways (including firedoors and blastdoors) will
+ move out of the way.
+ - rscadd: Multiple cleanbots will no longer attempt to clean the same tile at the
+ same time.
+ - rscadd: Cleanbots will now clean tiles closer to them first.
+ - bugfix: You can now use duct tape on yourself.
+ - rscadd: Ghosts now have a toggleable security HUD. Use the 'Toggle Security HUD'
+ verb in the ghost tab to enable it
+ - rscadd: Ghosts can now shift-click things to examine them.
+ - rscadd: Ghosts can now alt-click adjacent things to open the turf tab.
+ - bugfix: You can now build plating on grass with floor tiles.
+ - rscadd: Improved descriptions for some floors.
+ - rscadd: The rapid service fabricator (found on service borgs) can now produce
+ metamorphic pint glasses.
+ - rscadd: The party supplies and bar supplies crates orderable from cargo now contain
+ metamorphic pint glasses.
+ - rscadd: The autolathe can now produce metamorphic pint and half-pint glasses.
+ - rscadd: The autolathe can now produce all drinking glasses in batches of 5 or
+ 10.
+ Nyria:
+ - rscadd: Added volume settings, available in character setup or from the Preferences
+ tab.
+ - rscadd: More settings and affected sounds may be added at a later date.
+ - rscadd: Added a TGui window to control the new settings with shiny sliders.
+ Rykka Stormheart:
+ - rscadd: Adds a mech vs mech combat system for the toy mechs earned from arcades
+ and found around the station.
+ - rscadd: You can initiate combat with yourself by hitting a toy mech with another
+ toy mech, or fight another player if you attack a player holding a mech toy
+ with your own mech toy while not on harm intent.
+ - rscadd: Each mech has its own health stat and special ability that they'll use
+ in combat against each other.
+ SplinterGP:
+ - rscadd: Added verb for FBP's to change their monitor display.
+ - rscdel: Removed monitor mask item(replaced by verb).
+ Subber:
+ - rscadd: 'Added a new prosthetic sprite set: Cyber Solutions - Outdated.'
diff --git a/html/changelogs/Lorilili - borgpet.yml b/html/changelogs/Lorilili - borgpet.yml
new file mode 100644
index 00000000000..6af4fa0c255
--- /dev/null
+++ b/html/changelogs/Lorilili - borgpet.yml
@@ -0,0 +1,5 @@
+author: Lorilili
+delete-after: True
+changes:
+ - rscadd: "You can now pet borgs on help intent and punch on hurt intent. Old behavior is now grab intent."
+
diff --git a/html/changelogs/Kot-Washing.yml b/html/changelogs/rykka-stormheart - ambience prefs.yml
similarity index 70%
rename from html/changelogs/Kot-Washing.yml
rename to html/changelogs/rykka-stormheart - ambience prefs.yml
index 0da4b507c5d..c55ec992d7b 100644
--- a/html/changelogs/Kot-Washing.yml
+++ b/html/changelogs/rykka-stormheart - ambience prefs.yml
@@ -22,7 +22,7 @@
#################################
# Your name.
-author: BlinsKot
+author: Rykka Stormheart
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
@@ -33,4 +33,6 @@ delete-after: True
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- - rscadd: "You pansies can now alt click to turn on the washing machine."
\ No newline at end of file
+ - rscadd: "Adds Ambience Chance and Repeating Ambience Preferences into Globals, underneath Client FPS"
+ - rscadd: "Random-Ambience-Frequency controls how long before it checks if it can play ambience to you again. Setting it to 0 disables the random re-play of ambience."
+ - rscadd: "Ambience Chance affects the % chance to play ambience to your client. It defaults to 35%, but can be set from 0 to 100 to disable it or always play every time you move into an area or have the Random Ambience check called."
diff --git a/html/changelogs/mechoid - mortiferin.yml b/html/changelogs/rykka-stormheart - toy mechs.yml
similarity index 75%
rename from html/changelogs/mechoid - mortiferin.yml
rename to html/changelogs/rykka-stormheart - toy mechs.yml
index 00ce2ca033a..5967df1bfae 100644
--- a/html/changelogs/mechoid - mortiferin.yml
+++ b/html/changelogs/rykka-stormheart - toy mechs.yml
@@ -22,7 +22,7 @@
#################################
# Your name.
-author: Mechoid
+author: Rykka Stormheart
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
@@ -33,5 +33,6 @@ delete-after: True
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- - rscadd: "Mortiferin added in place of old Necroxadone as a normal chem recipe."
- - tweak: "Necroxadone changed to a more powerful alternative to Mortiferin which works even on corpses without bloodflow."
+ - rscadd: "Adds a mech vs mech combat system for the toy mechs earned from arcades and found around the station."
+ - rscadd: "You can initiate combat with yourself by hitting a toy mech with another toy mech, or fight another player if you attack a player holding a mech with a mech."
+ - rscadd: "Each mech has its own health stat and special ability that they'll use in combat against each other."
diff --git a/html/changelogs/BlinsKot - strafing.yml b/html/changelogs/shadowlarkens - job preferences.yml
similarity index 91%
rename from html/changelogs/BlinsKot - strafing.yml
rename to html/changelogs/shadowlarkens - job preferences.yml
index f99f20e104e..75a2fe7a28e 100644
--- a/html/changelogs/BlinsKot - strafing.yml
+++ b/html/changelogs/shadowlarkens - job preferences.yml
@@ -22,7 +22,7 @@
#################################
# Your name.
-author: Blinskot
+author: Shadow Larkens
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
@@ -33,4 +33,4 @@ delete-after: True
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- - rscadd: "You can now alt click to toggle strafing in mechs."
+ - rscadd: "Added the ability to right click and lower preferences for jobs in the Occupation Menu."
diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi
index 4115b01ef2e..4d0710885fa 100644
Binary files a/icons/effects/beam.dmi and b/icons/effects/beam.dmi differ
diff --git a/icons/mob/custom_synthetic.dmi b/icons/mob/custom_synthetic.dmi
index e69de29bb2d..7854fabe2bf 100644
Binary files a/icons/mob/custom_synthetic.dmi and b/icons/mob/custom_synthetic.dmi differ
diff --git a/icons/mob/custom_synthetic_vr.dmi b/icons/mob/custom_synthetic_vr.dmi
new file mode 100644
index 00000000000..8c9cd318f75
Binary files /dev/null and b/icons/mob/custom_synthetic_vr.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index f241ee11e82..d2be45594c1 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/cybersolutions/cybersolutions_alt2.dmi b/icons/mob/human_races/cyberlimbs/cybersolutions/cybersolutions_alt2.dmi
index d2f9c44e911..a1a7a461229 100644
Binary files a/icons/mob/human_races/cyberlimbs/cybersolutions/cybersolutions_alt2.dmi and b/icons/mob/human_races/cyberlimbs/cybersolutions/cybersolutions_alt2.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/cybersolutions/cybersolutions_alt3.dmi b/icons/mob/human_races/cyberlimbs/cybersolutions/cybersolutions_alt3.dmi
new file mode 100644
index 00000000000..d2f9c44e911
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/cybersolutions/cybersolutions_alt3.dmi differ
diff --git a/icons/mob/monitor_icons.dmi b/icons/mob/monitor_icons.dmi
index cd7de49fb9a..d25c6b7832b 100644
Binary files a/icons/mob/monitor_icons.dmi and b/icons/mob/monitor_icons.dmi differ
diff --git a/icons/mob/screen1_robot.dmi b/icons/mob/screen1_robot.dmi
index 993c5b3eb46..ccad7e0f4a7 100644
Binary files a/icons/mob/screen1_robot.dmi and b/icons/mob/screen1_robot.dmi differ
diff --git a/icons/mob/species/seromi/back.dmi b/icons/mob/species/seromi/back.dmi
index b330228a40c..9de0f3544c8 100644
Binary files a/icons/mob/species/seromi/back.dmi and b/icons/mob/species/seromi/back.dmi differ
diff --git a/icons/mob/species/seromi/belt_mirror.dmi b/icons/mob/species/seromi/belt_mirror.dmi
index c7a8411c6a8..1038d2ad346 100644
Binary files a/icons/mob/species/seromi/belt_mirror.dmi and b/icons/mob/species/seromi/belt_mirror.dmi differ
diff --git a/icons/mob/species/seromi/ears.dmi b/icons/mob/species/seromi/ears.dmi
index fb2d0a13f5e..b38829b05f2 100644
Binary files a/icons/mob/species/seromi/ears.dmi and b/icons/mob/species/seromi/ears.dmi differ
diff --git a/icons/mob/species/seromi/gloves.dmi b/icons/mob/species/seromi/gloves.dmi
index 11ad23815d2..ee6354f8d5f 100644
Binary files a/icons/mob/species/seromi/gloves.dmi and b/icons/mob/species/seromi/gloves.dmi differ
diff --git a/icons/mob/species/seromi/head.dmi b/icons/mob/species/seromi/head.dmi
index bf346475d3d..849b03718c5 100644
Binary files a/icons/mob/species/seromi/head.dmi and b/icons/mob/species/seromi/head.dmi differ
diff --git a/icons/mob/species/seromi/masks.dmi b/icons/mob/species/seromi/masks.dmi
index 78bf615f656..83493f851a6 100644
Binary files a/icons/mob/species/seromi/masks.dmi and b/icons/mob/species/seromi/masks.dmi differ
diff --git a/icons/mob/species/seromi/shoes.dmi b/icons/mob/species/seromi/shoes.dmi
index b4143119e0f..66f18f37bb5 100644
Binary files a/icons/mob/species/seromi/shoes.dmi and b/icons/mob/species/seromi/shoes.dmi differ
diff --git a/icons/mob/species/seromi/suit.dmi b/icons/mob/species/seromi/suit.dmi
index 638e79027ad..9f6a652c4a5 100644
Binary files a/icons/mob/species/seromi/suit.dmi and b/icons/mob/species/seromi/suit.dmi differ
diff --git a/icons/mob/species/seromi/ties.dmi b/icons/mob/species/seromi/ties.dmi
index ad23d77e2bf..06eee815b1f 100644
Binary files a/icons/mob/species/seromi/ties.dmi and b/icons/mob/species/seromi/ties.dmi differ
diff --git a/icons/mob/species/seromi/uniform.dmi b/icons/mob/species/seromi/uniform.dmi
index 63acfcca494..76605857c89 100644
Binary files a/icons/mob/species/seromi/uniform.dmi and b/icons/mob/species/seromi/uniform.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 82d26fb02e4..5fc30802065 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/aibots.dmi b/icons/obj/aibots.dmi
index a7d9e3b79fd..ee7f306e2d8 100644
Binary files a/icons/obj/aibots.dmi and b/icons/obj/aibots.dmi differ
diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi
index e9f17c391d1..922dd125086 100644
Binary files a/icons/obj/cigarettes.dmi and b/icons/obj/cigarettes.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 19d7de134f1..6f8f14c6a22 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi
index 998d31b2f8b..195662d14bb 100644
Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ
diff --git a/icons/obj/clothing/species/seromi/suits.dmi b/icons/obj/clothing/species/seromi/suits.dmi
index 04572626576..6679ceb22c8 100644
Binary files a/icons/obj/clothing/species/seromi/suits.dmi and b/icons/obj/clothing/species/seromi/suits.dmi differ
diff --git a/icons/obj/clothing/species/seromi/uniform.dmi b/icons/obj/clothing/species/seromi/uniform.dmi
index e1c6e2f464c..82d4d126da5 100644
Binary files a/icons/obj/clothing/species/seromi/uniform.dmi and b/icons/obj/clothing/species/seromi/uniform.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 0421e0bff6c..5c1f3246d56 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index acf87534892..0a112657ea0 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/icons/obj/ecig.dmi b/icons/obj/ecig.dmi
new file mode 100644
index 00000000000..1b6dde8c4bf
Binary files /dev/null and b/icons/obj/ecig.dmi differ
diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi
index efe9039a410..3062f76155f 100644
Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ
diff --git a/icons/obj/food_snacks.dmi b/icons/obj/food_snacks.dmi
new file mode 100644
index 00000000000..aed34d1ee3d
Binary files /dev/null and b/icons/obj/food_snacks.dmi differ
diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi
index 3b7f9b4f603..607fef4bc76 100644
Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ
diff --git a/icons/obj/machines/reagent.dmi b/icons/obj/machines/reagent.dmi
index d11f34270d5..74954513801 100644
Binary files a/icons/obj/machines/reagent.dmi and b/icons/obj/machines/reagent.dmi differ
diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi
index 5b19f0d43b8..2e213ffcc15 100644
Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ
diff --git a/icons/obj/terminals.dmi b/icons/obj/terminals.dmi
index ab3d80a03c4..659b22ff7a9 100644
Binary files a/icons/obj/terminals.dmi and b/icons/obj/terminals.dmi differ
diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi
index 15f9143b696..21b649006c0 100644
Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ
diff --git a/icons/obj/trash.dmi b/icons/obj/trash.dmi
index 436ebe657d0..4836bae2ac8 100644
Binary files a/icons/obj/trash.dmi and b/icons/obj/trash.dmi differ
diff --git a/icons/vore/custom_clothes_vr.dmi b/icons/vore/custom_clothes_vr.dmi
index 7fe98dcec50..52ef983f10a 100644
Binary files a/icons/vore/custom_clothes_vr.dmi and b/icons/vore/custom_clothes_vr.dmi differ
diff --git a/maps/RandomZLevels/Academy.dmm b/maps/RandomZLevels/Academy.dmm
index 0c124407997..fc353d5b2d1 100644
--- a/maps/RandomZLevels/Academy.dmm
+++ b/maps/RandomZLevels/Academy.dmm
@@ -2975,7 +2975,7 @@
icon_state = "4-8";
pixel_y = 0
},
-/obj/item/weapon/caution,
+/obj/item/clothing/suit/caution,
/turf/simulated/floor{
icon_state = "green";
dir = 4
diff --git a/maps/RandomZLevels/blackmarketpackers.dmm b/maps/RandomZLevels/blackmarketpackers.dmm
index 4515fb775ea..ef10c6addf9 100644
--- a/maps/RandomZLevels/blackmarketpackers.dmm
+++ b/maps/RandomZLevels/blackmarketpackers.dmm
@@ -3272,7 +3272,7 @@
},
/area/awaymission/BMPship1)
"iw" = (
-/obj/item/weapon/caution,
+/obj/item/clothing/suit/caution,
/turf/simulated/floor/plating/airless,
/area/awaymission)
"ix" = (
diff --git a/maps/RandomZLevels/zoo.dmm b/maps/RandomZLevels/zoo.dmm
index 057c502f5d6..e6fa264d3b0 100644
--- a/maps/RandomZLevels/zoo.dmm
+++ b/maps/RandomZLevels/zoo.dmm
@@ -353,7 +353,7 @@
"gO" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/awaymission/zoo/syndieship)
"gP" = (/turf/simulated/wall,/area/awaymission/zoo)
"gQ" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/awaymission/zoo)
-"gR" = (/obj/item/weapon/caution,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship)
+"gR" = (/obj/item/clothing/suit/caution,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship)
"gS" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/awaymission/zoo/pirateship)
"gT" = (/obj/structure/closet/crate,/obj/item/weapon/spacecash/c10,/obj/item/weapon/spacecash/c200,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship)
"gU" = (/obj/structure/closet/crate,/obj/item/weapon/spacecash/c10,/turf/simulated/floor/tiled/steel,/area/awaymission/zoo/pirateship)
diff --git a/maps/northern_star/polaris-1.dmm b/maps/northern_star/polaris-1.dmm
index 8c75ee31edd..5bcaf81860e 100644
--- a/maps/northern_star/polaris-1.dmm
+++ b/maps/northern_star/polaris-1.dmm
@@ -32,7 +32,7 @@
"aaF" = (/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxstarboard)
"aaG" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
"aaH" = (/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxstarboard)
-"aaI" = (/obj/item/weapon/caution/cone,/turf/simulated/floor,/area/maintenance/locker)
+"aaI" = (/obj/item/clothing/head/cone,/turf/simulated/floor,/area/maintenance/locker)
"aaJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
"aaK" = (/turf/simulated/floor,/area/maintenance/locker)
"aaL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
@@ -1600,7 +1600,7 @@
"aEN" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/water/deep/pool,/area/crew_quarters/pool)
"aEO" = (/obj/effect/floor_decal/spline/plain{dir = 5},/turf/simulated/floor/water/deep/pool,/area/crew_quarters/pool)
"aEP" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
-"aEQ" = (/obj/item/weapon/caution/cone,/turf/simulated/floor,/area/maintenance/pool)
+"aEQ" = (/obj/item/clothing/head/cone,/turf/simulated/floor,/area/maintenance/pool)
"aER" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/maintenance/pool)
"aES" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor,/area/maintenance/pool)
"aET" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/security,/obj/item/clothing/head/helmet/space/void/security,/obj/item/device/suit_cooling_unit,/obj/item/weapon/tank/oxygen,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/white{icon_state = "corner_white"; dir = 1},/obj/effect/floor_decal/corner/blue{dir = 8},/obj/machinery/door/window/brigdoor/eastright{name = "EVA Suit"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
@@ -2414,7 +2414,7 @@
"aUv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/recreation_area_hallway)
"aUw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/recreation_area_hallway)
"aUx" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/recreation_area_hallway)
-"aUy" = (/obj/item/weapon/caution/cone,/turf/simulated/floor/tiled/dark,/area/crew_quarters/recreation_area_hallway)
+"aUy" = (/obj/item/clothing/head/cone,/turf/simulated/floor/tiled/dark,/area/crew_quarters/recreation_area_hallway)
"aUz" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = -26; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/tiled,/area/storage/tools)
"aUA" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/storage/tools)
"aUB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/storage/tools)
@@ -5607,7 +5607,7 @@
"cdQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/medical_emergency_hallway)
"cdR" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/pink{dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/medical_emergency_hallway)
"cdS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/obj/effect/floor_decal/corner/pink{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/medical_emergency_hallway)
-"cdT" = (/obj/item/weapon/caution/cone,/turf/simulated/floor,/area/maintenance/medbay_aft)
+"cdT" = (/obj/item/clothing/head/cone,/turf/simulated/floor,/area/maintenance/medbay_aft)
"cdU" = (/obj/item/weapon/broken_bottle,/turf/simulated/floor,/area/maintenance/medbay_aft)
"cdV" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/plastic,/obj/item/weapon/cigbutt/cigarbutt,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor,/area/maintenance/medbay_aft)
"cdW" = (/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Lockdown Shutters"; opacity = 0},/turf/simulated/floor,/area/maintenance/medbay_aft)
@@ -8515,7 +8515,7 @@
"dhM" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
"dhN" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
"dhO" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
-"dhP" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/item/weapon/caution/cone,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard)
+"dhP" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/item/clothing/head/cone,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard)
"dhQ" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/vacant/vacant_site2)
"dhR" = (/obj/item/weapon/stool/padded,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/vacant/vacant_site2)
"dhS" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/vacant/vacant_site2)
@@ -9017,7 +9017,7 @@
"dru" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/plating,/area/space)
"drv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D3)
"drw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D3)
-"drx" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/obj/machinery/door/firedoor/border_only,/obj/item/weapon/caution/cone,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
+"drx" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/obj/machinery/door/firedoor/border_only,/obj/item/clothing/head/cone,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dry" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"drz" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"drA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/D3)
@@ -9079,7 +9079,7 @@
"dsE" = (/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dsF" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dsG" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{icon_state = "door_locked"; locked = 1; name = "Arrival Airlock"},/obj/item/tape/engineering,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
-"dsH" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/item/weapon/caution/cone,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
+"dsH" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/item/clothing/head/cone,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dsI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dsJ" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "dock_three_fore_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = 26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dsK" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_three_fore_inner"; locked = 1; name = "Dock Three Internal Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
@@ -9127,7 +9127,7 @@
"dtA" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"dtB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D2)
"dtC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D3)
-"dtD" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/item/weapon/caution/cone,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
+"dtD" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/item/clothing/head/cone,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dtE" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dtF" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_three_fore_inner"; locked = 1; name = "Dock Three Internal Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
"dtG" = (/obj/effect/floor_decal/industrial/loading{dir = 4},/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
@@ -9139,7 +9139,7 @@
"dtM" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_four_fore_inner"; locked = 1; name = "Dock Four Internal Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D4)
"dtN" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4)
"dtO" = (/obj/machinery/vending/coffee,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D4)
-"dtP" = (/obj/item/weapon/caution/cone,/turf/simulated/floor,/area/maintenance/atmos_control)
+"dtP" = (/obj/item/clothing/head/cone,/turf/simulated/floor,/area/maintenance/atmos_control)
"dtQ" = (/obj/machinery/drone_fabricator/derelict,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"dtR" = (/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/deck/cards,/obj/structure/table/steel,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"dtS" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/engineering{c_tag = "ENG - Hallway Aft"; dir = 8},/turf/simulated/floor/tiled,/area/engineering)
@@ -9337,7 +9337,7 @@
"dxC" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"dxD" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_starboard_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2)
"dxE" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"dxF" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/item/weapon/caution/cone,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
+"dxF" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/item/clothing/head/cone,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dxG" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_three_mid_inner"; locked = 1; name = "Dock Three Internal Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
"dxH" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dxI" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "dock_three_mid_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "dock_three_mid_sensor"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
@@ -9397,7 +9397,7 @@
"dyK" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/obj/machinery/door/airlock/external{icon_state = "door_locked"; locked = 1; name = "Arrival Airlock"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
"dyL" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dyM" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/item/tape/engineering,/obj/machinery/door/airlock/glass_external{icon_state = "door_locked"; locked = 1; name = "Arrival Airlock"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
-"dyN" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"},/obj/item/weapon/caution/cone,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
+"dyN" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"},/obj/item/clothing/head/cone,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dyO" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "dock_three_mid_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = -26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dyP" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1379; icon_state = "door_locked"; id_tag = "dock_three_mid_inner"; locked = 1; name = "Dock Three Internal Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
"dyQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/effect/floor_decal/industrial/loading{dir = 4},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "dock_three_mid_airlock"; name = "Airlock Console"; pixel_y = -30; req_access = list(13); tag_airpump = "dock_three_mid_pump"; tag_chamber_sensor = "dock_three_mid_sensor"; tag_exterior_door = "dock_three_mid_outer"; tag_interior_door = "dock_three_mid_inner"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
@@ -9449,7 +9449,7 @@
"dzK" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/steel,/area/engineering/aft_hallway)
"dzL" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"dzM" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"dzN" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/item/weapon/caution/cone,/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
+"dzN" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/item/clothing/head/cone,/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dzO" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dzP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D4)
"dzQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D4)
diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm
index 1bf367399d3..4068595924c 100644
--- a/maps/southern_cross/southern_cross-1.dmm
+++ b/maps/southern_cross/southern_cross-1.dmm
@@ -811,7 +811,7 @@
"apE" = (/obj/structure/frame/computer,/turf/simulated/floor/tiled,/area/hangar/onecontrol)
"apF" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled,/area/hangar/onecontrol)
"apG" = (/obj/structure/disposalpipe/up,/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers,/obj/machinery/atmospherics/pipe/zpipe/up/supply,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/cable{d1 = 16; d2 = 0; icon_state = "16-0"},/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport)
-"apH" = (/obj/item/weapon/caution/cone,/turf/simulated/floor,/area/maintenance/firstdeck/foreport)
+"apH" = (/obj/item/clothing/head/cone,/turf/simulated/floor,/area/maintenance/firstdeck/foreport)
"apI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport)
"apJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/alarm{dir = 8; pixel_x = 22; pixel_y = 0},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport)
"apK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 10},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fpcenter)
diff --git a/maps/submaps/engine_submaps/engine_tesla.dmm b/maps/submaps/engine_submaps/engine_tesla.dmm
index 05e3a7d202e..0cbbf909669 100644
--- a/maps/submaps/engine_submaps/engine_tesla.dmm
+++ b/maps/submaps/engine_submaps/engine_tesla.dmm
@@ -24,7 +24,9 @@
/obj/machinery/atmospherics/portables_connector{
dir = 4
},
-/obj/machinery/portable_atmospherics/canister/air/airlock,
+/obj/machinery/portable_atmospherics/canister/air/airlock{
+ start_pressure = 4559.63
+ },
/turf/simulated/floor,
/area/engineering/engine_gas)
"ah" = (
diff --git a/maps/submaps/surface_submaps/mountains/mountains.dm b/maps/submaps/surface_submaps/mountains/mountains.dm
index e36bb1a5bae..f0e09d723d2 100644
--- a/maps/submaps/surface_submaps/mountains/mountains.dm
+++ b/maps/submaps/surface_submaps/mountains/mountains.dm
@@ -343,7 +343,7 @@
cost = 20
fixed_orientation = TRUE
-/datum/map_template/surface/mountains/deep/excavation1
+/datum/map_template/surface/mountains/normal/excavation1 //VOREStation Edit
name = "Excavation Site"
desc = "An abandoned mining site."
mappath = 'maps/submaps/surface_submaps/mountains/excavation1.dmm'
diff --git a/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm b/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm
index 7da857ef053..7ee0f3cfa81 100644
--- a/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm
+++ b/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm
@@ -1,6 +1,6 @@
"aa" = (/turf/template_noop,/area/template_noop)
"ab" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"ac" = (/obj/item/weapon/caution/cone,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"ac" = (/obj/item/clothing/head/cone,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"ad" = (/turf/simulated/shuttle/wall,/area/submap/cave/qShuttle)
"ae" = (/obj/structure/inflatable,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"af" = (/obj/structure/inflatable/door,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
diff --git a/maps/submaps/surface_submaps/plains/hotspring.dmm b/maps/submaps/surface_submaps/plains/hotspring.dmm
new file mode 100644
index 00000000000..70f5fe2d855
--- /dev/null
+++ b/maps/submaps/surface_submaps/plains/hotspring.dmm
@@ -0,0 +1,61 @@
+"a" = (/turf/template_noop,/area/submap/hotspring)
+"c" = (/obj/structure/bonfire/sifwood,/turf/simulated/floor/outdoors/dirt,/area/submap/hotspring)
+"d" = (/obj/effect/effect/steam,/turf/simulated/floor/water/shoreline/corner{dir = 4},/area/submap/hotspring)
+"e" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/loot_pile/maint/trash,/turf/simulated/floor/outdoors/grass/sif,/area/submap/hotspring)
+"f" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood/sif,/area/submap/hotspring)
+"g" = (/turf/simulated/floor/outdoors/mud,/area/submap/hotspring)
+"h" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/outdoors/grass/sif,/area/submap/hotspring)
+"i" = (/obj/random/trash,/turf/simulated/floor/outdoors/grass/sif,/area/submap/hotspring)
+"j" = (/obj/structure/table/rack,/obj/item/weapon/storage/fancy/candle_box,/obj/item/weapon/flame/lighter/random{pixel_x = 7},/obj/item/weapon/storage/fancy/candle_box{pixel_x = -6},/obj/item/weapon/storage/firstaid{pixel_x = 4; pixel_y = -6},/obj/item/weapon/wrapping_paper,/turf/simulated/floor/wood/sif,/area/submap/hotspring)
+"k" = (/obj/effect/effect/steam,/obj/effect/map_effect/interval/effect_emitter/steam,/turf/simulated/floor/water,/area/submap/hotspring)
+"m" = (/obj/effect/effect/steam,/turf/simulated/floor/water/shoreline/corner,/area/submap/hotspring)
+"n" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood/sif,/area/submap/hotspring)
+"o" = (/obj/structure/table/woodentable,/obj/item/weapon/material/harpoon,/obj/item/pizzabox/vegetable,/turf/simulated/floor/wood/sif,/area/submap/hotspring)
+"p" = (/obj/effect/effect/steam,/turf/simulated/floor/water/shoreline{dir = 1},/area/submap/hotspring)
+"r" = (/obj/item/weapon/material/shard,/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/wood/sif,/area/submap/hotspring)
+"s" = (/obj/random/junk,/turf/simulated/floor/outdoors/dirt,/area/submap/hotspring)
+"t" = (/obj/structure/table/bench/wooden,/turf/simulated/floor/outdoors/dirt,/area/submap/hotspring)
+"u" = (/obj/random/junk,/turf/simulated/floor/outdoors/mud,/area/submap/hotspring)
+"v" = (/obj/effect/effect/steam,/turf/simulated/floor/water/shoreline/corner{dir = 1},/area/submap/hotspring)
+"w" = (/obj/structure/closet/crate/bin,/turf/simulated/floor/wood/sif/broken,/area/submap/hotspring)
+"x" = (/obj/structure/table/woodentable,/obj/item/trash/candle,/turf/simulated/floor/wood/sif,/area/submap/hotspring)
+"z" = (/obj/effect/effect/steam,/turf/simulated/floor/water/shoreline/corner{dir = 8},/area/submap/hotspring)
+"A" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/hotspring)
+"C" = (/obj/effect/effect/steam,/turf/simulated/floor/water/shoreline{dir = 8},/area/submap/hotspring)
+"D" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/template_noop,/area/submap/hotspring)
+"E" = (/obj/effect/effect/steam,/turf/simulated/floor/water/shoreline,/area/submap/hotspring)
+"F" = (/turf/simulated/floor/outdoors/dirt,/area/submap/hotspring)
+"H" = (/obj/random/trash,/turf/simulated/floor/outdoors/mud,/area/submap/hotspring)
+"I" = (/obj/effect/effect/steam,/turf/simulated/floor/water/shoreline{dir = 9},/area/submap/hotspring)
+"J" = (/obj/structure/simple_door/sifwood,/turf/simulated/floor/wood/sif,/area/submap/hotspring)
+"K" = (/turf/simulated/floor/outdoors/grass/sif,/area/submap/hotspring)
+"L" = (/obj/item/weapon/inflatable_duck,/obj/effect/effect/steam,/turf/simulated/floor/water/shoreline,/area/submap/hotspring)
+"M" = (/obj/random/junk,/obj/random/junk,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood/sif/broken,/area/submap/hotspring)
+"N" = (/turf/simulated/floor/outdoors/rocks,/area/submap/hotspring)
+"O" = (/obj/structure/loot_pile/maint/trash,/turf/template_noop,/area/submap/hotspring)
+"P" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/weapon/material/shard{pixel_x = 4; pixel_y = 7},/turf/template_noop,/area/submap/hotspring)
+"R" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/item/weapon/material/shard,/obj/structure/loot_pile/maint/trash,/turf/template_noop,/area/submap/hotspring)
+"T" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood/sif/broken,/area/submap/hotspring)
+"U" = (/obj/structure/table/rack,/obj/item/clothing/under/swimsuit/striped,/obj/item/clothing/under/swimsuit/stripper/stripper_pink,/turf/simulated/floor/wood/sif,/area/submap/hotspring)
+"V" = (/obj/effect/effect/steam,/turf/simulated/floor/water/shoreline{dir = 6},/area/submap/hotspring)
+"X" = (/obj/random/junk,/obj/random/junk,/turf/simulated/floor/outdoors/dirt,/area/submap/hotspring)
+"Y" = (/turf/simulated/wall/log_sif,/area/submap/hotspring)
+"Z" = (/obj/item/weapon/material/shard,/obj/item/weapon/material/shard{pixel_x = 5},/turf/template_noop,/area/submap/hotspring)
+
+(1,1,1) = {"
+DYYYYYRaaaaFaaa
+DoxwjUZaaaKFaga
+ArMnfTeKKKFKKKa
+PYYYJYhtttuFFKa
+aOKXggFggHgNgFK
+aaKKFggNmEvggKa
+aatKsgmLVIdgsKa
+aFcFggCkIdNFKia
+aatKFgzpdgFKKKa
+aaKFugNgggsKKFg
+aaKKFtttFgFKFKa
+aaKKiKKKKFKKFKa
+aaKKFKFKKKKFKKa
+aKgFaagFaaaaaKa
+aaaaaaaaaaaaaaa
+"}
diff --git a/maps/submaps/surface_submaps/plains/lonehome.dmm b/maps/submaps/surface_submaps/plains/lonehome.dmm
new file mode 100644
index 00000000000..49d75bc6240
--- /dev/null
+++ b/maps/submaps/surface_submaps/plains/lonehome.dmm
@@ -0,0 +1,184 @@
+"at" = (/obj/structure/bed/chair/sofa/black/right{dir = 1},/turf/simulated/floor/wood,/area/submap/lonehome)
+"au" = (/obj/item/organ/internal/lungs/vox,/obj/item/weapon/beartrap/hunting{anchored = 1; deployed = 1},/obj/structure/curtain/black,/obj/random/junk,/obj/random/junk,/obj/random/junk,/turf/simulated/floor,/area/submap/lonehome)
+"aw" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/lonehome)
+"aI" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/flora/pottedplant/fern{pixel_y = 12},/obj/structure/table/bench/wooden,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/lonehome)
+"aK" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/lonehome)
+"bb" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood/broken,/area/submap/lonehome)
+"ck" = (/obj/machinery/light/small{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/lonehome)
+"cn" = (/obj/machinery/light{dir = 8},/obj/item/weapon/paper/courtroom,/obj/item/weapon/paper/courtroom,/obj/item/weapon/paper_bin,/obj/structure/table/wooden_reinforced,/turf/simulated/floor/wood,/area/submap/lonehome)
+"cE" = (/obj/structure/table/marble,/obj/item/organ/internal/brain/grey,/obj/item/weapon/material/knife/plastic,/turf/simulated/floor,/area/submap/lonehome)
+"cS" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/lonehome)
+"dR" = (/obj/item/weapon/paper{info = "Seems to be filled with odd runes drawn with blood"; name = "Blood stained paper"},/turf/simulated/floor/carpet/sblucarpet,/area/submap/lonehome)
+"ew" = (/obj/machinery/light/small{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/lonehome)
+"eL" = (/obj/machinery/button/windowtint{id = "h_master"},/turf/simulated/wall/wood,/area/submap/lonehome)
+"fl" = (/obj/structure/loot_pile/maint/trash,/turf/template_noop,/area/submap/lonehome)
+"gn" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/template_noop,/area/submap/lonehome)
+"gI" = (/obj/structure/table/rack,/obj/item/weapon/material/knife/ritual,/obj/structure/curtain/open/bed,/obj/item/clothing/under/suit_jacket/really_black,/obj/item/clothing/under/suit_jacket/navy,/obj/item/clothing/head/soft/solgov/veteranhat,/turf/simulated/floor/wood,/area/submap/lonehome)
+"hh" = (/obj/item/weapon/reagent_containers/food/condiment/small/peppermill,/obj/item/weapon/pen,/turf/simulated/floor/wood,/area/submap/lonehome)
+"hq" = (/obj/structure/table/bench/marble,/obj/structure/window/reinforced/polarized{id = "h_master"},/obj/structure/flora/pottedplant/dead{pixel_y = 7},/turf/simulated/floor/wood,/area/submap/lonehome)
+"hH" = (/obj/structure/table/marble,/obj/item/weapon/material/sharpeningkit,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/tiled/white,/area/submap/lonehome)
+"hK" = (/obj/structure/bed/chair/wood{dir = 1},/obj/structure/window/reinforced/polarized{dir = 4; id = "h_kitchen"},/turf/simulated/floor/wood,/area/submap/lonehome)
+"ii" = (/obj/random/junk,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/lonehome)
+"ip" = (/obj/item/weapon/pen,/turf/simulated/floor/wood,/area/submap/lonehome)
+"iw" = (/turf/simulated/floor/wood/broken,/area/submap/lonehome)
+"iQ" = (/obj/structure/table/marble,/obj/item/weapon/material/knife/butch,/obj/item/weapon/material/kitchen/rollingpin,/turf/simulated/floor/tiled/white,/area/submap/lonehome)
+"jt" = (/obj/structure/fence/corner{dir = 8},/turf/simulated/floor/outdoors/grass/heavy,/area/submap/lonehome)
+"jy" = (/obj/item/weapon/material/shard,/obj/item/weapon/material/shard{pixel_x = 5; pixel_y = 10},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/lonehome)
+"jH" = (/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 2},/turf/simulated/floor/wood,/area/submap/lonehome)
+"jK" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/wood,/area/submap/lonehome)
+"kg" = (/obj/structure/table/marble,/obj/item/weapon/material/kitchen/utensil/spoon,/turf/simulated/floor/tiled/white,/area/submap/lonehome)
+"kn" = (/obj/structure/bed/chair/wood,/obj/machinery/button/windowtint{id = "h_kitchen"},/obj/structure/window/reinforced/polarized{dir = 4; id = "h_kitchen"},/turf/simulated/floor/wood,/area/submap/lonehome)
+"ks" = (/obj/item/weapon/photo,/obj/item/weapon/photo{pixel_x = 4},/obj/structure/table/bench/wooden,/turf/simulated/floor/wood,/area/submap/lonehome)
+"kT" = (/obj/machinery/light/small{dir = 1},/obj/structure/bed/padded,/obj/item/weapon/book/custom_library/fiction/truelovehathmyheart,/obj/item/weapon/bedsheet/clown,/turf/simulated/floor/wood,/area/submap/lonehome)
+"kU" = (/obj/item/weapon/chainsaw,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/table/rack,/turf/simulated/floor,/area/submap/lonehome)
+"ld" = (/obj/machinery/power/port_gen/pacman,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/lonehome)
+"lz" = (/obj/item/weapon/reagent_containers/glass/rag,/obj/item/clothing/gloves/ring/engagement,/obj/structure/table/wooden_reinforced,/turf/simulated/floor/wood,/area/submap/lonehome)
+"lB" = (/obj/machinery/button/windowtint{id = "h_kitchen"},/obj/item/trash/plate,/obj/structure/table/sifwooden_reinforced,/obj/structure/window/reinforced/polarized{dir = 4; id = "h_kitchen"},/turf/simulated/floor/wood,/area/submap/lonehome)
+"lJ" = (/obj/item/device/tape,/obj/structure/table/wooden_reinforced,/turf/simulated/floor/wood,/area/submap/lonehome)
+"lS" = (/obj/item/organ/internal/liver,/obj/random/trash,/turf/simulated/floor,/area/submap/lonehome)
+"ma" = (/turf/simulated/wall/wood,/area/submap/lonehome)
+"mn" = (/obj/item/clothing/mask/muzzle,/obj/random/trash,/turf/simulated/floor,/area/submap/lonehome)
+"na" = (/mob/living/simple_mob/animal/passive/cat/bones{desc = "A very odd behaved cat, their scratched name tag reads 'Felix'. They look very malnourished."; name = "Felix"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/lonehome)
+"ni" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/lonehome)
+"nz" = (/obj/item/device/flashlight{pixel_x = 2; pixel_y = 2},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/lonehome)
+"nD" = (/obj/structure/bed/chair/sofa/black,/turf/simulated/floor/wood,/area/submap/lonehome)
+"nL" = (/obj/machinery/appliance/cooker/oven,/turf/simulated/floor/tiled/white,/area/submap/lonehome)
+"nT" = (/obj/item/stack/cable_coil,/turf/simulated/floor/wood/broken,/area/submap/lonehome)
+"ox" = (/obj/structure/closet/cabinet,/obj/item/weapon/storage/wallet/random,/obj/item/weapon/towel/random,/obj/item/weapon/melee/umbrella/random,/obj/random/ammo,/obj/random/cigarettes,/obj/random/contraband,/obj/random/junk,/obj/random/maintenance/security,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/turf/simulated/floor/wood,/area/submap/lonehome)
+"oS" = (/obj/structure/closet/cabinet,/obj/random/tech_supply/component,/obj/random/tech_supply/component,/obj/random/tech_supply/component,/obj/random/tech_supply/component,/obj/random/tech_supply/component,/obj/random/toolbox,/obj/random/toolbox,/turf/simulated/floor/wood,/area/submap/lonehome)
+"oZ" = (/obj/structure/bed/chair/sofa/black/left,/turf/simulated/floor/wood,/area/submap/lonehome)
+"pb" = (/obj/structure/fence/cut/large{dir = 8},/turf/template_noop,/area/submap/lonehome)
+"po" = (/obj/structure/sign/periodic,/turf/simulated/wall/wood,/area/submap/lonehome)
+"pX" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood/broken,/area/submap/lonehome)
+"qa" = (/obj/structure/fence,/turf/simulated/floor/outdoors/grass/heavy,/area/submap/lonehome)
+"qi" = (/obj/structure/table/marble,/obj/machinery/chemical_dispenser/bar_alc/full,/turf/simulated/floor/tiled/white,/area/submap/lonehome)
+"qk" = (/obj/structure/table/marble,/obj/machinery/light{dir = 1},/obj/machinery/microwave,/turf/simulated/floor/tiled/white,/area/submap/lonehome)
+"qo" = (/obj/item/weapon/phone,/obj/structure/table/bench/wooden,/obj/item/weapon/paper{info = "Seems to be filled with odd runes drawn with blood"; name = "Blood stained paper"},/turf/simulated/floor/wood,/area/submap/lonehome)
+"qE" = (/obj/effect/decal/cleanable/blood/gibs,/turf/simulated/floor,/area/submap/lonehome)
+"qN" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/sblucarpet,/area/submap/lonehome)
+"rg" = (/obj/structure/window/reinforced/polarized{dir = 8; id = "h_living"},/obj/structure/bed/chair/sofa/black{dir = 4},/turf/simulated/floor/wood,/area/submap/lonehome)
+"ro" = (/obj/item/weapon/pack/cardemon,/turf/simulated/floor/carpet/bcarpet,/area/submap/lonehome)
+"ru" = (/obj/structure/table/rack,/obj/item/weapon/makeover,/obj/structure/curtain/open/bed,/turf/simulated/floor/wood,/area/submap/lonehome)
+"rE" = (/obj/item/weapon/material/shard,/turf/simulated/floor/outdoors/grass/heavy,/area/submap/lonehome)
+"tp" = (/obj/structure/flora/pottedplant/bamboo{pixel_y = 12},/obj/structure/table/bench/wooden,/turf/simulated/floor/wood,/area/submap/lonehome)
+"uc" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/lonehome)
+"uh" = (/obj/structure/fence/cut/medium{dir = 4},/turf/simulated/floor/outdoors/grass/heavy,/area/submap/lonehome)
+"um" = (/obj/structure/window/reinforced/tinted/frosted{dir = 8},/obj/structure/table/wooden_reinforced,/obj/item/weapon/book/tome,/turf/simulated/floor/wood,/area/submap/lonehome)
+"uo" = (/obj/item/weapon/material/shard,/turf/simulated/floor/outdoors/dirt,/area/submap/lonehome)
+"ur" = (/obj/structure/table/marble,/obj/item/weapon/material/knife/hook,/turf/simulated/floor,/area/submap/lonehome)
+"uw" = (/obj/item/seeds/random,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/wooden_reinforced,/turf/simulated/floor/wood,/area/submap/lonehome)
+"uC" = (/obj/item/seeds/random,/obj/item/seeds/random,/obj/machinery/space_heater,/turf/simulated/floor/wood,/area/submap/lonehome)
+"uI" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/outdoors/grass/heavy,/area/submap/lonehome)
+"uK" = (/obj/item/weapon/material/minihoe,/turf/simulated/floor/outdoors/grass/heavy,/area/submap/lonehome)
+"uR" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/lonehome)
+"ve" = (/obj/structure/table/bench/glass,/turf/simulated/floor/carpet/sblucarpet,/area/submap/lonehome)
+"wa" = (/turf/simulated/floor/wood,/area/submap/lonehome)
+"wj" = (/obj/item/weapon/bedsheet/rddouble,/turf/simulated/floor/wood,/area/submap/lonehome)
+"xr" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/bcarpet,/area/submap/lonehome)
+"xM" = (/obj/structure/fence/cut/large{dir = 8},/turf/simulated/floor/outdoors/grass/heavy,/area/submap/lonehome)
+"xO" = (/obj/item/clothing/suit/straight_jacket,/turf/simulated/floor,/area/submap/lonehome)
+"yh" = (/turf/simulated/floor/outdoors/dirt,/area/submap/lonehome)
+"yn" = (/obj/structure/window/reinforced/polarized{dir = 8; id = "h_living"},/obj/structure/bed/chair/sofa/black/corner{dir = 1},/turf/simulated/floor/wood,/area/submap/lonehome)
+"yr" = (/obj/item/weapon/reagent_containers/blood,/obj/item/weapon/pack/cardemon,/obj/item/weapon/pack/cardemon,/obj/item/weapon/deck/tarot,/obj/structure/table/wooden_reinforced,/turf/simulated/floor/wood,/area/submap/lonehome)
+"yt" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/sblucarpet,/area/submap/lonehome)
+"yF" = (/obj/structure/bed/chair/sofa/black{dir = 1},/turf/simulated/floor/wood,/area/submap/lonehome)
+"yQ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/submap/lonehome)
+"zN" = (/obj/item/weapon/paper{info = "Seems to be filled with odd runes drawn with blood"; name = "Blood stained paper"},/turf/simulated/floor/wood,/area/submap/lonehome)
+"AQ" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/item/weapon/material/shard,/turf/simulated/floor/outdoors/dirt,/area/submap/lonehome)
+"BH" = (/obj/item/weapon/paper{info = "F%$K this detective, I swear I can see them peeking from behind the window, these tinted glasses help but I swear I can still see them snooping around. His days are counted... I am so close to figuring this out, just need a few more days. Then Shepiffany will be part of the family once again, then our two kids and I can go back on having a normal life... a normal life..."; name = "Stained sheet of paper"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/sblucarpet,/area/submap/lonehome)
+"Dd" = (/obj/machinery/button/windowtint{id = "h_kitchen"},/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/condimentbottles,/obj/item/weapon/reagent_containers/food/condiment/sugar,/obj/structure/curtain/open/bed,/obj/structure/table/rack,/obj/structure/window/reinforced/polarized{dir = 4; id = "h_kitchen"},/turf/simulated/floor/tiled/white,/area/submap/lonehome)
+"Dk" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/submap/lonehome)
+"DE" = (/obj/structure/window/reinforced/tinted/frosted{dir = 8},/obj/item/weapon/storage/box/glasses/square{pixel_y = -2},/obj/item/weapon/storage/box/glass_extras/sticks{pixel_y = 4},/obj/item/weapon/storage/box/glass_extras/straws{pixel_y = 7},/obj/item/weapon/packageWrap,/obj/structure/curtain/open/bed,/obj/item/weapon/material/kitchen/utensil/fork,/obj/item/weapon/material/kitchen/utensil/fork,/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 2},/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 2},/obj/structure/table/rack,/turf/simulated/floor/tiled/white,/area/submap/lonehome)
+"DG" = (/obj/structure/simple_door/wood,/turf/simulated/floor,/area/submap/lonehome)
+"DL" = (/obj/structure/closet/cabinet,/obj/item/weapon/storage/wallet/random,/obj/item/weapon/towel/random,/obj/item/weapon/melee/umbrella/random,/obj/random/carp_plushie,/obj/random/curseditem,/obj/random/junk,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/turf/simulated/floor/wood,/area/submap/lonehome)
+"Ea" = (/obj/item/weapon/pack/cardemon,/turf/simulated/floor/wood,/area/submap/lonehome)
+"Ek" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/outdoors/dirt,/area/submap/lonehome)
+"Eo" = (/obj/random/junk,/turf/simulated/floor/carpet/sblucarpet,/area/submap/lonehome)
+"Ex" = (/obj/item/weapon/paper{info = "Seems to be filled with odd runes drawn with blood"; name = "Blood stained paper"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood/broken,/area/submap/lonehome)
+"EZ" = (/obj/effect/decal/cleanable/blood/gibs,/obj/structure/table/marble,/obj/item/organ/internal/intestine/unathi,/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/bone/ribs,/obj/item/weapon/bone/skull{pixel_x = 4; pixel_y = 6},/turf/simulated/floor,/area/submap/lonehome)
+"Fh" = (/obj/structure/coatrack,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/lonehome)
+"Fu" = (/turf/simulated/floor/carpet/sblucarpet,/area/submap/lonehome)
+"Fy" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/outdoors/grass/heavy,/area/submap/lonehome)
+"FN" = (/obj/machinery/button/windowtint{id = "h_living"},/turf/simulated/wall/wood,/area/submap/lonehome)
+"Gm" = (/obj/machinery/button/windowtint{id = "h_kitchen"},/turf/simulated/wall/wood,/area/submap/lonehome)
+"Gr" = (/obj/structure/table/bench/marble,/obj/structure/window/reinforced/polarized{id = "h_master"},/obj/structure/flora/pottedplant/bamboo{pixel_y = 7},/turf/simulated/floor/wood,/area/submap/lonehome)
+"GA" = (/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/poison,/obj/structure/table/sifwooden_reinforced,/turf/simulated/floor/wood,/area/submap/lonehome)
+"GS" = (/obj/structure/table/steel,/obj/item/stack/material/phoron{amount = 5},/obj/item/stack/material/phoron{amount = 5},/obj/fiftyspawner/wood,/obj/fiftyspawner/steel,/turf/simulated/floor,/area/submap/lonehome)
+"Hc" = (/obj/effect/decal/cleanable/blood/gibs,/obj/structure/kitchenspike,/obj/effect/rune,/turf/simulated/floor,/area/submap/lonehome)
+"Hu" = (/obj/item/frame/apc,/obj/machinery/light_switch{pixel_x = 11; pixel_y = 22},/obj/random/junk,/turf/simulated/floor,/area/submap/lonehome)
+"Im" = (/obj/structure/window/reinforced/tinted/frosted{dir = 8},/turf/simulated/floor/wood,/area/submap/lonehome)
+"Ji" = (/obj/structure/fence/cut/medium,/turf/simulated/floor/outdoors/grass/heavy,/area/submap/lonehome)
+"Jq" = (/obj/structure/bed/double/padded,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/wood,/area/submap/lonehome)
+"JW" = (/obj/structure/simple_door/wood,/turf/simulated/floor/wood,/area/submap/lonehome)
+"Kb" = (/obj/structure/loot_pile/maint/trash,/turf/simulated/floor/outdoors/grass/heavy,/area/submap/lonehome)
+"Ki" = (/obj/structure/closet/cabinet,/obj/random/multiple,/obj/random/multiple,/obj/random/multiple,/obj/random/multiple,/obj/random/multiple,/obj/random/toy,/obj/random/toy,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/turf/simulated/floor/wood,/area/submap/lonehome)
+"Kr" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/item/weapon/material/shard,/turf/simulated/floor/outdoors/grass/heavy,/area/submap/lonehome)
+"Kw" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/random/meat,/obj/random/meat,/obj/random/meat,/obj/random/meat,/obj/random/meat,/turf/simulated/floor/tiled/white,/area/submap/lonehome)
+"Ll" = (/obj/machinery/space_heater,/turf/simulated/floor/wood,/area/submap/lonehome)
+"LS" = (/obj/item/trash/plate,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker,/obj/structure/table/sifwooden_reinforced,/turf/simulated/floor/wood,/area/submap/lonehome)
+"Mb" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/wood,/area/submap/lonehome)
+"Mn" = (/obj/machinery/button/windowtint{id = "h_kitchen"},/obj/item/weapon/reagent_containers/food/condiment/enzyme,/obj/structure/window/reinforced/polarized{dir = 4; id = "h_kitchen"},/turf/simulated/floor/tiled/white,/area/submap/lonehome)
+"MM" = (/turf/simulated/floor/outdoors/grass/heavy,/area/submap/lonehome)
+"Nx" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/submap/lonehome)
+"ND" = (/obj/structure/table/bench/marble,/obj/structure/window/reinforced/polarized{dir = 8; id = "h_living"},/turf/simulated/floor/wood,/area/submap/lonehome)
+"NK" = (/obj/random/trash,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/sblucarpet,/area/submap/lonehome)
+"NL" = (/turf/template_noop,/area/submap/lonehome)
+"Od" = (/obj/item/weapon/extinguisher{pixel_x = 8; pixel_y = 1},/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/medical/lite,/obj/random/medical/lite,/obj/structure/mopbucket{pixel_x = -8; pixel_y = -4},/obj/item/weapon/mop,/obj/item/device/multitool,/obj/item/device/flashlight{pixel_x = 2; pixel_y = 2},/obj/random/unidentified_medicine,/obj/random/unidentified_medicine,/obj/random/unidentified_medicine,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/submap/lonehome)
+"Oe" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/template_noop,/area/submap/lonehome)
+"Or" = (/obj/structure/table/bench/marble,/obj/structure/window/reinforced/polarized{id = "h_master"},/obj/structure/flora/pottedplant/overgrown{pixel_y = 7},/turf/simulated/floor/wood,/area/submap/lonehome)
+"OL" = (/obj/machinery/button/windowtint{id = "h_kitchen"},/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 2},/obj/structure/table/sifwooden_reinforced,/obj/structure/window/reinforced/polarized{dir = 4; id = "h_kitchen"},/turf/simulated/floor/wood,/area/submap/lonehome)
+"Pc" = (/obj/item/weapon/material/kitchen/utensil/fork,/obj/random/trash,/turf/simulated/floor/wood,/area/submap/lonehome)
+"Qx" = (/obj/item/weapon/material/shard{pixel_x = 6},/obj/item/weapon/material/shard,/turf/simulated/floor/outdoors/dirt,/area/submap/lonehome)
+"QU" = (/obj/effect/decal/cleanable/blood/gibs,/obj/item/clothing/gloves/yellow,/turf/simulated/floor,/area/submap/lonehome)
+"QX" = (/obj/random/trash,/turf/simulated/floor/wood,/area/submap/lonehome)
+"RI" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/outdoors/dirt,/area/submap/lonehome)
+"Sd" = (/obj/structure/fence/corner,/turf/template_noop,/area/submap/lonehome)
+"Sp" = (/obj/item/weapon/material/shard,/obj/item/weapon/material/shard{pixel_x = 5; pixel_y = 3},/turf/simulated/floor/outdoors/dirt,/area/submap/lonehome)
+"SN" = (/obj/structure/bed/chair/wood/wings{dir = 1},/obj/effect/gibspawner/human,/turf/simulated/floor/carpet/sblucarpet,/area/submap/lonehome)
+"Tg" = (/obj/item/weapon/material/kitchen/utensil/fork,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/lonehome)
+"Tw" = (/obj/item/weapon/cell/high/empty,/turf/simulated/floor/carpet/sblucarpet,/area/submap/lonehome)
+"TX" = (/obj/item/clothing/suit/storage/apron/white,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/submap/lonehome)
+"Uj" = (/obj/machinery/light/small,/obj/item/weapon/ore/diamond,/obj/structure/sign/goldenplaque{desc = "Done No Harm."; name = "Best Doctor 2552"; pixel_y = -32},/obj/structure/table/wooden_reinforced,/turf/simulated/floor/wood,/area/submap/lonehome)
+"UA" = (/obj/structure/fence/door/opened,/turf/template_noop,/area/submap/lonehome)
+"UB" = (/obj/item/weapon/storage/box/characters,/obj/structure/curtain/open/bed,/obj/structure/table/rack,/turf/simulated/floor/wood,/area/submap/lonehome)
+"US" = (/turf/simulated/floor/tiled/white,/area/submap/lonehome)
+"Vn" = (/obj/item/weapon/reagent_containers/food/condiment/small/sugar,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood/broken,/area/submap/lonehome)
+"VI" = (/obj/structure/fence{dir = 4},/turf/template_noop,/area/submap/lonehome)
+"Wf" = (/obj/structure/bed/padded,/obj/random/trash,/obj/random/trash,/obj/random/trash,/obj/random/trash,/obj/random/trash,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/item/weapon/bedsheet/ian,/turf/simulated/floor/wood,/area/submap/lonehome)
+"Wj" = (/obj/machinery/gibber/autogibber{emagged = 1},/turf/simulated/floor,/area/submap/lonehome)
+"Wn" = (/obj/structure/fence/cut/medium{dir = 4},/turf/template_noop,/area/submap/lonehome)
+"WQ" = (/obj/structure/window/reinforced/polarized{dir = 8; id = "h_living"},/obj/structure/bed/chair/sofa/black/corner{dir = 4},/turf/simulated/floor/wood,/area/submap/lonehome)
+"Xc" = (/obj/item/weapon/module/power_control,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/lonehome)
+"Xz" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/lonehome)
+"Ys" = (/obj/item/weapon/pen/fountain,/turf/simulated/floor/wood,/area/submap/lonehome)
+"YK" = (/obj/structure/table/marble,/obj/item/organ/internal/intestine/unathi{pixel_x = -1; pixel_y = 8},/obj/item/organ/internal/lungs,/turf/simulated/floor,/area/submap/lonehome)
+"Zi" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/submap/lonehome)
+"ZR" = (/obj/structure/fence{dir = 4},/turf/simulated/floor/outdoors/grass/heavy,/area/submap/lonehome)
+
+(1,1,1) = {"
+NLNLNLNLNLyhNLyhNLNLNLNLNLNLNLNLNLNLNLNL
+NLNLNLNLyhyhyhNLNLNLNLNLNLNLNLNLNLawNLNL
+NLNLNLNLyhNLNLNLawNLNLNLNLNLNLNLNLNLNLNL
+NLNLyhmayhmaNLNLNLNLNLNLNLNLNLNLNLNLNLNL
+NLNLmamaJWmamaflNLflmamaucucmamaNLNLNLNL
+NLmaFNFhpXLlucmamamamaKwnLqkqimamamayhNL
+yhNLNDuRcSiwwalJmaOdmayQDkTXDkDEDdyhNLNL
+NLgnynnDoZpXiwQXucJWmaiQkghHyQUSMnAQNLNL
+XzSprgveFuFuEowaJWcSJWwauRiiTgjKknQxuoNL
+NLEkrgveFuqNqNNxmacSmaZinTiwiwLSOLRINLNL
+XzEkWQyFatwacSXctpjyaIuRuRVnPcGAlBXzNLNL
+NLucmamamamaucmamabbucipjHwahhMbhKOeyhNL
+NLmamarugIumuRExJWpXmauCuwUjlzGmmamaNLNL
+NLmaDLzNTwSNBHbbmackmamaucmamamaHcmamaNL
+NLmacnYsdRNKytksuccSmaUBImkTKimaxOWjmaNL
+NLmaoxnaNKFuqNJqmacSJWpXxrroyrmalSEZmaNL
+NLmapoLliwwawjqomauRmaLlEaWfoSmamncEmaNL
+NLflmamaOrGrhqeLmaiwmaaKmamamamaQUurmaNL
+MMNLmaKrFyKruIFymaJWmaldHuGSkUmaqEYKmaNL
+NLMMqaMMMMrEMMMMuKMMDGnininzewucaumamaNL
+NLMMJiMMMMMMMMMMMMKbmamamaucmamaucmaNLNL
+NLNLqaMMMMMMMMMMMMMMMMMMMMMMMMMMMMqaNLNL
+NLMMjtVIpbuhZRZRpbUAVIpbVIWnVIVIxMSdNLNL
+MMMMNLNLNLNLNLNLNLNLNLNLNLNLNLNLNLMMNLNL
+NLNLNLNLNLNLNLNLNLNLawNLNLNLNLNLNLNLNLNL
+"}
diff --git a/maps/submaps/surface_submaps/plains/methlab.dmm b/maps/submaps/surface_submaps/plains/methlab.dmm
new file mode 100644
index 00000000000..b419e7655d8
--- /dev/null
+++ b/maps/submaps/surface_submaps/plains/methlab.dmm
@@ -0,0 +1,141 @@
+"ai" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/fountain,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"as" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/steel_grid,/area/submap/methlab)
+"aY" = (/obj/item/weapon/material/shard{pixel_x = 5; pixel_y = 3},/obj/item/weapon/material/shard{pixel_x = 9},/turf/template_noop,/area/submap/methlab)
+"bn" = (/obj/structure/fence/cut/medium,/turf/template_noop,/area/submap/methlab)
+"bA" = (/obj/item/weapon/cell/hyper,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"bJ" = (/obj/effect/floor_decal/rust,/obj/random/maintenance,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"bQ" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/item/weapon/material/shard{pixel_x = 9},/obj/item/weapon/material/shard{pixel_x = 5},/turf/template_noop,/area/submap/methlab)
+"cg" = (/obj/structure/table/steel_reinforced,/obj/item/device/radio{anchored = 1; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; name = "Reception Emergency Phone"},/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"ck" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/item/seeds/ambrosiadeusseed,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/old_tile/white,/area/submap/methlab)
+"dy" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/effect/floor_decal/rust,/obj/random/maintenance,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"fr" = (/obj/structure/fence,/turf/template_noop,/area/submap/methlab)
+"fD" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/submap/methlab)
+"fY" = (/obj/item/stack/cable_coil,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/methlab)
+"hf" = (/turf/simulated/floor,/area/submap/methlab)
+"hj" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/floor,/area/submap/methlab)
+"hE" = (/obj/machinery/door/airlock/vault/bolted,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/methlab)
+"hQ" = (/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"ic" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light{dir = 8},/obj/item/seeds/ambrosiavulgarisseed,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/old_tile/white,/area/submap/methlab)
+"iz" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/methlab)
+"iN" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"jm" = (/obj/structure/fence{dir = 4},/turf/simulated/floor/outdoors/dirt,/area/submap/methlab)
+"jo" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/tiled/old_tile/white,/area/submap/methlab)
+"kp" = (/obj/effect/floor_decal/rust/mono_rusted3,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/old_tile/green,/area/submap/methlab)
+"lb" = (/obj/machinery/biogenerator,/turf/simulated/floor/tiled/old_tile/white,/area/submap/methlab)
+"lt" = (/obj/item/frame/apc,/obj/structure/table/steel,/obj/machinery/light_switch{pixel_x = 11; pixel_y = 22},/turf/simulated/floor,/area/submap/methlab)
+"lx" = (/turf/simulated/floor/outdoors/dirt,/area/submap/methlab)
+"lJ" = (/obj/structure/fence/corner,/turf/template_noop,/area/submap/methlab)
+"lN" = (/obj/structure/barricade,/obj/effect/floor_decal/steeldecal/steel_decals_central5,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"me" = (/obj/structure/salvageable/data,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"mi" = (/obj/effect/floor_decal/sign,/turf/simulated/wall,/area/submap/methlab)
+"mw" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"nq" = (/obj/random/junk,/turf/simulated/floor,/area/submap/methlab)
+"oo" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/item/seeds/ambrosiainfernusseed,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/old_tile/white,/area/submap/methlab)
+"oF" = (/obj/structure/fence/cut/large,/turf/template_noop,/area/submap/methlab)
+"oN" = (/turf/simulated/wall/r_wall,/area/submap/methlab)
+"pq" = (/obj/structure/bed/chair{dir = 8},/obj/random/junk,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"ps" = (/turf/template_noop,/area/submap/methlab)
+"rK" = (/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/methlab)
+"rU" = (/obj/item/clothing/under/suit_jacket,/obj/item/clothing/shoes/dress{pixel_y = -9},/obj/item/clothing/mask/demon,/obj/structure/curtain/black,/turf/simulated/floor/tiled/techfloor,/area/submap/methlab)
+"sI" = (/obj/machinery/light,/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"sW" = (/obj/item/weapon/material/shard{pixel_x = 9},/turf/template_noop,/area/submap/methlab)
+"tt" = (/obj/structure/table/steel_reinforced,/obj/structure/salvageable/personal,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"tz" = (/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/tiled/techfloor,/area/submap/methlab)
+"tL" = (/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"tQ" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/methlab)
+"uA" = (/obj/structure/fence/cut/large{dir = 8},/turf/template_noop,/area/submap/methlab)
+"uY" = (/obj/random/trash,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"wd" = (/turf/simulated/floor/tiled/old_tile/green,/area/submap/methlab)
+"wI" = (/obj/item/weapon/reagent_containers/dropper,/obj/random/junk,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"wQ" = (/obj/machinery/light{dir = 8},/turf/template_noop,/area/submap/methlab)
+"xM" = (/obj/machinery/door/airlock,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_grid,/area/submap/methlab)
+"xR" = (/obj/structure/loot_pile/maint/technical,/turf/template_noop,/area/submap/methlab)
+"yr" = (/obj/random/trash,/turf/simulated/floor,/area/submap/methlab)
+"yM" = (/obj/item/clothing/under/suit_jacket/really_black,/obj/item/clothing/shoes/dress{pixel_y = -9},/obj/item/clothing/mask/luchador,/obj/structure/curtain/black,/turf/simulated/floor/tiled/techfloor,/area/submap/methlab)
+"yY" = (/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"zu" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/old_tile/green,/area/submap/methlab)
+"zG" = (/obj/random/junk,/turf/template_noop,/area/submap/methlab)
+"zH" = (/obj/machinery/light{dir = 4},/turf/template_noop,/area/submap/methlab)
+"zZ" = (/obj/structure/fence/corner{dir = 4},/turf/template_noop,/area/submap/methlab)
+"AB" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"AM" = (/mob/living/simple_mob/humanoid/merc/melee/poi,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"AW" = (/obj/random/junk,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"BP" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"BR" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"BT" = (/obj/structure/safe/floor,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/obj/item/weapon/storage/bag/cash,/obj/item/weapon/storage/bag/cash,/turf/simulated/floor,/area/submap/methlab)
+"CH" = (/obj/item/seeds/ambrosiavulgarisseed,/obj/item/seeds/ambrosiavulgarisseed,/obj/item/seeds/ambrosiavulgarisseed,/obj/item/seeds/ambrosiainfernusseed,/obj/item/seeds/ambrosiainfernusseed,/obj/item/seeds/ambrosiainfernusseed,/obj/item/seeds/ambrosiadeusseed,/obj/item/seeds/ambrosiadeusseed,/obj/item/seeds/ambrosiadeusseed,/obj/structure/table/rack,/turf/simulated/floor/tiled/old_tile/white,/area/submap/methlab)
+"CL" = (/obj/structure/grille/rustic,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/tiled/old_tile/green,/area/submap/methlab)
+"CW" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/submap/methlab)
+"DG" = (/obj/structure/fence,/turf/simulated/floor/outdoors/dirt,/area/submap/methlab)
+"DP" = (/obj/item/weapon/reagent_containers/dropper,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"Eb" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/item/seeds/ambrosiadeusseed,/obj/effect/floor_decal/rust,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/old_tile/white,/area/submap/methlab)
+"EW" = (/obj/item/weapon/stool,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/methlab)
+"Fg" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/submap/methlab)
+"Gs" = (/obj/structure/table/steel_reinforced,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"GP" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/methlab)
+"HA" = (/obj/structure/window/reinforced/full,/obj/structure/grille/rustic,/turf/simulated/floor/tiled/old_tile/green,/area/submap/methlab)
+"HN" = (/obj/machinery/porta_turret/lasertag/red{name = "REAL turret"},/turf/simulated/floor,/area/submap/methlab)
+"HX" = (/obj/machinery/light,/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/barricade,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"Ih" = (/obj/structure/sign/warning/lethal_turrets,/turf/simulated/wall,/area/submap/methlab)
+"IH" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/old_tile/green,/area/submap/methlab)
+"IQ" = (/obj/item/clothing/accessory/stethoscope,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor,/area/submap/methlab)
+"JQ" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/effect/floor_decal/rust,/obj/effect/floor_decal/steeldecal/steel_decals3,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"Kg" = (/obj/structure/fence/cut/medium{dir = 4},/turf/simulated/floor/outdoors/dirt,/area/submap/methlab)
+"KK" = (/obj/machinery/chem_master,/obj/effect/floor_decal/rust/color_rustedfull,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"Lh" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"LM" = (/obj/random/trash,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"LX" = (/obj/item/weapon/stool,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"Mn" = (/obj/structure/barricade,/turf/simulated/floor,/area/submap/methlab)
+"Of" = (/obj/effect/wingrille_spawn/reinforced,/obj/structure/barricade,/turf/simulated/floor/tiled/techfloor,/area/submap/methlab)
+"Ol" = (/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/old_tile/green,/area/submap/methlab)
+"Oq" = (/obj/structure/fence{dir = 4},/turf/template_noop,/area/submap/methlab)
+"Py" = (/obj/random/trash,/turf/simulated/floor/outdoors/dirt,/area/submap/methlab)
+"PH" = (/obj/machinery/seed_extractor,/turf/simulated/floor/tiled/old_tile/white,/area/submap/methlab)
+"PO" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/module/power_control,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"PZ" = (/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/old_tile/green,/area/submap/methlab)
+"QP" = (/obj/structure/table/steel_reinforced,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"QW" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/old_tile/green,/area/submap/methlab)
+"Sn" = (/obj/structure/barricade,/obj/effect/floor_decal/steeldecal/steel_decals_central5,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"St" = (/obj/structure/salvageable/implant_container,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"Ti" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light{dir = 4},/obj/item/seeds/ambrosiadeusseed,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/old_tile/white,/area/submap/methlab)
+"Tr" = (/obj/item/weapon/stool,/obj/effect/floor_decal/rust,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"Ts" = (/obj/random/maintenance,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"Ty" = (/obj/item/clothing/under/suit_jacket/burgundy,/obj/item/clothing/shoes/dress{pixel_y = -9},/obj/item/clothing/mask/dolphin,/obj/structure/curtain/black,/turf/simulated/floor/tiled/techfloor,/area/submap/methlab)
+"TU" = (/obj/structure/safe/floor,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus,/obj/item/weapon/storage/bag/cash,/obj/item/weapon/storage/bag/cash,/turf/simulated/floor,/area/submap/methlab)
+"Uy" = (/obj/structure/fence/corner{dir = 8},/turf/template_noop,/area/submap/methlab)
+"UD" = (/obj/item/clothing/under/suit_jacket/red,/obj/item/clothing/shoes/dress{pixel_y = -9},/obj/item/clothing/mask/goblin,/obj/structure/curtain/black,/turf/simulated/floor/tiled/techfloor,/area/submap/methlab)
+"UO" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/template_noop,/area/submap/methlab)
+"Vf" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance/cargo,/turf/simulated/floor/tiled/old_tile/green,/area/submap/methlab)
+"Vu" = (/obj/structure/fence/cut/medium{dir = 4},/turf/template_noop,/area/submap/methlab)
+"Vw" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+"VV" = (/obj/structure/fence/corner{dir = 10},/turf/template_noop,/area/submap/methlab)
+"Wp" = (/obj/structure/loot_pile/maint/trash,/turf/template_noop,/area/submap/methlab)
+"Xi" = (/turf/simulated/wall,/area/submap/methlab)
+"Xo" = (/obj/effect/floor_decal/rust,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/old_tile/green,/area/submap/methlab)
+"Xr" = (/obj/item/stack/material/phoron{amount = 5},/obj/item/stack/material/phoron{amount = 5},/obj/item/weapon/extinguisher,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor,/area/submap/methlab)
+"Yz" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/item/seeds/ambrosiavulgarisseed,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/old_tile/white,/area/submap/methlab)
+"Zp" = (/obj/structure/grille/rustic,/obj/item/weapon/material/shard{pixel_x = 5; pixel_y = 3},/turf/simulated/floor/tiled/old_tile/green,/area/submap/methlab)
+"Zt" = (/obj/structure/salvageable/autolathe,/obj/effect/floor_decal/rust/color_rustedfull,/turf/simulated/floor/tiled/steel_dirty,/area/submap/methlab)
+
+(1,1,1) = {"
+UyOqOqVuOqOqOqVuOqOqOqjmjmOqOqOqVuOqOqzZ
+frpspspspspspspspspsXitzOfOfIhpspspspsfr
+frpspsHNpspsGPpspsXiXiKKGsQPXiXipsGPpsoF
+oFpspshfpspslxpspsXibArKDPTrmetQWppspsps
+pspspshfpszGPylxWptQKKABiNuYmeoNoNoNoNfr
+pspspsIhXiOfOftzXiXibJEWyYfYdyoNBTBToNfr
+frpsXiXiZtcgttaiStStKKPOABuYIQhEfDCWoNfr
+frlxtzmwhfTsLhpqhQAMwItLLXAWJQoNTUTUoNoF
+DGpsOfBRLhuYhfsIizLMVwBPHXSnlNoNoNoNoNfr
+frWpXitQXixMXiXirUTyyMUDXiasasXihjltXifr
+pspspspsHAkpHAXiXiXiXiXiXihfhfXiyrXrXifr
+oFpsHAHAHAOlHAHAHAxRxRWpXiMnMnXiFgXiXifr
+oFbQCLYzPZVfzuEbHApspspsXiasasXinqyrhfoF
+pssWHAYzPZPHOlckHApspszHmiyrhfIhwQpspsps
+pspsHAicwdjoVfTiHApspspspsPylxhfpspspsfr
+bnpsHAooXolbIHckHAUOpszGpslxpsHNpspspsfr
+frpsHAoowdCHQWckZpaYzGpspspslxpspsGPpsfr
+pspsHAHAHAHAHAHAHApspspspslxpspspspspsfr
+frpspspspspspspspspspspspspspspspspspsfr
+VVOqOqOqOqOquApsOqVuOqOqOqOqKgpsuAOquAlJ
+"}
diff --git a/maps/submaps/surface_submaps/plains/oldhotel.dmm b/maps/submaps/surface_submaps/plains/oldhotel.dmm
new file mode 100644
index 00000000000..57ba1213bb9
--- /dev/null
+++ b/maps/submaps/surface_submaps/plains/oldhotel.dmm
@@ -0,0 +1,153 @@
+"ai" = (/obj/random/trash,/turf/simulated/floor/carpet/purcarpet,/area/submap/oldhotel)
+"aJ" = (/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/obj/structure/table/standard,/obj/item/weapon/storage/firstaid,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"bb" = (/obj/machinery/light/small{dir = 4},/obj/item/device/multitool,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"bQ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"bW" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/oldhotel)
+"cA" = (/obj/structure/sink/kitchen,/turf/simulated/wall/wood,/area/submap/oldhotel)
+"cZ" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/carpet/oracarpet,/area/submap/oldhotel)
+"da" = (/obj/structure/bed/chair/sofa/teal/right,/turf/simulated/floor/carpet/blue,/area/submap/oldhotel)
+"dc" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/oracarpet,/area/submap/oldhotel)
+"dn" = (/obj/structure/table/woodentable,/obj/item/weapon/flame/candle/everburn,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"dr" = (/obj/item/stack/material/log/sif,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"dz" = (/obj/structure/sink{dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 4; pixel_x = -28},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"dL" = (/obj/structure/window/reinforced/full,/obj/structure/grille/rustic,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"eK" = (/obj/structure/bonfire/sifwood,/obj/structure/grille/rustic,/turf/simulated/floor/outdoors/dirt,/area/submap/oldhotel)
+"go" = (/obj/structure/simple_door/iron,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"gA" = (/turf/template_noop,/area/template_noop)
+"gM" = (/obj/machinery/appliance/cooker/oven,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"hc" = (/obj/random/trash,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"hp" = (/obj/random/junk,/turf/simulated/floor/carpet/sblucarpet,/area/submap/oldhotel)
+"hQ" = (/turf/simulated/wall/wood,/area/submap/oldhotel)
+"if" = (/obj/structure/bed/chair/sofa/teal/left{dir = 8},/turf/simulated/floor/carpet/blue,/area/submap/oldhotel)
+"iU" = (/obj/structure/table/woodentable,/obj/item/trash/tray,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"ja" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/carpet/purcarpet,/area/submap/oldhotel)
+"je" = (/obj/structure/closet/cabinet,/obj/item/device/binoculars/spyglass,/obj/random/contraband,/obj/random/contraband,/obj/random/maintenance/medical,/obj/random/cash,/obj/random/drinkbottle,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/random/maintenance,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"jO" = (/obj/structure/bed/chair/sofa/teal,/turf/simulated/floor/carpet/blue,/area/submap/oldhotel)
+"jS" = (/obj/structure/closet/cabinet,/obj/random/maintenance/medical,/obj/random/cash,/obj/random/cigarettes,/obj/random/firstaid,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"kh" = (/turf/simulated/floor/carpet/blue,/area/submap/oldhotel)
+"kw" = (/obj/structure/lightpost,/turf/template_noop,/area/submap/oldhotel)
+"kI" = (/turf/simulated/floor/carpet/sblucarpet,/area/submap/oldhotel)
+"kW" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker,/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 3},/turf/simulated/floor/wood,/area/submap/oldhotel)
+"lj" = (/obj/structure/table/wooden_reinforced,/obj/item/weapon/material/kitchen/rollingpin,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"ly" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/mimedouble,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"lZ" = (/obj/structure/table/woodentable,/obj/item/trash/tray,/turf/simulated/floor/carpet/blue,/area/submap/oldhotel)
+"mr" = (/obj/structure/table/woodentable,/obj/item/weapon/cell/hyper,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"mR" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/outdoors/dirt,/area/submap/oldhotel)
+"nD" = (/turf/simulated/floor,/area/submap/oldhotel)
+"nG" = (/obj/item/weapon/material/shard,/turf/simulated/floor/outdoors/dirt,/area/submap/oldhotel)
+"nZ" = (/obj/fiftyspawner/wood,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"op" = (/obj/structure/table/woodentable,/obj/random/cigarettes,/turf/simulated/floor/carpet/blue,/area/submap/oldhotel)
+"pi" = (/obj/item/weapon/material/shard,/obj/item/weapon/material/shard{icon_state = "medium"; pixel_x = 12; pixel_y = 7},/turf/template_noop,/area/submap/oldhotel)
+"pn" = (/obj/item/weapon/material/shard,/obj/item/weapon/material/shard{pixel_x = 7},/turf/template_noop,/area/submap/oldhotel)
+"qg" = (/turf/simulated/floor/wood,/area/submap/oldhotel)
+"qY" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"rb" = (/obj/item/weapon/module/power_control,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"rK" = (/obj/structure/table/woodentable,/obj/item/trash/candle,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"rZ" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/template_noop,/area/submap/oldhotel)
+"sd" = (/obj/structure/toilet,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"sV" = (/obj/structure/table/woodentable,/obj/random/contraband,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"tn" = (/obj/structure/simple_door/wood,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"tz" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/rddouble,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"tE" = (/obj/structure/table/woodentable,/obj/random/coin,/obj/item/weapon/reagent_containers/glass/rag,/turf/simulated/floor/carpet/blue,/area/submap/oldhotel)
+"tV" = (/obj/structure/bed/chair/wood{dir = 1},/obj/item/weapon/material/shard,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"uF" = (/obj/fiftyspawner/steel,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"uU" = (/obj/structure/closet/cabinet,/obj/random/maintenance/medical,/obj/random/carp_plushie,/obj/random/cigarettes,/obj/random/drinkbottle,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"vh" = (/obj/structure/bed/chair/sofa/teal/corner,/turf/simulated/floor/carpet/blue,/area/submap/oldhotel)
+"vA" = (/obj/structure/table/woodentable,/obj/item/weapon/telecube/randomized{name = "Odd artifact"},/turf/simulated/floor/wood,/area/submap/oldhotel)
+"vM" = (/obj/item/weapon/material/shard,/obj/item/weapon/material/shard{pixel_y = -6},/obj/item/weapon/material/shard{pixel_x = 9},/obj/structure/grille/broken/rustic,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"vN" = (/obj/random/humanoidremains,/obj/random/humanoidremains,/turf/simulated/floor/wood/broken,/area/submap/oldhotel)
+"vR" = (/obj/structure/table/woodentable,/obj/item/weapon/flame/candle/candelabra,/turf/simulated/floor/carpet/blue,/area/submap/oldhotel)
+"wm" = (/obj/random/trash,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/outdoors/dirt,/area/submap/oldhotel)
+"wK" = (/obj/item/weapon/material/shard,/obj/item/weapon/material/shard,/obj/item/weapon/material/shard{icon_state = "medium"; pixel_x = 12; pixel_y = 7},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"wV" = (/obj/structure/table/wooden_reinforced,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"wX" = (/obj/item/weapon/material/shard,/obj/item/weapon/material/shard{icon_state = "medium"; pixel_x = 12; pixel_y = 7},/turf/simulated/floor/outdoors/dirt,/area/submap/oldhotel)
+"yj" = (/obj/random/mob/sif/peaceful,/turf/simulated/floor/outdoors/dirt,/area/submap/oldhotel)
+"yM" = (/obj/item/stack/cable_coil,/turf/simulated/floor/carpet/purcarpet,/area/submap/oldhotel)
+"zs" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/outdoors/dirt,/area/submap/oldhotel)
+"zt" = (/obj/structure/noticeboard,/turf/simulated/wall/wood,/area/submap/oldhotel)
+"zO" = (/obj/item/weapon/material/shard,/obj/structure/grille/broken/rustic,/obj/item/weapon/material/shard{icon_state = "medium"; pixel_x = 12; pixel_y = 7},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"zP" = (/obj/random/plushie,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"Ac" = (/obj/structure/table/wooden_reinforced,/obj/item/weapon/material/knife/butch,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"AO" = (/obj/structure/railing,/turf/simulated/floor/outdoors/dirt,/area/submap/oldhotel)
+"AU" = (/obj/structure/table/woodentable,/obj/item/device/tape,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"AZ" = (/obj/structure/table/woodentable,/obj/item/trash/candle,/obj/item/weapon/paper{info = "This is a stupid tresure hunt task, that thing is not taking us anywhere. Go on and have fun finding a waste of time."; name = "Wrinkled sheet of paper"},/turf/simulated/floor/wood,/area/submap/oldhotel)
+"Bt" = (/obj/structure/closet/cabinet,/obj/item/clothing/gloves/yellow,/obj/random/projectile/scrapped_pistol,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"Cx" = (/turf/simulated/floor/outdoors/dirt,/area/submap/oldhotel)
+"CS" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"Di" = (/obj/structure/table/wooden_reinforced,/obj/machinery/microwave,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"Dx" = (/obj/structure/table/wooden_reinforced,/obj/random/medical,/obj/random/medical,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"DN" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"Es" = (/obj/random/junk,/turf/simulated/floor/outdoors/dirt,/area/submap/oldhotel)
+"ES" = (/obj/random/trash,/turf/simulated/floor/carpet/oracarpet,/area/submap/oldhotel)
+"Gk" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/wood,/area/submap/oldhotel)
+"Gr" = (/obj/item/frame/apc,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"Gz" = (/obj/structure/window/reinforced/tinted{dir = 8},/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower/medical,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"GC" = (/obj/random/trash,/obj/random/trash,/turf/simulated/floor/outdoors/dirt,/area/submap/oldhotel)
+"GN" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/oldhotel)
+"GV" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/candle_box,/obj/item/weapon/storage/fancy/candle_box,/obj/item/weapon/storage/fancy/candle_box,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/melee/umbrella/random,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"Ik" = (/obj/item/weapon/material/shard,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"Il" = (/obj/structure/closet/secure_closet/freezer/kitchen{locked = 0},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"IQ" = (/obj/structure/railing,/obj/structure/closet/crate/bin,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"Jq" = (/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"JT" = (/obj/random/junk,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"JV" = (/obj/structure/table/bench/sifwooden,/turf/simulated/floor/outdoors/dirt,/area/submap/oldhotel)
+"Lg" = (/obj/item/weapon/material/shard,/obj/structure/grille/broken/rustic,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"Mk" = (/obj/structure/closet/crate,/obj/random/action_figure,/obj/random/action_figure,/obj/random/action_figure,/obj/random/action_figure,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"Mo" = (/obj/structure/railing,/turf/template_noop,/area/submap/oldhotel)
+"Mq" = (/obj/structure/closet/crate,/obj/random/firstaid,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"MD" = (/obj/effect/decal/cleanable/dirt,/obj/structure/simple_door/wood,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"MU" = (/turf/template_noop,/area/submap/oldhotel)
+"Nu" = (/obj/random/soap,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"OQ" = (/obj/structure/closet/crate,/obj/random/cash,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"Pd" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/sblucarpet,/area/submap/oldhotel)
+"PO" = (/obj/machinery/space_heater,/turf/simulated/floor/wood/broken,/area/submap/oldhotel)
+"Qv" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/weapon/pen,/obj/item/weapon/pen,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"Qw" = (/obj/item/weapon/stool,/obj/random/cash,/obj/machinery/light/small,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"QG" = (/obj/structure/bed/chair/sofa/teal{dir = 8},/turf/simulated/floor/carpet/blue,/area/submap/oldhotel)
+"RM" = (/obj/machinery/space_heater,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"RQ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood/broken,/area/submap/oldhotel)
+"Sf" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/yellowdouble,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"Sy" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"SG" = (/turf/simulated/floor/carpet/purcarpet,/area/submap/oldhotel)
+"SL" = (/obj/item/weapon/material/shard,/obj/item/weapon/material/shard,/obj/item/weapon/material/shard{icon_state = "medium"; pixel_x = 12; pixel_y = 7},/turf/simulated/floor,/area/submap/oldhotel)
+"SZ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"TU" = (/turf/simulated/floor/wood/broken,/area/submap/oldhotel)
+"Ut" = (/obj/structure/kitchenspike,/turf/simulated/floor/outdoors/dirt,/area/submap/oldhotel)
+"Uw" = (/obj/structure/table/wooden_reinforced,/obj/item/weapon/book/manual/chef_recipes,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"UU" = (/obj/structure/table/woodentable,/obj/item/weapon/flame/lighter/zippo/royal,/obj/item/weapon/lipstick/random,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"Vf" = (/obj/structure/window/reinforced/tinted{dir = 4},/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower/medical,/obj/random/soap,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"Vj" = (/turf/simulated/floor/carpet/oracarpet,/area/submap/oldhotel)
+"Wy" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"WD" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/random/meat,/obj/random/meat,/obj/random/meat,/obj/random/meat,/obj/random/meat,/obj/random/meat,/obj/random/meat,/obj/machinery/light/small{dir = 8},/obj/random/meat,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"WH" = (/obj/item/device/flashlight{pixel_x = 2; pixel_y = 2},/turf/simulated/floor/wood,/area/submap/oldhotel)
+"YI" = (/obj/structure/coatrack,/turf/simulated/floor/wood,/area/submap/oldhotel)
+"YQ" = (/obj/item/weapon/material/shard,/obj/structure/grille/broken/rustic,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/oldhotel)
+"ZG" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/oldhotel)
+
+(1,1,1) = {"
+gAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgA
+gAMUMUMUmRMUMUMUMUMUMUMUMUMUMUMUMUMUMUMUMUMUMUMUgA
+gAMUkwhQmRhQwXMUpiZGnDMUwXMUhQZGhQMUMUMUMUGNMUMUgA
+gAMUhQhQgoztvMdLwKhQhQdLzOdLhQhQhQhQZGMUMUMUMUMUgA
+gAMUhQBtTUSZqgqYJTzPqgqgJTqgmrZGaJsdhQMUMUMUMUMUgA
+gAMUZGYITUQvrKUUAUTUqgdajOvhTUhQdzSyZGMUMUMUMUMUgA
+gAMUZGGVWHSZQwGrqgqgSZopvRQGhcMDSyNuSLMUMUMUMUMUgA
+gAMUhQhQhQhQhQZGnDhQqglZtEQGSZhQVfGzhQMUMUMUMUMUgA
+gAMUMUhQhQDNTURMrKhQSZkhkhifqghQnDhQhQMUMUMUMUMUgA
+gAMUMUrZdLsVESdctzhQJTSZqgSZTUhQdrdrZGMUCxMUMUMUgA
+gAMUMUnGYQtVVjcZuUhQtntnhQgogocAuFnZhQCxMUMUMUMUgA
+gAMUMUhQhQMqSZSZqgtnqgSZZGJqJqSyJqbQUtCxMUMUMUMUgA
+gAMUMUnDZGnDhQhQhQhQhcDNhQrbCxmREsCxJqCxMUCxMUMUgA
+gAMUMUhQhQDNRMTUrKhQSZdnnDljJqEsCxCxCxMUMUCxMUGNgA
+gAMUMUCxIkiUaiSGSfZGqgkWZGAcCxmRyjMUMUCxMUMUMUMUgA
+gAMUbWpnLgGkjayMjShQSZGkhQUwJqCxCxJVMUMUMUMUMUMUgA
+gAMUMUnDZGOQqgWySZtnRQbbhQWDSywmCxeKCxCxMUCxMUMUgA
+gAMUMUhQZGhQhQZGhQhQSZDNhQwVJqCxCxJVMUMUMUMUMUMUgA
+gAMUMUhQhQMkPOvNJTtnSZkWhQDxmRmREsMUMUMUMUMUMUMUgA
+gAMUMUCxdLDNPdkIjehQSZdnhQDiSyzsCxCxMUMUMUMUMUMUgA
+gAMUMUCxdLvAhpPdlynDCSGkhQgMCxGCyjMUMUMUMUMUMUMUgA
+gAMUMUhQhQGkqgqgAZhQdLdLZGIlJqCxCxMUMUMUMUMUMUMUgA
+gAMUMUhQhQhQZGhQhQhQMUMUnDIQCxAOAOMUMoMUGNMUMUMUgA
+gAMUMUMUMUMUMUMUMUMUMUMUMUMUMUMUMUMUMUMUMUMUMUMUgA
+gAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgAgA
+"}
diff --git a/maps/submaps/surface_submaps/plains/plains.dm b/maps/submaps/surface_submaps/plains/plains.dm
index cf05e432230..3f51385c1c0 100644
--- a/maps/submaps/surface_submaps/plains/plains.dm
+++ b/maps/submaps/surface_submaps/plains/plains.dm
@@ -32,6 +32,11 @@
#include "BuriedTreasure.dmm"
#include "BuriedTreasure2.dmm"
#include "BuriedTreasure3.dmm"
+#include "methlab.dmm"
+#include "hotspring.dmm"
+#include "lonehome.dmm"
+#include "priderock.dmm"
+#include "oldhotel.dmm"
#endif
@@ -246,3 +251,33 @@
mappath = 'maps/submaps/surface_submaps/plains/BuriedTreasure3.dmm'
cost = 10
template_group = "Shallow Grave"
+
+/datum/map_template/surface/plains/oldhotel
+ name = "Old Hotel"
+ desc = "A abandoned hotel of sort, wonder why it was left behind."
+ mappath = 'maps/submaps/surface_submaps/plains/oldhotel.dmm'
+ cost = 15
+
+/datum/map_template/surface/plains/priderock
+ name = "Pride Rock"
+ desc = "A quite steep petruding rock from the earth, looks like a good hike."
+ mappath = 'maps/submaps/surface_submaps/plains/priderock.dmm'
+ cost = 10
+
+/datum/map_template/surface/plains/lonehome
+ name = "Lone Home"
+ desc = "A quite inoffensive looking home, damaged but still holding up."
+ mappath = 'maps/submaps/surface_submaps/plains/lonehome.dmm'
+ cost = 15
+
+/datum/map_template/surface/plains/hotspring
+ name = "Hot Spring"
+ desc = "Wait what, a hotspring in a frost planet?"
+ mappath = 'maps/submaps/surface_submaps/plains/hotspring.dmm'
+ cost = 5
+
+/datum/map_template/surface/plains/methlab
+ name = "Meth Lab"
+ desc = "A broken down greenhouse lab?, this does not look safe."
+ mappath = 'maps/submaps/surface_submaps/plains/methlab.dmm'
+ cost = 15
\ No newline at end of file
diff --git a/maps/submaps/surface_submaps/plains/plains_areas.dm b/maps/submaps/surface_submaps/plains/plains_areas.dm
index 58895767572..90903e17ddc 100644
--- a/maps/submaps/surface_submaps/plains/plains_areas.dm
+++ b/maps/submaps/surface_submaps/plains/plains_areas.dm
@@ -110,3 +110,23 @@
/area/submap/BuriedTreasure
name = "POI - Buried Treasure"
ambience = AMBIENCE_FOREBODING
+
+/area/submap/oldhotel
+ name = "POI - Old Hotel"
+ ambience = AMBIENCE_SIF
+
+/area/submap/priderock
+ name = "POI - Pride Rock"
+ ambience = AMBIENCE_SIF
+
+/area/submap/lonehome
+ name = "POI - Lone Home"
+ ambience = AMBIENCE_FOREBODING
+
+/area/submap/hotspring
+ name = "POI - Hot Spring"
+ ambience = AMBIENCE_SIF
+
+/area/submap/methlab
+ name = "POI - Meth Lab"
+ ambience = AMBIENCE_TECH_RUINS
diff --git a/maps/submaps/surface_submaps/plains/priderock.dmm b/maps/submaps/surface_submaps/plains/priderock.dmm
new file mode 100644
index 00000000000..1b2246d2af2
--- /dev/null
+++ b/maps/submaps/surface_submaps/plains/priderock.dmm
@@ -0,0 +1,88 @@
+"ae" = (/obj/structure/railing,/obj/item/weapon/bone,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"cR" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"dq" = (/obj/effect/decal/cleanable/dirt,/obj/structure/bonfire/sifwood,/turf/simulated/floor/outdoors/grass/sif,/area/submap/priderock)
+"dD" = (/obj/random/junk,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"fL" = (/obj/structure/railing{dir = 8},/obj/structure/cliff/automatic{dir = 8},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"hI" = (/obj/structure/table/woodentable,/turf/simulated/floor/outdoors/grass/sif,/area/submap/priderock)
+"ik" = (/obj/random/trash,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"jM" = (/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/item/weapon/towel/random,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"md" = (/obj/random/trash,/turf/template_noop,/area/submap/priderock)
+"nG" = (/obj/structure/railing,/obj/random/junk,/obj/item/weapon/bone/ribs,/obj/item/weapon/bone/skull,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"nV" = (/obj/item/stack/material/log/sif,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"qh" = (/obj/structure/cliff/automatic{dir = 8},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"qP" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"qY" = (/obj/structure/cliff/automatic{dir = 9},/obj/structure/railing{dir = 1},/obj/structure/railing{dir = 8},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"sr" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/outdoors/grass/sif,/area/submap/priderock)
+"uv" = (/obj/structure/cliff/automatic/ramp,/obj/structure/railing{dir = 4},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"uG" = (/obj/structure/ledge/ledge_stairs,/turf/simulated/floor/outdoors/rocks,/area/submap/priderock)
+"wU" = (/obj/structure/ledge/ledge_stairs{dir = 8},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"xE" = (/obj/structure/closet/crate/bin,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/junk,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"yi" = (/obj/structure/cliff/automatic/ramp{dir = 9},/obj/structure/railing{dir = 8},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"yI" = (/obj/structure/cliff/automatic{dir = 4},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"An" = (/obj/structure/railing,/obj/random/humanoidremains,/obj/random/humanoidremains,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"As" = (/obj/structure/closet/crate,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/cargo,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Bf" = (/obj/random/trash,/obj/random/trash,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Bv" = (/obj/structure/loot_pile/maint/trash,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"BB" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/priderock)
+"Dg" = (/obj/effect/decal/cleanable/dirt,/obj/structure/ledge/ledge_stairs{dir = 8},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Dx" = (/obj/structure/cliff/automatic/corner{dir = 9},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"DU" = (/obj/structure/cliff/automatic/corner,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Ff" = (/obj/structure/cliff/automatic{dir = 8},/obj/structure/railing{dir = 8},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Fg" = (/obj/effect/decal/cleanable/dirt,/obj/structure/ledge/ledge_stairs,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Fo" = (/obj/structure/cliff/automatic{dir = 4},/obj/structure/railing{dir = 4},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"FO" = (/obj/random/junk,/turf/simulated/floor/outdoors/grass/sif,/area/submap/priderock)
+"Gk" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/bench/wooden,/turf/simulated/floor/outdoors/grass/sif,/area/submap/priderock)
+"Hw" = (/obj/random/trash,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"If" = (/obj/structure/bed/chair,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Ix" = (/obj/structure/cliff/automatic{dir = 10},/obj/structure/railing{dir = 8},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Jk" = (/turf/simulated/floor/outdoors/grass/sif,/area/submap/priderock)
+"Lm" = (/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/item/weapon/bone/skull/tajaran,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Lo" = (/obj/structure/cliff/automatic{dir = 2},/obj/structure/railing,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"LK" = (/obj/structure/cliff/automatic,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Mg" = (/obj/structure/cliff/automatic{dir = 2},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Oc" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Od" = (/obj/structure/cliff/automatic/corner{dir = 10},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Pb" = (/obj/item/weapon/storage/backpack/dufflebag/syndie/med,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Pn" = (/obj/structure/table/bench/wooden,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"PW" = (/obj/random/tool,/obj/random/tool,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Si" = (/obj/structure/cliff/automatic{dir = 6},/obj/structure/railing{dir = 4},/obj/structure/railing,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"SE" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/outdoors/rocks,/area/submap/priderock)
+"Tb" = (/obj/structure/railing,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Td" = (/obj/structure/cliff/automatic{dir = 10},/obj/structure/railing,/obj/structure/railing{dir = 8},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Ud" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"UG" = (/obj/vehicle/train/engine/quadbike/random{desc = "A rideable electric ATV designed for all terrain. Looks very worn down."; locked = 1; name = "Old looking ATV"},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"VF" = (/obj/structure/cliff/automatic{dir = 5},/obj/structure/railing{dir = 1},/obj/structure/railing{dir = 4},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"VM" = (/obj/structure/loot_pile/maint/trash,/turf/template_noop,/area/submap/priderock)
+"Wk" = (/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Xd" = (/obj/structure/cliff/automatic,/obj/structure/railing{dir = 1},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"XN" = (/obj/item/clothing/head/bearpelt,/obj/item/device/binoculars/spyglass,/turf/simulated/floor/outdoors/rocks,/area/submap/priderock)
+"Yd" = (/obj/effect/decal/cleanable/dirt,/obj/structure/ledge/ledge_stairs{dir = 4},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"YP" = (/turf/simulated/floor/outdoors/rocks,/area/submap/priderock)
+"Zc" = (/obj/random/trash,/obj/effect/decal/cleanable/dirt,/obj/structure/ledge/ledge_stairs{dir = 8},/turf/simulated/floor/outdoors/dirt,/area/submap/priderock)
+"Zm" = (/turf/template_noop,/area/submap/priderock)
+"ZA" = (/obj/random/trash,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/outdoors/grass/sif,/area/submap/priderock)
+"ZJ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/outdoors/grass/sif,/area/submap/priderock)
+"ZO" = (/obj/structure/table/woodentable,/obj/random/plushie,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/outdoors/grass/sif,/area/submap/priderock)
+
+(1,1,1) = {"
+ZmZmZmZmqPZmZmZmZmZmZmZmZmZmZm
+ZmZmZmWksrWkWkZmZmOcZmWkZmZmZm
+ZmZmOcuvqPZJyiBfZmZmZmZmBvZmZm
+WkBBWkFoFgFgIxLoLoMgLoMgLoLoOd
+WkZmZmFoZJqPZJOcOcZJqPZJPnPWFf
+ZmWkUGDUXdLKLKXdVFOcZAUddqWkqh
+ZmWkWkYPWkYPYPYPyIWkOcOcGkOcFf
+ZmWkTbTbTbTbTbTbSinVZJZJOcJkFf
+ZmFoPbFOwUYPJkwUJkZJZJZAZJxEFf
+HwFoFOSEZcZJSEDgikZJOcIfIfJkFf
+ZmFoYPqYXdLKXdXdVFWkFOhIZOjMFf
+ZmFoWkfLYPWkYPYPFoJkJkcRcRdDqh
+ZmyISETdaenGAnLmFoAsWkWkJkWkFf
+WkFoOcSEYdYPWkFfDUXdLKXdXdXdDx
+ZmDUXdXdXdVFYPqhZmZmWkZmWkZmWk
+ZmWkWkWkZmyIuGFfHwHwVMZmVMZmZm
+ZmmdmdVMWkFoXNFfZmWkZmWkBBZmZm
+ZmZmZmZmWkDULKDxWkZmZmZmZmZmZm
+ZmZmZmZmZmWkWkWkZmZmZmZmZmZmZm
+ZmZmZmZmZmZmZmWkZmZmZmZmZmZmZm
+"}
diff --git a/maps/tether/submaps/gateway/zoo.dmm b/maps/tether/submaps/gateway/zoo.dmm
index 76fff34ad98..7039ea57186 100644
--- a/maps/tether/submaps/gateway/zoo.dmm
+++ b/maps/tether/submaps/gateway/zoo.dmm
@@ -2323,7 +2323,7 @@
/turf/simulated/floor/plating,
/area/awaymission/zoo)
"gR" = (
-/obj/item/weapon/caution,
+/obj/item/clothing/suit/caution,
/turf/simulated/floor/plating,
/area/awaymission/zoo/pirateship)
"gS" = (
diff --git a/maps/tether/submaps/offmap/talon1.dmm b/maps/tether/submaps/offmap/talon1.dmm
index 5cbf638bde6..81e4081c712 100644
--- a/maps/tether/submaps/offmap/talon1.dmm
+++ b/maps/tether/submaps/offmap/talon1.dmm
@@ -153,11 +153,15 @@
/turf/simulated/floor/tiled/eris/dark/cyancorner,
/area/talon/deckone/bridge)
"ar" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 1
+/obj/machinery/door/blast/regular/open{
+ dir = 4;
+ icon_state = "pdoor1";
+ id = "talon_unused_hardpoint";
+ name = "Unused Hardpoint Blast Door"
},
-/turf/simulated/floor/tiled/eris/white/orangecorner,
-/area/talon/deckone/armory)
+/obj/structure/lattice,
+/turf/space,
+/area/talon/maintenance/deckone_starboard)
"as" = (
/obj/structure/cable/green{
d1 = 4;
@@ -190,9 +194,160 @@
},
/turf/simulated/floor/tiled/eris/dark/brown_perforated,
/area/talon/deckone/port_eng)
+"au" = (
+/obj/effect/floor_decal/industrial/outline/grey,
+/obj/machinery/atmospherics/portables_connector/aux{
+ dir = 8;
+ icon_state = "map_connector-aux"
+ },
+/obj/machinery/portable_atmospherics/canister/air/airlock,
+/turf/simulated/floor/tiled/eris/steel/gray_perforated,
+/area/talon/deckone/starboard_eng)
+"av" = (
+/obj/structure/table/standard,
+/obj/machinery/reagentgrinder,
+/turf/simulated/floor/tiled/eris/white/bluecorner,
+/area/talon/deckone/medical)
+"aw" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/structure/table/standard,
+/obj/machinery/chemical_dispenser/full,
+/turf/simulated/floor/tiled/eris/white/bluecorner,
+/area/talon/deckone/medical)
+"ax" = (
+/obj/structure/table/rack/shelf/steel,
+/obj/item/weapon/tank/oxygen,
+/obj/item/weapon/tank/oxygen,
+/obj/item/weapon/tank/oxygen,
+/obj/item/weapon/tank/oxygen,
+/turf/simulated/floor/tiled/eris/dark/danger,
+/area/talon/deckone/secure_storage)
+"ay" = (
+/obj/structure/catwalk,
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/light/small{
+ dir = 4;
+ pixel_y = 0
+ },
+/turf/simulated/floor/plating/eris/under,
+/area/talon/maintenance/deckone_port)
+"az" = (
+/obj/structure/catwalk,
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/light/small{
+ dir = 8;
+ pixel_x = 0
+ },
+/turf/simulated/floor/plating/eris/under,
+/area/talon/maintenance/deckone_starboard)
+"aA" = (
+/obj/structure/catwalk,
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 4;
+ icon_state = "1-4"
+ },
+/obj/structure/cable/green{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/light/small,
+/turf/simulated/floor/plating/eris/under,
+/area/talon/maintenance/deckone_port)
+"aB" = (
+/obj/structure/catwalk,
+/obj/structure/cable/green{
+ icon_state = "1-8"
+ },
+/obj/structure/cable/green{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/light/small,
+/turf/simulated/floor/plating/eris/under,
+/area/talon/maintenance/deckone_starboard)
"aC" = (
/turf/simulated/wall/rshull,
/area/talon/maintenance/deckone_port)
+"aD" = (
+/obj/structure/table/rack/steel,
+/obj/machinery/camera/network/talon,
+/obj/item/device/suit_cooling_unit,
+/obj/item/device/suit_cooling_unit,
+/obj/item/device/suit_cooling_unit,
+/obj/item/device/suit_cooling_unit,
+/turf/simulated/floor/tiled/eris/dark/danger,
+/area/talon/deckone/secure_storage)
+"aE" = (
+/obj/machinery/camera/network/talon,
+/obj/structure/table/rack/steel,
+/obj/item/clothing/under/syndicate/combat,
+/obj/item/clothing/suit/armor/combat,
+/obj/item/clothing/head/helmet/combat,
+/turf/simulated/floor/tiled/eris/white/danger,
+/area/talon/deckone/armory)
+"aF" = (
+/obj/effect/floor_decal/industrial/warning/dust{
+ dir = 9
+ },
+/obj/effect/floor_decal/industrial/warning/dust{
+ dir = 6
+ },
+/turf/simulated/floor/greengrid/airless,
+/area/talon/maintenance/deckone_starboard)
+"aG" = (
+/obj/structure/catwalk,
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{
+ dir = 8;
+ icon_state = "intact"
+ },
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{
+ dir = 8;
+ icon_state = "intact"
+ },
+/obj/structure/handrail{
+ dir = 8
+ },
+/turf/space,
+/area/talon/maintenance/deckone_port_fore_wing)
+"aH" = (
+/obj/structure/catwalk,
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{
+ dir = 4;
+ icon_state = "intact"
+ },
+/obj/structure/handrail{
+ dir = 4
+ },
+/turf/space,
+/area/talon/maintenance/deckone_starboard_fore_wing)
+"aI" = (
+/obj/structure/catwalk,
+/obj/structure/sign/warning/moving_parts{
+ pixel_x = 30
+ },
+/turf/space,
+/area/talon/maintenance/deckone_port_fore_wing)
+"aJ" = (
+/obj/structure/table/rack/shelf/steel,
+/obj/item/clothing/shoes/magboots,
+/obj/item/clothing/shoes/magboots,
+/obj/item/clothing/shoes/magboots,
+/obj/item/clothing/shoes/magboots,
+/turf/simulated/floor/tiled/eris/dark/danger,
+/area/talon/deckone/secure_storage)
"aK" = (
/turf/simulated/wall/rshull,
/area/talon/maintenance/deckone_starboard)
@@ -215,9 +370,25 @@
"aM" = (
/turf/simulated/wall,
/area/talon/maintenance/deckone_port)
+"aN" = (
+/obj/structure/table/rack/shelf/steel,
+/obj/item/weapon/tank/jetpack/carbondioxide,
+/obj/item/weapon/tank/jetpack/carbondioxide,
+/obj/item/weapon/tank/jetpack/carbondioxide,
+/obj/item/weapon/tank/jetpack/carbondioxide,
+/obj/item/weapon/tank/jetpack/carbondioxide,
+/turf/simulated/floor/tiled/eris/dark/danger,
+/area/talon/deckone/secure_storage)
"aO" = (
/turf/simulated/wall,
/area/talon/maintenance/deckone_starboard)
+"aP" = (
+/obj/structure/table/rack/steel,
+/obj/item/clothing/shoes/magboots,
+/obj/item/clothing/suit/space/syndicate/black,
+/obj/item/clothing/head/helmet/space/syndicate/black,
+/turf/simulated/floor/tiled/eris/white/danger,
+/area/talon/deckone/armory)
"aQ" = (
/obj/machinery/computer/ship/engines{
dir = 8;
@@ -229,6 +400,30 @@
"aR" = (
/turf/simulated/wall,
/area/talon/deckone/secure_storage)
+"aS" = (
+/obj/structure/catwalk,
+/obj/structure/sign/warning/moving_parts{
+ pixel_x = -30
+ },
+/turf/space,
+/area/talon/maintenance/deckone_starboard_fore_wing)
+"aT" = (
+/obj/structure/catwalk,
+/obj/structure/cable/green{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/space,
+/area/talon/maintenance/deckone_port_fore_wing)
+"aU" = (
+/obj/structure/catwalk,
+/obj/structure/cable/green{
+ dir = 1;
+ icon_state = "4-8"
+ },
+/turf/space,
+/area/talon/maintenance/deckone_starboard_fore_wing)
"aV" = (
/obj/machinery/atmospherics/pipe/simple/hidden/aux,
/obj/structure/catwalk,
@@ -238,9 +433,67 @@
},
/turf/simulated/floor/plating/eris/under,
/area/talon/maintenance/deckone_port)
+"aW" = (
+/obj/machinery/alarm/talon{
+ dir = 1;
+ pixel_y = -25
+ },
+/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+/turf/simulated/floor/tiled/eris/dark/danger,
+/area/talon/deckone/secure_storage)
+"aX" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/structure/closet/wardrobe/black{
+ starts_with = list(/obj/item/clothing/under/color/black = 4, /obj/item/clothing/accessory/storage/black_vest = 4, /obj/item/clothing/accessory/storage/black_drop_pouches = 4, /obj/item/clothing/gloves/black = 4, /obj/item/clothing/head/soft/black = 4, /obj/item/clothing/mask/balaclava = 4, /obj/item/clothing/mask/bandana = 4, /obj/item/clothing/mask/gas/commando = 4, /obj/item/weapon/storage/backpack/messenger/black = 4, /obj/item/weapon/storage/backpack/dufflebag = 4, /obj/item/clothing/shoes/black = 4, /obj/item/clothing/shoes/boots/duty = 4)
+ },
+/turf/simulated/floor/tiled/eris/white/orangecorner,
+/area/talon/deckone/armory)
"aY" = (
/turf/simulated/wall,
/area/talon/deckone/armory)
+"aZ" = (
+/obj/structure/catwalk,
+/turf/space,
+/area/talon/maintenance/deckone_port_fore_wing)
+"ba" = (
+/obj/structure/catwalk,
+/turf/space,
+/area/talon/maintenance/deckone_starboard_fore_wing)
+"bb" = (
+/obj/structure/closet/secure_closet/chemical{
+ req_access = list(301)
+ },
+/turf/simulated/floor/tiled/eris/white/bluecorner,
+/area/talon/deckone/medical)
+"bc" = (
+/obj/structure/catwalk,
+/obj/structure/handrail{
+ dir = 8
+ },
+/turf/space,
+/area/talon/maintenance/deckone_port_aft_wing)
+"bd" = (
+/obj/structure/catwalk,
+/obj/structure/handrail{
+ dir = 4
+ },
+/turf/space,
+/area/talon/maintenance/deckone_starboard_aft_wing)
+"be" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/table/standard,
+/obj/item/clothing/gloves/sterile/nitrile,
+/obj/item/clothing/mask/surgical,
+/obj/item/clothing/suit/surgicalapron,
+/turf/simulated/floor/tiled/eris/white/bluecorner,
+/area/talon/deckone/medical)
+"bf" = (
+/obj/structure/table/standard,
+/obj/machinery/chemical_dispenser/biochemistry/full,
+/turf/simulated/floor/tiled/eris/white/bluecorner,
+/area/talon/deckone/medical)
"bg" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
@@ -254,6 +507,17 @@
},
/turf/simulated/floor/tiled/eris/steel,
/area/talon/deckone/brig)
+"bh" = (
+/obj/structure/table/standard,
+/obj/item/device/defib_kit/loaded,
+/obj/item/weapon/storage/belt/medical/emt,
+/obj/item/device/sleevemate,
+/turf/simulated/floor/tiled/eris/white/bluecorner,
+/area/talon/deckone/medical)
+"bi" = (
+/obj/structure/catwalk,
+/turf/space,
+/area/talon/maintenance/deckone_port_aft_wing)
"bj" = (
/obj/structure/window/reinforced,
/turf/simulated/floor/tiled/eris/steel,
@@ -265,6 +529,62 @@
},
/turf/simulated/floor/plating/eris/under,
/area/talon/maintenance/deckone_starboard)
+"bl" = (
+/obj/structure/catwalk,
+/turf/space,
+/area/talon/maintenance/deckone_starboard_aft_wing)
+"bm" = (
+/obj/structure/catwalk,
+/obj/structure/cable/green{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/space,
+/area/talon/maintenance/deckone_port_aft_wing)
+"bn" = (
+/obj/structure/catwalk,
+/obj/structure/cable/green{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/space,
+/area/talon/maintenance/deckone_starboard_aft_wing)
+"bo" = (
+/obj/machinery/light/small{
+ dir = 4;
+ pixel_y = 0
+ },
+/obj/structure/catwalk,
+/turf/space,
+/area/talon/maintenance/deckone_port)
+"bp" = (
+/obj/machinery/light/small{
+ dir = 8;
+ pixel_y = 0
+ },
+/obj/structure/catwalk,
+/turf/space,
+/area/talon/maintenance/deckone_starboard)
+"bq" = (
+/obj/machinery/airlock_sensor{
+ dir = 4;
+ pixel_x = -28;
+ req_one_access = list(301)
+ },
+/obj/effect/map_helper/airlock/atmos/chamber_pump,
+/obj/effect/map_helper/airlock/sensor/chamber_sensor,
+/obj/machinery/light/small{
+ dir = 1;
+ icon_state = "bulb1"
+ },
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/aux{
+ dir = 4;
+ icon_state = "map_vent_aux"
+ },
+/turf/simulated/floor/tiled/eris/dark/gray_perforated,
+/area/shuttle/talonboat)
"br" = (
/obj/structure/grille,
/obj/structure/window/reinforced/full,
@@ -279,6 +599,23 @@
},
/turf/simulated/floor/plating,
/area/talon/maintenance/deckone_port)
+"bs" = (
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ dir = 8;
+ id_tag = "talon_boat";
+ pixel_x = 28
+ },
+/obj/effect/map_helper/airlock/atmos/chamber_pump,
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/aux{
+ dir = 8;
+ icon_state = "map_vent_aux"
+ },
+/turf/simulated/floor/tiled/eris/dark/gray_perforated,
+/area/shuttle/talonboat)
+"bt" = (
+/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+/turf/simulated/floor/tiled/eris/steel,
+/area/talon/deckone/central_hallway)
"bu" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4;
@@ -297,6 +634,20 @@
},
/turf/simulated/floor/tiled/steel_grid,
/area/talon/deckone/secure_storage)
+"bv" = (
+/obj/machinery/door/firedoor/glass/talon,
+/obj/machinery/door/blast/regular/open{
+ dir = 4;
+ id = "talon_windows"
+ },
+/obj/structure/grille,
+/obj/structure/window/reinforced/full,
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/plating/eris/under,
+/area/talon/maintenance/deckone_starboard)
"bw" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4;
@@ -304,6 +655,17 @@
},
/turf/simulated/floor/tiled/eris/dark/brown_perforated,
/area/talon/deckone/port_eng)
+"bx" = (
+/obj/machinery/airlock_sensor{
+ dir = 8;
+ pixel_x = 28;
+ pixel_y = 28;
+ req_one_access = list(301)
+ },
+/obj/effect/map_helper/airlock/sensor/ext_sensor,
+/obj/structure/catwalk,
+/turf/space,
+/area/talon/maintenance/deckone_port)
"by" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4;
@@ -323,6 +685,48 @@
},
/turf/simulated/floor/tiled/steel_grid,
/area/talon/deckone/armory)
+"bz" = (
+/obj/machinery/airlock_sensor{
+ dir = 4;
+ pixel_x = -28;
+ pixel_y = 28;
+ req_one_access = list(301)
+ },
+/obj/effect/map_helper/airlock/sensor/ext_sensor,
+/obj/structure/catwalk,
+/turf/space,
+/area/talon/maintenance/deckone_starboard)
+"bA" = (
+/obj/structure/catwalk,
+/obj/structure/sign/warning/moving_parts{
+ pixel_x = 30
+ },
+/obj/machinery/camera/network/talon{
+ dir = 8;
+ icon_state = "camera"
+ },
+/turf/space,
+/area/talon/maintenance/deckone_port)
+"bB" = (
+/obj/structure/catwalk,
+/obj/structure/sign/warning/moving_parts{
+ pixel_x = -30
+ },
+/obj/machinery/camera/network/talon{
+ dir = 4;
+ icon_state = "camera"
+ },
+/turf/space,
+/area/talon/maintenance/deckone_starboard)
+"bC" = (
+/obj/structure/table/rack,
+/obj/item/weapon/storage/box/bodybags,
+/obj/item/roller,
+/obj/item/roller{
+ pixel_y = 8
+ },
+/turf/simulated/floor/tiled/eris/white/bluecorner,
+/area/talon/deckone/medical)
"bP" = (
/obj/machinery/atmospherics/pipe/manifold/hidden,
/turf/simulated/floor/tiled/eris/dark/brown_perforated,
@@ -818,39 +1222,6 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/aux,
/turf/simulated/floor/tiled/eris/dark/gray_perforated,
/area/shuttle/talonboat)
-"fo" = (
-/obj/structure/catwalk,
-/obj/structure/sign/warning/moving_parts{
- pixel_x = 30
- },
-/obj/machinery/camera/network/talon{
- dir = 8;
- icon_state = "camera"
- },
-/turf/space,
-/area/talon/maintenance/deckone_port)
-"fy" = (
-/obj/structure/catwalk,
-/obj/structure/sign/warning/moving_parts{
- pixel_x = -30
- },
-/obj/machinery/camera/network/talon{
- dir = 4;
- icon_state = "camera"
- },
-/turf/space,
-/area/talon/maintenance/deckone_starboard)
-"fz" = (
-/obj/machinery/airlock_sensor{
- dir = 8;
- pixel_x = 28;
- pixel_y = 28;
- req_one_access = list(301)
- },
-/obj/effect/map_helper/airlock/sensor/ext_sensor,
-/obj/structure/catwalk,
-/turf/space,
-/area/talon/maintenance/deckone_port)
"fH" = (
/obj/machinery/firealarm{
dir = 1;
@@ -873,22 +1244,6 @@
/obj/effect/catwalk_plated,
/turf/simulated/floor/plating/eris/under,
/area/talon/deckone/central_hallway)
-"fW" = (
-/obj/machinery/airlock_sensor{
- dir = 4;
- pixel_x = -28;
- pixel_y = 28;
- req_one_access = list(301)
- },
-/obj/effect/map_helper/airlock/sensor/ext_sensor,
-/obj/structure/catwalk,
-/turf/space,
-/area/talon/maintenance/deckone_starboard)
-"fZ" = (
-/obj/structure/table/standard,
-/obj/machinery/chemical_dispenser/full,
-/turf/simulated/floor/tiled/eris/white/bluecorner,
-/area/talon/deckone/medical)
"ga" = (
/obj/structure/grille,
/obj/structure/window/reinforced/full,
@@ -1144,20 +1499,6 @@
/obj/machinery/optable,
/turf/simulated/floor/tiled/eris/white/bluecorner,
/area/talon/deckone/medical)
-"iw" = (
-/obj/structure/catwalk,
-/obj/structure/cable/green{
- d1 = 1;
- d2 = 4;
- icon_state = "1-4"
- },
-/obj/structure/cable/green{
- d1 = 4;
- d2 = 8;
- icon_state = "4-8"
- },
-/turf/simulated/floor/plating/eris/under,
-/area/talon/maintenance/deckone_port)
"ix" = (
/obj/structure/grille,
/obj/structure/window/reinforced/full,
@@ -1384,22 +1725,6 @@
},
/turf/simulated/floor/reinforced/airless,
/area/talon/deckone/starboard_eng)
-"kl" = (
-/obj/machinery/light/small{
- dir = 4;
- pixel_y = 0
- },
-/obj/structure/catwalk,
-/turf/space,
-/area/talon/maintenance/deckone_port)
-"km" = (
-/obj/machinery/light/small{
- dir = 8;
- pixel_y = 0
- },
-/obj/structure/catwalk,
-/turf/space,
-/area/talon/maintenance/deckone_starboard)
"kr" = (
/obj/structure/barricade,
/obj/structure/catwalk,
@@ -1725,15 +2050,6 @@
/obj/structure/catwalk,
/turf/simulated/floor/plating/eris/under,
/area/talon/maintenance/deckone_starboard)
-"mM" = (
-/obj/structure/catwalk,
-/obj/structure/cable/green{
- d1 = 4;
- d2 = 8;
- icon_state = "4-8"
- },
-/turf/space,
-/area/talon/maintenance/deckone_port_fore_wing)
"mN" = (
/obj/structure/catwalk,
/obj/structure/cable/green{
@@ -1800,13 +2116,6 @@
},
/turf/simulated/floor/hull/airless,
/area/talon/maintenance/deckone_port_aft_wing)
-"nI" = (
-/obj/structure/catwalk,
-/obj/structure/sign/warning/moving_parts{
- pixel_x = 30
- },
-/turf/space,
-/area/talon/maintenance/deckone_port_fore_wing)
"nN" = (
/obj/structure/cable/green{
d1 = 4;
@@ -1816,20 +2125,6 @@
/obj/structure/catwalk,
/turf/simulated/floor/plating/eris/under,
/area/talon/maintenance/deckone_starboard)
-"nR" = (
-/obj/structure/catwalk,
-/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{
- dir = 4;
- icon_state = "intact"
- },
-/turf/space,
-/area/talon/maintenance/deckone_starboard_fore_wing)
-"nS" = (
-/obj/structure/table/rack/shelf/steel,
-/obj/item/weapon/tank/jetpack/carbondioxide,
-/obj/item/weapon/tank/jetpack/carbondioxide,
-/turf/simulated/floor/tiled/eris/dark/danger,
-/area/talon/deckone/secure_storage)
"nT" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -2200,11 +2495,6 @@
},
/turf/simulated/floor/tiled/eris/steel,
/area/talon/deckone/central_hallway)
-"sb" = (
-/obj/structure/table/rack/shelf/steel,
-/obj/item/clothing/shoes/magboots,
-/turf/simulated/floor/tiled/eris/dark/danger,
-/area/talon/deckone/secure_storage)
"sc" = (
/obj/structure/cable/green{
d1 = 1;
@@ -2453,15 +2743,6 @@
},
/turf/simulated/floor/hull/airless,
/area/talon/maintenance/deckone_starboard_aft_wing)
-"up" = (
-/obj/effect/floor_decal/industrial/outline/grey,
-/obj/machinery/atmospherics/portables_connector/aux{
- dir = 8;
- icon_state = "map_connector-aux"
- },
-/obj/machinery/portable_atmospherics/canister/air/airlock,
-/turf/simulated/floor/tiled/eris/steel/gray_perforated,
-/area/talon/deckone/starboard_eng)
"ur" = (
/obj/structure/cable/green{
d1 = 4;
@@ -2554,13 +2835,6 @@
},
/turf/simulated/floor/tiled/eris/dark/orangecorner,
/area/talon/deckone/brig)
-"vc" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/table/standard,
-/obj/item/clothing/mask/surgical,
-/obj/item/clothing/suit/surgicalapron,
-/turf/simulated/floor/tiled/eris/white/bluecorner,
-/area/talon/deckone/medical)
"vf" = (
/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 5;
@@ -2655,12 +2929,6 @@
},
/turf/simulated/floor/tiled/eris/white/golden,
/area/talon/deckone/bridge)
-"wz" = (
-/obj/structure/table/rack/steel,
-/obj/machinery/camera/network/talon,
-/obj/item/device/suit_cooling_unit,
-/turf/simulated/floor/tiled/eris/dark/danger,
-/area/talon/deckone/secure_storage)
"wD" = (
/obj/machinery/power/terminal{
dir = 8;
@@ -2865,15 +3133,6 @@
/obj/structure/table/standard,
/turf/simulated/floor/tiled/eris/steel,
/area/talon/deckone/brig)
-"yn" = (
-/obj/structure/catwalk,
-/obj/structure/cable/green{
- d1 = 4;
- d2 = 8;
- icon_state = "4-8"
- },
-/turf/space,
-/area/talon/maintenance/deckone_port_aft_wing)
"yo" = (
/obj/structure/cable/green{
d1 = 1;
@@ -2897,15 +3156,6 @@
},
/turf/simulated/floor/tiled/eris/white/gray_platform,
/area/shuttle/talonboat)
-"yy" = (
-/obj/structure/catwalk,
-/obj/structure/cable/green{
- d1 = 4;
- d2 = 8;
- icon_state = "4-8"
- },
-/turf/space,
-/area/talon/maintenance/deckone_starboard_aft_wing)
"yA" = (
/obj/effect/floor_decal/industrial/warning/dust{
dir = 1
@@ -2985,15 +3235,6 @@
},
/turf/simulated/floor/tiled/eris/steel,
/area/talon/deckone/central_hallway)
-"zt" = (
-/obj/machinery/alarm/talon{
- dir = 1;
- pixel_y = -25
- },
-/obj/structure/table/rack/steel,
-/obj/item/weapon/tank/oxygen,
-/turf/simulated/floor/tiled/eris/dark/danger,
-/area/talon/deckone/secure_storage)
"zx" = (
/obj/structure/cable/green{
d2 = 2;
@@ -3355,11 +3596,6 @@
},
/turf/simulated/floor/hull/airless,
/area/talon/maintenance/deckone_port_fore_wing)
-"Dq" = (
-/obj/structure/table/standard,
-/obj/item/device/sleevemate,
-/turf/simulated/floor/tiled/eris/white/bluecorner,
-/area/talon/deckone/medical)
"Dr" = (
/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 6;
@@ -3767,12 +4003,6 @@
/obj/machinery/door/firedoor/glass/talon,
/turf/simulated/floor/tiled/eris/techmaint_panels,
/area/talon/deckone/medical)
-"GK" = (
-/obj/structure/table/standard,
-/obj/item/device/defib_kit/loaded,
-/obj/item/weapon/storage/belt/medical/emt,
-/turf/simulated/floor/tiled/eris/white/bluecorner,
-/area/talon/deckone/medical)
"GL" = (
/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 1;
@@ -3801,10 +4031,6 @@
},
/turf/simulated/floor/hull/airless,
/area/talon/maintenance/deckone_starboard_fore_wing)
-"Hb" = (
-/obj/structure/catwalk,
-/turf/space,
-/area/talon/maintenance/deckone_starboard_fore_wing)
"Hh" = (
/obj/machinery/atmospherics/unary/vent_pump/on,
/obj/machinery/light_switch{
@@ -4100,14 +4326,6 @@
},
/turf/simulated/floor/reinforced/airless,
/area/talon/deckone/port_eng)
-"JM" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/obj/structure/table/standard,
-/obj/machinery/reagentgrinder,
-/turf/simulated/floor/tiled/eris/white/bluecorner,
-/area/talon/deckone/medical)
"JP" = (
/obj/machinery/power/apc/talon{
dir = 4;
@@ -4222,24 +4440,6 @@
/obj/machinery/vending/medical_talon,
/turf/simulated/floor/tiled/eris/white/bluecorner,
/area/talon/deckone/medical)
-"Kx" = (
-/obj/machinery/airlock_sensor{
- dir = 4;
- pixel_x = -28;
- req_one_access = list(301)
- },
-/obj/machinery/atmospherics/unary/vent_pump/aux{
- dir = 4;
- icon_state = "map_vent_aux"
- },
-/obj/effect/map_helper/airlock/atmos/chamber_pump,
-/obj/effect/map_helper/airlock/sensor/chamber_sensor,
-/obj/machinery/light/small{
- dir = 1;
- icon_state = "bulb1"
- },
-/turf/simulated/floor/tiled/eris/dark/gray_perforated,
-/area/shuttle/talonboat)
"KF" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -4329,26 +4529,6 @@
},
/turf/simulated/floor/tiled/eris/steel,
/area/talon/deckone/central_hallway)
-"Lm" = (
-/obj/structure/table/rack/steel,
-/obj/item/clothing/suit/armor/combat,
-/obj/item/clothing/head/helmet/combat,
-/obj/item/clothing/under/syndicate/combat,
-/obj/machinery/camera/network/talon,
-/turf/simulated/floor/tiled/eris/white/danger,
-/area/talon/deckone/armory)
-"Lt" = (
-/obj/structure/catwalk,
-/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{
- dir = 8;
- icon_state = "intact"
- },
-/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{
- dir = 8;
- icon_state = "intact"
- },
-/turf/space,
-/area/talon/maintenance/deckone_port_fore_wing)
"Ly" = (
/obj/effect/floor_decal/industrial/hatch/yellow,
/obj/machinery/door/window/brigdoor/eastleft{
@@ -4545,18 +4725,6 @@
},
/turf/simulated/floor/plating/eris/under,
/area/talon/maintenance/deckone_port)
-"MJ" = (
-/obj/structure/catwalk,
-/obj/structure/cable/green{
- icon_state = "1-8"
- },
-/obj/structure/cable/green{
- d1 = 4;
- d2 = 8;
- icon_state = "4-8"
- },
-/turf/simulated/floor/plating/eris/under,
-/area/talon/maintenance/deckone_starboard)
"ML" = (
/obj/structure/catwalk,
/obj/structure/cable/green{
@@ -4726,11 +4894,6 @@
},
/turf/simulated/floor/tiled/eris/dark/cyancorner,
/area/talon/deckone/bridge)
-"Ou" = (
-/obj/structure/table/rack/shelf/steel,
-/obj/item/weapon/tank/oxygen,
-/turf/simulated/floor/tiled/eris/dark/danger,
-/area/talon/deckone/secure_storage)
"Ow" = (
/obj/machinery/atmospherics/pipe/simple/hidden/aux,
/obj/machinery/alarm/talon{
@@ -4786,10 +4949,6 @@
/obj/structure/bedsheetbin,
/turf/simulated/floor/tiled/eris/steel,
/area/talon/deckone/brig)
-"Pi" = (
-/obj/structure/catwalk,
-/turf/space,
-/area/talon/maintenance/deckone_port_fore_wing)
"Pu" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -5221,13 +5380,6 @@
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/eris/steel,
/area/talon/deckone/central_hallway)
-"TN" = (
-/obj/structure/table/rack/steel,
-/obj/item/clothing/suit/space/syndicate/black,
-/obj/item/clothing/head/helmet/space/syndicate/black,
-/obj/item/clothing/shoes/magboots,
-/turf/simulated/floor/tiled/eris/white/danger,
-/area/talon/deckone/armory)
"TO" = (
/obj/machinery/atmospherics/pipe/simple/hidden/aux,
/obj/machinery/alarm/talon{
@@ -5261,21 +5413,6 @@
/obj/item/clothing/accessory/holster/waist,
/turf/simulated/floor/tiled/eris/white/danger,
/area/talon/deckone/armory)
-"Ue" = (
-/obj/structure/catwalk,
-/obj/structure/sign/warning/moving_parts{
- pixel_x = -30
- },
-/turf/space,
-/area/talon/maintenance/deckone_starboard_fore_wing)
-"Ui" = (
-/obj/structure/catwalk,
-/obj/structure/cable/green{
- dir = 1;
- icon_state = "4-8"
- },
-/turf/space,
-/area/talon/maintenance/deckone_starboard_fore_wing)
"Uq" = (
/obj/machinery/alarm/talon{
dir = 4;
@@ -5561,19 +5698,6 @@
},
/turf/simulated/floor/plating/eris/under,
/area/talon/maintenance/deckone_port)
-"VZ" = (
-/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
- dir = 8;
- id_tag = "talon_boat";
- pixel_x = 28
- },
-/obj/machinery/atmospherics/unary/vent_pump/aux{
- dir = 8;
- icon_state = "map_vent_aux"
- },
-/obj/effect/map_helper/airlock/atmos/chamber_pump,
-/turf/simulated/floor/tiled/eris/dark/gray_perforated,
-/area/shuttle/talonboat)
"Wo" = (
/obj/structure/grille,
/obj/structure/window/reinforced/full,
@@ -5836,10 +5960,6 @@
},
/turf/simulated/floor/tiled/eris/steel/techfloor_grid,
/area/shuttle/talonboat)
-"YS" = (
-/obj/structure/catwalk,
-/turf/space,
-/area/talon/maintenance/deckone_port_aft_wing)
"YT" = (
/obj/machinery/alarm/talon{
dir = 1;
@@ -5851,10 +5971,6 @@
},
/turf/simulated/floor/tiled/eris/dark/cyancorner,
/area/talon/deckone/bridge)
-"Za" = (
-/obj/structure/catwalk,
-/turf/space,
-/area/talon/maintenance/deckone_starboard_aft_wing)
"Zg" = (
/obj/structure/cable/yellow{
d1 = 1;
@@ -13283,11 +13399,11 @@ vz
qo
sc
Dh
-YS
-kl
-fz
-fo
-YS
+bi
+bo
+bx
+bA
+bi
Dh
Dh
Dh
@@ -13425,11 +13541,11 @@ lD
Sc
Km
Dh
-YS
+bi
aC
TP
aC
-YS
+bi
Dh
Dh
Dh
@@ -13562,22 +13678,22 @@ aa
aa
aa
aa
-YS
-YS
-YS
-yn
-YS
-YS
+bc
+bi
+bi
+bm
+bi
+bi
aC
MH
aC
-YS
-YS
-YS
-YS
-YS
-YS
-YS
+bi
+bi
+bi
+bi
+bi
+bi
+bc
aa
aa
aa
@@ -14257,11 +14373,11 @@ aa
aa
aa
aa
-Lt
-nI
-mM
-Pi
-Lt
+aG
+aI
+aT
+aZ
+aG
aa
aC
am
@@ -14544,12 +14660,12 @@ am
am
am
yC
-GH
+ay
GH
GH
VY
GH
-iw
+aA
cl
Se
FQ
@@ -14825,9 +14941,9 @@ aa
aa
ab
ac
-Ou
+ax
dQ
-sb
+aJ
kN
en
aR
@@ -14969,7 +15085,7 @@ ab
ac
wj
kN
-nS
+aN
kN
LO
aR
@@ -15109,11 +15225,11 @@ ab
ab
ab
ac
-wz
+aD
kN
sK
kN
-zt
+aW
aR
aM
aM
@@ -15717,7 +15833,7 @@ YO
YO
mT
lb
-Kx
+bq
lb
nc
ki
@@ -16001,7 +16117,7 @@ ht
xu
Kk
lb
-VZ
+bs
lb
nc
ki
@@ -16249,7 +16365,7 @@ ZH
if
mj
VN
-ar
+aX
bQ
jp
aO
@@ -16529,9 +16645,9 @@ ab
ab
ab
ac
-Lm
+aE
Fl
-TN
+aP
Fl
xd
aY
@@ -16569,7 +16685,7 @@ iN
dL
wk
UN
-Bj
+bt
Bj
Bj
ki
@@ -16829,7 +16945,7 @@ co
co
Nm
dO
-fZ
+av
FA
Gb
Gb
@@ -16951,8 +17067,8 @@ aa
aa
aa
aa
-aa
-aa
+aK
+aK
aK
aO
aY
@@ -16972,9 +17088,9 @@ co
qA
dO
xH
-JM
+aw
Xd
-vc
+be
eV
dO
uN
@@ -17093,19 +17209,19 @@ aa
aa
aa
aa
-aa
-aa
-aK
+ar
+aF
+bv
sI
Of
qA
mN
-sL
+az
sL
sL
BD
sL
-MJ
+aB
co
yN
kz
@@ -17235,8 +17351,8 @@ aa
aa
aa
aa
-aa
-aa
+aK
+aK
aK
aK
aK
@@ -17256,10 +17372,10 @@ co
qA
dO
NG
-Gb
+bb
Gb
qB
-Dq
+bf
dO
hD
pz
@@ -17381,11 +17497,11 @@ aa
aa
aa
aa
-nR
-Ue
-Ui
-Hb
-nR
+aH
+aS
+aU
+ba
+aH
aa
aK
qA
@@ -17400,8 +17516,8 @@ dO
dz
Rk
Gb
-Gb
-GK
+bC
+bh
dO
Gt
SI
@@ -17416,7 +17532,7 @@ gY
NP
ho
iF
-up
+au
yB
Mi
Bm
@@ -18106,22 +18222,22 @@ aa
aa
aa
aa
-Za
-Za
-Za
-yy
-Za
-Za
+bd
+bl
+bl
+bn
+bl
+bl
aK
xQ
aK
-Za
-Za
-Za
-Za
-Za
-Za
-Za
+bl
+bl
+bl
+bl
+bl
+bl
+bd
aa
aa
aa
@@ -18253,11 +18369,11 @@ Eo
QX
UI
Ru
-Za
+bl
aK
oU
aK
-Za
+bl
Ru
Ru
Ru
@@ -18395,11 +18511,11 @@ Bs
uo
rL
Ru
-Za
-km
-fW
-fy
-Za
+bl
+bp
+bz
+bB
+bl
Ru
Ru
Ru
diff --git a/maps/tether/submaps/offmap/talon2.dmm b/maps/tether/submaps/offmap/talon2.dmm
index 9f30e789f90..1c3794d1d8f 100644
--- a/maps/tether/submaps/offmap/talon2.dmm
+++ b/maps/tether/submaps/offmap/talon2.dmm
@@ -109,6 +109,26 @@
"ap" = (
/turf/simulated/wall/rshull,
/area/talon/decktwo/cap_room)
+"aq" = (
+/obj/machinery/atmospherics/portables_connector/aux{
+ dir = 1;
+ icon_state = "map_connector-aux"
+ },
+/obj/machinery/portable_atmospherics/canister/air/airlock,
+/turf/simulated/floor/plating/eris/under,
+/area/talon/maintenance/decktwo_aft)
+"ar" = (
+/obj/structure/closet/secure_closet/personal/cabinet{
+ locked = 0
+ },
+/turf/simulated/floor/wood,
+/area/talon/decktwo/eng_room)
+"as" = (
+/obj/structure/closet/secure_closet/personal/cabinet{
+ locked = 0
+ },
+/turf/simulated/floor/wood,
+/area/talon/decktwo/pilot_room)
"at" = (
/turf/simulated/floor/tiled/eris/steel,
/area/talon/decktwo/central_hallway)
@@ -175,6 +195,18 @@
"aC" = (
/turf/simulated/wall,
/area/talon/decktwo/cap_room)
+"aD" = (
+/obj/structure/closet/secure_closet/personal/cabinet{
+ locked = 0
+ },
+/turf/simulated/floor/wood,
+/area/talon/decktwo/med_room)
+"aE" = (
+/obj/structure/closet/secure_closet/personal/cabinet{
+ locked = 0
+ },
+/turf/simulated/floor/wood,
+/area/talon/decktwo/sec_room)
"aF" = (
/obj/structure/bed/chair/bay/chair,
/turf/simulated/floor/wood,
@@ -193,6 +225,29 @@
},
/turf/simulated/floor/tiled/eris/white,
/area/talon/decktwo/central_hallway)
+"aI" = (
+/obj/structure/catwalk,
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/light/small{
+ dir = 4;
+ pixel_y = 0
+ },
+/turf/simulated/floor/plating/eris/under,
+/area/talon/maintenance/decktwo_port)
+"aJ" = (
+/obj/machinery/atmospherics/pipe/simple/visible/supply{
+ dir = 4
+ },
+/obj/structure/catwalk,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plating/eris/under,
+/area/talon/maintenance/decktwo_aft)
"aK" = (
/turf/simulated/floor/carpet/blucarpet,
/area/talon/decktwo/cap_room)
@@ -207,6 +262,39 @@
"aM" = (
/turf/simulated/floor/wood,
/area/talon/decktwo/cap_room)
+"aN" = (
+/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,
+/obj/machinery/atm{
+ pixel_x = 32;
+ step_x = 0
+ },
+/turf/simulated/floor/tiled/eris/steel,
+/area/talon/decktwo/central_hallway)
+"aO" = (
+/obj/machinery/airlock_sensor{
+ dir = 4;
+ pixel_x = -28;
+ req_one_access = list(301)
+ },
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ dir = 8;
+ id_tag = "talon_aft_solar";
+ pixel_x = 28;
+ req_one_access = list(301)
+ },
+/obj/effect/map_helper/airlock/atmos/chamber_pump,
+/obj/effect/map_helper/airlock/sensor/chamber_sensor,
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/aux{
+ dir = 1
+ },
+/turf/simulated/floor/plating/eris/under,
+/area/talon/maintenance/decktwo_aft)
"aP" = (
/obj/machinery/alarm/talon{
dir = 4;
@@ -220,12 +308,38 @@
"aQ" = (
/turf/simulated/floor/wood,
/area/talon/decktwo/bar)
-"aV" = (
+"aR" = (
+/obj/structure/handrail{
+ dir = 1
+ },
+/turf/simulated/floor/hull/airless,
+/area/talon/maintenance/decktwo_solars)
+"aS" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9;
+ pixel_y = 0
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/machinery/vending/food{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/eris/steel/gray_perforated,
+/area/talon/decktwo/bar)
+"aT" = (
/obj/machinery/vending/coffee{
dir = 1
},
/turf/simulated/floor/tiled/eris/steel/gray_perforated,
/area/talon/decktwo/bar)
+"aU" = (
+/obj/machinery/vending/dinnerware{
+ dir = 1;
+ icon_state = "dinnerware"
+ },
+/turf/simulated/floor/tiled/eris/steel/gray_perforated,
+/area/talon/decktwo/bar)
"aX" = (
/obj/structure/bed/chair/bay/chair{
dir = 1;
@@ -550,13 +664,6 @@
},
/turf/simulated/open,
/area/talon/decktwo/central_hallway)
-"cn" = (
-/obj/machinery/vending/dinnerware{
- dir = 1;
- icon_state = "dinnerware"
- },
-/turf/simulated/floor/tiled/eris/steel/gray_perforated,
-/area/talon/decktwo/bar)
"cp" = (
/obj/structure/lattice,
/obj/structure/cable/green{
@@ -981,10 +1088,6 @@
},
/turf/simulated/floor/wood,
/area/talon/decktwo/eng_room)
-"eE" = (
-/obj/structure/closet/secure_closet/personal/cabinet,
-/turf/simulated/floor/wood,
-/area/talon/decktwo/eng_room)
"eF" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
@@ -1012,10 +1115,6 @@
/obj/structure/closet/secure_closet/talon_pilot,
/turf/simulated/floor/wood,
/area/talon/decktwo/pilot_room)
-"eJ" = (
-/obj/structure/closet/secure_closet/personal/cabinet,
-/turf/simulated/floor/wood,
-/area/talon/decktwo/pilot_room)
"eK" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
@@ -1336,10 +1435,6 @@
},
/turf/simulated/floor/wood,
/area/talon/decktwo/med_room)
-"ga" = (
-/obj/structure/closet/secure_closet/personal/cabinet,
-/turf/simulated/floor/wood,
-/area/talon/decktwo/med_room)
"gb" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
@@ -1354,10 +1449,6 @@
/obj/structure/closet/secure_closet/talon_guard,
/turf/simulated/floor/wood,
/area/talon/decktwo/sec_room)
-"gd" = (
-/obj/structure/closet/secure_closet/personal/cabinet,
-/turf/simulated/floor/wood,
-/area/talon/decktwo/sec_room)
"ge" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
@@ -2075,14 +2166,6 @@
},
/turf/simulated/floor/tiled/eris/cafe,
/area/talon/decktwo/bar)
-"oA" = (
-/obj/machinery/atmospherics/portables_connector/aux{
- dir = 1;
- icon_state = "map_connector-aux"
- },
-/obj/machinery/portable_atmospherics/canister/air/airlock,
-/turf/simulated/floor/plating/eris/under,
-/area/talon/maintenance/decktwo_aft)
"oJ" = (
/obj/structure/cable/green{
d1 = 4;
@@ -2263,19 +2346,6 @@
},
/turf/simulated/floor/plating/eris/under,
/area/talon/maintenance/decktwo_aft)
-"rz" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9;
- pixel_y = 0
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/obj/machinery/vending/food{
- dir = 1
- },
-/turf/simulated/floor/tiled/eris/steel/gray_perforated,
-/area/talon/decktwo/bar)
"rA" = (
/obj/structure/cable/yellow{
d1 = 2;
@@ -2307,26 +2377,6 @@
},
/turf/simulated/floor/tiled/eris/steel,
/area/talon/decktwo/central_hallway)
-"rJ" = (
-/obj/machinery/airlock_sensor{
- dir = 4;
- pixel_x = -28;
- req_one_access = list(301)
- },
-/obj/machinery/atmospherics/unary/vent_pump/aux{
- dir = 1;
- icon_state = "map_vent_aux"
- },
-/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
- dir = 8;
- id_tag = "talon_aft_solar";
- pixel_x = 28;
- req_one_access = list(301)
- },
-/obj/effect/map_helper/airlock/atmos/chamber_pump,
-/obj/effect/map_helper/airlock/sensor/chamber_sensor,
-/turf/simulated/floor/plating/eris/under,
-/area/talon/maintenance/decktwo_aft)
"rQ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -12988,7 +13038,7 @@ Qt
lx
lx
lx
-lx
+aI
lx
lx
lx
@@ -13279,7 +13329,7 @@ cc
gZ
gZ
hu
-WG
+aJ
mm
ht
ao
@@ -13383,7 +13433,7 @@ aa
aa
aa
pi
-pi
+aR
ap
ap
ap
@@ -13564,7 +13614,7 @@ PG
aH
hu
RD
-oA
+aq
ht
ao
zs
@@ -13831,13 +13881,13 @@ dz
dM
ea
eo
-eE
+ar
dr
eV
fm
fA
fN
-ga
+aD
eT
gn
gn
@@ -14523,7 +14573,7 @@ As
dX
ay
Rm
-Gq
+aN
Gq
Af
Gq
@@ -14559,7 +14609,7 @@ gC
gT
gS
nj
-rJ
+aO
pt
DT
pi
@@ -15098,7 +15148,7 @@ WS
VZ
bI
Uf
-rz
+aS
aw
cl
cz
@@ -15240,7 +15290,7 @@ Zn
UY
aQ
vB
-aV
+aT
aw
cl
cz
@@ -15251,13 +15301,13 @@ dH
dU
eh
ew
-eJ
+as
du
fb
fs
fG
fT
-gd
+aE
eZ
gn
gn
@@ -15382,7 +15432,7 @@ UY
ZF
bJ
bP
-cn
+aU
aw
ck
cy
@@ -15654,8 +15704,8 @@ aa
aa
aa
aa
-aa
-aa
+pi
+aR
ax
ax
ax
@@ -15796,8 +15846,8 @@ aa
aa
aa
aa
-aa
-aa
+pi
+pi
pi
pi
pi
@@ -15938,8 +15988,8 @@ aa
aa
aa
aa
-aa
-aa
+pi
+pi
pi
pi
pi
@@ -16112,7 +16162,7 @@ Az
QA
QA
QA
-QA
+AX
QA
QA
QA
diff --git a/maps/tether/submaps/om_ships/vespa.dmm b/maps/tether/submaps/om_ships/vespa.dmm
index 12be67f2a2b..604a2749187 100644
--- a/maps/tether/submaps/om_ships/vespa.dmm
+++ b/maps/tether/submaps/om_ships/vespa.dmm
@@ -353,7 +353,7 @@
/turf/simulated/floor,
/area/ship/expe/atmospherics)
"bb" = (
-/obj/item/weapon/caution/cone,
+/obj/item/clothing/head/cone,
/turf/simulated/floor/tiled/techfloor,
/area/ship/expe/maintenancerim)
"bc" = (
diff --git a/maps/tether/tether-01-surface1.dmm b/maps/tether/tether-01-surface1.dmm
index 15974d5c6c3..b3158fc4687 100644
--- a/maps/tether/tether-01-surface1.dmm
+++ b/maps/tether/tether-01-surface1.dmm
@@ -600,6 +600,23 @@
dir = 8;
pixel_x = -24
},
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ d1 = 2;
+ d2 = 4;
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/cyan,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
/turf/simulated/floor/tiled,
/area/tether/surfacebase/cargo/mining)
"aaZ" = (
@@ -5431,6 +5448,14 @@
name = "Mining Maintenance Access";
req_one_access = list(48)
},
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/cyan,
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,
/turf/simulated/floor/plating,
/area/tether/surfacebase/cargo/mining)
"ajc" = (
diff --git a/maps/tether/tether-05-station1.dmm b/maps/tether/tether-05-station1.dmm
index f36d143c622..cbd1abc8b55 100644
--- a/maps/tether/tether-05-station1.dmm
+++ b/maps/tether/tether-05-station1.dmm
@@ -20737,7 +20737,7 @@
/area/engineering/workshop)
"bZk" = (
/obj/effect/decal/cleanable/dirt,
-/obj/item/weapon/caution/cone,
+/obj/item/clothing/head/cone,
/turf/simulated/floor,
/area/vacant/vacant_restaurant_lower)
"bZm" = (
diff --git a/maps/virgo/virgo-1.dmm b/maps/virgo/virgo-1.dmm
index 070412998bd..b51e66dcab8 100644
--- a/maps/virgo/virgo-1.dmm
+++ b/maps/virgo/virgo-1.dmm
@@ -32,7 +32,7 @@
"aaF" = (/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxstarboard)
"aaG" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
"aaH" = (/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxstarboard)
-"aaI" = (/obj/item/weapon/caution/cone,/turf/simulated/floor,/area/maintenance/locker)
+"aaI" = (/obj/item/clothing/head/cone,/turf/simulated/floor,/area/maintenance/locker)
"aaJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
"aaK" = (/turf/simulated/floor,/area/maintenance/locker)
"aaL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
@@ -1605,7 +1605,7 @@
"aES" = (/obj/effect/floor_decal/spline/plain{dir = 9},/turf/simulated/floor/water/pool,/area/crew_quarters/pool)
"aET" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/water/deep/pool,/area/crew_quarters/pool)
"aEU" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
-"aEV" = (/obj/item/weapon/caution/cone,/turf/simulated/floor,/area/maintenance/pool)
+"aEV" = (/obj/item/clothing/head/cone,/turf/simulated/floor,/area/maintenance/pool)
"aEW" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/maintenance/pool)
"aEX" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor,/area/maintenance/pool)
"aEY" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/red{dir = 8},/obj/machinery/camera/network/security{c_tag = "SEC - Brig Port"; dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/security/brig)
@@ -5564,7 +5564,7 @@
"ccZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/medical_emergency_hallway)
"cda" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/pink{dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/medical_emergency_hallway)
"cdb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/obj/effect/floor_decal/corner/pink{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/medical_emergency_hallway)
-"cdc" = (/obj/item/weapon/caution/cone,/turf/simulated/floor,/area/maintenance/medbay_aft)
+"cdc" = (/obj/item/clothing/head/cone,/turf/simulated/floor,/area/maintenance/medbay_aft)
"cdd" = (/obj/item/weapon/broken_bottle,/turf/simulated/floor,/area/maintenance/medbay_aft)
"cde" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/plastic,/obj/item/weapon/cigbutt/cigarbutt,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor,/area/maintenance/medbay_aft)
"cdf" = (/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Lockdown Shutters"; opacity = 0},/turf/simulated/floor,/area/maintenance/medbay_aft)
diff --git a/nano/templates/disperser.tmpl b/nano/templates/disperser.tmpl
deleted file mode 100644
index 08db5ed2baf..00000000000
--- a/nano/templates/disperser.tmpl
+++ /dev/null
@@ -1,91 +0,0 @@
-{{if data.faillink}}
-
- ERROR: Machine is incomplete, out of range, or misaligned!
-
- {{/for}}
- {{/if}}
-{{/if}}
\ No newline at end of file
diff --git a/nano/templates/flight.tmpl b/nano/templates/flight.tmpl
deleted file mode 100644
index 60d4cd605a5..00000000000
--- a/nano/templates/flight.tmpl
+++ /dev/null
@@ -1,241 +0,0 @@
-{{if data.autopilot == 1}}
-
-
AI PILOT (CLASS D) ACTIVE
- This vessel will start and stop automatically.
- Ensure that all non-cycling capable hatches and doors are closed, as the automated system may not be able to control them.
- Docking and flight controls are locked. To unlock, disable the automated flight system.
-
-{{/if}}
\ No newline at end of file
diff --git a/nano/templates/shield_generator.tmpl b/nano/templates/shield_generator.tmpl
deleted file mode 100644
index b93ddc62209..00000000000
--- a/nano/templates/shield_generator.tmpl
+++ /dev/null
@@ -1,158 +0,0 @@
-{{if data.offline_for}}
-
EMERGENCY SHUTDOWN
- An emergency shutdown has been initiated - generator cooling down
- Please wait until the generator cools down before resuming operation. Estimated time left: {{:data.offline_for}} seconds.
-{{else}}
-