From 51851e9ec50c5d6d7afe1265e0b8dcfe5e2457bf Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 4 Jan 2016 18:23:41 -0500 Subject: [PATCH 1/2] Constructible Chem Master --- code/game/machinery/constructable_frame.dm | 10 +++ code/modules/reagents/Chemistry-Machinery.dm | 84 +++++++++++++++++-- .../research/designs/machine_designs.dm | 10 +++ 3 files changed, 95 insertions(+), 9 deletions(-) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index ba75e86b005..f4c6cc90c57 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -466,6 +466,16 @@ to destroy them and players will be able to make replacements. /obj/item/weapon/stock_parts/console_screen = 1, /obj/item/weapon/stock_parts/cell = 1) +/obj/item/weapon/circuitboard/chem_master + name = "circuit board (Chem Master 2999)" + build_path = /obj/machinery/chem_master/constructable + board_type = "machine" + origin_tech = "materials=2;programming=2;biotech=1" + req_components = list( + /obj/item/weapon/reagent_containers/glass/beaker = 2, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/console_screen = 1) + /obj/item/weapon/circuitboard/chem_heater name = "circuit board (Chemical Heater)" build_path = /obj/machinery/chem_heater diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 0e7199645c9..e306157bb81 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -14,7 +14,7 @@ var/energy = 100 var/max_energy = 100 var/amount = 30 - var/beaker = null + var/obj/item/weapon/reagent_containers/beaker = null var/recharged = 0 var/hackedcheck = 0 var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine", @@ -123,15 +123,15 @@ var beakerContents[0] var beakerCurrentVolume = 0 - if(beaker && beaker:reagents && beaker:reagents.reagent_list.len) - for(var/datum/reagent/R in beaker:reagents.reagent_list) + if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) + for(var/datum/reagent/R in beaker.reagents.reagent_list) beakerContents.Add(list(list("name" = R.name, "id"=R.id, "volume" = R.volume))) // list in a list because Byond merges the first list... beakerCurrentVolume += R.volume data["beakerContents"] = beakerContents if (beaker) data["beakerCurrentVolume"] = beakerCurrentVolume - data["beakerMaxVolume"] = beaker:volume + data["beakerMaxVolume"] = beaker.volume else data["beakerCurrentVolume"] = null data["beakerMaxVolume"] = null @@ -385,7 +385,7 @@ icon_state = "mixer0" use_power = 1 idle_power_usage = 20 - var/beaker = null + var/obj/item/weapon/reagent_containers/beaker = null var/obj/item/weapon/storage/pill_bottle/loaded_pill_bottle = null var/mode = 0 var/condi = 0 @@ -483,7 +483,7 @@ P.info += "Time of analysis: [worldtime2text(world.time)]

" P.info += "Chemical name: [href_list["name"]]
" if(href_list["name"] == "Blood") - var/datum/reagents/R = beaker:reagents + var/datum/reagents/R = beaker.reagents var/datum/reagent/blood/G for(var/datum/reagent/F in R.reagent_list) if(F.name == href_list["name"]) @@ -499,7 +499,7 @@ src.printing = null if(beaker) - var/datum/reagents/R = beaker:reagents + var/datum/reagents/R = beaker.reagents if (href_list["analyze"]) var/dat = "" if(!condi) @@ -562,7 +562,7 @@ return else if (href_list["eject"]) if(beaker) - beaker:loc = src.loc + beaker.forceMove(get_turf(src)) beaker = null reagents.clear_reagents() icon_state = "mixer0" @@ -695,7 +695,7 @@ dat += "No pill bottle inserted.

" dat += "Close" else - var/datum/reagents/R = beaker:reagents + var/datum/reagents/R = beaker.reagents dat += "Eject beaker and Clear Buffer
" if(src.loaded_pill_bottle) dat += "Eject Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.storage_slots]\]

" @@ -759,6 +759,72 @@ name = "\improper CondiMaster 3000" condi = 1 +/obj/machinery/chem_master/constructable + name = "ChemMaster 2999" + desc = "Used to seperate chemicals and distribute them in a variety of forms." + +/obj/machinery/chem_master/constructable/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/chem_master(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null) + component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null) + +/obj/machinery/chem_master/constructable/attackby(obj/item/B, mob/user, params) + + if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", B)) + if(beaker) + beaker.forceMove(get_turf(src)) + beaker = null + reagents.clear_reagents() + if(loaded_pill_bottle) + loaded_pill_bottle.forceMove(get_turf(src)) + loaded_pill_bottle = null + return + + if(exchange_parts(user, B)) + return + + if(panel_open) + if(istype(B, /obj/item/weapon/crowbar)) + default_deconstruction_crowbar(B) + return 1 + else + user << "You can't use the [src.name] while it's panel is opened!" + return 1 + + if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B, /obj/item/weapon/reagent_containers/food/drinks/drinkingglass)) + + if(beaker) + user << "A beaker is already loaded into the machine." + return + if(!user.drop_item()) + user << "\The [B] is stuck to you!" + return + beaker = B + B.forceMove(src) + user << "You add the beaker to the machine!" + src.updateUsrDialog() + icon_state = "mixer1" + + else if(istype(B, /obj/item/weapon/storage/pill_bottle)) + + if(loaded_pill_bottle) + user << "A pill bottle is already loaded into the machine." + return + + if(!user.drop_item()) + user << "\The [B] is stuck to you!" + return + loaded_pill_bottle = B + B.forceMove(src) + user << "You add the pill bottle into the dispenser slot!" + src.updateUsrDialog() + + return + /obj/machinery/reagentgrinder name = "\improper All-In-One Grinder" diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 8caa9af8b12..fb97c2b693c 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -152,6 +152,16 @@ build_path = /obj/item/weapon/circuitboard/chem_dispenser category = list("Medical Machinery") +/datum/design/chem_master + name = "Machine Design (Chem Master Board)" + desc = "The circuit board for a Chem Master 2999." + id = "chem_master" + req_tech = list("biotech" = 1, "materials" = 2, "programming" = 2) + build_type = IMPRINTER + materials = list(MAT_GLASS = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/chem_master + category = list("Medical Machinery") + /datum/design/chem_heater name = "Machine Design (Chemical Heater Board)" desc = "The circuit board for a chemical heater." From 550aef34ba802a1475c210673957ef67bb128c77 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 4 Jan 2016 21:54:47 -0500 Subject: [PATCH 2/2] less copy-paste --- code/modules/reagents/Chemistry-Machinery.dm | 32 ++------------------ 1 file changed, 2 insertions(+), 30 deletions(-) diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index e306157bb81..f9c8dead1b8 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -794,36 +794,8 @@ else user << "You can't use the [src.name] while it's panel is opened!" return 1 - - if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B, /obj/item/weapon/reagent_containers/food/drinks/drinkingglass)) - - if(beaker) - user << "A beaker is already loaded into the machine." - return - if(!user.drop_item()) - user << "\The [B] is stuck to you!" - return - beaker = B - B.forceMove(src) - user << "You add the beaker to the machine!" - src.updateUsrDialog() - icon_state = "mixer1" - - else if(istype(B, /obj/item/weapon/storage/pill_bottle)) - - if(loaded_pill_bottle) - user << "A pill bottle is already loaded into the machine." - return - - if(!user.drop_item()) - user << "\The [B] is stuck to you!" - return - loaded_pill_bottle = B - B.forceMove(src) - user << "You add the pill bottle into the dispenser slot!" - src.updateUsrDialog() - - return + else + ..() /obj/machinery/reagentgrinder