diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm
index 146d3bf27f0..160fa30a5c6 100644
--- a/code/__DEFINES/machines.dm
+++ b/code/__DEFINES/machines.dm
@@ -22,6 +22,7 @@
#define MECHFAB 16 //Remember, objects utilising this flag should have construction_time and construction_cost vars.
#define PODFAB 32 //Used by the spacepod part fabricator. Same idea as the mechfab
#define BIOGENERATOR 64 //Uses biomass
+#define SMELTER 128 //uses various minerals
//Note: More then one of these can be added to a design but imprinter and lathe designs are incompatable.
#define HYDRO_SPEED_MULTIPLIER 1
diff --git a/code/modules/mining/machine_input_output_plates.dm b/code/modules/mining/machine_input_output_plates.dm
deleted file mode 100644
index 7d28cedb3da..00000000000
--- a/code/modules/mining/machine_input_output_plates.dm
+++ /dev/null
@@ -1,29 +0,0 @@
-/**********************Input and output plates**************************/
-
-/obj/machinery/mineral/input
- icon = 'icons/mob/screen_gen.dmi'
- icon_state = "x2"
- name = "Input area"
- density = 0
- anchored = 1.0
- New()
- icon_state = "blank"
-
-/obj/machinery/mineral/output
- icon = 'icons/mob/screen_gen.dmi'
- icon_state = "x"
- name = "Output area"
- density = 0
- anchored = 1.0
- New()
- icon_state = "blank"
-
-/obj/machinery/mineral
- var/input_dir = NORTH
- var/output_dir = SOUTH
-
-/obj/machinery/mineral/proc/unload_mineral(var/atom/movable/S)
- S.loc = loc
- var/turf/T = get_step(src,output_dir)
- if(T)
- S.loc = T
\ No newline at end of file
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index bd7d7dbee9b..800e21b1d42 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -1,201 +1,69 @@
+#define SMELT_AMOUNT 10
+
/**********************Mineral processing unit console**************************/
+/obj/machinery/mineral
+ var/input_dir = NORTH
+ var/output_dir = SOUTH
+
+/obj/machinery/mineral/proc/unload_mineral(atom/movable/S)
+ S.forceMove(loc)
+ var/turf/T = get_step(src,output_dir)
+ if(T)
+ S.forceMove(T)
+
/obj/machinery/mineral/processing_unit_console
name = "production machine console"
icon = 'icons/obj/machines/mining_machines.dmi'
icon_state = "console"
- density = 1
- anchored = 1
+ density = TRUE
+ anchored = TRUE
var/obj/machinery/mineral/processing_unit/machine = null
var/machinedir = EAST
/obj/machinery/mineral/processing_unit_console/New()
..()
- spawn(7)
- src.machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir))
- if(machine)
- machine.CONSOLE = src
- else
- qdel(src)
-
-/obj/machinery/mineral/processing_unit_console/attack_hand(user as mob)
-
- var/dat = "Smelter control console
"
- //iron
- if(machine.ore_iron || machine.ore_glass || machine.ore_plasma || machine.ore_uranium || machine.ore_gold || machine.ore_silver || machine.ore_diamond || machine.ore_clown || machine.ore_mime || machine.ore_adamantine)
- if(machine.ore_iron)
- if(machine.selected_iron==1)
- dat += "Smelting "
- else
- dat += "Not smelting "
- dat += "Iron: [machine.ore_iron]
"
- else
- machine.selected_iron = 0
-
- //sand - glass
- if(machine.ore_glass)
- if(machine.selected_glass==1)
- dat += "Smelting "
- else
- dat += "Not smelting "
- dat += "Sand: [machine.ore_glass]
"
- else
- machine.selected_glass = 0
-
- //plasma
- if(machine.ore_plasma)
- if(machine.selected_plasma==1)
- dat += "Smelting "
- else
- dat += "Not smelting "
- dat += "Plasma: [machine.ore_plasma]
"
- else
- machine.selected_plasma = 0
-
- //uranium
- if(machine.ore_uranium)
- if(machine.selected_uranium==1)
- dat += "Smelting "
- else
- dat += "Not smelting "
- dat += "Uranium: [machine.ore_uranium]
"
- else
- machine.selected_uranium = 0
-
- //gold
- if(machine.ore_gold)
- if(machine.selected_gold==1)
- dat += "Smelting "
- else
- dat += "Not smelting "
- dat += "Gold: [machine.ore_gold]
"
- else
- machine.selected_gold = 0
-
- //silver
- if(machine.ore_silver)
- if(machine.selected_silver==1)
- dat += "Smelting "
- else
- dat += "Not smelting "
- dat += "Silver: [machine.ore_silver]
"
- else
- machine.selected_silver = 0
-
- //diamond
- if(machine.ore_diamond)
- if(machine.selected_diamond==1)
- dat += "Smelting "
- else
- dat += "Not smelting "
- dat += "Diamond: [machine.ore_diamond]
"
- else
- machine.selected_diamond = 0
-
- //bananium
- if(machine.ore_clown)
- if(machine.selected_clown==1)
- dat += "Smelting "
- else
- dat += "Not smelting "
- dat += "Bananium: [machine.ore_clown]
"
- else
- machine.selected_clown = 0
-
- //tranquillite
- if(machine.ore_mime)
- if(machine.selected_mime==1)
- dat += "Smelting "
- else
- dat += "Not smelting "
- dat += "Tranquillite: [machine.ore_mime]
"
- else
- machine.selected_mime = 0
-
- //titanium
- if(machine.ore_titanium)
- if (machine.selected_titanium==1)
- dat += "Smelting "
- else
- dat += "Not smelting "
- dat += "Titanium: [machine.ore_titanium]
"
- else
- machine.selected_titanium = 0
-
- //On or off
- dat += text("Machine is currently ")
- if(machine.on==1)
- dat += text("On ")
- else
- dat += text("Off ")
+ machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir))
+ if(machine)
+ machine.CONSOLE = src
else
- dat+="---No Materials Loaded---"
+ qdel(src)
+/obj/machinery/mineral/processing_unit_console/attack_hand(mob/user)
+ if(..())
+ return
+ if(!machine)
+ return
- user << browse("[dat]", "window=console_processing_unit")
+ var/dat = machine.get_machine_data()
+
+ var/datum/browser/popup = new(user, "processing", "Smelting Console", 300, 500)
+ popup.set_content(dat)
+ popup.open()
/obj/machinery/mineral/processing_unit_console/Topic(href, href_list)
if(..())
return
usr.set_machine(src)
- src.add_fingerprint(usr)
- if(href_list["sel_iron"])
- if(href_list["sel_iron"] == "yes")
- machine.selected_iron = 1
- else
- machine.selected_iron = 0
- if(href_list["sel_glass"])
- if(href_list["sel_glass"] == "yes")
- machine.selected_glass = 1
- else
- machine.selected_glass = 0
- if(href_list["sel_plasma"])
- if(href_list["sel_plasma"] == "yes")
- machine.selected_plasma = 1
- else
- machine.selected_plasma = 0
- if(href_list["sel_uranium"])
- if(href_list["sel_uranium"] == "yes")
- machine.selected_uranium = 1
- else
- machine.selected_uranium = 0
- if(href_list["sel_gold"])
- if(href_list["sel_gold"] == "yes")
- machine.selected_gold = 1
- else
- machine.selected_gold = 0
- if(href_list["sel_silver"])
- if(href_list["sel_silver"] == "yes")
- machine.selected_silver = 1
- else
- machine.selected_silver = 0
- if(href_list["sel_diamond"])
- if(href_list["sel_diamond"] == "yes")
- machine.selected_diamond = 1
- else
- machine.selected_diamond = 0
- if(href_list["sel_clown"])
- if(href_list["sel_clown"] == "yes")
- machine.selected_clown = 1
- else
- machine.selected_clown = 0
- if(href_list["sel_mime"])
- if(href_list["sel_mime"] == "yes")
- machine.selected_mime = 1
- else
- machine.selected_mime = 0
- if(href_list["sel_titanium"])
- if (href_list["sel_titanium"] == "yes")
- machine.selected_titanium = 1
- else
- machine.selected_titanium = 0
+ add_fingerprint(usr)
+
+ if(href_list["material"])
+ machine.selected_material = href_list["material"]
+ machine.selected_alloy = null
+
+ if(href_list["alloy"])
+ machine.selected_material = null
+ machine.selected_alloy = href_list["alloy"]
+
if(href_list["set_on"])
- if(href_list["set_on"] == "on")
- machine.on = 1
- else
- machine.on = 0
- src.updateUsrDialog()
- return
+ machine.on = (href_list["set_on"] == "on")
+
+ updateUsrDialog()
+
+/obj/machinery/mineral/processing_unit_console/Destroy()
+ machine = null
+ return ..()
+
/**********************Mineral processing unit**************************/
@@ -204,244 +72,140 @@
name = "furnace"
icon = 'icons/obj/machines/mining_machines.dmi'
icon_state = "furnace"
- density = 1
- anchored = 1
+ density = TRUE
+ anchored = TRUE
var/obj/machinery/mineral/CONSOLE = null
- var/ore_gold = 0
- var/ore_silver = 0
- var/ore_diamond = 0
- var/ore_glass = 0
- var/ore_plasma = 0
- var/ore_uranium = 0
- var/ore_iron = 0
- var/ore_clown = 0
- var/ore_mime = 0
- var/ore_adamantine = 0
- var/ore_titanium = 0
- var/selected_gold = 0
- var/selected_silver = 0
- var/selected_diamond = 0
- var/selected_glass = 0
- var/selected_plasma = 0
- var/selected_uranium = 0
- var/selected_iron = 0
- var/selected_clown = 0
- var/selected_mime = 0
- var/selected_titanium = 0
- var/on = 0 //0 = off, 1 =... oh you know!
+ var/on = FALSE
+ var/selected_material = MAT_METAL
+ var/selected_alloy = null
+ var/datum/research/files
+ speed_process = TRUE
+
+/obj/machinery/mineral/processing_unit/New()
+ ..()
+ AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE), INFINITY)
+ files = new /datum/research/smelter(src)
+
+/obj/machinery/mineral/processing_unit/Destroy()
+ CONSOLE = null
+ QDEL_NULL(files)
+ GET_COMPONENT(materials, /datum/component/material_container)
+ materials.retrieve_all()
+ return ..()
/obj/machinery/mineral/processing_unit/process()
- for(var/i in 1 to 10)
- if(on)
- if(selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime)
- if(ore_glass > 0)
- ore_glass--
- generate_mineral(/obj/item/stack/sheet/glass)
- else
- on = 0
- continue
- if(selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && selected_iron && !selected_clown && !selected_mime)
- if(ore_glass > 0 && ore_iron > 0)
- ore_glass--
- ore_iron--
- generate_mineral(/obj/item/stack/sheet/rglass)
- else
- on = 0
- continue
- if(!selected_glass && selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime)
- if(ore_gold > 0)
- ore_gold--
- generate_mineral(/obj/item/stack/sheet/mineral/gold)
- else
- on = 0
- continue
- if(!selected_glass && !selected_gold && selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime)
- if(ore_silver > 0)
- ore_silver--
- generate_mineral(/obj/item/stack/sheet/mineral/silver)
- else
- on = 0
- continue
- if(!selected_glass && !selected_gold && !selected_silver && selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime)
- if(ore_diamond > 0)
- ore_diamond--
- generate_mineral(/obj/item/stack/sheet/mineral/diamond)
- else
- on = 0
- continue
- if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime)
- if(ore_plasma > 0)
- ore_plasma--
- generate_mineral(/obj/item/stack/sheet/mineral/plasma)
- else
- on = 0
- continue
- if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && selected_uranium && !selected_iron && !selected_clown && !selected_mime)
- if(ore_uranium > 0)
- ore_uranium--
- generate_mineral(/obj/item/stack/sheet/mineral/uranium)
- else
- on = 0
- continue
- if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && selected_iron && !selected_clown && !selected_mime)
- if(ore_iron > 0)
- ore_iron--
- generate_mineral(/obj/item/stack/sheet/metal)
- else
- on = 0
- continue
- if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && selected_plasma && !selected_uranium && selected_iron && !selected_clown && !selected_mime)
- if(ore_iron > 0 && ore_plasma > 0)
- ore_iron--
- ore_plasma--
- generate_mineral(/obj/item/stack/sheet/plasteel)
- else
- on = 0
- continue
- if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && selected_clown && !selected_mime)
- if(ore_clown > 0)
- ore_clown--
- generate_mineral(/obj/item/stack/sheet/mineral/bananium)
- else
- on = 0
- continue
- if(!selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && selected_mime)
- if(ore_mime > 0)
- ore_mime--
- generate_mineral(/obj/item/stack/sheet/mineral/tranquillite)
- else
- on = 0
- continue
- if (!selected_glass && !selected_gold && !selected_silver && !selected_diamond && !selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime && selected_titanium)
- if (ore_titanium > 0)
- ore_titanium--
- generate_mineral(/obj/item/stack/sheet/mineral/titanium)
- else
- on = 0
- continue
- if (!selected_glass && !selected_gold && !selected_silver && !selected_diamond && selected_plasma && !selected_uranium && !selected_iron && !selected_clown && !selected_mime && selected_titanium)
- if (ore_titanium > 0)
- ore_titanium--
- ore_plasma--
- generate_mineral(/obj/item/stack/sheet/mineral/plastitanium)
- else
- on = 0
- continue
-
- //if a non valid combination is selected
-
- var/b = 1 //this part checks if all required ores are available
-
- if(!(selected_gold || selected_silver ||selected_diamond || selected_uranium | selected_plasma || selected_iron || selected_iron))
- b = 0
-
- if(selected_gold == 1)
- if(ore_gold <= 0)
- b = 0
- if(selected_silver == 1)
- if(ore_silver <= 0)
- b = 0
- if(selected_diamond == 1)
- if(ore_diamond <= 0)
- b = 0
- if(selected_uranium == 1)
- if(ore_uranium <= 0)
- b = 0
- if(selected_plasma == 1)
- if(ore_plasma <= 0)
- b = 0
- if(selected_iron == 1)
- if(ore_iron <= 0)
- b = 0
- if(selected_glass == 1)
- if(ore_glass <= 0)
- b = 0
- if(selected_clown == 1)
- if(ore_clown <= 0)
- b = 0
- if(selected_mime == 1)
- if(ore_mime <= 0)
- b = 0
- if(selected_titanium == 1)
- if(ore_titanium <= 0)
- b = 0
-
- if(b) //if they are, deduct one from each, produce slag and shut the machine off
- if(selected_gold == 1)
- ore_gold--
- if(selected_silver == 1)
- ore_silver--
- if(selected_diamond == 1)
- ore_diamond--
- if(selected_uranium == 1)
- ore_uranium--
- if(selected_plasma == 1)
- ore_plasma--
- if(selected_iron == 1)
- ore_iron--
- if(selected_clown == 1)
- ore_clown--
- if(selected_mime == 1)
- ore_mime--
- if(selected_titanium == 1)
- ore_titanium--
- generate_mineral(/obj/item/ore/slag)
- on = 0
- else
- on = 0
- break
- break
- else
- break
- var/turf/T = get_step(src,input_dir)
+ var/turf/T = get_step(src, input_dir)
if(T)
- var/n = 0
- for(var/obj/item/O in T)
- n++
- if(n>10)
- break
- if(istype(O,/obj/item/ore/iron))
- ore_iron++;
- O.loc = null
- continue
- if(istype(O,/obj/item/ore/glass))
- ore_glass++;
- O.loc = null
- continue
- if(istype(O,/obj/item/ore/diamond))
- ore_diamond++;
- O.loc = null
- continue
- if(istype(O,/obj/item/ore/plasma))
- ore_plasma++
- O.loc = null
- continue
- if(istype(O,/obj/item/ore/gold))
- ore_gold++
- O.loc = null
- continue
- if(istype(O,/obj/item/ore/silver))
- ore_silver++
- O.loc = null
- continue
- if(istype(O,/obj/item/ore/uranium))
- ore_uranium++
- O.loc = null
- continue
- if(istype(O,/obj/item/ore/bananium))
- ore_clown++
- O.loc = null
- continue
- if(istype(O,/obj/item/ore/tranquillite))
- ore_mime++
- O.loc = null
- continue
- if(istype(O,/obj/item/ore/titanium))
- ore_titanium++
- O.loc = null
- continue
- unload_mineral(O)
+ for(var/obj/item/ore/O in T)
+ process_ore(O)
+ CHECK_TICK
+ if(on)
+ if(selected_material)
+ smelt_ore()
-/obj/machinery/mineral/processing_unit/proc/generate_mineral(var/P)
+ else if(selected_alloy)
+ smelt_alloy()
+
+
+ if(CONSOLE)
+ CONSOLE.updateUsrDialog()
+
+
+/obj/machinery/mineral/processing_unit/proc/process_ore(obj/item/ore/O)
+ GET_COMPONENT(materials, /datum/component/material_container)
+ var/material_amount = materials.get_item_material_amount(O)
+ if(!materials.has_space(material_amount))
+ unload_mineral(O)
+ else
+ materials.insert_item(O)
+ qdel(O)
+ if(CONSOLE)
+ CONSOLE.updateUsrDialog()
+
+/obj/machinery/mineral/processing_unit/proc/get_machine_data()
+ var/dat = "Smelter control console
"
+ GET_COMPONENT(materials, /datum/component/material_container)
+ for(var/mat_id in materials.materials)
+ var/datum/material/M = materials.materials[mat_id]
+ dat += "[M.name]: [M.amount] cm³"
+ if(selected_material == mat_id)
+ dat += " Smelting"
+ else
+ dat += " Not Smelting "
+ dat += "
"
+
+ dat += "
"
+ dat += "Smelt Alloys
"
+
+ for(var/v in files.known_designs)
+ var/datum/design/D = files.known_designs[v]
+ dat += "[D.name] "
+ if(selected_alloy == D.id)
+ dat += " Smelting"
+ else
+ dat += " Not Smelting "
+ dat += "
"
+
+ dat += "
"
+ //On or off
+ dat += "Machine is currently "
+ if(on)
+ dat += "On "
+ else
+ dat += "Off "
+
+ return dat
+
+/obj/machinery/mineral/processing_unit/proc/smelt_ore()
+ GET_COMPONENT(materials, /datum/component/material_container)
+ var/datum/material/mat = materials.materials[selected_material]
+ if(mat)
+ var/sheets_to_remove = (mat.amount >= (MINERAL_MATERIAL_AMOUNT * SMELT_AMOUNT) ) ? SMELT_AMOUNT : round(mat.amount / MINERAL_MATERIAL_AMOUNT)
+ if(!sheets_to_remove)
+ on = FALSE
+ else
+ var/out = get_step(src, output_dir)
+ materials.retrieve_sheets(sheets_to_remove, selected_material, out)
+
+
+/obj/machinery/mineral/processing_unit/proc/smelt_alloy()
+ var/datum/design/alloy = files.FindDesignByID(selected_alloy) //check if it's a valid design
+ if(!alloy)
+ on = FALSE
+ return
+
+ var/amount = can_smelt(alloy)
+
+ if(!amount)
+ on = FALSE
+ return
+
+ GET_COMPONENT(materials, /datum/component/material_container)
+ materials.use_amount(alloy.materials, amount)
+
+ generate_mineral(alloy.build_path)
+
+/obj/machinery/mineral/processing_unit/proc/can_smelt(datum/design/D)
+ if(D.make_reagents.len)
+ return FALSE
+
+ var/build_amount = SMELT_AMOUNT
+
+ GET_COMPONENT(materials, /datum/component/material_container)
+
+ for(var/mat_id in D.materials)
+ var/M = D.materials[mat_id]
+ var/datum/material/smelter_mat = materials.materials[mat_id]
+
+ if(!M || !smelter_mat)
+ return FALSE
+
+ build_amount = min(build_amount, round(smelter_mat.amount / M))
+
+ return build_amount
+
+/obj/machinery/mineral/processing_unit/proc/generate_mineral(P)
var/O = new P(src)
unload_mineral(O)
+
+#undef SMELT_AMOUNT
\ No newline at end of file
diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm
index 2b1e0a3d805..9ec45ebc4d8 100644
--- a/code/modules/mining/machine_stacking.dm
+++ b/code/modules/mining/machine_stacking.dm
@@ -4,21 +4,21 @@
name = "stacking machine console"
icon = 'icons/obj/machines/mining_machines.dmi'
icon_state = "console"
- density = 0
- anchored = 1
+ desc = "Controls a stacking machine... in theory."
+ density = FALSE
+ anchored = TRUE
var/obj/machinery/mineral/stacking_machine/machine = null
var/machinedir = SOUTHEAST
/obj/machinery/mineral/stacking_unit_console/New()
..()
- spawn(7)
- src.machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir))
- if(machine)
- machine.CONSOLE = src
- else
- qdel(src)
+ machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir))
+ if(machine)
+ machine.CONSOLE = src
+ else
+ qdel(src)
-/obj/machinery/mineral/stacking_unit_console/attack_hand(user as mob)
+/obj/machinery/mineral/stacking_unit_console/attack_hand(mob/user)
var/obj/item/stack/sheet/s
var/dat
@@ -34,24 +34,21 @@
user << browse("[dat]", "window=console_stacking_machine")
- return
-
-
/obj/machinery/mineral/stacking_unit_console/Topic(href, href_list)
if(..())
return
usr.set_machine(src)
- src.add_fingerprint(usr)
+ add_fingerprint(usr)
if(href_list["release"])
- if(!(text2path(href_list["release"]) in machine.stack_list)) return //someone tried to spawn materials by spoofing hrefs
+ if(!(text2path(href_list["release"]) in machine.stack_list))
+ return //someone tried to spawn materials by spoofing hrefs
var/obj/item/stack/sheet/inp = machine.stack_list[text2path(href_list["release"])]
var/obj/item/stack/sheet/out = new inp.type()
out.amount = inp.amount
inp.amount = 0
machine.unload_mineral(out)
- src.updateUsrDialog()
- return
+ updateUsrDialog()
/**********************Mineral stacking unit**************************/
@@ -60,8 +57,9 @@
name = "stacking machine"
icon = 'icons/obj/machines/mining_machines.dmi'
icon_state = "stacker"
- density = 1
- anchored = 1.0
+ desc = "A machine that automatically stacks acquired materials. Controlled by a nearby console."
+ density = TRUE
+ anchored = TRUE
var/obj/machinery/mineral/stacking_unit_console/CONSOLE
var/stk_types = list()
var/stk_amt = list()
@@ -69,7 +67,14 @@
var/stack_amt = 50; //ammount to stack before releassing
input_dir = EAST
output_dir = WEST
- speed_process = 1
+ speed_process = TRUE
+
+/obj/machinery/mineral/stacking_machine/process()
+ var/turf/T = get_step(src, input_dir)
+ if(T)
+ for(var/obj/item/stack/sheet/S in T)
+ process_sheet(S)
+ CHECK_TICK
/obj/machinery/mineral/stacking_machine/proc/process_sheet(obj/item/stack/sheet/inp)
if(!(inp.type in stack_list)) //It's the first of this sheet added
@@ -83,11 +88,4 @@
var/obj/item/stack/sheet/out = new inp.type()
out.amount = stack_amt
unload_mineral(out)
- storage.amount -= stack_amt
-
-/obj/machinery/mineral/stacking_machine/process()
- var/turf/T = get_step(src, input_dir)
- if(T)
- for(var/obj/item/stack/sheet/S in T)
- process_sheet(S)
- CHECK_TICK
\ No newline at end of file
+ storage.amount -= stack_amt
\ No newline at end of file
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index b4cee216dbe..ca57d41119c 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -224,7 +224,7 @@
/datum/design/rglass
name = "Reinforced Glass"
id = "rglass"
- build_type = AUTOLATHE
+ build_type = AUTOLATHE | SMELTER
materials = list(MAT_METAL = 1000, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/rglass
category = list("initial","Construction")
diff --git a/code/modules/research/designs/smelting_designs.dm b/code/modules/research/designs/smelting_designs.dm
new file mode 100644
index 00000000000..45c6daf256d
--- /dev/null
+++ b/code/modules/research/designs/smelting_designs.dm
@@ -0,0 +1,37 @@
+///////SMELTABLE ALLOYS///////
+
+/datum/design/plasteel_alloy
+ name = "Plasma + Iron alloy"
+ id = "plasteel"
+ build_type = SMELTER
+ materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT)
+ build_path = /obj/item/stack/sheet/plasteel
+ category = list("initial")
+
+
+/datum/design/plastitanium_alloy
+ name = "Plasma + Titanium alloy"
+ id = "plastitanium"
+ build_type = SMELTER
+ materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT)
+ build_path = /obj/item/stack/sheet/mineral/plastitanium
+ category = list("initial")
+
+/datum/design/plaglass_alloy
+ name = "Plasma + Glass alloy"
+ id = "plasmaglass"
+ build_type = SMELTER
+ materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
+ build_path = /obj/item/stack/sheet/plasmaglass
+ category = list("initial")
+
+/datum/design/alienalloy
+ name = "Alien Alloy"
+ desc = "A sheet of reverse-engineered alien alloy."
+ id = "alienalloy"
+ req_tech = list("abductor" = 1, "materials" = 7, "plasmatech" = 2)
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 4000, MAT_PLASMA = 4000)
+ build_path = /obj/item/stack/sheet/mineral/abductor
+ category = list("Stock Parts")
+ lathe_time_factor = 5
\ No newline at end of file
diff --git a/code/modules/research/designs/stock_parts_designs.dm b/code/modules/research/designs/stock_parts_designs.dm
index c1f3dd75739..e32b79cc91b 100644
--- a/code/modules/research/designs/stock_parts_designs.dm
+++ b/code/modules/research/designs/stock_parts_designs.dm
@@ -248,17 +248,4 @@
build_type = PROTOLATHE
materials = list(MAT_METAL = 15000, MAT_GLASS = 5000, MAT_SILVER = 2500) //hardcore
build_path = /obj/item/storage/part_replacer/bluespace
- category = list("Stock Parts")
-
-//Alien Parts
-
-/datum/design/alienalloy
- name = "Alien Alloy"
- desc = "A sheet of reverse-engineered alien alloy."
- id = "alienalloy"
- req_tech = list("abductor" = 1, "materials" = 7, "plasmatech" = 2)
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 4000, MAT_PLASMA = 4000)
- build_path = /obj/item/stack/sheet/mineral/abductor
- category = list("Stock Parts")
- lathe_time_factor = 5
+ category = list("Stock Parts")
\ No newline at end of file
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 8f3df6ef37a..05038017aec 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -710,6 +710,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(b_type & MECHFAB) lathe_types += "Mech Fabricator"
if(b_type & PODFAB) lathe_types += "Spacepod Fabricator"
if(b_type & BIOGENERATOR) lathe_types += "Biogenerator"
+ if(b_type & SMELTER) lathe_types += "Smelter"
var/list/materials = list()
disk_data["materials"] = materials
for(var/M in d_disk.blueprint.materials)
diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm
index 88f5a3d940c..27497fcac9a 100644
--- a/code/modules/research/research.dm
+++ b/code/modules/research/research.dm
@@ -183,6 +183,21 @@ research holder datum.
return
..()
+//Smelter files
+/datum/research/smelter/New()
+ for(var/T in (subtypesof(/datum/tech)))
+ possible_tech += new T(src)
+ for(var/path in subtypesof(/datum/design))
+ var/datum/design/D = new path(src)
+ possible_designs += D
+ if((D.build_type & SMELTER) && ("initial" in D.category))
+ AddDesign2Known(D)
+
+/datum/research/smelter/AddDesign2Known(datum/design/D)
+ if(!(D.build_type & SMELTER))
+ return
+ ..()
+
/***************************************************************
** Technology Datums **
** Includes all the various technoliges and what they make. **
diff --git a/paradise.dme b/paradise.dme
index 83f25b5c819..2f14f014143 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1503,7 +1503,6 @@
#include "code\modules\mining\abandonedcrates.dm"
#include "code\modules\mining\coins.dm"
#include "code\modules\mining\equipment_locker.dm"
-#include "code\modules\mining\machine_input_output_plates.dm"
#include "code\modules\mining\machine_processing.dm"
#include "code\modules\mining\machine_stacking.dm"
#include "code\modules\mining\machine_unloading.dm"
@@ -2094,6 +2093,7 @@
#include "code\modules\research\designs\mining_designs.dm"
#include "code\modules\research\designs\misc_designs.dm"
#include "code\modules\research\designs\power_designs.dm"
+#include "code\modules\research\designs\smelting_designs.dm"
#include "code\modules\research\designs\spacepod_designs.dm"
#include "code\modules\research\designs\stock_parts_designs.dm"
#include "code\modules\research\designs\telecomms_designs.dm"