diff --git a/code/datums/supplypacks/hardsuits.dm b/code/datums/supplypacks/hardsuits.dm
new file mode 100644
index 0000000000..fe815c7ce4
--- /dev/null
+++ b/code/datums/supplypacks/hardsuits.dm
@@ -0,0 +1,112 @@
+/*
+* Here is where any supply packs
+* related to hardsuits live.
+*/
+
+
+/datum/supply_pack/hardsuits
+ group = "Hardsuits"
+
+/datum/supply_pack/hardsuits/eva_rig
+ name = "eva hardsuit (empty)"
+ contains = list(
+ /obj/item/weapon/rig/eva = 1
+ )
+ cost = 150
+ containertype = /obj/structure/closet/crate/secure/gear
+ containername = "eva hardsuit crate"
+ access = list(access_mining,
+ access_eva,
+ access_pilot)
+ one_access = TRUE
+
+/datum/supply_pack/hardsuits/mining_rig
+ name = "industrial hardsuit (empty)"
+ contains = list(
+ /obj/item/weapon/rig/industrial = 1
+ )
+ cost = 150
+ containertype = /obj/structure/closet/crate/secure/gear
+ containername = "industrial hardsuit crate"
+ access = list(access_mining,
+ access_eva)
+ one_access = TRUE
+
+/datum/supply_pack/hardsuits/medical_rig
+ name = "medical hardsuit (empty)"
+ contains = list(
+ /obj/item/weapon/rig/medical = 1
+ )
+ cost = 150
+ containertype = /obj/structure/closet/crate/secure/gear
+ containername = "medical hardsuit crate"
+ access = access_medical
+
+/datum/supply_pack/hardsuits/security_rig
+ name = "hazard hardsuit (empty)"
+ contains = list(
+ /obj/item/weapon/rig/hazard = 1
+ )
+ cost = 150
+ containertype = /obj/structure/closet/crate/secure/gear
+ containername = "hazard hardsuit crate"
+ access = access_armory
+
+/datum/supply_pack/hardsuits/science_rig
+ name = "ami hardsuit (empty)"
+ contains = list(
+ /obj/item/weapon/rig/hazmat = 1
+ )
+ cost = 150
+ containertype = /obj/structure/closet/crate/secure/gear
+ containername = "ami hardsuit crate"
+ access = access_rd
+
+/datum/supply_pack/hardsuits/ce_rig
+ name = "advanced hardsuit (empty)"
+ contains = list(
+ /obj/item/weapon/rig/ce = 1
+ )
+ cost = 150
+ containertype = /obj/structure/closet/crate/secure/gear
+ containername = "advanced hardsuit crate"
+ access = access_ce
+
+/datum/supply_pack/hardsuits/com_medical_rig
+ name = "commonwealth medical hardsuit (loaded)"
+ contains = list(
+ /obj/item/weapon/rig/baymed/equipped = 1
+ )
+ cost = 250
+ containertype = /obj/structure/closet/crate/secure/gear
+ containername = "Commonwealth medical hardsuit crate"
+ access = access_medical
+
+/datum/supply_pack/hardsuits/com_engineering_rig
+ name = "commonwealth engineering hardsuit (loaded)"
+ contains = list(
+ /obj/item/weapon/rig/bayeng/equipped = 1
+ )
+ cost = 250
+ containertype = /obj/structure/closet/crate/secure/gear
+ containername = "Commonwealth engineering hardsuit crate"
+ access = access_engine
+
+/datum/supply_pack/hardsuits/breacher_rig
+ name = "unathi breacher hardsuit (empty)"
+ contains = list(
+ /obj/item/weapon/rig/breacher = 1
+ )
+ cost = 250
+ containertype = /obj/structure/closet/crate/secure/gear
+ containername = "unathi breacher hardsuit crate"
+ access = access_armory
+
+/datum/supply_pack/hardsuits/zero_rig
+ name = "null hardsuit (jets)"
+ contains = list(
+ /obj/item/weapon/rig/zero = 1
+ )
+ cost = 75
+ containertype = /obj/structure/closet/crate/secure/gear
+ containername = "null hardsuit crate"
\ No newline at end of file
diff --git a/code/datums/supplypacks/misc_vr.dm b/code/datums/supplypacks/misc_vr.dm
index 0c03987132..e493233db8 100644
--- a/code/datums/supplypacks/misc_vr.dm
+++ b/code/datums/supplypacks/misc_vr.dm
@@ -16,110 +16,6 @@
access_xenoarch)
one_access = TRUE
-/datum/supply_pack/misc/eva_rig
- name = "eva hardsuit (empty)"
- contains = list(
- /obj/item/weapon/rig/eva = 1
- )
- cost = 150
- containertype = /obj/structure/closet/crate/secure/gear
- containername = "eva hardsuit crate"
- access = list(access_mining,
- access_eva,
- access_pilot)
- one_access = TRUE
-
-/datum/supply_pack/misc/mining_rig
- name = "industrial hardsuit (empty)"
- contains = list(
- /obj/item/weapon/rig/industrial = 1
- )
- cost = 150
- containertype = /obj/structure/closet/crate/secure/gear
- containername = "industrial hardsuit crate"
- access = list(access_mining,
- access_eva)
- one_access = TRUE
-
-/datum/supply_pack/misc/medical_rig
- name = "medical hardsuit (empty)"
- contains = list(
- /obj/item/weapon/rig/medical = 1
- )
- cost = 150
- containertype = /obj/structure/closet/crate/secure/gear
- containername = "medical hardsuit crate"
- access = access_medical
-
-/datum/supply_pack/misc/security_rig
- name = "hazard hardsuit (empty)"
- contains = list(
- /obj/item/weapon/rig/hazard = 1
- )
- cost = 150
- containertype = /obj/structure/closet/crate/secure/gear
- containername = "hazard hardsuit crate"
- access = access_armory
-
-/datum/supply_pack/misc/science_rig
- name = "ami hardsuit (empty)"
- contains = list(
- /obj/item/weapon/rig/hazmat = 1
- )
- cost = 150
- containertype = /obj/structure/closet/crate/secure/gear
- containername = "ami hardsuit crate"
- access = access_rd
-
-/datum/supply_pack/misc/ce_rig
- name = "advanced hardsuit (empty)"
- contains = list(
- /obj/item/weapon/rig/ce = 1
- )
- cost = 150
- containertype = /obj/structure/closet/crate/secure/gear
- containername = "advanced hardsuit crate"
- access = access_ce
-
-/datum/supply_pack/misc/com_medical_rig
- name = "commonwealth medical hardsuit (loaded)"
- contains = list(
- /obj/item/weapon/rig/baymed/equipped = 1
- )
- cost = 250
- containertype = /obj/structure/closet/crate/secure/gear
- containername = "Commonwealth medical hardsuit crate"
- access = access_medical
-
-/datum/supply_pack/misc/com_engineering_rig
- name = "commonwealth engineering hardsuit (loaded)"
- contains = list(
- /obj/item/weapon/rig/bayeng/equipped = 1
- )
- cost = 250
- containertype = /obj/structure/closet/crate/secure/gear
- containername = "Commonwealth engineering hardsuit crate"
- access = access_engine
-
-/datum/supply_pack/misc/breacher_rig
- name = "unathi breacher hardsuit (empty)"
- contains = list(
- /obj/item/weapon/rig/breacher = 1
- )
- cost = 250
- containertype = /obj/structure/closet/crate/secure/gear
- containername = "unathi breacher hardsuit crate"
- access = access_armory
-
-/datum/supply_pack/misc/zero_rig
- name = "null hardsuit (jets)"
- contains = list(
- /obj/item/weapon/rig/zero = 1
- )
- cost = 75
- containertype = /obj/structure/closet/crate/secure/gear
- containername = "null hardsuit crate"
-
/datum/supply_pack/misc/jetpack
name = "jetpack (empty)"
contains = list(
diff --git a/code/datums/supplypacks/supplypacks.dm b/code/datums/supplypacks/supplypacks.dm
index 14e97cce7a..19afa61980 100644
--- a/code/datums/supplypacks/supplypacks.dm
+++ b/code/datums/supplypacks/supplypacks.dm
@@ -24,6 +24,7 @@ var/list/all_supply_groups = list("Atmospherics",
"Security",
"Supplies",
"Vendor Refills",
+ "Hardsuits",
"Voidsuits")
/datum/supply_pack
diff --git a/code/game/machinery/protean_reconstitutor.dm b/code/game/machinery/protean_reconstitutor.dm
index 9ae0261d07..287e3e0c1a 100644
--- a/code/game/machinery/protean_reconstitutor.dm
+++ b/code/game/machinery/protean_reconstitutor.dm
@@ -1,7 +1,7 @@
/obj/machinery/protean_reconstitutor
name = "protean reconstitutor"
desc = "A complex machine that is most definitely not just a large tub into which one pours a large amount of untethered nanites, then adds a protean positronic brain and orchestrator, in order to reconstitute a disintegrated protean... it's complicated, really!"
- description_info = "Use a protean positronic brain, orchestrator, optionally a refactory, and nanopaste to \'fill\' the machine, then interact with it once it's ready. Protean components can be retrieved using a wrench, but any nanopaste inserted will be converted, cannot be reclaimed, and will be lost if the machine is disassembled!"
+ description_info = "Use a protean positronic brain, orchestrator, refactory, and nanopaste to \'fill\' the machine, then interact with it once it's ready. Protean components can be retrieved using a wrench, but any nanopaste inserted will be converted, cannot be reclaimed, and will be lost if the machine is disassembled!"
icon = 'icons/obj/protean_recon.dmi'
icon_state = "recon-nopower"
var/state_base = "recon"
@@ -160,7 +160,7 @@
..()
/obj/machinery/protean_reconstitutor/attack_hand(mob/user as mob)
- if(!protean_brain || !protean_orchestrator || (nanomass_reserve < nanomass_required))
+ if(!protean_brain || !protean_orchestrator || !protean_refactory || (nanomass_reserve < nanomass_required))
//no brain, no orchestrator, and/or not enough goo
to_chat(user,"Essential components missing, or insufficient materials available!")
playsound(src, buzzsound, 100, 1, -1)
@@ -174,7 +174,7 @@
if(!protean_brain.brainmob.client)
src.visible_message("\The [src] chirps, \"Warning, no positronic neural network activity detected! Recommend removing inactive core.\"")
return
- else if(!processing_revive && protean_brain && protean_orchestrator && (nanomass_reserve >= nanomass_required))
+ else if(!processing_revive && protean_brain && protean_orchestrator && protean_refactory && (nanomass_reserve >= nanomass_required))
//we're good, let's get recombobulating!
src.visible_message("[user] initializes \the [src]. It chirps, \"Please stand by, synchronizing components... estimated time to completion: five minutes.\"")
processing_revive = TRUE
@@ -195,20 +195,16 @@
sleep(per_organ_delay)
var/obj/item/O = P.internal_organs_by_name[organ]
if(istype(O,/obj/item/organ/internal/nano/refactory))
- if(protean_refactory) //if we have a refactory present, install it, otherwise they get a free replacement (for now; perhaps no free replacement but they can be made printable at the prosfab?)
- src.visible_message("\The [src] chirps, \"Reinitializing refactory...\"")
- P.internal_organs_by_name.Remove(O)
- P.contents.Remove(O)
- qdel(O)
- P.internal_organs_by_name.Add(list(O_FACT = protean_refactory))
- P.internal_organs.Add(protean_refactory)
- //cache our mats otherwise they get wiped by the revive
- materials_cache = protean_refactory.materials.Copy()
- mats_cached = TRUE
- protean_refactory.loc = P
- else
- src.visible_message("\The [src] chirps, \"No refactory detected in storage, fabricating replacement...\"")
- continue
+ src.visible_message("\The [src] chirps, \"Initializing refactory...\"")
+ P.internal_organs_by_name.Remove(O)
+ P.contents.Remove(O)
+ qdel(O)
+ P.internal_organs_by_name.Add(list(O_FACT = protean_refactory))
+ P.internal_organs.Add(protean_refactory)
+ //cache our mats otherwise they get wiped by the revive
+ materials_cache = protean_refactory.materials.Copy()
+ mats_cached = TRUE
+ protean_refactory.loc = P
if(istype(O,/obj/item/organ/internal/nano/orchestrator))
src.visible_message("\The [src] chirps, \"Linking nanoswarm to orchestrator...\"")
P.internal_organs_by_name.Remove(O)
diff --git a/code/modules/research/prosfab_designs.dm b/code/modules/research/prosfab_designs.dm
index d4ab887d98..5d7c690009 100644
--- a/code/modules/research/prosfab_designs.dm
+++ b/code/modules/research/prosfab_designs.dm
@@ -528,3 +528,21 @@
id = "misc_synth_bag_tag_bishop"
materials = list(MAT_STEEL = 500, MAT_GLASS = 2000, MAT_PLASTIC = 500)
build_path = /obj/item/clothing/accessory/badge/corporate_tag/bishop
+
+// Replacement protean bits
+
+/datum/design/item/prosfab/orchestrator
+ name = "Protean Orchestrator"
+ id = "prot_orch"
+ build_path = /obj/item/organ/internal/nano/orchestrator
+ time = 30
+ materials = list(MAT_STEEL = 8000, MAT_GLASS = 2000, MAT_SILVER = 2000, MAT_GOLD = 2000)
+ //req_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5, TECH_MATERIAL = 5, TECH_ENGINEERING = 5, TECH_DATA = 5)
+
+/datum/design/item/prosfab/refactory
+ name = "Protean Refactory"
+ id = "prot_refact"
+ build_path = /obj/item/organ/internal/nano/refactory
+ time = 30
+ materials = list(MAT_STEEL = 8000, MAT_GLASS = 2000, MAT_SILVER = 2000, MAT_GOLD = 2000)
+ //req_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5, TECH_MATERIAL = 5, TECH_ENGINEERING = 5, TECH_DATA = 5)
diff --git a/vorestation.dme b/vorestation.dme
index c8a4e4428c..7320cfdfca 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -463,6 +463,7 @@
#include "code\datums\supplypacks\costumes_vr.dm"
#include "code\datums\supplypacks\engineering.dm"
#include "code\datums\supplypacks\engineering_vr.dm"
+#include "code\datums\supplypacks\hardsuits.dm"
#include "code\datums\supplypacks\hospitality.dm"
#include "code\datums\supplypacks\hospitality_vr.dm"
#include "code\datums\supplypacks\hydroponics.dm"