diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 7d6c5c7986..1f3e4ad458 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -371,7 +371,7 @@
if(!key)
msg += "[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely.\n"
else if(!client)
- msg += "[t_He] [t_has] a blank, absent-minded stare and appears completely unresponsive to anything. [t_He] may snap out of it soon.\n"
+ msg += "[t_He] [t_has] a blank, absent-minded stare and [t_has] been completely unresponsive to anything for [round(((world.time - lastclienttime) / (1 MINUTES)), 1)] minutes. [t_He] may snap out of it soon.\n" //SKYRAT CHANGE - ssd indicator
if(digitalcamo)
msg += "[t_He] [t_is] moving [t_his] body in an unnatural and blatantly inhuman manner.\n"
diff --git a/sandcode/code/game/mecha/mech_fabricator.dm b/sandcode/code/game/mecha/mech_fabricator.dm
deleted file mode 100644
index 396da01ed5..0000000000
--- a/sandcode/code/game/mecha/mech_fabricator.dm
+++ /dev/null
@@ -1,487 +0,0 @@
-/obj/machinery/mecha_part_fabricator_adv
- icon = 'sandcode/icons/obj/robotics.dmi'
- icon_state = "fab-idle"
- name = "advanced exosuit fabricator"
- desc = "Nothing is being built."
- density = TRUE
- use_power = IDLE_POWER_USE
- idle_power_usage = 20
- active_power_usage = 5000
- req_access = list(ACCESS_ROBOTICS)
- circuit = /obj/item/circuitboard/machine/mechfab_adv
- var/time_coeff = 1
- var/component_coeff = 1
- var/datum/techweb/specialized/autounlocking/exofab/stored_research
- var/sync = 0
- var/part_set
- var/datum/design/being_built
- var/list/queue = list()
- var/processing_queue = 0
- var/screen = "main"
- var/link_on_init = TRUE
- var/temp
- var/offstation_security_levels = TRUE
- var/datum/component/remote_materials/rmat
- var/list/part_sets = list(
- "Cyborg",
- "Ripley",
- "Firefighter",
- "Odysseus",
- "Gygax",
- "Medical-Spec Gygax",
- "Durand",
- "H.O.N.K",
- "Phazon",
- "Exosuit Equipment",
- "Exosuit Ammunition",
- "Cyborg Upgrade Modules",
- "Misc"
- )
-
-/obj/machinery/mecha_part_fabricator_adv/Initialize(mapload)
- stored_research = new
- rmat = AddComponent(/datum/component/remote_materials, "mechfab", mapload && link_on_init)
- RefreshParts() //Recalculating local material sizes if the fab isn't linked
- return ..()
-
-/obj/machinery/mecha_part_fabricator_adv/examine(mob/user)
- . = ..()
- if(in_range(user, src) || isobserver(user))
- . += "The status display reads: Storing up to [rmat.local_size] material units.
Material consumption at [component_coeff*100]%.
Build time reduced by [100-time_coeff*100]%."
-
-/obj/machinery/mecha_part_fabricator_adv/RefreshParts()
- var/T = 0
-
- //maximum stocking amount (default 300000, 600000 at T4)
- for(var/obj/item/stock_parts/matter_bin/M in component_parts)
- T += M.rating
- rmat.set_local_size((200000 + (T*50000)))
-
- //resources adjustment coefficient (1 -> 0.85 -> 0.7 -> 0.55)
- T = 1.15
- for(var/obj/item/stock_parts/micro_laser/Ma in component_parts)
- T -= Ma.rating*0.15
- component_coeff = T
-
- //building time adjustment coefficient (1 -> 0.8 -> 0.6)
- T = -1
- for(var/obj/item/stock_parts/manipulator/Ml in component_parts)
- T += Ml.rating
- time_coeff = round(initial(time_coeff) - (initial(time_coeff)*(T))/5,0.01)
-
-/obj/machinery/mecha_part_fabricator_adv/emag_act()
- . = ..()
- if(obj_flags & EMAGGED)
- return
- obj_flags |= EMAGGED
- req_access = list()
- INVOKE_ASYNC(src, .proc/error_action_sucessful)
- return TRUE
-
-/obj/machinery/mecha_part_fabricator_adv/proc/error_action_sucessful()
- say("DB error \[Code 0x00F1\]")
- sleep(10)
- say("Attempting auto-repair...")
- sleep(15)
- say("User DB corrupted \[Code 0x00FA\]. Truncating data structure...")
- sleep(30)
- say("User DB truncated. Please contact your Nanotrasen system operator for future assistance.")
-
-
-/obj/machinery/mecha_part_fabricator_adv/proc/output_parts_list(set_name)
- var/output = ""
- for(var/v in stored_research.researched_designs)
- var/datum/design/D = SSresearch.techweb_design_by_id(v)
- if(D.build_type & MECHFAB)
- if(!(set_name in D.category))
- continue
- output += "
[output_part_info(D)]
\["
- if(check_clearance(D) && check_resources(D))
- output += "
Build | "
- output += "
Add to queue\]\[
?\]
"
- return output
-
-/obj/machinery/mecha_part_fabricator_adv/proc/check_clearance(datum/design/D)
- if(!(obj_flags & EMAGGED) && (offstation_security_levels || is_station_level(z)) && !ISINRANGE(GLOB.security_level, D.min_security_level, D.max_security_level))
- return FALSE
- return TRUE
-
-/obj/machinery/mecha_part_fabricator_adv/proc/output_part_info(datum/design/D)
- var/clearance = !(obj_flags & EMAGGED) && (offstation_security_levels || is_station_level(z))
- var/sec_text = ""
- if(clearance && (D.min_security_level > SEC_LEVEL_GREEN || D.max_security_level < SEC_LEVEL_DELTA))
- sec_text = " (Allowed security levels: "
- for(var/n in D.min_security_level to D.max_security_level)
- sec_text += NUM2SECLEVEL(n)
- if(n + 1 <= D.max_security_level)
- sec_text += ", "
- sec_text += ") "
- var/output = "[initial(D.name)] (Cost: [output_part_cost(D)]) [sec_text][get_construction_time_w_coeff(D)/10]sec"
- return output
-
-/obj/machinery/mecha_part_fabricator_adv/proc/output_part_cost(datum/design/D)
- var/i = 0
- var/output
- for(var/c in D.materials)
- var/datum/material/M = c
- output += "[i?" | ":null][get_resource_cost_w_coeff(D, M)] [M.name]"
- i++
- return output
-
-/obj/machinery/mecha_part_fabricator_adv/proc/output_available_resources()
- var/output
- var/datum/component/material_container/materials = rmat.mat_container
-
- if(materials)
- for(var/mat_id in materials.materials)
- var/datum/material/M = mat_id
- var/amount = materials.materials[mat_id]
- var/ref = REF(M)
- output += "[M.name]: [amount] cm³"
- if(amount >= MINERAL_MATERIAL_AMOUNT)
- output += "- Remove \[1\]"
- if(amount >= (MINERAL_MATERIAL_AMOUNT * 10))
- output += " | \[10\]"
- output += " | \[50\]"
- output += "
"
- else
- output += "No material storage connected, please contact the quartermaster.
"
- return output
-
-/obj/machinery/mecha_part_fabricator_adv/proc/get_resources_w_coeff(datum/design/D)
- var/list/resources = list()
- for(var/R in D.materials)
- resources[R] = get_resource_cost_w_coeff(D, R)
- return resources
-
-/obj/machinery/mecha_part_fabricator_adv/proc/check_resources(datum/design/D)
- if(D.reagents_list.len) // No reagents storage - no reagent designs.
- return FALSE
- var/datum/component/material_container/materials = rmat.mat_container
- if(materials.has_materials(get_resources_w_coeff(D)))
- return TRUE
- return FALSE
-
-/obj/machinery/mecha_part_fabricator_adv/proc/build_part(datum/design/D)
- var/list/res_coef = get_resources_w_coeff(D)
-
- var/datum/component/material_container/materials = rmat.mat_container
- if (!materials)
- say("No access to material storage, please contact the quartermaster.")
- return FALSE
- if (rmat.on_hold())
- say("Mineral access is on hold, please contact the quartermaster.")
- return FALSE
- if(!check_resources(D))
- say("Not enough resources. Queue processing stopped.")
- return FALSE
- being_built = D
- desc = "It's building \a [initial(D.name)]."
- materials.use_materials(res_coef)
- rmat.silo_log(src, "built", -1, "[D.name]", res_coef)
-
- add_overlay("fab-active")
- use_power = ACTIVE_POWER_USE
- updateUsrDialog()
- sleep(get_construction_time_w_coeff(D))
- use_power = IDLE_POWER_USE
- cut_overlay("fab-active")
- desc = initial(desc)
-
- var/location = get_step(src,(dir))
- var/obj/item/I = new D.build_path(location)
- I.set_custom_materials(res_coef)
- say("\The [I] is complete.")
- being_built = null
-
- updateUsrDialog()
-
- return TRUE
-
-/obj/machinery/mecha_part_fabricator_adv/proc/update_queue_on_page()
- send_byjax(usr,"mecha_fabricator.browser","queue",list_queue())
- return
-
-/obj/machinery/mecha_part_fabricator_adv/proc/add_part_set_to_queue(set_name)
- if(set_name in part_sets)
- for(var/v in stored_research.researched_designs)
- var/datum/design/D = SSresearch.techweb_design_by_id(v)
- if(D.build_type & MECHFAB)
- if(set_name in D.category)
- add_to_queue(D)
-
-/obj/machinery/mecha_part_fabricator_adv/proc/add_to_queue(D)
- if(!istype(queue))
- queue = list()
- if(D)
- queue[++queue.len] = D
- return queue.len
-
-/obj/machinery/mecha_part_fabricator_adv/proc/remove_from_queue(index)
- if(!isnum(index) || !ISINTEGER(index) || !istype(queue) || (index<1 || index>queue.len))
- return FALSE
- queue.Cut(index,++index)
- return TRUE
-
-/obj/machinery/mecha_part_fabricator_adv/proc/process_queue()
- var/datum/design/D = queue[1]
- if(!D)
- remove_from_queue(1)
- if(queue.len)
- return process_queue()
- else
- return
- temp = null
- while(D)
- if(stat&(NOPOWER|BROKEN))
- return FALSE
- if(!check_clearance(D))
- say("Security level not met. Queue processing stopped.")
- temp = {"Security level not met to build next part.
- Try again | Return"}
- return FALSE
- if(!check_resources(D))
- say("Not enough resources. Queue processing stopped.")
- temp = {"Not enough resources to build next part.
- Try again | Return"}
- return FALSE
- remove_from_queue(1)
- build_part(D)
- D = listgetindex(queue, 1)
- say("Queue processing finished successfully.")
-
-/obj/machinery/mecha_part_fabricator_adv/proc/list_queue()
- var/output = "Queue contains:"
- if(!istype(queue) || !queue.len)
- output += "
Nothing"
- else
- output += ""
- var/i = 0
- for(var/datum/design/D in queue)
- i++
- var/obj/part = D.build_path
- output += "- "
- output += initial(part.name) + " - "
- output += "[i>1?"↑":null] "
- output += "[i↓
":null] "
- output += "Remove"
-
- output += ""
- output += "\[Process queue | Clear queue\]"
- return output
-
-/obj/machinery/mecha_part_fabricator_adv/proc/sync()
- temp = "Updating local R&D database..."
- updateUsrDialog()
- sleep(30) //only sleep if called by user
-
- for(var/obj/machinery/computer/rdconsole/RDC in oview(7,src))
- RDC.stored_research.copy_research_to(stored_research)
- temp = "Processed equipment designs.
"
- //check if the tech coefficients have changed
- temp += "Return"
-
- updateUsrDialog()
- say("Successfully synchronized with R&D server.")
- return
-
- temp = "Unable to connect to local R&D Database.
Please check your connections and try again.
Return"
- updateUsrDialog()
- return
-
-/obj/machinery/mecha_part_fabricator_adv/proc/get_resource_cost_w_coeff(datum/design/D, resource, roundto = 1)
- return round(D.materials[resource]*component_coeff, roundto)
-
-/obj/machinery/mecha_part_fabricator_adv/proc/get_construction_time_w_coeff(datum/design/D, roundto = 1) //aran
- return round(initial(D.construction_time)*time_coeff, roundto)
-
-/obj/machinery/mecha_part_fabricator_adv/ui_interact(mob/user as mob)
- . = ..()
- var/dat, left_part
- user.set_machine(src)
- var/turf/exit = get_step(src,(dir))
- if(exit.density)
- say("Error! Part outlet is obstructed.")
- return
- if(temp)
- left_part = temp
- else if(being_built)
- var/obj/I = being_built.build_path
- left_part = {"Building [initial(I.name)].
- Please wait until completion..."}
- else
- switch(screen)
- if("main")
- left_part = output_available_resources()+"
"
- left_part += "Sync with R&D servers
"
- for(var/part_set in part_sets)
- left_part += "[part_set] - \[Add all parts to queue\]
"
- if("parts")
- left_part += output_parts_list(part_set)
- left_part += "
Return"
- dat = {"
-
-
- [name] data
-
-
-
-
-
-
- |
- [left_part]
- |
-
- [list_queue()]
- |
-
-
-
- "}
- user << browse(dat, "window=mecha_fabricator;size=1000x430")
- onclose(user, "mecha_fabricator")
- return
-
-/obj/machinery/mecha_part_fabricator_adv/Topic(href, href_list)
- if(..())
- return
- if(href_list["part_set"])
- var/tpart_set = href_list["part_set"]
- if(tpart_set)
- if(tpart_set=="clear")
- part_set = null
- else
- part_set = tpart_set
- screen = "parts"
- if(href_list["part"])
- var/T = href_list["part"]
- for(var/v in stored_research.researched_designs)
- var/datum/design/D = SSresearch.techweb_design_by_id(v)
- if(D.build_type & MECHFAB)
- if(D.id == T)
- if(!processing_queue)
- build_part(D)
- else
- add_to_queue(D)
- break
- if(href_list["add_to_queue"])
- var/T = href_list["add_to_queue"]
- for(var/v in stored_research.researched_designs)
- var/datum/design/D = SSresearch.techweb_design_by_id(v)
- if(D.build_type & MECHFAB)
- if(D.id == T)
- add_to_queue(D)
- break
- return update_queue_on_page()
- if(href_list["remove_from_queue"])
- remove_from_queue(text2num(href_list["remove_from_queue"]))
- return update_queue_on_page()
- if(href_list["partset_to_queue"])
- add_part_set_to_queue(href_list["partset_to_queue"])
- return update_queue_on_page()
- if(href_list["process_queue"])
- spawn(0)
- if(processing_queue || being_built)
- return FALSE
- processing_queue = 1
- process_queue()
- processing_queue = 0
- if(href_list["clear_temp"])
- temp = null
- if(href_list["screen"])
- screen = href_list["screen"]
- if(href_list["queue_move"] && href_list["index"])
- var/index = text2num(href_list["index"])
- var/new_index = index + text2num(href_list["queue_move"])
- if(isnum(index) && isnum(new_index) && ISINTEGER(index) && ISINTEGER(new_index))
- if(ISINRANGE(new_index,1,queue.len))
- queue.Swap(index,new_index)
- return update_queue_on_page()
- if(href_list["clear_queue"])
- queue = list()
- return update_queue_on_page()
- if(href_list["sync"])
- sync()
- if(href_list["part_desc"])
- var/T = href_list["part_desc"]
- for(var/v in stored_research.researched_designs)
- var/datum/design/D = SSresearch.techweb_design_by_id(v)
- if(D.build_type & MECHFAB)
- if(D.id == T)
- var/obj/part = D.build_path
- temp = {"[initial(part.name)] description:
- [initial(part.desc)]
- Return
- "}
- break
-
- if(href_list["remove_mat"] && href_list["material"])
- var/datum/material/Mat = locate(href_list["material"])
- eject_sheets(Mat, text2num(href_list["remove_mat"]))
-
- updateUsrDialog()
- return
-
-/obj/machinery/mecha_part_fabricator_adv/proc/do_process_queue()
- if(processing_queue || being_built)
- return FALSE
- processing_queue = 1
- process_queue()
- processing_queue = 0
-
-/obj/machinery/mecha_part_fabricator_adv/proc/eject_sheets(eject_sheet, eject_amt)
- var/datum/component/material_container/mat_container = rmat.mat_container
- if (!mat_container)
- say("No access to material storage, please contact the quartermaster.")
- return 0
- if (rmat.on_hold())
- say("Mineral access is on hold, please contact the quartermaster.")
- return 0
- var/count = mat_container.retrieve_sheets(text2num(eject_amt), eject_sheet, drop_location())
- var/list/matlist = list()
- matlist[eject_sheet] = text2num(eject_amt)
- rmat.silo_log(src, "ejected", -count, "sheets", matlist)
- return count
-
-/obj/machinery/mecha_part_fabricator_adv/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted)
- var/stack_name = material2name(id_inserted)
- add_overlay("fab-load-[stack_name]")
- addtimer(CALLBACK(src, /atom/proc/cut_overlay, "fab-load-[stack_name]"), 10)
- updateUsrDialog()
-
-/obj/machinery/mecha_part_fabricator_adv/attackby(obj/item/W, mob/user, params)
- if(default_deconstruction_screwdriver(user, "fab-o", "fab-idle", W))
- return TRUE
-
- if(default_deconstruction_crowbar(W))
- return TRUE
-
- return ..()
-
-/obj/machinery/mecha_part_fabricator_adv/proc/material2name(ID)
- return copytext(ID,2)
-
-/obj/machinery/mecha_part_fabricator_adv/proc/is_insertion_ready(mob/user)
- if(panel_open)
- to_chat(user, "You can't load [src] while it's opened!")
- return FALSE
- if(being_built)
- to_chat(user, "\The [src] is currently processing! Please wait until completion.")
- return FALSE
-
- return TRUE
-
-/obj/machinery/mecha_part_fabricator_adv/maint
- link_on_init = FALSE
diff --git a/sandcode/code/game/objects/items/circuitboards/machine_circuitboards.dm b/sandcode/code/game/objects/items/circuitboards/machine_circuitboards.dm
index 3dd6a9ada6..ab97d07d54 100644
--- a/sandcode/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/sandcode/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -1,12 +1,3 @@
-/obj/item/circuitboard/machine/mechfab_adv
- name = "advanced exosuit fabricator (Machine board)"
- build_path = /obj/machinery/mecha_part_fabricator_adv
- req_components = list(
- /obj/item/stock_parts/matter_bin = 2,
- /obj/item/stock_parts/manipulator = 1,
- /obj/item/stock_parts/micro_laser = 1,
- /obj/item/stack/sheet/glass = 1)
-
/obj/item/circuitboard/machine/pacman/mclunky
name = "McLunky-type Generator (Machine Board)"
build_path = /obj/machinery/power/port_gen/pacman/mclunky
diff --git a/sandcode/code/modules/admin/verbs/fix_air.dm b/sandcode/code/modules/admin/verbs/fix_air.dm
index 2798d5543f..4281491e39 100644
--- a/sandcode/code/modules/admin/verbs/fix_air.dm
+++ b/sandcode/code/modules/admin/verbs/fix_air.dm
@@ -1,7 +1,7 @@
// Proc taken from yogstation, credit to nichlas0010 for the original
/client/proc/fix_air(turf/open/T in world)
set name = "Fix Air"
- set category = "Admin - Game"
+ set category = "Admin"
set desc = "Fixes air in specified radius."
if(!holder)
diff --git a/sandcode/code/modules/research/designs/machine_designs.dm b/sandcode/code/modules/research/designs/machine_designs.dm
index f073c4fd89..fa8cac12f7 100644
--- a/sandcode/code/modules/research/designs/machine_designs.dm
+++ b/sandcode/code/modules/research/designs/machine_designs.dm
@@ -14,14 +14,6 @@
category = list("Teleportation Machinery")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
-/datum/design/board/mecha_part_fabricator_adv
- name= "Machine Design (Advanced exosuit fabricator)"
- desc = "An advanced version of the exosuit fabricator that can link to oresilos!"
- id = "mech_fab_adv"
- build_path = /obj/item/circuitboard/machine/mechfab_adv
- category = list("Research Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
/datum/design/mclunky_electronics
name = "Machine Design (McLunky Circuit Board)"
desc = "Now just give the parts to the botanist and they could perhaps be making power for you!"
diff --git a/sandcode/code/modules/research/techweb/all_nodes.dm b/sandcode/code/modules/research/techweb/all_nodes.dm
index f3a8a03924..890d423bcd 100644
--- a/sandcode/code/modules/research/techweb/all_nodes.dm
+++ b/sandcode/code/modules/research/techweb/all_nodes.dm
@@ -23,14 +23,6 @@
design_ids = list("telepad", "telesci_console")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
-/datum/techweb_node/adv_mechfab
- id = "advanced_mechfab"
- display_name = "Advanced Exosuit Fabricator"
- description = "Studying more about devices you get to know how to make a linkable exosuit fabricator"
- prereq_ids = list("datatheory")
- design_ids = list("mech_fab_adv")
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000)
-
/datum/techweb_node/adv_toolset_implant
id = "adv_toolset_implant"
display_name = "Advanced Toolset Implant"
diff --git a/sandcode/icons/obj/robotics.dmi b/sandcode/icons/obj/robotics.dmi
deleted file mode 100644
index aa1c02010e..0000000000
Binary files a/sandcode/icons/obj/robotics.dmi and /dev/null differ
diff --git a/tgstation.dme b/tgstation.dme
index d6ea1a846e..0497784ce4 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3584,7 +3584,6 @@
#include "sandcode\code\game\machinery\posialert.dm"
#include "sandcode\code\game\machinery\computer\arcade\tetris.dm"
#include "sandcode\code\game\machinery\pipe\construction.dm"
-#include "sandcode\code\game\mecha\mech_fabricator.dm"
#include "sandcode\code\game\mecha\mecha_construction_paths.dm"
#include "sandcode\code\game\mecha\mecha_parts.dm"
#include "sandcode\code\game\objects\effects\contraband.dm"