diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm
index 7c8bba08643..d5f7c1d1517 100644
--- a/code/__DEFINES/machines.dm
+++ b/code/__DEFINES/machines.dm
@@ -66,6 +66,10 @@
/// For wiremod/integrated circuits. Uses various minerals.
#define COMPONENT_PRINTER (1<<10)
//Note: More than one of these can be added to a design but imprinter and lathe designs are incompatable.
+// SKYRAT EDIT ADDITION
+/// Can be made by the orderable colony fabricator
+#define COLONY_FABRICATOR (1<<11)
+// SKYRAT EDIT END
#define FIREDOOR_OPEN 1
#define FIREDOOR_CLOSED 2
diff --git a/code/__DEFINES/~skyrat_defines/cargo_import_companies.dm b/code/__DEFINES/~skyrat_defines/cargo_import_companies.dm
index d0e82f110b5..8f8a879124e 100644
--- a/code/__DEFINES/~skyrat_defines/cargo_import_companies.dm
+++ b/code/__DEFINES/~skyrat_defines/cargo_import_companies.dm
@@ -5,7 +5,7 @@
#define CARGO_COMPANY_DEFOREST (1<<3)
#define CARGO_COMPANY_DONK (1<<4)
#define CARGO_COMPANY_KAHRAMAN (1<<5)
-#define CARGO_COMPANY_NAKAMURA_TOOLING (1<<6)
+#define CARGO_COMPANY_FRONTIER_EQUIPMENT (1<<6)
#define CARGO_COMPANY_SOL_DEFENSE (1<<7)
#define CARGO_COMPANY_MICROSTAR (1<<8)
#define CARGO_COMPANY_VITEZSTVI_AMMO (1<<9)
@@ -17,7 +17,7 @@
#define DEFOREST_MEDICAL_NAME "DeForest Medical Corporation"
#define DONK_CO_NAME "Donk Corporation"
#define KAHRAMAN_INDUSTRIES_NAME "Kahraman Heavy Industries"
-#define NAKAMURA_ENGINEERING_TOOLING_NAME "Nakamura Engineering Tooling Divison"
+#define FRONTIER_EQUIPMENT_NAME "Akhter Company Frontier Equipment"
#define SOL_DEFENSE_DEFENSE_NAME "Sol Defense Imports"
#define MICROSTAR_ENERGY_NAME "MicroStar Energy Weapon Coalition"
#define VITEZSTVI_AMMO_NAME "Vitezstvi Ammo & Weapon Accessories"
diff --git a/code/__DEFINES/~skyrat_defines/colony_fabricator_misc.dm b/code/__DEFINES/~skyrat_defines/colony_fabricator_misc.dm
new file mode 100644
index 00000000000..d9012ad0869
--- /dev/null
+++ b/code/__DEFINES/~skyrat_defines/colony_fabricator_misc.dm
@@ -0,0 +1,29 @@
+/// Category for clothing in the organics printer
+#define RND_CATEGORY_AKHTER_CLOTHING "Clothing"
+/// Category for equipment like belts and bags in the organics printer
+#define RND_CATEGORY_AKHTER_EQUIPMENT "Equipment"
+/// Category for medical items in the organics printer
+#define RND_CATEGORY_AKHTER_MEDICAL "Emergency Medical"
+/// Category for resources made by the organics printer
+#define RND_CATEGORY_AKHTER_RESOURCES "Resources"
+/// Category for the seeds the organics printer can make
+#define RND_CATEGORY_AKHTER_SEEDS "Synthesized Seeds"
+
+/// The items the frontier clothing can hold
+GLOBAL_LIST_INIT(colonist_suit_allowed, list(
+ /obj/item/ammo_box,
+ /obj/item/ammo_casing,
+ /obj/item/flashlight,
+ /obj/item/gun,
+ /obj/item/melee,
+ /obj/item/tank/internals,
+ /obj/item/storage/belt/holster,
+ /obj/item/construction,
+ /obj/item/fireaxe,
+ /obj/item/pipe_dispenser,
+ /obj/item/storage/bag,
+ /obj/item/pickaxe,
+ /obj/item/resonator,
+ /obj/item/t_scanner,
+ /obj/item/analyzer,
+))
diff --git a/code/__DEFINES/~skyrat_defines/manufacturer_strings.dm b/code/__DEFINES/~skyrat_defines/manufacturer_strings.dm
index 0f4b8de3348..70c1ba9674d 100644
--- a/code/__DEFINES/~skyrat_defines/manufacturer_strings.dm
+++ b/code/__DEFINES/~skyrat_defines/manufacturer_strings.dm
@@ -21,4 +21,6 @@
#define COMPANY_ABDUCTOR "It has [span_abductor("✌︎︎♌︎︎♎︎︎◆︎︎♍︎︎⧫︎︎❄︎♏︎♍︎♒︎")] engraved into it."
+#define COMPANY_FRONTIER "It has a small label with [span_engradio("Akhter Company Frontier Equipment")] printed on it, alongside various xerxian proof-marks."
+
#define COMPANY_REMOVED "It has had [span_grey("all identifying marks scrubbed off")]."
diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm
index 9087c7cfa9f..e7dfc229a39 100644
--- a/code/modules/atmospherics/machinery/portable/pump.dm
+++ b/code/modules/atmospherics/machinery/portable/pump.dm
@@ -1,4 +1,4 @@
-/obj/machinery/portable_atmospherics/pump //SKYRAT EDIT - ICON OVERRIDEN IN SCRUBBER.DM AESTHETICS
+/obj/machinery/portable_atmospherics/pump
name = "portable air pump"
icon_state = "siphon"
density = TRUE
diff --git a/modular_skyrat/master_files/code/modules/research/designs/misc_designs.dm b/modular_skyrat/master_files/code/modules/research/designs/misc_designs.dm
index 213bd617ac6..9a253d53e7d 100644
--- a/modular_skyrat/master_files/code/modules/research/designs/misc_designs.dm
+++ b/modular_skyrat/master_files/code/modules/research/designs/misc_designs.dm
@@ -59,10 +59,10 @@
/datum/design/vox_gas_filter
name = "Vox Gas Filter"
id = "vox_gas_filter"
- build_type = PROTOLATHE | AUTOLATHE
+ build_type = PROTOLATHE | AUTOLATHE | COLONY_FABRICATOR
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT)
build_path = /obj/item/gas_filter/vox
category = list(
- RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS
+ RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS_EQUIPMENT
)
departmental_flags = ALL
diff --git a/modular_skyrat/modules/colony_fabricator/code/appliances/chem_machines.dm b/modular_skyrat/modules/colony_fabricator/code/appliances/chem_machines.dm
new file mode 100644
index 00000000000..c1cecc8a7e3
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/appliances/chem_machines.dm
@@ -0,0 +1,27 @@
+// Machine that makes water and nothing else
+
+/obj/machinery/plumbing/synthesizer/water_synth
+ name = "water synthesizer"
+ desc = "An infinitely useful device for those finding themselves in a frontier without a stable source of water. \
+ Using a simplified version of the chemistry dispenser's synthesizer process, it can create water out of nothing \
+ but good old electricity."
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi'
+ icon_state = "water_synth"
+ anchored = FALSE
+ dispensable_reagents = list(
+ /datum/reagent/water,
+ )
+
+/obj/machinery/plumbing/synthesizer/water_synth/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+
+// Deployable item for cargo for the water synth
+
+/obj/item/flatpacked_machine/water_synth
+ name = "water synthesizer parts kit"
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi'
+ icon_state = "water_synth_parts"
+ w_class = WEIGHT_CLASS_NORMAL
+ type_to_deploy = /obj/machinery/plumbing/synthesizer/water_synth
+ deploy_time = 2 SECONDS
diff --git a/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm b/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm
new file mode 100644
index 00000000000..e8afbca61a7
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm
@@ -0,0 +1,52 @@
+/obj/machinery/cell_charger_multi/wall_mounted
+ name = "mounted multi-cell charging rack"
+ desc = "The innovative technology of a cell charging rack, but mounted neatly on a wall out of the way!"
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/cell_charger.dmi'
+ icon_state = "wall_charger"
+ base_icon_state = "wall_charger"
+ circuit = null
+ flags_1 = NODECONSTRUCT_1
+ max_batteries = 3
+ charge_rate = 750
+ /// The item we turn into when repacked
+ var/repacked_type = /obj/item/wallframe/cell_charger_multi
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/cell_charger_multi/wall_mounted, 29)
+
+/obj/machinery/cell_charger_multi/wall_mounted/Initialize(mapload)
+ . = ..()
+ find_and_hang_on_wall()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+
+/obj/machinery/cell_charger_multi/wall_mounted/wrench_act(mob/living/user, obj/item/tool)
+ . = ..()
+ user.balloon_alert(user, "deconstructing...")
+ tool.play_tool_sound(src)
+ if(tool.use_tool(src, user, 1 SECONDS))
+ playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE)
+ deconstruct(TRUE)
+ return
+
+/obj/machinery/cell_charger_multi/wall_mounted/deconstruct(disassembled)
+ if(disassembled)
+ new repacked_type(drop_location())
+ return ..()
+
+/obj/machinery/cell_charger_multi/wall_mounted/RefreshParts()
+ . = ..()
+ charge_rate = 750 // Nuh uh!
+
+// Item for creating the arc furnace or carrying it around
+
+/obj/item/wallframe/cell_charger_multi
+ name = "unmounted wall multi-cell charging rack"
+ desc = "The innovative technology of a cell charging rack, but able to be mounted neatly on a wall out of the way!"
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi'
+ icon_state = "cell_charger_packed"
+ w_class = WEIGHT_CLASS_NORMAL
+ result_path = /obj/machinery/cell_charger_multi/wall_mounted
+ pixel_shift = 29
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2,
+ /datum/material/silver = SHEET_MATERIAL_AMOUNT * 1,
+ )
diff --git a/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm b/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm
new file mode 100644
index 00000000000..5bb3276553f
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm
@@ -0,0 +1,106 @@
+/obj/machinery/rnd/production/colony_lathe
+ name = "rapid construction fabricator"
+ desc = "These bad boys are seen just about anywhere someone would want or need to build fast, damn the consequences. \
+ That tends to be colonies, especially on dangerous worlds, where the influences of this one machine can be seen \
+ in every bit of architecture."
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi'
+ icon_state = "colony_lathe"
+ base_icon_state = "colony_lathe"
+ production_animation = null
+ circuit = null
+ production_animation = "colony_lathe_n"
+ flags_1 = NODECONSTRUCT_1
+ light_color = LIGHT_COLOR_BRIGHT_YELLOW
+ light_power = 5
+ charges_tax = FALSE
+ allowed_buildtypes = COLONY_FABRICATOR
+ /// The item we turn into when repacked
+ var/repacked_type = /obj/item/flatpacked_machine
+ /// The sound loop played while the fabricator is making something
+ var/datum/looping_sound/colony_fabricator_running/soundloop
+
+/obj/machinery/rnd/production/colony_lathe/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/repackable, repacked_type, 5 SECONDS)
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+ // We don't get new designs but can't print stuff if something's not researched, so we use the web that has everything researched
+ stored_research = locate(/datum/techweb/admin) in SSresearch.techwebs
+ soundloop = new(src, FALSE)
+ if(!mapload)
+ flick("colony_lathe_deploy", src) // Sick ass deployment animation
+
+/obj/machinery/rnd/production/colony_lathe/Destroy()
+ QDEL_NULL(soundloop)
+ return ..()
+
+/obj/machinery/rnd/production/colony_lathe/user_try_print_id(design_id, print_quantity)
+ . = ..()
+
+ if(!.)
+ return
+
+ soundloop.start()
+ set_light(l_range = 1.5)
+ icon_state = "colony_lathe_working"
+ update_appearance()
+
+/obj/machinery/rnd/production/colony_lathe/do_print(path, amount)
+ . = ..()
+ soundloop.stop()
+ set_light(l_range = 0)
+ icon_state = base_icon_state
+ update_appearance()
+ flick("colony_lathe_finish_print", src)
+
+/obj/machinery/rnd/production/colony_lathe/calculate_efficiency()
+ efficiency_coeff = 1
+
+// We take from all nodes even unresearched ones
+/obj/machinery/rnd/production/colony_lathe/update_designs()
+ var/previous_design_count = cached_designs.len
+
+ cached_designs.Cut()
+
+ for(var/design_id in SSresearch.techweb_designs)
+ var/datum/design/design = SSresearch.techweb_designs[design_id]
+
+ if((isnull(allowed_department_flags) || (design.departmental_flags & allowed_department_flags)) && (design.build_type & allowed_buildtypes))
+ cached_designs |= design
+
+ var/design_delta = cached_designs.len - previous_design_count
+
+ if(design_delta > 0)
+ say("Received [design_delta] new design[design_delta == 1 ? "" : "s"].")
+ playsound(src, 'sound/machines/twobeep_high.ogg', 50, TRUE)
+
+ update_static_data_for_all_viewers()
+
+// Item for carrying the lathe around and building it
+
+/obj/item/flatpacked_machine
+ name = "flat-packed rapid construction fabricator"
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi'
+ icon_state = "colony_lathe_packed"
+ w_class = WEIGHT_CLASS_BULKY
+ /// What structure is created by this item.
+ var/obj/type_to_deploy = /obj/machinery/rnd/production/colony_lathe
+ /// How long it takes to create the structure in question.
+ var/deploy_time = 4 SECONDS
+
+/obj/item/flatpacked_machine/Initialize(mapload)
+ . = ..()
+ desc = initial(type_to_deploy.desc)
+ AddComponent(/datum/component/deployable, deploy_time, type_to_deploy, delete_on_use = TRUE)
+ give_manufacturer_examine()
+
+/// Adds the manufacturer examine element to the flatpack machine, but can be overridden in the future
+/obj/item/flatpacked_machine/proc/give_manufacturer_examine()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+
+/obj/item/borg/apparatus/sheet_manipulator/Initialize(mapload)
+ . = ..()
+ storable += /obj/item/flatpacked_machine
+
+/obj/item/borg/apparatus/circuit/Initialize(mapload)
+ . = ..()
+ storable += /obj/item/flatpacked_machine
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/appliances.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/appliances.dm
new file mode 100644
index 00000000000..acd6182f3f1
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/appliances.dm
@@ -0,0 +1,96 @@
+// Machine categories
+
+#define FABRICATOR_CATEGORY_APPLIANCES "/Appliances"
+#define FABRICATOR_SUBCATEGORY_POWER "/Power"
+#define FABRICATOR_SUBCATEGORY_ATMOS "/Atmospherics"
+#define FABRICATOR_SUBCATEGORY_FLUIDS "/Liquids"
+
+// Techweb node that shouldnt show up anywhere ever specifically for the fabricator to work with
+
+/datum/techweb_node/colony_fabricator_appliances
+ id = "colony_fabricator_appliances"
+ display_name = "Colony Fabricator Appliance Designs"
+ description = "Contains all of the colony fabricator's appliance machine designs."
+ design_ids = list(
+ "wall_multi_cell_rack",
+ "portable_lil_pump",
+ "portable_scrubbs",
+ "survival_knife", // I just don't want to make a whole new node for this one sorry
+ "soup_pot", // This one too
+ "water_synth",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you
+ hidden = TRUE
+ show_on_wiki = FALSE
+ starting_node = TRUE
+
+// Wall mountable multi cell charger
+
+/datum/design/wall_mounted_multi_charger
+ name = "Mounted Multi-Cell Charging Rack"
+ id = "wall_multi_cell_rack"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2,
+ /datum/material/silver = SHEET_MATERIAL_AMOUNT * 1,
+ )
+ build_path = /obj/item/wallframe/cell_charger_multi
+ category = list(
+ RND_CATEGORY_INITIAL,
+ FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_POWER,
+ )
+ construction_time = 15 SECONDS
+
+// Portable scrubber and pumps for all your construction atmospherics needs
+
+/datum/design/portable_gas_pump
+ name = "Portable Air Pump"
+ id = "portable_lil_pump"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3,
+ )
+ build_path = /obj/machinery/portable_atmospherics/pump
+ category = list(
+ RND_CATEGORY_INITIAL,
+ FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_ATMOS,
+ )
+ construction_time = 30 SECONDS
+
+/datum/design/portable_gas_scrubber
+ name = "Portable Air Scrubber"
+ id = "portable_scrubbs"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3,
+ )
+ build_path = /obj/machinery/portable_atmospherics/scrubber
+ category = list(
+ RND_CATEGORY_INITIAL,
+ FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_ATMOS,
+ )
+ construction_time = 30 SECONDS
+
+// Plumbable chem machine that makes nothing but water
+
+/datum/design/water_synthesizer
+ name = "Water Synthesizer"
+ id = "water_synth"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT,
+ )
+ build_path = /obj/machinery/plumbing/synthesizer/water_synth
+ category = list(
+ RND_CATEGORY_INITIAL,
+ FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_FLUIDS,
+ )
+ construction_time = 10 SECONDS
+
+#undef FABRICATOR_CATEGORY_APPLIANCES
+#undef FABRICATOR_SUBCATEGORY_POWER
+#undef FABRICATOR_SUBCATEGORY_ATMOS
+#undef FABRICATOR_SUBCATEGORY_FLUIDS
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/equipment.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/equipment.dm
new file mode 100644
index 00000000000..1740162cbf4
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/equipment.dm
@@ -0,0 +1,27 @@
+/datum/design/survival_knife
+ name = "Survival Knife"
+ id = "survival_knife"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 6
+ )
+ build_path = /obj/item/knife/combat/survival
+ category = list(
+ RND_CATEGORY_INITIAL,
+ RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_KITCHEN,
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_SERVICE
+
+/datum/design/soup_pot
+ name = "Soup Pot"
+ id = "soup_pot"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5
+ )
+ build_path = /obj/item/reagent_containers/cup/soup_pot
+ category = list(
+ RND_CATEGORY_INITIAL,
+ RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_KITCHEN,
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_SERVICE
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/computer_board.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/computer_board.dm
new file mode 100644
index 00000000000..c690e454eed
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/computer_board.dm
@@ -0,0 +1,11 @@
+/datum/design/board/solarcontrol/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/atmosalerts/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/powermonitor/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm
new file mode 100644
index 00000000000..71eed6b71f8
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm
@@ -0,0 +1,101 @@
+// This file is going to be just all bitflag additions
+
+/datum/design/apc_board/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/airalarm_electronics/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/airlock_board/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/firealarm_electronics/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/control/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/firelock_board/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/condenser/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/health_sensor/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/igniter/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/infrared_emitter/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/prox_sensor/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/signaler/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/timer/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/voice_analyzer/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/camera_assembly/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/intercom_frame/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/light_tube/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/light_bulb/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/conveyor_belt/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/conveyor_switch/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/lavarods/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/rglass/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/plasteel_alloy/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/plaglass_alloy/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/plasmarglass_alloy/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/equipment.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/equipment.dm
new file mode 100644
index 00000000000..9ebd506602d
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/equipment.dm
@@ -0,0 +1,103 @@
+// This file is going to be just all bitflag additions
+
+/datum/design/radio_navigation_beacon/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/engine_goggles/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/pneumatic_seal/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/welding_goggles/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/welding_helmet/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/gas_filter/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/plasmaman_gas_filter/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/plasmarefiller/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/emergency_oxygen_engi/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/plasmaman_tank_belt/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/generic_gas_tank/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/plasma_tank/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/diagnostic_hud/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/portaseeder/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/oven_tray/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/bowl/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/beaker/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+// Stock parts are going here too because there's not many of them
+
+/datum/design/water_recycler/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/super_cell/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/adv_capacitor/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/adv_scanning/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/nano_servo/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/high_micro_laser/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/adv_matter_bin/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/rped/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm
new file mode 100644
index 00000000000..86b70bc7f74
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm
@@ -0,0 +1,39 @@
+/datum/design/board/hydroponics/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/cyborgrecharger/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/microwave/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/processor/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/recycler/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/suit_storage_unit/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/range/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/griddle/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/reagentgrinder/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/biogenerator/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/stock_parts.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/stock_parts.dm
new file mode 100644
index 00000000000..9990dfcfa3f
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/stock_parts.dm
@@ -0,0 +1,31 @@
+/datum/design/water_recycler/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/super_cell/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/adv_capacitor/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/adv_scanning/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/nano_servo/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/high_micro_laser/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/adv_matter_bin/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/rped/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm
new file mode 100644
index 00000000000..4497aa130c3
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm
@@ -0,0 +1,113 @@
+// Various designs that get added to the colony fab
+
+/datum/design/rcd_loaded/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/holosignatmos/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/analyzer/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/extinguisher/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/cable_coil/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/airlock_painter/decal/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/airlock_painter/decal/tile/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/holosignengi/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/inducer/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/multitool/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/tscanner/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/pipe_painter/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/rwd/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/bolter_wrench/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/rpd/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/rpd_upgrade/unwrench/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/rtd_loaded/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/rcd_ammo/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/light_replacer/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/rld_mini/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/miningsatchel_holding/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/mining_scanner/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/flashlight/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/ducts/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/plunger/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/handlabeler/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/paperroll/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/spraycan/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/flatpack_machines.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/flatpack_machines.dm
new file mode 100644
index 00000000000..a824a145df9
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/flatpack_machines.dm
@@ -0,0 +1,208 @@
+// Machine categories
+
+#define FABRICATOR_CATEGORY_FLATPACK_MACHINES "/Flatpacked Machines"
+#define FABRICATOR_SUBCATEGORY_MANUFACTURING "/Manufacturing"
+#define FABRICATOR_SUBCATEGORY_POWER "/Power"
+#define FABRICATOR_SUBCATEGORY_MATERIALS "/Materials"
+#define FABRICATOR_SUBCATEGORY_ATMOS "/Atmospherics"
+
+// Techweb node that shouldnt show up anywhere ever specifically for the fabricator to work with
+
+/datum/techweb_node/colony_fabricator_flatpacks
+ id = "colony_fabricator_flatpacks"
+ display_name = "Colony Fabricator Flatpack Designs"
+ description = "Contains all of the colony fabricator's flatpack machine designs."
+ design_ids = list(
+ "flatpack_solar_panel",
+ "flatpack_solar_tracker",
+ "flatpack_arc_furnace",
+ "flatpack_colony_fab",
+ "flatpack_station_battery",
+ "flatpack_station_battery_large",
+ "flatpack_fuel_generator",
+ "flatpack_rtg",
+ "flatpack_thermo",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you
+ hidden = TRUE
+ show_on_wiki = FALSE
+ starting_node = TRUE
+
+// Lets the colony lathe make more colony lathes but at very hihg cost, for fun
+
+/datum/design/flatpack_colony_fabricator
+ name = "Flat-packed Colony Fabricator"
+ desc = "A deployable fabricator capable of producing other flat-packed machines and other special equipment tailored for \
+ rapidly constructing functional structures given resources and power. While it cannot be upgraded, it can be repacked \
+ and moved to any location you see fit."
+ id = "flatpack_colony_fab"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 10,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 7.5,
+ /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 2.5,
+ /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
+ /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+ build_path = /obj/item/flatpacked_machine
+ category = list(
+ RND_CATEGORY_INITIAL,
+ FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_MANUFACTURING,
+ )
+ construction_time = 30 SECONDS
+
+// Solar panels and trackers
+
+/datum/design/flatpack_solar_panel
+ name = "Flat-packed Solar Panel"
+ desc = "A deployable solar panel, able to be repacked after placement for relocation or recycling."
+ id = "flatpack_solar_panel"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 1,
+ )
+ build_path = /obj/item/flatpacked_machine/solar
+ category = list(
+ RND_CATEGORY_INITIAL,
+ FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_POWER,
+ )
+ construction_time = 5 SECONDS
+
+/datum/design/flatpack_solar_tracker
+ name = "Flat-packed Solar Tracker"
+ desc = "A deployable solar tracker, able to be repacked after placement for relocation or recycling."
+ id = "flatpack_solar_tracker"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2,
+ /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT * 3.5,
+ )
+ build_path = /obj/item/flatpacked_machine/solar_tracker
+ category = list(
+ RND_CATEGORY_INITIAL,
+ FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_POWER,
+ )
+ construction_time = 7 SECONDS
+
+// Arc furance
+
+/datum/design/flatpack_arc_furnace
+ name = "Flat-packed Arc Furnace"
+ desc = "A deployable furnace for refining ores. While slower and less safe than conventional refining methods, \
+ it multiplies the output of refined materials enough to still outperform simply recycling ore."
+ id = "flatpack_arc_furnace"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3,
+ )
+ build_path = /obj/item/flatpacked_machine/arc_furnace
+ category = list(
+ RND_CATEGORY_INITIAL,
+ FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_MATERIALS,
+ )
+ construction_time = 15 SECONDS
+
+// Power storage structures
+
+/datum/design/flatpack_power_storage
+ name = "Flat-packed Stationary Battery"
+ desc = "A deployable station-scale power cell with an overall low capacity, but high input and output rate."
+ id = "flatpack_station_battery"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
+ /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+ build_path = /obj/item/flatpacked_machine/station_battery
+ category = list(
+ RND_CATEGORY_INITIAL,
+ FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_POWER,
+ )
+ construction_time = 20 SECONDS
+
+/datum/design/flatpack_power_storage_large
+ name = "Flat-packed Large Stationary Battery"
+ desc = "A deployable station-scale power cell with an overall extremely high capacity, but low input and output rate."
+ id = "flatpack_station_battery_large"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 12,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 4,
+ /datum/material/gold = SHEET_MATERIAL_AMOUNT,
+ )
+ build_path = /obj/item/flatpacked_machine/large_station_battery
+ category = list(
+ RND_CATEGORY_INITIAL,
+ FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_POWER,
+ )
+ construction_time = 40 SECONDS
+
+// PACMAN generator but epic!!
+
+/datum/design/flatpack_solids_generator
+ name = "Flat-Packed S.O.F.I.E. Generator"
+ desc = "A deployable plasma-burning generator capable of outperforming even upgraded P.A.C.M.A.N. type generators, \
+ at expense of creating hot carbon dioxide exhaust."
+ id = "flatpack_fuel_generator"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT,
+ /datum/material/titanium = SHEET_MATERIAL_AMOUNT,
+ /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+ build_path = /obj/item/flatpacked_machine/fuel_generator
+ category = list(
+ RND_CATEGORY_INITIAL,
+ FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_POWER,
+ )
+ construction_time = 30 SECONDS
+
+// Buildable RTG that is quite radioactive
+
+/datum/design/flatpack_rtg
+ name = "Flat-packed Radioisotope Thermoelectric Generator"
+ desc = "A deployable radioisotope generator capable of producing a practically free trickle of power. \
+ Free if you can tolerate the radiation that the machine makes while deployed, that is."
+ id = "flatpack_rtg"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 15,
+ /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT,
+ /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+ build_path = /obj/item/flatpacked_machine/rtg
+ category = list(
+ RND_CATEGORY_INITIAL,
+ FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_POWER,
+ )
+ construction_time = 30 SECONDS
+
+// Thermomachine with decent temperature change rate, but a limited max/min temperature
+
+/datum/design/flatpack_thermomachine
+ name = "Flat-packed Atmospheric Temperature Regulator"
+ desc = "A deployable temperature control device for use with atmospherics pipe systems. \
+ Limited in its temperature range, however comes with a higher than normal heat capacity."
+ id = "flatpack_thermo"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT,
+ )
+ build_path = /obj/item/flatpacked_machine/thermomachine
+ category = list(
+ RND_CATEGORY_INITIAL,
+ FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_ATMOS,
+ )
+ construction_time = 20 SECONDS
+
+#undef FABRICATOR_CATEGORY_FLATPACK_MACHINES
+#undef FABRICATOR_SUBCATEGORY_MANUFACTURING
+#undef FABRICATOR_SUBCATEGORY_POWER
+#undef FABRICATOR_SUBCATEGORY_MATERIALS
+#undef FABRICATOR_SUBCATEGORY_ATMOS
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/tools.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/tools.dm
new file mode 100644
index 00000000000..0ddfb18e1f7
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/tools.dm
@@ -0,0 +1,80 @@
+/datum/techweb_node/colony_fabricator_special_tools
+ id = "colony_fabricator_tools"
+ display_name = "Colony Fabricator Tool Designs"
+ description = "Contains all of the colony fabricator's tool designs."
+ design_ids = list(
+ "colony_power_drive",
+ "colony_prybar",
+ "colony_arc_welder",
+ "colony_compact_drill",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you
+ hidden = TRUE
+ show_on_wiki = FALSE
+ starting_node = TRUE
+
+// Screw-Wrench-Wirecutter combo machine
+
+/datum/design/colony_power_driver
+ name = "Powered Driver"
+ id = "colony_power_drive"
+ build_type = COLONY_FABRICATOR
+ build_path = /obj/item/screwdriver/omni_drill
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75,
+ /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
+ /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+ category = list(
+ RND_CATEGORY_INITIAL,
+ RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED,
+ )
+
+// Crowbar that is completely normal except it can force doors
+
+/datum/design/colony_door_crowbar
+ name = "Prybar"
+ id = "colony_prybar"
+ build_type = COLONY_FABRICATOR
+ build_path = /obj/item/crowbar/large/doorforcer
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75,
+ /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+ category = list(
+ RND_CATEGORY_INITIAL,
+ RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED,
+ )
+
+// Welder that takes no fuel or power to run but is quite slow, at least it sounds cool as hell
+
+/datum/design/colony_arc_welder
+ name = "Arc Welder"
+ id = "colony_arc_welder"
+ build_type = COLONY_FABRICATOR
+ build_path = /obj/item/weldingtool/electric/arc_welder
+ materials = list(
+ /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
+ /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5,
+ /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
+ )
+ category = list(
+ RND_CATEGORY_INITIAL,
+ RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED,
+ )
+
+// Slightly slower drill that fits in backpacks
+
+/datum/design/colony_compact_drill
+ name = "Compact Mining Drill"
+ id = "colony_compact_drill"
+ build_type = COLONY_FABRICATOR
+ build_path = /obj/item/pickaxe/drill/compact
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3,
+ /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+ category = list(
+ RND_CATEGORY_INITIAL,
+ RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MINING,
+ )
diff --git a/modular_skyrat/modules/colony_fabricator/code/looping_sounds.dm b/modular_skyrat/modules/colony_fabricator/code/looping_sounds.dm
new file mode 100644
index 00000000000..5c375e6259c
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/looping_sounds.dm
@@ -0,0 +1,35 @@
+/datum/looping_sound/colony_fabricator_running
+ start_sound = 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav'
+ start_length = 1
+ mid_sounds = list(
+ 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav' = 1,
+ 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav' = 1,
+ 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav' = 1,
+ 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav' = 1,
+ )
+ mid_length = 3 SECONDS
+ end_sound = 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav'
+ volume = 100
+ falloff_exponent = 3
+
+/datum/looping_sound/arc_furnace_running
+ mid_sounds = list(
+ 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav' = 1,
+ 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav' = 1,
+ 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav' = 1,
+ 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav' = 1,
+ )
+ mid_length = 1 SECONDS
+ volume = 200 // This sound effect is very quiet I've noticed
+ falloff_exponent = 2
+
+/datum/looping_sound/conditioner_running
+ mid_sounds = list(
+ 'modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_1.wav' = 1,
+ 'modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_2.wav' = 1,
+ 'modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_3.wav' = 1,
+ 'modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_4.wav' = 1,
+ )
+ mid_length = 3 SECONDS
+ volume = 75
+ falloff_exponent = 3
diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm b/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm
new file mode 100644
index 00000000000..e49383c52a2
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm
@@ -0,0 +1,222 @@
+#define RADIAL_CHOICE_USE "use"
+#define RADIAL_CHOICE_EJECT "eject"
+
+#define ARC_FURNACE_ORE_MULTIPLIER 1.5
+
+/obj/machinery/arc_furnace
+ name = "arc furnace"
+ desc = "An arc furnace, a specialist machine that can rapidly smelt ores using, as the name implies, massive \
+ amounts of electricity. While not nearly as fast and efficient as other ore refining methods, the arc furnace is \
+ capable of returning larger amounts of refined material than a standard refining process can. \
+ A sticker on the side notes that this may exhaust waste gasses to the air during operation."
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi'
+ icon_state = "arc_furnace"
+ base_icon_state = "arc_furnace"
+ appearance_flags = KEEP_TOGETHER | LONG_GLIDE | PIXEL_SCALE
+ layer = BELOW_OBJ_LAYER
+ density = TRUE
+ circuit = null
+ light_color = LIGHT_COLOR_BRIGHT_YELLOW
+ light_power = 10
+ flags_1 = NODECONSTRUCT_1
+ active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 10 // This baby consumes so much power
+ /// The item we turn into when repacked
+ var/repacked_type = /obj/item/flatpacked_machine/arc_furnace
+ /// If the furnace is currently working on smelting something
+ var/operating = FALSE
+ /// Image for the radial eject button
+ var/static/radial_eject = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_eject")
+ /// Image for the radial use button
+ var/static/radial_use = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_use")
+ /// Radial options for using the arc furnace
+ var/static/list/radial_options = list(RADIAL_CHOICE_EJECT = radial_eject, RADIAL_CHOICE_USE = radial_use)
+ /// Soundloop for while we are smelting ores
+ var/datum/looping_sound/arc_furnace_running/soundloop
+
+/obj/machinery/arc_furnace/Initialize(mapload)
+ . = ..()
+ soundloop = new(src, FALSE)
+ AddElement(/datum/element/repackable, repacked_type, 2 SECONDS)
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+ if(!mapload)
+ flick("arc_furnace_deploy", src)
+
+/obj/machinery/arc_furnace/examine(mob/user)
+ . = ..()
+ if(length(contents))
+ . += span_notice("It has [contents[1]] sitting in it.")
+
+/obj/machinery/arc_furnace/deconstruct(disassembled = TRUE)
+ eject_contents()
+ return ..()
+
+/obj/machinery/arc_furnace/update_appearance()
+ . = ..()
+ cut_overlays()
+
+ if(length(contents))
+ var/image/overlayed_item = image(icon = contents[1].icon, icon_state = contents[1].icon_state)
+ overlayed_item.transform = matrix(, 0, 0, 0, 0.8, 0)
+ add_overlay(overlayed_item)
+
+ var/image/furnace_front_overlay = image(icon = icon, icon_state = "[operating ? "[base_icon_state]_overlay_active" : "[base_icon_state]_overlay"]")
+ add_overlay(furnace_front_overlay)
+
+/obj/machinery/arc_furnace/attackby(obj/item/attacking_item, mob/living/user, params)
+ if(operating)
+ balloon_alert(user, "furnace busy")
+ return TRUE
+
+ if(length(contents))
+ balloon_alert(user, "furnace full")
+ return TRUE
+
+ if(istype(attacking_item, /obj/item/stack/ore))
+ attacking_item.forceMove(src)
+ balloon_alert(user, "ore added")
+ update_appearance()
+ return TRUE
+
+ return ..()
+
+/obj/machinery/arc_furnace/ui_interact(mob/user)
+ . = ..()
+
+ if(operating || !user.can_perform_action(src, ALLOW_SILICON_REACH))
+ return
+ if(isAI(user) && (machine_stat & NOPOWER))
+ return
+
+ if(!length(contents))
+ balloon_alert(user, "it's empty!")
+ return
+
+ var/choice = show_radial_menu(user, src, radial_options, require_near = !issilicon(user))
+
+ // post choice verification
+ if(operating || !user.can_perform_action(src, ALLOW_SILICON_REACH))
+ return
+ if(isAI(user) && (machine_stat & NOPOWER))
+ return
+
+ usr.set_machine(src) // What does this even do??
+ switch(choice)
+ if(RADIAL_CHOICE_EJECT)
+ eject_contents()
+ if(RADIAL_CHOICE_USE)
+ smelt_it_up(user)
+
+/// Removes the first item in the contents list which should only ever be ore and if its not, we have problems
+/obj/machinery/arc_furnace/proc/eject_contents()
+ if(operating)
+ return
+
+ playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3)
+
+ if(!length(contents))
+ return
+
+ var/atom/movable/thing_inside = contents[1]
+ thing_inside.forceMove(drop_location())
+ update_appearance()
+
+/// Starts the smelting process, checking if the machine has power or if its broken at all
+/obj/machinery/arc_furnace/proc/smelt_it_up(mob/user)
+ if(machine_stat & (NOPOWER|BROKEN))
+ balloon_alert(user, "button doesn't respond")
+ return
+ if(operating)
+ balloon_alert(user, "already smelting")
+ return
+
+ var/obj/item/stack/ore/ore_to_smelt = contents[1]
+ if(!istype(ore_to_smelt))
+ balloon_alert(user, "nothing to smelt")
+
+ operating = TRUE
+ /// How long the smelting is going to take based off the stack size
+ var/smelting_time = ore_to_smelt.amount * 1 SECONDS
+ loop(smelting_time)
+
+ soundloop.start()
+ set_light(l_range = 1.5)
+
+ update_appearance()
+
+/// The smelting loop for checking if we're done smelting or not. If we are, then we succeed smelting. If we have to stop for whatever reason, we stop.
+/obj/machinery/arc_furnace/proc/loop(time)
+ if(machine_stat & (NOPOWER|BROKEN))
+ end_smelting()
+ return
+
+ if(!length(contents))
+ end_smelting()
+ return
+
+ if(time <= 0)
+ succeed_smelting()
+ return
+
+ time -= 1 SECONDS
+ use_power(active_power_usage)
+
+ var/turf/where_we_spawn_air = get_turf(src)
+ var/obj/item/stack/ore/ore_stack_to_check = contents[1]
+ switch(ore_stack_to_check.refined_type)
+ if(/obj/item/stack/sheet/mineral/silver)
+ where_we_spawn_air.atmos_spawn_air("n2=10;TEMP=1200")
+ if(/obj/item/stack/sheet/mineral/uranium)
+ where_we_spawn_air.atmos_spawn_air("co2=50;TEMP=1200")
+ if(/obj/item/stack/sheet/mineral/titanium)
+ where_we_spawn_air.atmos_spawn_air("n2=10;co2=10;TEMP=1200")
+ else
+ where_we_spawn_air.atmos_spawn_air("co2=20;TEMP=1200")
+
+ addtimer(CALLBACK(src, PROC_REF(loop), time), 1 SECONDS)
+
+/// Takes the ore contained and turns it into an equal stack amount of its smelt result
+/obj/machinery/arc_furnace/proc/succeed_smelting()
+ var/obj/item/stack/ore/ore_to_smelt = contents[1]
+ if(!istype(ore_to_smelt))
+ end_smelting()
+
+ // We collect how many sheets of material we will need to spawn with the multiplier, whole sheets only!
+ var/how_much_material_to_spawn = round(ore_to_smelt.amount * ARC_FURNACE_ORE_MULTIPLIER)
+ // We also grab what the resulting refined type will be
+ var/obj/item/stack/ore_refined_type = ore_to_smelt.refined_type
+
+ // While the materials to spawn are greater than or equal to the max stack amount of the product, we can just safely spawn the max amount
+ // Variable with the max stack amount just for futureproofing, because why not?
+ while(how_much_material_to_spawn >= ore_refined_type.max_amount)
+ new ore_refined_type(drop_location(), ore_refined_type.max_amount)
+ how_much_material_to_spawn -= ore_refined_type.max_amount
+
+ // Now, we spawn a stack with whatever's left, if there is anything left
+ if(how_much_material_to_spawn)
+ new ore_refined_type(drop_location(), how_much_material_to_spawn)
+
+ qdel(ore_to_smelt)
+ end_smelting()
+
+/// Turns the arc furnace off, removing its lights, sounds, so on.
+/obj/machinery/arc_furnace/proc/end_smelting()
+ operating = FALSE
+ soundloop.stop()
+ set_light(l_range = 0)
+ update_appearance()
+
+// Item for creating the arc furnace or carrying it around
+
+/obj/item/flatpacked_machine/arc_furnace
+ name = "flat-packed arc furnace"
+ icon_state = "arc_furnace_folded"
+ type_to_deploy = /obj/machinery/arc_furnace
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3,
+ )
+
+#undef RADIAL_CHOICE_USE
+#undef RADIAL_CHOICE_EJECT
+
+#undef ARC_FURNACE_ORE_MULTIPLIER
diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm b/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm
new file mode 100644
index 00000000000..ca73a4711bd
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm
@@ -0,0 +1,69 @@
+/obj/machinery/power/smes/battery_pack
+ name = "stationary battery"
+ desc = "An about table-height block of power storage, commonly seen in low storage high output power applications. \
+ Smaller units such as these tend to have a respectively smaller energy storage, though also are capable of \
+ higher maximum output than some larger units. Most commonly seen being used not for their ability to store \
+ power, but rather for use in regulating power input and output."
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi'
+ capacity = 75e4
+ input_level_max = 4e5
+ output_level_max = 4e5
+ circuit = null
+ flags_1 = NODECONSTRUCT_1
+ /// The item we turn into when repacked
+ var/repacked_type = /obj/item/flatpacked_machine/station_battery
+
+/obj/machinery/power/smes/battery_pack/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/repackable, repacked_type, 5 SECONDS)
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+ if(!mapload)
+ flick("smes_deploy", src)
+
+/obj/machinery/power/smes/battery_pack/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver)
+ if(screwdriver.tool_behaviour != TOOL_SCREWDRIVER)
+ return FALSE
+
+ screwdriver.play_tool_sound(src, 50)
+ toggle_panel_open()
+ if(panel_open)
+ icon_state = icon_state_open
+ to_chat(user, span_notice("You open the maintenance hatch of [src]."))
+ else
+ icon_state = icon_state_closed
+ to_chat(user, span_notice("You close the maintenance hatch of [src]."))
+ return TRUE
+
+// We don't care about the parts updates because we don't want them to change
+/obj/machinery/power/smes/battery_pack/RefreshParts()
+ return
+
+// We also don't need to bother with fuddling with charging power cells, there are none to remove
+/obj/machinery/power/smes/on_deconstruction()
+ return
+
+// Item for creating the small battery and carrying it around
+
+/obj/item/flatpacked_machine/station_battery
+ name = "flat-packed stationary battery"
+ icon_state = "battery_small_packed"
+ type_to_deploy = /obj/machinery/power/smes/battery_pack
+
+// Larger station batteries, hold more but have less in/output
+
+/obj/machinery/power/smes/battery_pack/large
+ name = "large stationary battery"
+ desc = "A massive block of power storage, commonly seen in high storage low output power applications. \
+ Larger units such as these tend to have a respectively larger energy storage, though only capable of \
+ low maximum output compared to smaller units. Most commonly seen as large backup batteries, or simply \
+ for large power storage where throughput is not a concern."
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi'
+ capacity = 1e7
+ input_level_max = 5e4
+ output_level_max = 5e4
+ repacked_type = /obj/item/flatpacked_machine/large_station_battery
+
+/obj/item/flatpacked_machine/large_station_battery
+ name = "flat-packed large stationary battery"
+ icon_state = "battery_large_packed"
+ type_to_deploy = /obj/machinery/power/smes/battery_pack/large
diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm b/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm
new file mode 100644
index 00000000000..6e2c769b2fd
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm
@@ -0,0 +1,33 @@
+/obj/machinery/power/rtg/portable
+ name = "radioisotope thermoelectric generator"
+ desc = "The ultimate in 'middle of nowhere' power generation. Unlike standard RTGs, this particular \
+ design of generator has forgone the heavy radiation shielding that most RTG designs include. \
+ In better news, these tend to be pretty good with making a passable trickle of power for any \
+ application."
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi'
+ circuit = null
+ flags_1 = NODECONSTRUCT_1
+ power_gen = 7500
+ /// What we turn into when we are repacked
+ var/repacked_type = /obj/item/flatpacked_machine/rtg
+
+/obj/machinery/power/rtg/portable/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/repackable, repacked_type, 2 SECONDS)
+ AddElement(/datum/element/radioactive)
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+ if(!mapload)
+ flick("rtg_deploy", src)
+
+// Item for creating the arc furnace or carrying it around
+
+/obj/item/flatpacked_machine/rtg
+ name = "flat-packed radioisotope thermoelectric generator"
+ icon_state = "rtg_packed"
+ type_to_deploy = /obj/machinery/power/rtg/portable
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 15,
+ /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT,
+ /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
+ )
diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm b/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm
new file mode 100644
index 00000000000..c7708bbdee1
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm
@@ -0,0 +1,67 @@
+// Solar panels
+
+/obj/machinery/power/solar/deployable
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi'
+ flags_1 = NODECONSTRUCT_1
+ /// The item we turn into when repacked
+ var/repacked_type = /obj/item/flatpacked_machine/solar
+
+/obj/machinery/power/solar/deployable/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/repackable, repacked_type, 1 SECONDS)
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+
+/obj/machinery/power/solar/deployable/crowbar_act(mob/user, obj/item/I)
+ return
+
+/obj/machinery/power/solar/deployable/deconstruct(disassembled = TRUE)
+ var/obj/item/solar_assembly/assembly = locate() in src
+ if(assembly)
+ qdel(assembly)
+ return ..()
+
+// Solar panel deployable item
+
+/obj/item/flatpacked_machine/solar
+ name = "flat-packed solar panel"
+ icon_state = "solar_panel_packed"
+ type_to_deploy = /obj/machinery/power/solar/deployable
+ deploy_time = 2 SECONDS
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75,
+ /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT * 3,
+ )
+
+// Solar trackers
+
+/obj/machinery/power/tracker/deployable
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi'
+ flags_1 = NODECONSTRUCT_1
+ /// The item we turn into when repacked
+ var/repacked_type = /obj/item/flatpacked_machine/solar_tracker
+
+/obj/machinery/power/tracker/deployable/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/repackable, repacked_type, 1 SECONDS)
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+
+/obj/machinery/power/tracker/deployable/crowbar_act(mob/user, obj/item/item_acting)
+ return
+
+/obj/machinery/power/tracker/deployable/deconstruct(disassembled = TRUE)
+ var/obj/item/solar_assembly/assembly = locate() in src
+ if(assembly)
+ qdel(assembly)
+ return ..()
+
+// Solar tracker deployable item
+
+/obj/item/flatpacked_machine/solar_tracker
+ name = "flat-packed solar tracker"
+ icon_state = "solar_tracker_packed"
+ type_to_deploy = /obj/machinery/power/tracker/deployable
+ deploy_time = 3 SECONDS
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2,
+ /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT * 3.5,
+ )
diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm b/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm
new file mode 100644
index 00000000000..4fc0f9b781b
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm
@@ -0,0 +1,52 @@
+/obj/machinery/power/port_gen/pacman/solid_fuel
+ name = "\improper S.O.F.I.E.-type portable generator"
+ desc = "The second most common generator design in the galaxy, second only to the P.A.C.M.A.N. \
+ The S.O.F.I.E. (Stationary Operating Fuel Ignition Engine) is similar to other generators in \
+ burning sheets of plasma in order to produce power. \
+ Unlike other generators however, this one isn't as portable, or as safe to operate, \
+ but at least it makes a hell of a lot more power. Must be bolted to the ground \
+ and attached to a wire before use. A massive warning label wants you to know that this generator \
+ outputs waste heat and gasses to the air around it."
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi'
+ icon_state = "fuel_generator_0"
+ base_icon_state = "fuel_generator"
+ circuit = null
+ flags_1 = NODECONSTRUCT_1
+ anchored = TRUE
+ max_sheets = 25
+ time_per_sheet = 100
+ power_gen = 12500
+ drag_slowdown = 1.5
+ sheet_path = /obj/item/stack/sheet/mineral/plasma
+ /// The item we turn into when repacked
+ var/repacked_type = /obj/item/flatpacked_machine/fuel_generator
+
+/obj/machinery/power/port_gen/pacman/solid_fuel/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/repackable, repacked_type, 1 SECONDS)
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+ if(!mapload)
+ flick("fuel_generator_deploy", src)
+
+// We don't need to worry about the board, this machine doesn't have one!
+/obj/machinery/power/port_gen/pacman/solid_fuel/on_construction(mob/user)
+ return
+
+/obj/machinery/power/port_gen/pacman/solid_fuel/process()
+ . = ..()
+ if(active)
+ var/turf/where_we_spawn_air = get_turf(src)
+ where_we_spawn_air.atmos_spawn_air("co2=10;TEMP=480") // Standard UK diesel engine operating temp is about 220 celsius or ~473 K
+
+// Item for creating the generator or carrying it around
+
+/obj/item/flatpacked_machine/fuel_generator
+ name = "flat-packed S.O.F.I.E.-type portable generator"
+ icon_state = "fuel_generator_packed"
+ type_to_deploy = /obj/machinery/power/port_gen/pacman/solid_fuel
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT,
+ /datum/material/titanium = SHEET_MATERIAL_AMOUNT,
+ /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
+ )
diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/thermomachine.dm b/modular_skyrat/modules/colony_fabricator/code/machines/thermomachine.dm
new file mode 100644
index 00000000000..741aabd0626
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/machines/thermomachine.dm
@@ -0,0 +1,55 @@
+/obj/machinery/atmospherics/components/unary/thermomachine/deployable
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi'
+ name = "atmospheric temperature regulator"
+ desc = "A much more tame variant of the thermomachines commonly seen in station scale temperature control devices. \
+ Its upper and lower bounds for temperature are highly limited, though it has a higher than standard heat capacity \
+ and the benefit of being undeployable when you're done with it."
+ circuit = null
+ greyscale_config = /datum/greyscale_config/thermomachine/deployable
+ min_temperature = T0C
+ max_temperature = FIRE_MINIMUM_TEMPERATURE_TO_SPREAD + 50
+ heat_capacity = 10000
+ /// The item we turn into when repacked
+ var/repacked_type = /obj/item/flatpacked_machine/thermomachine
+ /// Soundloop for while the thermomachine is turned on
+ var/datum/looping_sound/conditioner_running/soundloop
+
+/obj/machinery/atmospherics/components/unary/thermomachine/deployable/Initialize(mapload)
+ . = ..()
+ soundloop = new(src, FALSE)
+ AddElement(/datum/element/repackable, repacked_type, 2 SECONDS)
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+ flick("thermo_deploy", src)
+
+/obj/machinery/atmospherics/components/unary/thermomachine/deployable/RefreshParts()
+ . = ..()
+ heat_capacity = 10000
+ min_temperature = T0C
+ max_temperature = FIRE_MINIMUM_TEMPERATURE_TO_SPREAD + 50
+
+/obj/machinery/atmospherics/components/unary/thermomachine/deployable/default_deconstruction_crowbar()
+ return
+
+/obj/machinery/atmospherics/components/unary/thermomachine/deployable/process_atmos()
+ if(on && !soundloop.loop_started)
+ soundloop.start()
+ else if(soundloop.loop_started)
+ soundloop.stop()
+ . = ..()
+
+// Item for creating the regulator and carrying it about
+
+/obj/item/flatpacked_machine/thermomachine
+ name = "flat-packed atmospheric temperature regulator"
+ icon_state = "thermomachine_packed"
+ type_to_deploy = /obj/machinery/atmospherics/components/unary/thermomachine/deployable
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT,
+ )
+
+// Greyscale config for the light on this machine
+
+/datum/greyscale_config/thermomachine/deployable
+ name = "Deployable Thermomachine"
+ icon_file = 'modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi'
diff --git a/modular_skyrat/modules/colony_fabricator/code/repacking_element.dm b/modular_skyrat/modules/colony_fabricator/code/repacking_element.dm
new file mode 100644
index 00000000000..dec98f4877e
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/repacking_element.dm
@@ -0,0 +1,70 @@
+/// An element that allows objects to be right clicked and turned into another item after a delay
+/datum/element/repackable
+ element_flags = ELEMENT_BESPOKE
+ argument_hash_start_idx = 2
+
+ /// The path to spawn when the repacking operation is complete
+ var/item_to_pack_into
+ /// How long will repacking the attachee take
+ var/repacking_time
+ /// Do we tell objects destroyed that we disassembled them?
+ var/disassemble_objects
+
+/datum/element/repackable/Attach(datum/target, item_to_pack_into = /obj/item, repacking_time = 1 SECONDS, disassemble_objects = TRUE)
+ . = ..()
+ if(!isatom(target))
+ return ELEMENT_INCOMPATIBLE
+
+ src.item_to_pack_into = item_to_pack_into
+ src.repacking_time = repacking_time
+ src.disassemble_objects = disassemble_objects
+
+ RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(examine))
+ RegisterSignal(target, COMSIG_ATOM_ATTACK_HAND_SECONDARY, PROC_REF(on_right_click))
+ RegisterSignal(target, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, PROC_REF(on_requesting_context_from_item))
+
+/datum/element/repackable/Detach(datum/target)
+ . = ..()
+ UnregisterSignal(target, COMSIG_ATOM_EXAMINE)
+ UnregisterSignal(target, COMSIG_ATOM_ATTACK_HAND_SECONDARY)
+ UnregisterSignal(target, list(COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM))
+
+/datum/element/repackable/proc/examine(datum/source, mob/user, list/examine_list)
+ SIGNAL_HANDLER
+
+ examine_list += span_notice("It can be repacked with right click.")
+
+/// Checks if the user can actually interact with the structures in question, then invokes the proc to make it repack
+/datum/element/repackable/proc/on_right_click(atom/source, mob/user)
+ SIGNAL_HANDLER
+
+ if(!user.can_perform_action(source, NEED_DEXTERITY))
+ return
+
+ INVOKE_ASYNC(src, PROC_REF(repack), source, user)
+
+/// Removes the element target and spawns a new one of whatever item_to_pack_into is
+/datum/element/repackable/proc/repack(atom/source, mob/user)
+ source.balloon_alert_to_viewers("repacking...")
+ if(!do_after(user, 3 SECONDS, target = source))
+ return
+
+ playsound(source, 'sound/items/ratchet.ogg', 50, TRUE)
+
+ new item_to_pack_into(source.drop_location())
+
+ if(istype(source, /obj))
+ var/obj/source_object = source
+ source_object.deconstruct(TRUE)
+ else
+ qdel(source)
+
+/// Adds screen context for hovering over the repackable items with your mouse
+/datum/element/repackable/proc/on_requesting_context_from_item(atom/source, list/context, obj/item/held_item, mob/user)
+ SIGNAL_HANDLER
+
+ if(isnull(held_item))
+ context[SCREENTIP_CONTEXT_RMB] = "Repack"
+ . = CONTEXTUAL_SCREENTIP_SET
+
+ return NONE
diff --git a/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm b/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm
new file mode 100644
index 00000000000..e0b0e22af13
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm
@@ -0,0 +1,150 @@
+// Like the power drill, except no speed buff but has wirecutters as well? Just trust me on this one.
+
+/obj/item/screwdriver/omni_drill
+ name = "powered driver"
+ desc = "The ultimate in multi purpose construction tools. With heads for wire cutting, bolt driving, and driving \
+ screws, what's not to love? Well, the slow speed. Compared to other power drills these tend to be \
+ not much quicker than unpowered tools."
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi'
+ icon_state = "drill"
+ belt_icon_state = null
+ inhand_icon_state = "drill"
+ worn_icon_state = "drill"
+ lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75,
+ /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
+ /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+ force = 10
+ throwforce = 8
+ throw_speed = 2
+ throw_range = 3
+ attack_verb_continuous = list("drills", "screws", "jabs", "whacks")
+ attack_verb_simple = list("drill", "screw", "jab", "whack")
+ hitsound = 'sound/items/drill_hit.ogg'
+ usesound = 'sound/items/drill_use.ogg'
+ w_class = WEIGHT_CLASS_SMALL
+ toolspeed = 1
+ random_color = FALSE
+ greyscale_config = null
+ greyscale_config_belt = null
+ greyscale_config_inhand_left = null
+ greyscale_config_inhand_right = null
+
+/obj/item/screwdriver/omni_drill/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+
+/obj/item/screwdriver/omni_drill/get_all_tool_behaviours()
+ return list(TOOL_WIRECUTTER, TOOL_SCREWDRIVER, TOOL_WRENCH)
+
+/obj/item/screwdriver/omni_drill/examine(mob/user)
+ . = ..()
+ . += span_notice("Use in hand to switch configuration.\n")
+ . += span_notice("It functions as a [tool_behaviour] tool.")
+
+/obj/item/screwdriver/omni_drill/update_icon_state()
+ . = ..()
+ switch(tool_behaviour)
+ if(TOOL_SCREWDRIVER)
+ icon_state = initial(icon_state)
+ if(TOOL_WRENCH)
+ icon_state = "[initial(icon_state)]_bolt"
+ if(TOOL_WIRECUTTER)
+ icon_state = "[initial(icon_state)]_cut"
+
+/obj/item/screwdriver/omni_drill/attack_self(mob/user, modifiers)
+ . = ..()
+ if(!user)
+ return
+ var/list/tool_list = list(
+ "Screwdriver" = image(icon = icon, icon_state = "drill"),
+ "Wrench" = image(icon = icon, icon_state = "drill_bolt"),
+ "Wirecutters" = image(icon = icon, icon_state = "drill_cut"),
+ )
+ var/tool_result = show_radial_menu(user, src, tool_list, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE)
+ if(!check_menu(user) || !tool_result)
+ return
+ switch(tool_result)
+ if("Wrench")
+ tool_behaviour = TOOL_WRENCH
+ sharpness = NONE
+ if("Wirecutters")
+ tool_behaviour = TOOL_WIRECUTTER
+ sharpness = NONE
+ if("Screwdriver")
+ tool_behaviour = TOOL_SCREWDRIVER
+ sharpness = SHARP_POINTY
+ playsound(src, 'sound/items/change_drill.ogg', 50, vary = TRUE)
+ update_appearance(UPDATE_ICON)
+
+/obj/item/screwdriver/omni_drill/proc/check_menu(mob/user)
+ if(!istype(user))
+ return FALSE
+ if(user.incapacitated() || !user.Adjacent(src))
+ return FALSE
+ return TRUE
+
+// Just a completely normal crowbar except its normal sized and can force doors like jaws of life can
+
+/obj/item/crowbar/large/doorforcer
+ name = "prybar"
+ desc = "A large, sturdy crowbar, painted orange. This one just happens to be tough enough to \
+ survive forcing doors open."
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi'
+ icon_state = "prybar"
+ toolspeed = 1
+ force_opens = TRUE
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75,
+ /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+
+/obj/item/crowbar/large/doorforcer/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+
+// Backpackable mining drill
+
+/obj/item/pickaxe/drill/compact
+ name = "compact mining drill"
+ desc = "A powered mining drill, it drills all over the place. Compact enough to hopefully fit in a backpack."
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi'
+ icon_state = "drilla"
+ worn_icon_state = "drill"
+ w_class = WEIGHT_CLASS_NORMAL
+ toolspeed = 0.6
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3,
+ /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+
+/obj/item/pickaxe/drill/compact/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+
+// Electric welder but not quite as strong
+
+/obj/item/weldingtool/electric/arc_welder
+ name = "arc welding tool"
+ desc = "A specialized welding tool utilizing high powered arcs of electricity to weld things together. \
+ Compared to other electrically-powered welders, this model is slow and highly power inefficient, \
+ but it still gets the job done and chances are you printed this bad boy off for free."
+ icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi'
+ icon_state = "arc_welder"
+ usesound = list(
+ 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav',
+ 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav',
+ 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav',
+ 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav',
+ )
+ light_range = 2
+ light_power = 0.75
+ toolspeed = 1
+ power_use_amount = POWER_CELL_USE_INSANE
+
+/obj/item/weldingtool/electric/arc_welder/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
diff --git a/modular_skyrat/modules/colony_fabricator/icons/cell_charger.dmi b/modular_skyrat/modules/colony_fabricator/icons/cell_charger.dmi
new file mode 100644
index 00000000000..16ec75ba35c
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/icons/cell_charger.dmi differ
diff --git a/modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi b/modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi
new file mode 100644
index 00000000000..c8533ee3e1e
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi differ
diff --git a/modular_skyrat/modules/colony_fabricator/icons/machines.dmi b/modular_skyrat/modules/colony_fabricator/icons/machines.dmi
new file mode 100644
index 00000000000..389432e376e
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/icons/machines.dmi differ
diff --git a/modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi b/modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi
new file mode 100644
index 00000000000..8e7c4dbd737
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi differ
diff --git a/modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi b/modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi
new file mode 100644
index 00000000000..9e4fd1a29cc
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi differ
diff --git a/modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi b/modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi
new file mode 100644
index 00000000000..dce9d878154
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi differ
diff --git a/modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi b/modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi
new file mode 100644
index 00000000000..305c4c43edb
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi differ
diff --git a/modular_skyrat/modules/colony_fabricator/icons/tools.dmi b/modular_skyrat/modules/colony_fabricator/icons/tools.dmi
new file mode 100644
index 00000000000..e1e7a12bc7d
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/icons/tools.dmi differ
diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav b/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav
new file mode 100644
index 00000000000..b26fa32ed9d
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav differ
diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav b/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav
new file mode 100644
index 00000000000..8b30d09b81e
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav differ
diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav b/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav
new file mode 100644
index 00000000000..71621213d79
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav differ
diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav b/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav
new file mode 100644
index 00000000000..95f9dc385e5
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav differ
diff --git a/modular_skyrat/modules/colony_fabricator/sound/attributions.txt b/modular_skyrat/modules/colony_fabricator/sound/attributions.txt
new file mode 100644
index 00000000000..e9c05e68c01
--- /dev/null
+++ b/modular_skyrat/modules/colony_fabricator/sound/attributions.txt
@@ -0,0 +1,10 @@
+The following sounds have been recorded, edited and added by Paxilmaniac:
+
+modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_(1 - 4).wav
+modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_(1 - 4).wav
+modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav
+modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav
+
+The following sounds are from https://pixabay.com/sound-effects/wall-air-conditioner-43901/
+
+modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_(1 - 4).wav
diff --git a/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_1.wav b/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_1.wav
new file mode 100644
index 00000000000..e014af99119
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_1.wav differ
diff --git a/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_2.wav b/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_2.wav
new file mode 100644
index 00000000000..a99f8a939ad
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_2.wav differ
diff --git a/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_3.wav b/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_3.wav
new file mode 100644
index 00000000000..1f798b05a2d
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_3.wav differ
diff --git a/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_4.wav b/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_4.wav
new file mode 100644
index 00000000000..88f57ec4f00
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_4.wav differ
diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav
new file mode 100644
index 00000000000..90e16a116fb
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav differ
diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav
new file mode 100644
index 00000000000..5a70874cda7
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav differ
diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav
new file mode 100644
index 00000000000..a8ea099036c
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav differ
diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav
new file mode 100644
index 00000000000..b5d0a0117c5
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav differ
diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav
new file mode 100644
index 00000000000..1700b0fc379
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav differ
diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav
new file mode 100644
index 00000000000..673a9da8b41
Binary files /dev/null and b/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav differ
diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/akh_frontier.dm b/modular_skyrat/modules/company_imports/code/armament_datums/akh_frontier.dm
new file mode 100644
index 00000000000..b819b6a90fa
--- /dev/null
+++ b/modular_skyrat/modules/company_imports/code/armament_datums/akh_frontier.dm
@@ -0,0 +1,82 @@
+/datum/armament_entry/company_import/akh_frontier
+ category = FRONTIER_EQUIPMENT_NAME
+ company_bitflag = CARGO_COMPANY_FRONTIER_EQUIPMENT
+
+// Tools that you could use the rapid fabricator for, but you're too lazy to actually do that
+
+/datum/armament_entry/company_import/akh_frontier/basic
+ subcategory = "Hand-Held Equipment"
+ cost = PAYCHECK_COMMAND
+
+/datum/armament_entry/company_import/akh_frontier/basic/omni_drill
+ item_type = /obj/item/screwdriver/omni_drill
+
+/datum/armament_entry/company_import/akh_frontier/basic/prybar
+ item_type = /obj/item/crowbar/large/doorforcer
+ restricted = TRUE
+
+/datum/armament_entry/company_import/akh_frontier/basic/arc_welder
+ item_type = /obj/item/weldingtool/electric/arc_welder
+
+/datum/armament_entry/company_import/akh_frontier/basic/compact_drill
+ item_type = /obj/item/pickaxe/drill/compact
+
+// Flatpacked fabricator and related upgrades
+
+/datum/armament_entry/company_import/akh_frontier/deployables_fab
+ subcategory = "Deployable Fabrication Equipment"
+
+/datum/armament_entry/company_import/akh_frontier/deployables_fab/rapid_construction_fabricator
+ item_type = /obj/item/flatpacked_machine
+ cost = CARGO_CRATE_VALUE * 6
+
+// Various smaller appliances than the deployable machines below
+
+/datum/armament_entry/company_import/akh_frontier/appliances
+ subcategory = "Appliances"
+ cost = PAYCHECK_COMMAND
+
+/datum/armament_entry/company_import/akh_frontier/appliances/charger
+ item_type = /obj/item/wallframe/cell_charger_multi
+ cost = PAYCHECK_CREW
+
+/datum/armament_entry/company_import/akh_frontier/appliances/water_synth
+ item_type = /obj/item/flatpacked_machine/water_synth
+
+// Flatpacked, ready to deploy machines
+
+/datum/armament_entry/company_import/akh_frontier/deployables_misc
+ subcategory = "Deployable General Equipment"
+ cost = PAYCHECK_COMMAND
+
+/datum/armament_entry/company_import/akh_frontier/deployables_misc/arc_furnace
+ item_type = /obj/item/flatpacked_machine/arc_furnace
+
+/datum/armament_entry/company_import/akh_frontier/deployables_misc/thermomachine
+ item_type = /obj/item/flatpacked_machine/thermomachine
+
+// Flatpacked, ready to deploy machines for power related activities
+
+/datum/armament_entry/company_import/akh_frontier/deployables
+ subcategory = "Deployable Power Equipment"
+ cost = PAYCHECK_COMMAND
+
+/datum/armament_entry/company_import/akh_frontier/deployables/solar
+ item_type = /obj/item/flatpacked_machine/solar
+ cost = PAYCHECK_CREW
+
+/datum/armament_entry/company_import/akh_frontier/deployables/solar_tracker
+ item_type = /obj/item/flatpacked_machine/solar_tracker
+ cost = PAYCHECK_CREW
+
+/datum/armament_entry/company_import/akh_frontier/deployables/station_battery
+ item_type = /obj/item/flatpacked_machine/station_battery
+
+/datum/armament_entry/company_import/akh_frontier/deployables/big_station_battery
+ item_type = /obj/item/flatpacked_machine/large_station_battery
+
+/datum/armament_entry/company_import/akh_frontier/deployables/solids_generator
+ item_type = /obj/item/flatpacked_machine/fuel_generator
+
+/datum/armament_entry/company_import/akh_frontier/deployables/rtg
+ item_type = /obj/item/flatpacked_machine/rtg
diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/nakamura_tools.dm b/modular_skyrat/modules/company_imports/code/armament_datums/nakamura_tools.dm
deleted file mode 100644
index dded1ac084e..00000000000
--- a/modular_skyrat/modules/company_imports/code/armament_datums/nakamura_tools.dm
+++ /dev/null
@@ -1,86 +0,0 @@
-/datum/armament_entry/company_import/nakamura_tooling
- category = NAKAMURA_ENGINEERING_TOOLING_NAME
- company_bitflag = CARGO_COMPANY_NAKAMURA_TOOLING
-
-// Basic, non-power tools, as well as other related equipment
-
-/datum/armament_entry/company_import/nakamura_tooling/basic
- subcategory = "Standard Engineering Equipment"
-
-/datum/armament_entry/company_import/nakamura_tooling/basic/mechanical_toolbox
- item_type = /obj/item/storage/toolbox/mechanical
- cost = PAYCHECK_COMMAND * 2
-
-/datum/armament_entry/company_import/nakamura_tooling/basic/electrical_toolbox
- item_type = /obj/item/storage/toolbox/electrical
- cost = PAYCHECK_CREW * 3
-
-/datum/armament_entry/company_import/nakamura_tooling/basic/multitool
- item_type = /obj/item/multitool
- cost = PAYCHECK_LOWER
-
-/datum/armament_entry/company_import/nakamura_tooling/basic/inducer
- item_type = /obj/item/inducer
- cost = PAYCHECK_COMMAND
-
-/datum/armament_entry/company_import/nakamura_tooling/basic/magboots
- item_type = /obj/item/clothing/shoes/magboots
- cost = PAYCHECK_CREW
-
-/datum/armament_entry/company_import/nakamura_tooling/basic/insuls
- item_type = /obj/item/clothing/gloves/color/yellow
- cost = PAYCHECK_COMMAND
-
-// Advanced stuff like power tools and holofans
-
-/datum/armament_entry/company_import/nakamura_tooling/advanced
- subcategory = "Advanced Engineering Equipment"
- restricted = TRUE
- cost = PAYCHECK_COMMAND * 3
-
-/datum/armament_entry/company_import/nakamura_tooling/advanced/ranged_analyzer
- item_type = /obj/item/analyzer/ranged
- cost = PAYCHECK_COMMAND
-
-/datum/armament_entry/company_import/nakamura_tooling/advanced/forcefield
- item_type = /obj/item/forcefield_projector
- cost = PAYCHECK_COMMAND
-
-/datum/armament_entry/company_import/nakamura_tooling/advanced/atmos_fan
- item_type = /obj/item/holosign_creator/atmos
- cost = PAYCHECK_COMMAND
-
-/datum/armament_entry/company_import/nakamura_tooling/advanced/powerdrill
- item_type = /obj/item/screwdriver/power
-
-/datum/armament_entry/company_import/nakamura_tooling/advanced/jaws
- item_type = /obj/item/crowbar/power
-
-/datum/armament_entry/company_import/nakamura_tooling/advanced/hugewelder
- item_type = /obj/item/weldingtool/hugetank
-
-// Overpriced experimental or gimmick tools
-
-/datum/armament_entry/company_import/nakamura_tooling/experimental
- subcategory = "Experimental Engineering Equipment"
- cost = PAYCHECK_COMMAND * 8
- restricted = TRUE
-
-/datum/armament_entry/company_import/nakamura_tooling/experimental/sprayon_insuls
- item_type = /obj/item/toy/sprayoncan
- contraband = TRUE
-
-/datum/armament_entry/company_import/nakamura_tooling/experimental/red_screwdriver
- item_type = /obj/item/screwdriver/caravan
-
-/datum/armament_entry/company_import/nakamura_tooling/experimental/red_crowbar
- item_type = /obj/item/crowbar/red/caravan
-
-/datum/armament_entry/company_import/nakamura_tooling/experimental/red_wirecutters
- item_type = /obj/item/wirecutters/caravan
-
-/datum/armament_entry/company_import/nakamura_tooling/experimental/red_wrench
- item_type = /obj/item/wrench/caravan
-
-/datum/armament_entry/company_import/nakamura_tooling/experimental/advanced_welder
- item_type = /obj/item/weldingtool/advanced
diff --git a/modular_skyrat/modules/company_imports/code/company_datums.dm b/modular_skyrat/modules/company_imports/code/company_datums.dm
index 263c8214ffc..038f91956ab 100644
--- a/modular_skyrat/modules/company_imports/code/company_datums.dm
+++ b/modular_skyrat/modules/company_imports/code/company_datums.dm
@@ -72,13 +72,10 @@
cost_change_lower = -1000
cost_change_upper = 3000
-// Nakamura engineering's tooling division, sells tools, possibly even advanced ones
-/datum/cargo_company/nakamura_tooling
- name = NAKAMURA_ENGINEERING_TOOLING_NAME
- company_flag = CARGO_COMPANY_NAKAMURA_TOOLING
- cost = 6000
- cost_change_lower = -1000
- cost_change_upper = 3000
+// Sells unique construction supplies that the station can't normally obtain
+/datum/cargo_company/akh_frontier
+ name = FRONTIER_EQUIPMENT_NAME
+ company_flag = CARGO_COMPANY_FRONTIER_EQUIPMENT
// A coalition between nt and bolt to sell personal defense equipment and weapons
/datum/cargo_company/nanotrasen_bolt_weapons
diff --git a/modular_skyrat/modules/huds/code/designs.dm b/modular_skyrat/modules/huds/code/designs.dm
index bb5382f914f..d4f0586ada9 100644
--- a/modular_skyrat/modules/huds/code/designs.dm
+++ b/modular_skyrat/modules/huds/code/designs.dm
@@ -62,7 +62,7 @@
name = "Prescription Engineering Scanner Goggles"
desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, regardless of lighting condition. The T-ray Scanner mode lets you see underfloor objects such as cables and pipes. Prescription lens has been added into this design."
id = "engine_goggles_prescription"
- build_type = PROTOLATHE | AWAY_LATHE
+ build_type = PROTOLATHE | AWAY_LATHE | COLONY_FABRICATOR
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, /datum/material/plasma = SMALL_MATERIAL_AMOUNT, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4)
build_path = /obj/item/clothing/glasses/meson/engine/prescription
category = list(
diff --git a/modular_skyrat/modules/multicellcharger/code/multi_cell_charger.dm b/modular_skyrat/modules/multicellcharger/code/multi_cell_charger.dm
index 16019c588c6..6f1aa8383ab 100644
--- a/modular_skyrat/modules/multicellcharger/code/multi_cell_charger.dm
+++ b/modular_skyrat/modules/multicellcharger/code/multi_cell_charger.dm
@@ -3,6 +3,7 @@
desc = "A cell charging rack for multiple batteries."
icon = 'modular_skyrat/modules/aesthetics/cells/cell.dmi'
icon_state = "cchargermulti"
+ base_icon_state = "cchargermulti"
use_power = IDLE_POWER_USE
idle_power_usage = 5
active_power_usage = 60
@@ -24,8 +25,8 @@
for(var/i = charging_batteries.len, i >= 1, i--)
var/obj/item/stock_parts/cell/charging = charging_batteries[i]
var/newlevel = round(charging.percent() * 4 / 100)
- var/mutable_appearance/charge_overlay = mutable_appearance(icon, "cchargermulti-o[newlevel]")
- var/mutable_appearance/cell_overlay = mutable_appearance(icon, "cchargermulti-cell")
+ var/mutable_appearance/charge_overlay = mutable_appearance(icon, "[base_icon_state]-o[newlevel]")
+ var/mutable_appearance/cell_overlay = mutable_appearance(icon, "[base_icon_state]-cell")
charge_overlay.pixel_x = 5 * (i - 1)
cell_overlay.pixel_x = 5 * (i - 1)
. += new /mutable_appearance(charge_overlay)
diff --git a/modular_skyrat/modules/polarized_windows/polarizer.dm b/modular_skyrat/modules/polarized_windows/polarizer.dm
index eb09d5072ad..351815dd102 100644
--- a/modular_skyrat/modules/polarized_windows/polarizer.dm
+++ b/modular_skyrat/modules/polarized_windows/polarizer.dm
@@ -50,7 +50,7 @@
/datum/design/polarizer
name = "Window Polarization Remote Controller"
id = "polarizer"
- build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE
+ build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE | COLONY_FABRICATOR
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT)
build_path = /obj/item/assembly/control/polarizer
category = list(
diff --git a/tgstation.dme b/tgstation.dme
index 442d0cd7b46..03f9da38801 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1,4 +1,3 @@
-// DM Environment file for tgstation.dme.
// All manual changes should be made outside the BEGIN_ and END_ blocks.
// New source code should be placed in .dm files: choose File/New --> Code File.
// BEGIN_INTERNALS
@@ -396,6 +395,7 @@
#include "code\__DEFINES\~skyrat_defines\cells.dm"
#include "code\__DEFINES\~skyrat_defines\chat.dm"
#include "code\__DEFINES\~skyrat_defines\clock_cult.dm"
+#include "code\__DEFINES\~skyrat_defines\colony_fabricator_misc.dm"
#include "code\__DEFINES\~skyrat_defines\colors.dm"
#include "code\__DEFINES\~skyrat_defines\combat.dm"
#include "code\__DEFINES\~skyrat_defines\computers.dm"
@@ -6621,16 +6621,38 @@
#include "modular_skyrat\modules\clock_cult\code\structures\traps\senders\pressure_sensor.dm"
#include "modular_skyrat\modules\cme\code\_cme_defines.dm"
#include "modular_skyrat\modules\cme\code\cme.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\colony_fabricator.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\looping_sounds.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\repacking_element.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\appliances\chem_machines.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\appliances\wall_cell_charger.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\design_datums\appliances.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\design_datums\equipment.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\design_datums\flatpack_machines.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\design_datums\tools.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\computer_board.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\construction.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\equipment.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\machine_boards.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\stock_parts.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\design_datums\fabricator_flag_additions\tools.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\machines\arc_furnace.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\machines\power_storage_unit.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\machines\rtg.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\machines\solar_panels.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\machines\solid_fuel_generator.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\machines\thermomachine.dm"
+#include "modular_skyrat\modules\colony_fabricator\code\tools\tools.dm"
#include "modular_skyrat\modules\command_vendor\code\vending.dm"
#include "modular_skyrat\modules\company_imports\code\armament_component.dm"
#include "modular_skyrat\modules\company_imports\code\company_datums.dm"
#include "modular_skyrat\modules\company_imports\code\armament_datums\_armament_basetype.dm"
+#include "modular_skyrat\modules\company_imports\code\armament_datums\akh_frontier.dm"
#include "modular_skyrat\modules\company_imports\code\armament_datums\deforest_medical.dm"
#include "modular_skyrat\modules\company_imports\code\armament_datums\jarnsmiour.dm"
#include "modular_skyrat\modules\company_imports\code\armament_datums\kahraman_industries.dm"
#include "modular_skyrat\modules\company_imports\code\armament_datums\microstar_energy.dm"
#include "modular_skyrat\modules\company_imports\code\armament_datums\nakamura_modsuits.dm"
-#include "modular_skyrat\modules\company_imports\code\armament_datums\nakamura_tools.dm"
#include "modular_skyrat\modules\company_imports\code\armament_datums\nri_military_surplus.dm"
#include "modular_skyrat\modules\company_imports\code\armament_datums\put_a_donk_on_it.dm"
#include "modular_skyrat\modules\company_imports\code\armament_datums\sol_defense.dm"