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"