diff --git a/baystation12.dme b/baystation12.dme
index 163d1a079cd..30c856b0bcf 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -848,10 +848,10 @@
#include "code\modules\customitems\item_defines.dm"
#include "code\modules\customitems\item_spawning.dm"
#include "code\modules\customitems\definitions\base.dm"
-#include "code\modules\detectivework\detective_work.dm"
-#include "code\modules\detectivework\evidence.dm"
-#include "code\modules\detectivework\footprints_and_rag.dm"
-#include "code\modules\detectivework\scanner.dm"
+#include "code\modules\DetectiveWork\detective_work.dm"
+#include "code\modules\DetectiveWork\evidence.dm"
+#include "code\modules\DetectiveWork\footprints_and_rag.dm"
+#include "code\modules\DetectiveWork\scanner.dm"
#include "code\modules\economy\Accounts.dm"
#include "code\modules\economy\Accounts_DB.dm"
#include "code\modules\economy\ATM.dm"
@@ -947,16 +947,19 @@
#include "code\modules\mining\machine_processing.dm"
#include "code\modules\mining\machine_stacking.dm"
#include "code\modules\mining\machine_unloading.dm"
+#include "code\modules\mining\manufacturing.dm"
#include "code\modules\mining\materials.dm"
#include "code\modules\mining\mine_areas.dm"
#include "code\modules\mining\mine_items.dm"
#include "code\modules\mining\mine_turfs.dm"
#include "code\modules\mining\minerals.dm"
+#include "code\modules\mining\mining_recipes.dm"
#include "code\modules\mining\mint.dm"
#include "code\modules\mining\money_bag.dm"
#include "code\modules\mining\ore.dm"
#include "code\modules\mining\ore_datum.dm"
#include "code\modules\mining\satchel_ore_boxdm.dm"
+#include "code\modules\mining\security_recipes.dm"
#include "code\modules\mining\surprise.dm"
#include "code\modules\mining\drilling\distribution.dm"
#include "code\modules\mining\drilling\drill.dm"
diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index c09c8de7774..b80c6bb4145 100755
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -1095,3 +1095,30 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
containertype = /obj/structure/closet/crate
containername = "mafia supply crate"
group = "Operations"
+
+/datum/supply_packs/fabric
+ name = "Fabric crate"
+ contains = list(/obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric,
+ /obj/item/weapon/ore/fabric)
+ cost = 30
+ containertype = /obj/structure/closet/crate
+ containername = "Fabric crate"
+ group = "Operations"
diff --git a/code/modules/mining/manufacturing.dm b/code/modules/mining/manufacturing.dm
new file mode 100644
index 00000000000..7c6d695d769
--- /dev/null
+++ b/code/modules/mining/manufacturing.dm
@@ -0,0 +1,1139 @@
+// the entire manufacturing.dm
+
+/datum/manufacture
+ var/name = null
+ var/item = null
+ var/cost1 = null
+ var/cost2 = null
+ var/cost3 = null
+ var/cname1 = null
+ var/cname2 = null
+ var/cname3 = null
+ var/amount1 = 0
+ var/amount2 = 0
+ var/amount3 = 0
+ var/create = 1
+ var/time = 5
+
+/obj/machinery/manufacturer
+ name = "Manufacturing Unit"
+ desc = "A standard fabricator unit capable of producing certain items from mined ore."
+ icon = 'surgery.dmi'
+ icon_state = "fab-idle"
+ density = 1
+ anchored = 1
+ //mats = 25
+ var/working = 0
+ var/panelopen = 0
+ var/powconsumption = 0
+ var/hacked = 0
+ var/acceptdisk = 0
+ var/dl_list = null
+ var/list/available = list()
+ var/list/diskload = list()
+ var/list/download = list()
+ var/list/hidden = list()
+
+ New()
+ ..()
+
+ process()
+ ..()
+ if (src.working) use_power(src.powconsumption)
+
+ ex_act(severity)
+ switch(severity)
+ if(1.0) del(src)
+ if(2.0)
+ if (prob(60)) stat |= BROKEN
+ if(3.0)
+ if (prob(30)) stat |= BROKEN
+ return
+
+ blob_act()
+ if (prob(25)) del src
+ return
+
+ meteorhit()
+ if (prob(50)) del src
+ return
+
+ power_change()
+ if(stat & BROKEN) icon_state = "fab-broken"
+ else
+ if( powered() )
+ if (src.working) src.icon_state = "fab-active"
+ else src.icon_state = "fab-idle"
+ stat &= ~NOPOWER
+ else
+ spawn(rand(0, 15))
+ src.icon_state = "fab-off"
+ stat |= NOPOWER
+
+ attack_hand(var/mob/user as mob)
+ if(stat & BROKEN) return
+ if(stat & NOPOWER) return
+
+ user.machine = src
+ var/dat = "[src.name]
"
+
+ if(src.working)
+ dat += "This unit is currently busy."
+ user << browse(dat, "window=manufact;size=400x500")
+ onclose(user, "manufact")
+ return
+
+ var/AMTmaux = 0
+ var/AMTmoli = 0
+ var/AMTphar = 0
+ var/AMTclar = 0
+ var/AMTbohr = 0
+ var/AMTereb = 0
+ var/AMTcere = 0
+ var/AMTplas = 0
+ var/AMTuqil = 0
+ var/AMTtele = 0
+ var/AMTfabr = 0
+
+ for(var/obj/item/weapon/ore/O in src.contents)
+ if (istype(O,/obj/item/weapon/ore/iron)) AMTmaux++
+ if (istype(O,/obj/item/weapon/ore/glass)) AMTmoli++
+ if (istype(O,/obj/item/weapon/ore/silver)) AMTphar++
+ if (istype(O,/obj/item/weapon/ore/diamond)) AMTclar++
+ if (istype(O,/obj/item/weapon/ore/gold)) AMTbohr++
+ if (istype(O,/obj/item/weapon/ore/coal)) AMTereb++
+ if (istype(O,/obj/item/weapon/ore/uranium)) AMTcere++
+ if (istype(O,/obj/item/weapon/ore/plasma)) AMTplas++
+ if (istype(O,/obj/item/weapon/ore/osmium)) AMTuqil++
+ if (istype(O,/obj/item/weapon/ore/hydrogen)) AMTtele++
+ if (istype(O,/obj/item/weapon/ore/fabric)) AMTfabr++
+
+ dat += "Available Minerals
"
+ if (AMTmaux) dat += "Iron: [AMTmaux]
"
+ if (AMTmoli) dat += "Glass: [AMTmoli]
"
+ if (AMTphar) dat += "Silver: [AMTphar]
"
+ if (AMTclar) dat += "Diamond: [AMTclar]
"
+ if (AMTbohr) dat += "Gold: [AMTbohr]
"
+ if (AMTereb) dat += "Coal: [AMTereb]
"
+ if (AMTcere) dat += "Uranium: [AMTcere]
"
+ if (AMTplas) dat += "Plasma: [AMTplas]
"
+ if (AMTuqil) dat += "Platinum: [AMTuqil]
"
+ if (AMTtele) dat += "Hydrogen: [AMTtele]
"
+ if (AMTfabr) dat += "Fabric: [AMTfabr]
"
+ if (!AMTmaux && !AMTmoli && !AMTphar && !AMTclar && !AMTbohr && !AMTereb && !AMTcere && !AMTplas && !AMTuqil && !AMTtele && !AMTfabr)
+ dat += "No minerals currently loaded.
"
+
+ dat += {"
+ Available Schematics"}
+
+ for(var/datum/manufacture/A in src.available)
+ dat += {"
+ [A.name]
+ Cost: [A.amount1] [A.cname1]"}
+ if (A.cost2) dat += ", [A.amount2] [A.cname2]"
+ if (A.cost3) dat += ", [A.amount3] [A.cname3]"
+ dat += "
Time: [A.time] Seconds
"
+
+ for(var/datum/manufacture/A in src.download)
+ dat += {"
+ [A.name] (Downloaded)
+ Cost: [A.amount1] [A.cname1]"}
+ if (A.cost2) dat += ", [A.amount2] [A.cname2]"
+ if (A.cost3) dat += ", [A.amount3] [A.cname3]"
+ dat += "
Time: [A.time] Seconds
"
+
+ for(var/datum/manufacture/A in src.diskload)
+ dat += {"
+ [A.name] (Disk)
+ Cost: [A.amount1] [A.cname1]"}
+ if (A.cost2) dat += ", [A.amount2] [A.cname2]"
+ if (A.cost3) dat += ", [A.amount3] [A.cname3]"
+ dat += "
Time: [A.time] Seconds
"
+
+ if (src.hacked)
+ for(var/datum/manufacture/A in src.hidden)
+ dat += {"
+ [A.name] (Secret)
+ Cost: [A.amount1] [A.cname1]"}
+ if (A.cost2) dat += ", [A.amount2] [A.cname2]"
+ if (A.cost3) dat += ", [A.amount3] [A.cname3]"
+ dat += "
Time: [A.time] Seconds
"
+
+ dat += "
"
+
+ if (src.dl_list)
+ dat += {"Download Available Schematics
+ Clear Downloaded Schematics
"}
+
+ if (src.acceptdisk)
+ dat += {"Clear Disk Schematics
"}
+
+ user << browse(dat, "window=manufact;size=400x500")
+ onclose(user, "manufact")
+
+ Topic(href, href_list)
+ if(stat & BROKEN) return
+ if(stat & NOPOWER) return
+ if(usr.stat || usr.restrained())
+ return
+
+ if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))))
+ usr.machine = src
+
+ if (href_list["download"])
+ if(!src.dl_list) usr << "\red This unit is not capable of downloading any additional schematics."
+ else
+ var/amtdl = 0
+ //var/dontload = 0
+ if (src.dl_list == "robotics")
+ /*for(var/i = robotics_research.starting_tier, i <= robotics_research.max_tiers, i++)
+ for(var/datum/roboresearch/X in robotics_research.researched_items[i])
+ for (var/datum/manufacture/S in X.schematics)
+ for (var/datum/manufacture/A in src.download)
+ if (istype(S,A)) dontload = 1
+ if (!dontload)
+ src.download += new S.type(src)
+ amtdl++
+ else dontload = 0*/
+ if (amtdl) usr << "\blue [amtdl] new schematics downloaded from Robotics Research Database."
+ else usr << "\red No new schematics currently available in Robotics Research Database."
+
+ if (href_list["delete"])
+ var/operation = text2num(href_list["delete"])
+ if(operation == 1) // Clear Disk Schematics
+ var/amtgone = 0
+ for(var/datum/manufacture/D in src.diskload)
+ src.diskload-= D
+ amtgone++
+ if (amtgone) usr << "\blue Cleared [amtgone] schematics from database."
+ else usr << "\red No disk-loaded schematics detected in database."
+ if(operation == 2) // Clear Download Schematics
+ var/amtgone = 0
+ for(var/datum/manufacture/D in src.download)
+ src.download-= D
+ amtgone++
+ if (amtgone) usr << "\blue Cleared [amtgone] schematics from database."
+ else usr << "\red No downloaded schematics detected in database."
+
+ if (href_list["eject"])
+ var/operation = text2num(href_list["eject"])
+ var/ejectamt = 0
+ var/ejecting = null
+ switch(operation)
+ if(1) ejecting = /obj/item/weapon/ore/iron
+ if(2) ejecting = /obj/item/weapon/ore/glass
+ if(3) ejecting = /obj/item/weapon/ore/silver
+ if(4) ejecting = /obj/item/weapon/ore/diamond
+ if(5) ejecting = /obj/item/weapon/ore/gold
+ if(6) ejecting = /obj/item/weapon/ore/coal
+ if(7) ejecting = /obj/item/weapon/ore/uranium
+ if(8) ejecting = /obj/item/weapon/ore/plasma
+ if(9) ejecting = /obj/item/weapon/ore/osmium
+ if(10) ejecting = /obj/item/weapon/ore/hydrogen
+ if(11) ejecting = /obj/item/weapon/ore/fabric
+ else
+ usr << "\red Error. Unknown ore type."
+ return
+ sleep(3)
+ ejectamt = input(usr,"How many units do you want to eject?","Eject Materials") as num
+ for(var/obj/item/weapon/ore/O in src.contents)
+ if (ejectamt <= 0) break
+ if (istype(O, ejecting))
+ O.loc = usr.loc
+ ejectamt--
+
+ if (href_list["disp"])
+ var/datum/manufacture/I = locate(href_list["disp"])
+ // Material Check
+ var/A1 = 0
+ var/A2 = 0
+ var/A3 = 0
+ for(var/obj/item/weapon/ore/O in src.contents)
+ if (istype(O,I.cost1)) A1++
+ if (istype(O,I.cost2)) A2++
+ if (istype(O,I.cost3)) A3++
+ if (A1 < I.amount1 || A2 < I.amount2 || A3 < I.amount3)
+ usr << "\red Insufficient materials to manufacture that item."
+ return
+ // Consume Mats
+ var/C1 = I.amount1
+ var/C2 = I.amount2
+ var/C3 = I.amount3
+ for(var/obj/item/weapon/ore/O in src.contents)
+ if (istype(O,I.cost1) && C1)
+ del O
+ C1--
+ if (istype(O,I.cost2) && C2)
+ del O
+ C2--
+ if (istype(O,I.cost3) && C3)
+ del O
+ C3--
+ // Manufacture Item
+ src.icon_state = "fab-active"
+ src.working = 1
+ var/worktime = I.time * 10
+ var/powconsume = round(1500*worktime/3)
+ /*for(var/i = robotics_research.starting_tier, i <= robotics_research.max_tiers, i++)
+ for(var/datum/roboresearch/a in robotics_research.researched_items[i])
+ if (a.manubonus)
+ worktime -= a.timebonus
+ if (a.multiplier != 0) worktime /= a.multiplier
+ powconsume -= a.powbonus*/
+ if (worktime < 1) worktime = 1
+ src.powconsumption = powconsume
+ src.updateUsrDialog()
+ sleep(worktime)
+ var/make = I.create
+ while (make > 0)
+ new I.item(src.loc)
+ make--
+ src.working = 0
+ src.icon_state = "fab-idle"
+ src.updateUsrDialog()
+
+
+ attackby(obj/item/weapon/W as obj, mob/user as mob)
+ var/load = 0
+ if(istype(W, /obj/item/weapon/ore/))
+ for(var/mob/O in viewers(user, null)) O.show_message(text("\blue [] loads [] into the [].", user, W, src), 1)
+ load = 1
+ else if(istype(W, /obj/item/stack/sheet))
+ var/obj/item/stack/sheet/STACK = W
+ for(var/mob/O in viewers(user, null)) O.show_message(text("\blue [] loads [] into the [].", user, W, src), 1)
+ if(istype(STACK, /obj/item/stack/sheet/metal))
+ for (var/amt = STACK.amount, amt > 0, amt--) new /obj/item/weapon/ore/iron(src)
+ if(istype(STACK, /obj/item/stack/sheet/plasteel))
+ for (var/amt = STACK.amount, amt > 0, amt--)
+ new /obj/item/weapon/ore/iron(src)
+ new /obj/item/weapon/ore/plasma(src)
+ if(istype(STACK, /obj/item/stack/sheet/glass))
+ for (var/amt = STACK.amount, amt > 0, amt--) new /obj/item/weapon/ore/glass(src)
+ if(istype(STACK, /obj/item/stack/sheet/rglass))
+ for (var/amt = STACK.amount, amt > 0, amt--)
+ new /obj/item/weapon/ore/iron(src)
+ new /obj/item/weapon/ore/glass(src)
+ load = 2
+ //else if (istype(W, /obj/item/weapon/plant/wheat/metal))
+ // new /obj/item/weapon/ore/iron(src)
+ // load = 2
+ /*else if(istype(W, /obj/item/weapon/cable_coil/))
+ for(var/mob/O in viewers(user, null)) O.show_message(text("\blue [] loads [] into the [].", user, W, src), 1)
+ for (var/amt = W:amount, amt > 0, amt--)
+ new /obj/item/weapon/ore/silver(src)
+ amt--
+ load = 2*/
+ else if(istype(W, /obj/item/weapon/shard))
+ new /obj/item/weapon/ore/glass(src)
+ load = 2
+ else if(istype(W, /obj/item/stack/rods))
+ var/obj/item/stack/RODS = W
+ for (var/amt = RODS.amount, amt > 0, amt--) new /obj/item/weapon/ore/iron(src)
+ load = 2
+ else if(istype(W, /obj/item/clothing/))
+ if(istype(W, /obj/item/clothing/under/))
+ new /obj/item/weapon/ore/fabric(src)
+ load = 2
+ if(istype(W, /obj/item/clothing/suit/))
+ if(!istype(W,/obj/item/clothing/suit/armor))
+ new /obj/item/weapon/ore/fabric(src)
+ new /obj/item/weapon/ore/fabric(src)
+ if(istype(W,/obj/item/clothing/suit/space/)) new /obj/item/weapon/ore/fabric(src)
+ load = 2
+ else if(istype(W, /obj/item/weapon/disk/data/schematic))
+ if (!src.acceptdisk) user << "\red This unit is unable to accept disks."
+ else
+ var/amtload = 0
+ var/dontload = 0
+ for (var/datum/manufacture/WS in W:schematics)
+ for (var/datum/manufacture/A in src.available)
+ if (istype(WS,A)) dontload = 1
+ for (var/datum/manufacture/B in src.download)
+ if (istype(WS,B)) dontload = 1
+ for (var/datum/manufacture/C in src.diskload)
+ if (istype(WS,C)) dontload = 1
+ for (var/datum/manufacture/D in src.hidden)
+ if (istype(WS,D) && src.hacked) dontload = 1
+ if (!dontload)
+ src.diskload += new WS.type(src)
+ amtload++
+ else dontload = 0
+ if (amtload) user << "\blue [amtload] new schematics downloaded from disk."
+ else user << "\red No new schematics available on disk."
+ else if (istype(W, /obj/item/weapon/storage/bag/ore))
+ for(var/mob/V in viewers(user, null)) V.show_message(text("\blue [] uses the []'s automatic ore loader on []!", user, src, W), 1)
+ var/amtload = 0
+ for (var/obj/item/weapon/ore/M in W.contents)
+ M.loc = src
+ amtload++
+ if (amtload) user << "\blue [amtload] pieces of ore loaded from [W]!"
+ else user << "\red No ore loaded!"
+ else if(istype(W, /obj/item/weapon/card/emag))
+ src.hacked = 1
+ user << "\blue You remove the [src]'s product locks!"
+ else ..()
+
+ if (load == 1)
+ user.u_equip(W)
+ W.loc = src
+ if ((user.client && user.s_active != src))
+ user.client.screen -= W
+ W.dropped()
+ else if (load == 2)
+ user.u_equip(W)
+ W.dropped()
+ if ((user.client && user.s_active != src))
+ user.client.screen -= W
+ del W
+
+ src.updateUsrDialog()
+
+ MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
+ if (istype(O, /obj/structure/closet/crate/))
+ for(var/mob/V in viewers(user, null)) V.show_message(text("\blue [] uses the []'s automatic ore loader on []!", user, src, O), 1)
+ var/amtload = 0
+ for (var/obj/item/weapon/ore/M in O.contents)
+ M.loc = src
+ amtload++
+ if (amtload) user << "\blue [amtload] pieces of ore loaded from [O]!"
+ else user << "\red No ore loaded!"
+ else if (istype(O, /obj/item/weapon/ore/))
+ for(var/mob/V in viewers(user, null)) V.show_message(text("\blue [] begins quickly stuffing ore into []!", user, src), 1)
+ var/staystill = user.loc
+ for(var/obj/item/weapon/ore/M in view(1,user))
+ M.loc = src
+ sleep(3)
+ if (user.loc != staystill) break
+ user << "\blue You finish stuffing ore into [src]!"
+ /*else if (istype(O, /obj/item/weapon/plant/wheat/metal))
+ for(var/mob/V in viewers(user, null)) V.show_message(text("\blue [] begins quickly stuffing [O] into []!", user, src), 1)
+ var/staystill = user.loc
+ for(var/obj/item/weapon/plant/wheat/metal/M in view(1,user))
+ new /obj/item/weapon/ore/iron(src)
+ del M
+ sleep(3)
+ if (user.loc != staystill) break
+ user << "\blue You finish stuffing [O] into [src]!"*/
+ else ..()
+ src.updateUsrDialog()
+
+/obj/item/weapon/disk/data/schematic
+ name = "Manufacturer Schematic Disk"
+ desc = "Contains schematics for use in a Manufacturing Unit."
+ var/list/schematics = list()
+
+// Fabricator Defines
+
+/obj/machinery/manufacturer/general
+ name = "General Manufacturer"
+ desc = "A manufacturing unit calibrated to produce tools and general purpose items."
+
+ New()
+ ..()
+ src.available += new /datum/manufacture/screwdriver(src)
+ src.available += new /datum/manufacture/wirecutters(src)
+ src.available += new /datum/manufacture/wrench(src)
+ src.available += new /datum/manufacture/crowbar(src)
+ src.available += new /datum/manufacture/extinguisher(src)
+ src.available += new /datum/manufacture/welder(src)
+ src.available += new /datum/manufacture/weldingmask(src)
+ src.available += new /datum/manufacture/multitool(src)
+ src.available += new /datum/manufacture/metal5(src)
+ src.available += new /datum/manufacture/metalR(src)
+ src.available += new /datum/manufacture/glass5(src)
+ src.available += new /datum/manufacture/glassR(src)
+ src.available += new /datum/manufacture/atmos_can(src)
+ //src.available += new /datum/manufacture/cable(src)
+ src.available += new /datum/manufacture/light_bulb(src)
+ src.available += new /datum/manufacture/light_tube(src)
+ src.available += new /datum/manufacture/breathmask(src)
+ src.available += new /datum/manufacture/RCDammo(src)
+ //src.available += new /datum/manufacture/cola_bottle(src)
+ //src.hidden += new /datum/manufacture/vuvuzela(src)
+ //src.hidden += new /datum/manufacture/harmonica(src)
+ //src.hidden += new /datum/manufacture/bikehorn(src)
+ //src.hidden += new /datum/manufacture/stunrounds
+
+/obj/machinery/manufacturer/robotics
+ name = "Robotics Fabricator"
+ desc = "A manufacturing unit calibrated to produce robot-related equipment."
+ acceptdisk = 1
+ dl_list = "robotics"
+
+ New()
+ ..()
+ src.available += new /datum/manufacture/robo_frame(src)
+ src.available += new /datum/manufacture/robo_head(src)
+ src.available += new /datum/manufacture/robo_chest(src)
+ src.available += new /datum/manufacture/robo_arm_r(src)
+ src.available += new /datum/manufacture/robo_arm_l(src)
+ src.available += new /datum/manufacture/robo_leg_r(src)
+ src.available += new /datum/manufacture/robo_leg_l(src)
+ src.available += new /datum/manufacture/robo_stmodule(src)
+ //src.available += new /datum/manufacture/cable(src)
+ src.available += new /datum/manufacture/powercell(src)
+ src.available += new /datum/manufacture/crowbar(src)
+ src.available += new /datum/manufacture/scalpel(src)
+ src.available += new /datum/manufacture/circular_saw(src)
+ src.available += new /datum/manufacture/implanter
+ src.hidden += new /datum/manufacture/flash(src)
+
+// Schematic Defines
+// General/Miscellaneous
+
+/datum/manufacture/crowbar
+ name = "Crowbar"
+ item = /obj/item/weapon/crowbar
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 1
+ time = 5
+ create = 1
+
+/datum/manufacture/screwdriver
+ name = "Screwdriver"
+ item = /obj/item/weapon/screwdriver
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 1
+ time = 5
+ create = 1
+
+/datum/manufacture/wirecutters
+ name = "Wirecutters"
+ item = /obj/item/weapon/wirecutters
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 1
+ time = 5
+ create = 1
+
+/datum/manufacture/wrench
+ name = "Wrench"
+ item = /obj/item/weapon/wrench
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 1
+ time = 5
+ create = 1
+/*
+/datum/manufacture/vuvuzela
+ name = "Vuvuzela"
+ item = /obj/item/weapon/vuvuzela
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 1
+ time = 5
+ create = 1
+
+/datum/manufacture/harmonica
+ name = "Harmonica"
+ item = /obj/item/weapon/harmonica
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 1
+ time = 5
+ create = 1
+
+/datum/manufacture/cola_bottle
+ name = "Glass Bottle"
+ item = /obj/item/weapon/reagent_containers/food/drinks/cola_bottle
+ cost1 = /obj/item/weapon/ore/glass
+ cname1 = "Glass"
+ amount1 = 1
+ time = 4
+ create = 1
+
+/datum/manufacture/bikehorn
+ name = "Bicycle Horn"
+ item = /obj/item/weapon/bikehorn
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 1
+ time = 5
+ create = 1
+
+/datum/manufacture/stunrounds
+ name = ".38 Stunner Rounds"
+ item = /obj/item/weapon/ammo/bullets/a38/stun
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 7
+ cost2 = /obj/item/weapon/ore/silver
+ cname2 = "Silver"
+ amount2 = 3
+ time = 25
+ create = 1
+*/
+/datum/manufacture/extinguisher
+ name = "Fire Extinguisher"
+ item = /obj/item/weapon/extinguisher
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 1
+ cost2 = /obj/item/weapon/ore/glass
+ cname2 = "Glass"
+ amount2 = 1
+ time = 8
+ create = 1
+
+/datum/manufacture/welder
+ name = "Welding Tool"
+ item = /obj/item/weapon/weldingtool
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 1
+ cost2 = /obj/item/weapon/ore/silver
+ cname2 = "Silver"
+ amount2 = 1
+ time = 8
+ create = 1
+
+/datum/manufacture/multitool
+ name = "Multi Tool"
+ item = /obj/item/device/multitool
+ cost1 = /obj/item/weapon/ore/glass
+ cname1 = "Glass"
+ amount1 = 1
+ cost2 = /obj/item/weapon/ore/silver
+ cname2 = "Silver"
+ amount2 = 1
+ time = 8
+ create = 1
+
+/datum/manufacture/weldingmask
+ name = "Welding Mask"
+ item = /obj/item/clothing/head/welding
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 2
+ cost2 = /obj/item/weapon/ore/glass
+ cname2 = "Glass"
+ amount2 = 2
+ time = 10
+ create = 1
+
+/datum/manufacture/light_bulb
+ name = "Light Bulb"
+ item = /obj/item/weapon/light/bulb
+ cost1 = /obj/item/weapon/ore/glass
+ cname1 = "Glass"
+ amount1 = 1
+ time = 4
+ create = 1
+
+/datum/manufacture/light_tube
+ name = "Light Tube"
+ item = /obj/item/weapon/light/tube
+ cost1 = /obj/item/weapon/ore/glass
+ cname1 = "Glass"
+ amount1 = 1
+ time = 4
+ create = 1
+
+/datum/manufacture/metal5
+ name = "Sheet Metal (x5)"
+ item = /obj/item/stack/sheet/metal
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 5
+ time = 8
+ create = 5
+
+/datum/manufacture/metalR
+ name = "Reinforced Metal"
+ item = /obj/item/stack/sheet/plasteel
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 1
+ cost2 = /obj/item/weapon/ore/plasma
+ cname2 = "Plasma"
+ amount2 = 1
+ time = 6
+ create = 1
+
+/datum/manufacture/glass5
+ name = "Glass Panel (x5)"
+ item = /obj/item/stack/sheet/glass
+ cost1 = /obj/item/weapon/ore/glass
+ cname1 = "Glass"
+ amount1 = 5
+ time = 8
+ create = 5
+
+/datum/manufacture/glassR
+ name = "Reinforced Glass Panel"
+ item = /obj/item/stack/sheet/rglass
+ cost1 = /obj/item/weapon/ore/glass
+ cname1 = "Glass"
+ amount1 = 1
+ cost2 = /obj/item/weapon/ore/iron
+ cname2 = "Iron"
+ amount2 = 1
+ time = 12
+ create = 1
+
+/datum/manufacture/atmos_can
+ name = "Portable Gas Canister"
+ item = /obj/machinery/portable_atmospherics/canister
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 5
+ time = 10
+ create = 1
+
+/*
+/datum/manufacture/cable
+ name = "Electrical Cable Piece"
+ item = /obj/item/weapon/cable_coil/cut
+ cost1 = /obj/item/weapon/ore/silver
+ cname1 = "Silver"
+ amount1 = 1
+ time = 3
+ create = 1
+*/
+/datum/manufacture/RCD
+ name = "Rapid Construction Device"
+ item = /obj/item/weapon/rcd
+ cost1 = /obj/item/weapon/ore/gold
+ cname1 = "Gold"
+ amount1 = 5
+ cost2 = /obj/item/weapon/ore/osmium
+ cname2 = "Platinum"
+ amount2 = 1
+ cost3 = /obj/item/weapon/ore/silver
+ cname3 = "Silver"
+ amount3 = 10
+ time = 90
+ create = 1
+
+/datum/manufacture/RCDammo
+ name = "Compressed Matter Cartridge"
+ item = /obj/item/weapon/rcd_ammo
+ cost1 = /obj/item/weapon/ore/osmium
+ cname1 = "Platinum"
+ amount1 = 1
+ time = 15
+ create = 1
+
+
+/******************** Robotics **************************/
+
+/datum/manufacture/robo_frame
+ name = "Cyborg Frame"
+ item = /obj/item/robot_parts/robot_suit
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 18
+ time = 45
+ create = 1
+
+/datum/manufacture/robo_chest
+ name = "Cyborg Chest"
+ item = /obj/item/robot_parts/chest
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 12
+ time = 30
+ create = 1
+
+/datum/manufacture/robo_head
+ name = "Cyborg Head"
+ item = /obj/item/robot_parts/head
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 12
+ time = 30
+ create = 1
+
+/datum/manufacture/robo_arm_r
+ name = "Cyborg Arm (Right)"
+ item = /obj/item/robot_parts/r_arm
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 6
+ time = 15
+ create = 1
+
+/datum/manufacture/robo_arm_l
+ name = "Cyborg Arm (Left)"
+ item = /obj/item/robot_parts/l_arm
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 6
+ time = 15
+ create = 1
+
+/datum/manufacture/robo_leg_r
+ name = "Cyborg Leg (Right)"
+ item = /obj/item/robot_parts/r_leg
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 6
+ time = 15
+ create = 1
+
+/datum/manufacture/robo_leg_l
+ name = "Cyborg Leg (Left)"
+ item = /obj/item/robot_parts/l_leg
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 6
+ time = 15
+ create = 1
+
+/datum/manufacture/robo_stmodule
+ name = "Standard Cyborg Module"
+ item = /obj/item/weapon/robot_module/standard
+ cost1 = /obj/item/weapon/ore/silver
+ cname1 = "Silver"
+ amount1 = 2
+ cost2 = /obj/item/weapon/ore/glass
+ cname2 = "Glass"
+ amount2 = 3
+ time = 40
+ create = 1
+
+/datum/manufacture/scalpel
+ name = "Scalpel"
+ item = /obj/item/weapon/scalpel
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 1
+ time = 5
+ create = 1
+
+/datum/manufacture/circular_saw
+ name = "Circular Saw"
+ item = /obj/item/weapon/circular_saw
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 1
+ time = 5
+ create = 1
+
+/datum/manufacture/powercell
+ name = "Power Cell"
+ item = /obj/item/weapon/cell
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 4
+ cost2 = /obj/item/weapon/ore/glass
+ cname2 = "Glass"
+ amount2 = 4
+ cost3 = /obj/item/weapon/ore/silver
+ cname3 = "Silver"
+ amount3 = 4
+ time = 30
+ create = 1
+
+/datum/manufacture/flash
+ name = "Flash"
+ item = /obj/item/device/flash
+ cost1 = /obj/item/weapon/ore/glass
+ cname1 = "Glass"
+ amount1 = 2
+ cost2 = /obj/item/weapon/ore/silver
+ cname2 = "Silver"
+ amount2 = 2
+ time = 15
+ create = 1
+
+
+
+// Robotics Research
+
+/datum/manufacture/implanter
+ name = "Implanter"
+ item = /obj/item/weapon/implanter
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 1
+ time = 3
+ create = 1
+
+/datum/manufacture/secbot
+ name = "Security Drone"
+ item = /obj/machinery/bot/secbot
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 10
+ cost2 = /obj/item/weapon/ore/silver
+ cname2 = "Silver"
+ amount2 = 5
+ cost3 = /obj/item/weapon/ore/glass
+ cname3 = "Glass"
+ amount3 = 5
+ time = 60
+ create = 1
+
+/datum/manufacture/floorbot
+ name = "Construction Drone"
+ item = /obj/machinery/bot/floorbot
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 10
+ cost2 = /obj/item/weapon/ore/silver
+ cname2 = "Silver"
+ amount2 = 5
+ cost3 = /obj/item/weapon/ore/glass
+ cname3 = "Glass"
+ amount3 = 5
+ time = 60
+ create = 1
+
+/datum/manufacture/medbot
+ name = "Medical Drone"
+ item = /obj/machinery/bot/medbot
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 10
+ cost2 = /obj/item/weapon/ore/silver
+ cname2 = "Silver"
+ amount2 = 5
+ cost3 = /obj/item/weapon/ore/glass
+ cname3 = "Glass"
+ amount3 = 5
+ time = 60
+ create = 1
+/*
+/datum/manufacture/firebot
+ name = "Firefighting Drone"
+ item = /obj/machinery/bot/firebot
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 10
+ cost2 = /obj/item/weapon/ore/silver
+ cname2 = "Silver"
+ amount2 = 5
+ cost3 = /obj/item/weapon/ore/glass
+ cname3 = "Glass"
+ amount3 = 5
+ time = 60
+ create = 1
+*/
+/datum/manufacture/cleanbot
+ name = "Sanitation Drone"
+ item = /obj/machinery/bot/cleanbot
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 10
+ cost2 = /obj/item/weapon/ore/silver
+ cname2 = "Silver"
+ amount2 = 5
+ cost3 = /obj/item/weapon/ore/glass
+ cname3 = "Glass"
+ amount3 = 5
+ time = 60
+ create = 1
+/*
+/datum/manufacture/robup_jetpack
+ name = "Propulsion Upgrade"
+ item = /obj/item/weapon/roboupgrade/jetpack
+ cost1 = /obj/item/weapon/ore/silver
+ cname1 = "Silver"
+ amount1 = 3
+ cost2 = /obj/item/weapon/ore/iron
+ cname2 = "Iron"
+ amount2 = 5
+ time = 60
+ create = 1
+
+/datum/manufacture/robup_speed
+ name = "Speed Upgrade"
+ item = /obj/item/weapon/roboupgrade/speed
+ cost1 = /obj/item/weapon/ore/silver
+ cname1 = "Silver"
+ amount1 = 3
+ cost2 = /obj/item/weapon/ore/glass
+ cname2 = "Glass"
+ amount2 = 5
+ time = 60
+ create = 1
+
+/datum/manufacture/robup_recharge
+ name = "Recharge Pack"
+ item = /obj/item/weapon/roboupgrade/rechargepack
+ cost1 = /obj/item/weapon/ore/silver
+ cname1 = "Silver"
+ amount1 = 5
+ time = 60
+ create = 1
+
+/datum/manufacture/robup_repairpack
+ name = "Repair Pack"
+ item = /obj/item/weapon/roboupgrade/repairpack
+ cost1 = /obj/item/weapon/ore/silver
+ cname1 = "Silver"
+ amount1 = 5
+ time = 60
+ create = 1
+
+/datum/manufacture/robup_physshield
+ name = "Force Shield Upgrade"
+ item = /obj/item/weapon/roboupgrade/physshield
+ cost1 = /obj/item/weapon/ore/diamond
+ cname1 = "Claretine"
+ amount1 = 2
+ cost2 = /obj/item/weapon/ore/iron
+ cname2 = "Iron"
+ amount2 = 10
+ time = 90
+ create = 1
+
+/datum/manufacture/robup_fireshield
+ name = "Heat Shield Upgrade"
+ item = /obj/item/weapon/roboupgrade/fireshield
+ cost1 = /obj/item/weapon/ore/diamond
+ cname1 = "Claretine"
+ amount1 = 2
+ cost2 = /obj/item/weapon/ore/glass
+ cname2 = "Glass"
+ amount2 = 10
+ time = 90
+ create = 1
+
+/datum/manufacture/robup_aware
+ name = "Operational Upgrade"
+ item = /obj/item/weapon/roboupgrade/aware
+ cost1 = /obj/item/weapon/ore/diamond
+ cname1 = "Claretine"
+ amount1 = 2
+ cost2 = /obj/item/weapon/ore/glass
+ cname2 = "Glass"
+ amount2 = 5
+ cost3 = /obj/item/weapon/ore/silver
+ cname3 = "Silver"
+ amount3 = 5
+ time = 90
+ create = 1
+
+/datum/manufacture/robup_efficiency
+ name = "Efficiency Upgrade"
+ item = /obj/item/weapon/roboupgrade/efficiency
+ cost1 = /obj/item/weapon/ore/osmium
+ cname1 = "Platinum"
+ amount1 = 3
+ cost2 = /obj/item/weapon/ore/diamond
+ cname2 = "Claretine"
+ amount2 = 10
+ time = 120
+ create = 1
+
+/datum/manufacture/robup_repair
+ name = "Self-Repair Upgrade"
+ item = /obj/item/weapon/roboupgrade/repair
+ cost1 = /obj/item/weapon/ore/osmium
+ cname1 = "Platinum"
+ amount1 = 3
+ cost2 = /obj/item/weapon/ore/gold
+ cname2 = "Gold"
+ amount2 = 10
+ time = 120
+ create = 1
+
+/datum/manufacture/robup_teleport
+ name = "Teleport Upgrade"
+ item = /obj/item/weapon/roboupgrade/teleport
+ cost1 = /obj/item/weapon/ore/osmium
+ cname1 = "Platinum"
+ amount1 = 3
+ cost2 = /obj/item/weapon/ore/hydrogen
+ cname2 = "Telecrystal"
+ amount2 = 2
+ time = 120
+ create = 1
+
+/datum/manufacture/robup_expand
+ name = "Expansion Upgrade"
+ item = /obj/item/weapon/roboupgrade/expand
+ cost1 = /obj/item/weapon/ore/osmium
+ cname1 = "Platinum"
+ amount1 = 3
+ cost2 = /obj/item/weapon/ore/uranium
+ cname2 = "Cerenkite"
+ amount2 = 1
+ time = 120
+ create = 1
+
+/datum/manufacture/robup_chargexpand
+ name = "Charge Expander Upgrade"
+ item = /obj/item/weapon/roboupgrade/chargeexpand
+ cost1 = /obj/item/weapon/ore/diamond
+ cname1 = "Claretine"
+ amount1 = 5
+ time = 70
+ create = 1
+
+/datum/manufacture/robup_meson
+ name = "Optical Meson Upgrade"
+ item = /obj/item/weapon/roboupgrade/opticmeson
+ cost1 = /obj/item/weapon/ore/glass
+ cname1 = "Glass"
+ amount1 = 2
+ cost2 = /obj/item/weapon/ore/silver
+ cname2 = "Silver"
+ amount2 = 4
+ time = 90
+ create = 1
+
+/datum/manufacture/robup_thermal
+ name = "Optical Thermal Upgrade"
+ item = /obj/item/weapon/roboupgrade/opticthermal
+ cost1 = /obj/item/weapon/ore/glass
+ cname1 = "Glass"
+ amount1 = 4
+ cost2 = /obj/item/weapon/ore/silver
+ cname2 = "Silver"
+ amount2 = 8
+ time = 90
+ create = 1
+
+/datum/manufacture/deafhs
+ name = "Auditory Headset"
+ item = /obj/item/device/radio/headset/deaf
+ cost1 = /obj/item/weapon/ore/silver
+ cname1 = "Silver"
+ amount1 = 3
+ cost2 = /obj/item/weapon/ore/glass
+ cname2 = "Glass"
+ amount2 = 3
+ time = 40
+ create = 1
+
+/datum/manufacture/visor
+ name = "VISOR Prosthesis"
+ item = /obj/item/clothing/glasses/visor
+ cost1 = /obj/item/weapon/ore/silver
+ cname1 = "Silver"
+ amount1 = 3
+ cost2 = /obj/item/weapon/ore/glass
+ cname2 = "Glass"
+ amount2 = 3
+ time = 40
+ create = 1
+
+/datum/manufacture/implant_robotalk
+ name = "Machine Translator Implant"
+ item = /obj/item/weapon/implantcase/robotalk
+ cost1 = /obj/item/weapon/ore/silver
+ cname1 = "Silver"
+ amount1 = 3
+ cost2 = /obj/item/weapon/ore/glass
+ cname2 = "Glass"
+ amount2 = 3
+ time = 40
+ create = 1
+
+/datum/manufacture/implant_bloodmonitor
+ name = "Blood Monitor Implant"
+ item = /obj/item/weapon/implantcase/bloodmonitor
+ cost1 = /obj/item/weapon/ore/silver
+ cname1 = "Silver"
+ amount1 = 3
+ cost2 = /obj/item/weapon/ore/glass
+ cname2 = "Glass"
+ amount2 = 3
+ time = 40
+ create = 1
+*/
\ No newline at end of file
diff --git a/code/modules/mining/materials.dm b/code/modules/mining/materials.dm
index 2a0ebdc6d2a..52c557ae61a 100644
--- a/code/modules/mining/materials.dm
+++ b/code/modules/mining/materials.dm
@@ -136,4 +136,12 @@
value=1
oretype=null
sheettype=/obj/item/stack/sheet/mineral/plastic
+ cointype=null
+
+/datum/material/fabric
+ name="Fabric"
+ id="fabric"
+ value=20
+ oretype=/obj/item/weapon/ore/fabric
+ sheettype=null
cointype=null
\ No newline at end of file
diff --git a/code/modules/mining/mining_recipes.dm b/code/modules/mining/mining_recipes.dm
new file mode 100644
index 00000000000..ebe28c4e083
--- /dev/null
+++ b/code/modules/mining/mining_recipes.dm
@@ -0,0 +1,252 @@
+/obj/machinery/manufacturer/mining
+ name = "Mining Fabricator"
+ desc = "A manufacturing unit calibrated to produce mining related equipment."
+ acceptdisk = 1
+
+ New()
+ ..()
+ src.available += new /datum/manufacture/pick(src)
+ src.available += new /datum/manufacture/shovel(src)
+ src.available += new /datum/manufacture/oresatchel(src)
+ src.available += new /datum/manufacture/breathmask(src)
+ src.available += new /datum/manufacture/spacesuit(src)
+ src.available += new /datum/manufacture/spacehelm(src)
+ src.available += new /datum/manufacture/eyes_meson(src)
+ src.hidden += new /datum/manufacture/RCD(src)
+ src.hidden += new /datum/manufacture/RCDammo(src)
+
+
+// Mining Gear
+/datum/manufacture/pick
+ name = "Pickaxe"
+ item = /obj/item/weapon/pickaxe
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 5
+ time = 5
+ create = 1
+
+/datum/manufacture/shovel
+ name = "Shovel"
+ item = /obj/item/weapon/shovel
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 3
+ time = 2
+ create = 1
+
+/datum/manufacture/spick
+ name = "Silver Pickaxe"
+ item = /obj/item/weapon/pickaxe/silver
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 5
+ cost2 = /obj/item/weapon/ore/silver
+ cname2 = "Silver"
+ amount2 = 5
+ time = 10
+ create = 1
+
+/datum/manufacture/gpick
+ name = "Gold Pickaxe"
+ item = /obj/item/weapon/pickaxe/gold
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 5
+ cost2 = /obj/item/weapon/ore/gold
+ cname2 = "Gold"
+ amount2 = 5
+ time = 15
+ create = 1
+
+/datum/manufacture/dpick
+ name = "Diamond Pickaxe"
+ item = /obj/item/weapon/pickaxe/diamond
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 5
+ cost2 = /obj/item/weapon/ore/diamond
+ cname2 = "Uranium"
+ amount2 = 5
+ time = 30
+ create = 1
+
+/datum/manufacture/jackhammer
+ name = "Sonic Jackhammer"
+ item = /obj/item/weapon/pickaxe/jackhammer
+ cost1 = /obj/item/weapon/ore/gold
+ cname1 = "Gold"
+ amount1 = 8
+ cost2 = /obj/item/weapon/ore/silver
+ cname2 = "Silver"
+ amount2 = 12
+ time = 30
+ create = 1
+
+/datum/manufacture/drill
+ name = "Hand Drill"
+ item = /obj/item/weapon/pickaxe/drill
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 15
+ time = 20
+ create = 1
+
+/datum/manufacture/diamonddrill
+ name = "Diamond Drill"
+ item = /obj/item/weapon/pickaxe/diamonddrill
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 15
+ cost2 = /obj/item/weapon/ore/diamond
+ cname2 = "Diamond"
+ amount2 = 15
+ cost3 = /obj/item/weapon/ore/silver
+ cname3 = "Silver"
+ amount3 = 15
+ time = 40
+ create = 1
+
+/datum/manufacture/cutter
+ name = "Plasma Cutter"
+ item = /obj/item/weapon/pickaxe/plasmacutter
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 10
+ cost2 = /obj/item/weapon/ore/gold
+ cname2 = "Gold"
+ amount2 = 10
+ cost3 = /obj/item/weapon/ore/plasma
+ cname3 = "Plasma"
+ amount3 = 15
+ time = 30
+ create = 1
+
+/datum/manufacture/eyes_meson
+ name = "Optical Meson Scanner"
+ item = /obj/item/clothing/glasses/meson
+ cost1 = /obj/item/weapon/ore/glass
+ cname1 = "Glass"
+ amount1 = 5
+ cost2 = /obj/item/weapon/ore/silver
+ cname2 = "Silver"
+ amount2 = 3
+ time = 10
+ create = 1
+
+/datum/manufacture/miningsuit
+ name = "Mining Hardsuit"
+ item = /obj/item/clothing/suit/space/rig/mining
+ cost1 = /obj/item/weapon/ore/osmium
+ cname1 = "Platinum"
+ amount1 = 30
+ cost2 = /obj/item/weapon/ore/iron
+ cname2 = "Iron"
+ amount2 = 30
+ time = 30
+ create = 1
+
+/datum/manufacture/mininghelm
+ name = "Mining Hardsuit Helmet"
+ item = /obj/item/clothing/head/helmet/space/rig/mining
+ cost1 = /obj/item/weapon/ore/osmium
+ cname1 = "Platinum"
+ amount1 = 30
+ cost2 = /obj/item/weapon/ore/iron
+ cname2 = "Iron"
+ amount2 = 30
+ time = 20
+ create = 1
+
+/datum/manufacture/breathmask
+ name = "Breath Mask"
+ item = /obj/item/clothing/mask/breath
+ cost1 = /obj/item/weapon/ore/fabric
+ cname1 = "Fabric"
+ amount1 = 1
+ time = 5
+ create = 1
+
+/datum/manufacture/spacesuit
+ name = "Space Suit"
+ item = /obj/item/clothing/suit/space
+ cost1 = /obj/item/weapon/ore/fabric
+ cname1 = "Fabric"
+ amount1 = 5
+ cost2 = /obj/item/weapon/ore/iron
+ cname2 = "Iron"
+ amount2 = 5
+ time = 15
+ create = 1
+
+/datum/manufacture/spacehelm
+ name = "Space Helmet"
+ item = /obj/item/clothing/head/helmet/space
+ cost1 = /obj/item/weapon/ore/fabric
+ cname1 = "Fabric"
+ amount1 = 5
+ cost2 = /obj/item/weapon/ore/glass
+ cname2 = "Glass"
+ amount2 = 5
+ time = 10
+ create = 1
+
+/datum/manufacture/oresatchel
+ name = "Ore Satchel"
+ item = /obj/item/weapon/storage/bag/ore
+ cost1 = /obj/item/weapon/ore/fabric
+ cname1 = "Fabric"
+ amount1 = 5
+ time = 5
+ create = 1
+
+/datum/manufacture/jetpack
+ name = "Jetpack"
+ item = /obj/item/weapon/tank/jetpack
+ cost1 = /obj/item/weapon/ore/gold
+ cname1 = "Gold"
+ amount1 = 15
+ cost2 = /obj/item/weapon/ore/silver
+ cname2 = "Silver"
+ amount2 = 20
+ time = 30
+ create = 1
+
+//Diskettes!
+/obj/item/weapon/disk/data/schematic/mining1
+ name = "Mining Schematics Level 1"
+ desc = "Contains the schematics for a new range of Pickaxes."
+
+ New()
+ src.schematics += new /datum/manufacture/spick(src)
+ src.schematics += new /datum/manufacture/gpick(src)
+ src.schematics += new /datum/manufacture/dpick(src)
+
+/obj/item/weapon/disk/data/schematic/mining2
+ name = "Mining Schematics Level 2"
+ desc = "Contains the schematics for a new line of drills. And a Plasma Cutter. Has the previous level as well."
+
+ New()
+ src.schematics += new /datum/manufacture/spick(src)
+ src.schematics += new /datum/manufacture/gpick(src)
+ src.schematics += new /datum/manufacture/dpick(src)
+ src.schematics += new /datum/manufacture/drill(src)
+ src.schematics += new /datum/manufacture/jackhammer(src)
+ src.schematics += new /datum/manufacture/diamonddrill(src)
+ src.schematics += new /datum/manufacture/cutter(src)
+
+/obj/item/weapon/disk/data/schematic/mining3
+ name = "Mining Schematics Level 3"
+ desc = "Contains the schematics for a new type of Spacesuit, and schematics for a Jetpack. Has the previous levels as well."
+
+ New()
+ src.schematics += new /datum/manufacture/spick(src)
+ src.schematics += new /datum/manufacture/gpick(src)
+ src.schematics += new /datum/manufacture/dpick(src)
+ src.schematics += new /datum/manufacture/drill(src)
+ src.schematics += new /datum/manufacture/jackhammer(src)
+ src.schematics += new /datum/manufacture/diamonddrill(src)
+ src.schematics += new /datum/manufacture/cutter(src)
+ src.schematics += new /datum/manufacture/miningsuit(src)
+ src.schematics += new /datum/manufacture/mininghelm(src)
+ src.schematics += new /datum/manufacture/jetpack(src)
\ No newline at end of file
diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm
index 1079e06b0a2..fd3598ae985 100644
--- a/code/modules/mining/ore.dm
+++ b/code/modules/mining/ore.dm
@@ -69,6 +69,12 @@
origin_tech = "materials=4"
oretag="clown"
+/obj/item/weapon/ore/fabric
+ name = "fabric"
+ icon_state = "fabric"
+ origin_tech = "materials=1"
+ oretag = "fabric"
+
/obj/item/weapon/ore/slag
name = "Slag"
desc = "Completely useless"
diff --git a/code/modules/mining/security_recipes.dm b/code/modules/mining/security_recipes.dm
new file mode 100644
index 00000000000..9061c6ee541
--- /dev/null
+++ b/code/modules/mining/security_recipes.dm
@@ -0,0 +1,128 @@
+/obj/machinery/manufacturer/security
+ name = "Security Fabricator"
+ desc = "A manufacturing unit calibrated to produce security and military related equipment."
+ acceptdisk = 1
+
+ New()
+ ..()
+ src.available += new /datum/manufacture/beret(src)
+ src.available += new /datum/manufacture/helmet1(src)
+ src.available += new /datum/manufacture/sunglasses(src)
+ src.available += new /datum/manufacture/sechud(src)
+ src.available += new /datum/manufacture/secpants(src)
+ src.available += new /datum/manufacture/secbelt(src)
+ src.available += new /datum/manufacture/armor1(src)
+ src.available += new /datum/manufacture/taser(src)
+ src.available += new /datum/manufacture/baton(src)
+
+// Security Gear Tier-0. AKA Clothing and basic as shit gear.
+/datum/manufacture/beret
+ name = "Beret"
+ item = /obj/item/clothing/head/beret/sec
+ cost1 = /obj/item/weapon/ore/fabric
+ cname1 = "Fabric"
+ amount1 = 2
+ time = 3
+ create = 1
+
+/datum/manufacture/helmet1
+ name = "Helmet"
+ item = /obj/item/clothing/head/helmet
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 10
+ cost2 = /obj/item/weapon/ore/fabric
+ cname2 = "Fabric"
+ amount2 = 10
+ time = 10
+ create = 1
+
+/datum/manufacture/sunglasses
+ name = "Sunglasses"
+ item = /obj/item/clothing/glasses/sunglasses
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 5
+ cost2 = /obj/item/weapon/ore/glass
+ cname2 = "Glass"
+ amount2 = 10
+ time = 8
+ create = 1
+
+/datum/manufacture/sechud
+ name = "Security HUD"
+ item = /obj/item/clothing/glasses/hud/security
+ cost1 = /obj/item/weapon/ore/osmium
+ cname1 = "Platinum"
+ amount1 = 10
+ cost2 = /obj/item/weapon/ore/glass
+ cname2 = "Glass"
+ amount2 = 15
+ time = 12
+ create = 1
+
+/datum/manufacture/secpants
+ name = "Security Uniform"
+ item = /obj/item/clothing/under/rank/security
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 2
+ cost2 = /obj/item/weapon/ore/fabric
+ cname2 = "Fabric"
+ amount2 = 1
+ time = 10
+ create = 1
+
+/datum/manufacture/secbelt
+ name = "Security Belt"
+ item = /obj/item/weapon/storage/belt/security
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 2
+ cost2 = /obj/item/weapon/ore/fabric
+ cname2 = "Fabric"
+ amount2 = 5
+ time = 15
+ create = 1
+
+/datum/manufacture/armor1
+ name = "Armored Vest"
+ item = /obj/item/clothing/suit/armor/vest
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 15
+ cost2 = /obj/item/weapon/ore/fabric
+ cname2 = "Fabric"
+ amount2 = 15
+ time = 20
+ create = 1
+
+/datum/manufacture/taser
+ name = "Taser"
+ item = /obj/item/weapon/gun/energy/taser
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 15
+ cost2 = /obj/item/weapon/ore/glass
+ cname2 = "Glass"
+ amount2 = 10
+ cost3 = /obj/item/weapon/ore/osmium
+ cname3 = "Platinum"
+ amount3 = 20
+ time = 25
+ create = 1
+
+/datum/manufacture/baton
+ name = "Stun Baton"
+ item = /obj/item/weapon/melee/baton
+ cost1 = /obj/item/weapon/ore/iron
+ cname1 = "Iron"
+ amount1 = 10
+ cost2 = /obj/item/weapon/ore/glass
+ cname2 = "Glass"
+ amount2 = 10
+ cost3 = /obj/item/weapon/ore/osmium
+ cname3 = "Platinum"
+ amount3 = 15
+ time = 20
+ create = 1
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm
index 8ed4f4de722..02ade71adaa 100644
--- a/code/modules/mob/living/carbon/species.dm
+++ b/code/modules/mob/living/carbon/species.dm
@@ -591,6 +591,7 @@
flesh_color = "#AAAAAA"
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
+ H.emote("deathgasp")
for(var/organ_name in H.organs_by_name)
if (organ_name == "head") // do the head last as that's when the user will be transfered to the posibrain
continue
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index cbeb9a349ef..1887b052ad0 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -64,6 +64,15 @@
return 1
+/mob/living/carbon/human/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0)
+ if((species.flags & IS_SYNTHETIC) && (effecttype == IRRADIATE))
+ return
+ return ..()
+
+
+/mob/living/carbon/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0)
+ return ..()
+
/mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/irradiate = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/agony = 0, var/blocked = 0)
if(blocked >= 2) return 0
if(stun) apply_effect(stun, STUN, blocked)
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index 738fa2331f4..ac73ab9ae59 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -1773,6 +1773,33 @@ datum/design/mesons
materials = list("$metal" = 50, "$glass" = 50)
build_path = "/obj/item/clothing/glasses/meson"
+datum/design/miningblueprint1
+ name = "Mining Schematic Disk Version 1"
+ desc = "Contains the schematics for a new range of Pickaxes."
+ id = "miningblueprint1"
+ req_tech = list("materials" = 3)
+ build_type = PROTOLATHE
+ materials = list("$metal" = 50, "$glass" = 50)
+ build_path = "/obj/item/weapon/disk/data/schematic/mining1"
+
+datum/design/miningblueprint2
+ name = "Mining Schematic Disk Version 2"
+ desc = "Contains the schematics for a new line of drills. And a Plasma Cutter. Has the previous level as well."
+ id = "miningblueprint2"
+ req_tech = list("materials" = 5)
+ build_type = PROTOLATHE
+ materials = list("$metal" = 50, "$glass" = 50)
+ build_path = "/obj/item/weapon/disk/data/schematic/mining2"
+
+datum/design/miningblueprint3
+ name = "Mining Schematic Disk Version 3"
+ desc = "Contains the schematics for a new type of Spacesuit, and schematics for a Jetpack. Has the previous levels as well."
+ id = "miningblueprint3"
+ req_tech = list("materials" = 6)
+ build_type = PROTOLATHE
+ materials = list("$metal" = 50, "$glass" = 50)
+ build_path = "/obj/item/weapon/disk/data/schematic/mining3"
+
/////////////////////////////////////////
//////////////Blue Space/////////////////
/////////////////////////////////////////
diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi
index 56893b00df1..142f1f8dc5b 100644
Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ
diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi
index 2f3eb4b4269..72e02ab6152 100644
Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ
diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl
index 8b59e4ac124..b88dda25c61 100644
--- a/nano/templates/pda.tmpl
+++ b/nano/templates/pda.tmpl
@@ -345,6 +345,16 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{/if}}
{{/for}}
+ {{/if}}
+ {{if data.manifest.supp}}
+ | Support |
+ {{for data.manifest["supp"]}}
+ {{if value.rank == "Head of Personnel"}}
+ | {{:value.name}} | {{:value.rank}} | {{:value.active}} |
+ {{else}}
+ | {{:value.name}} | {{:value.rank}} | {{:value.active}} |
+ {{/if}}
+ {{/for}}
{{/if}}
{{if data.manifest.civ}}
| Civilian |
diff --git a/tools/mapmerge/1prepare_map.bat b/tools/mapmerge/1prepare_map.bat
index ec9beaf788b..05fddbce240 100644
--- a/tools/mapmerge/1prepare_map.bat
+++ b/tools/mapmerge/1prepare_map.bat
@@ -1,4 +1,4 @@
-set MAPFILE=tgstation2.dmm
+set MAPFILE=cyberiad.dmm
cd ../../maps
copy %MAPFILE% %MAPFILE%.backup
diff --git a/tools/mapmerge/2clean_map.bat b/tools/mapmerge/2clean_map.bat
index 7b1f59e67ec..02590eb48f7 100644
--- a/tools/mapmerge/2clean_map.bat
+++ b/tools/mapmerge/2clean_map.bat
@@ -1,4 +1,4 @@
-set MAPFILE=tgstation2.dmm
+set MAPFILE=cyberiad.dmm
java -jar MapPatcher.jar -clean ../../maps/%MAPFILE%.backup ../../maps/%MAPFILE% ../../maps/%MAPFILE%
diff --git a/tools/mapmerge/clean_map_git.sh b/tools/mapmerge/clean_map_git.sh
index 0a5f4cc786d..59ef079a5a1 100644
--- a/tools/mapmerge/clean_map_git.sh
+++ b/tools/mapmerge/clean_map_git.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-MAPFILE='tgstation2.dmm'
+MAPFILE='cyberiad.dmm'
git show HEAD:maps/$MAPFILE > tmp.dmm
java -jar MapPatcher.jar -clean tmp.dmm '../../maps/'$MAPFILE '../../maps/'$MAPFILE