From cdcb5fc72f34eb8a5276f214f4ab765ab0d66c4e Mon Sep 17 00:00:00 2001 From: Mokiros Date: Sun, 11 Feb 2018 03:00:06 +0300 Subject: [PATCH] Buildable and upgradable All-In-One Grinder (#35451) Circuit is in "Biological Processing" techweb node --- .../circuitboards/machine_circuitboards.dm | 6 ++++ .../chemistry/machinery/reagentgrinder.dm | 34 +++++++++++++++---- .../research/designs/machine_designs.dm | 7 ++++ code/modules/research/techweb/all_nodes.dm | 2 +- 4 files changed, 41 insertions(+), 8 deletions(-) diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 6c87257720..7fcc3e3f96 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -584,6 +584,12 @@ else return ..() +/obj/item/circuitboard/machine/reagentgrinder + name = "Machine Design (All-In-One Grinder)" + build_path = /obj/machinery/reagentgrinder/constructed + req_components = list( + /obj/item/stock_parts/manipulator = 1) + /obj/item/circuitboard/machine/chem_master/condi name = "CondiMaster 3000 (Machine Board)" build_path = /obj/machinery/chem_master/condimaster diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 7d4e244063..5930260dab 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -11,11 +11,13 @@ use_power = IDLE_POWER_USE idle_power_usage = 5 active_power_usage = 100 + circuit = /obj/item/circuitboard/machine/reagentgrinder pass_flags = PASSTABLE resistance_flags = ACID_PROOF var/operating = FALSE var/obj/item/reagent_containers/beaker = null var/limit = 10 + var/speed = 1 var/list/holdingitems /obj/machinery/reagentgrinder/Initialize() @@ -24,8 +26,15 @@ beaker = new /obj/item/reagent_containers/glass/beaker/large(src) beaker.desc += " May contain blended dust. Don't breathe this in!" -/obj/machinery/reagentgrinder/Destroy() +/obj/machinery/reagentgrinder/constructed/Initialize() + . = ..() + holdingitems = list() QDEL_NULL(beaker) + update_icon() + +/obj/machinery/reagentgrinder/Destroy() + if(beaker) + beaker.forceMove(drop_location()) drop_all_items() return ..() @@ -33,6 +42,11 @@ if(beaker) beaker.ex_act(severity, target) +/obj/machinery/reagentgrinder/RefreshParts() + speed = 1 + for(var/obj/item/stock_parts/manipulator/M in component_parts) + speed = M.rating + /obj/machinery/reagentgrinder/handle_atom_del(atom/A) . = ..() if(A == beaker) @@ -48,10 +62,6 @@ AM.forceMove(drop_location()) holdingitems = list() -/obj/machinery/reagentgrinder/deconstruct(disassembled = TRUE) - new /obj/item/stack/sheet/metal (drop_location(), 3) - qdel(src) - /obj/machinery/reagentgrinder/update_icon() if(beaker) icon_state = "juicer1" @@ -59,9 +69,19 @@ icon_state = "juicer0" /obj/machinery/reagentgrinder/attackby(obj/item/I, mob/user, params) + //You can only screw open empty grinder + if(!beaker && !length(holdingitems) && default_deconstruction_screwdriver(user, icon_state, icon_state, I)) + return + + if(default_deconstruction_crowbar(I)) + return + if(default_unfasten_wrench(user, I)) return + if(panel_open) //Can't insert objects when its screwed open + return TRUE + if (istype(I, /obj/item/reagent_containers) && !(I.flags_1 & ABSTRACT_1) && I.is_open_container()) if (!beaker) if(!user.transferItemToLoc(I, src)) @@ -231,7 +251,7 @@ pixel_x = old_px /obj/machinery/reagentgrinder/proc/operate_for(time, silent = FALSE, juicing = FALSE) - shake_for(time) + shake_for(time / speed) updateUsrDialog() operating = TRUE if(!silent) @@ -239,7 +259,7 @@ playsound(src, 'sound/machines/blender.ogg', 50, 1) else playsound(src, 'sound/machines/juicer.ogg', 20, 1) - addtimer(CALLBACK(src, .proc/stop_operating), time) + addtimer(CALLBACK(src, .proc/stop_operating), time / speed) /obj/machinery/reagentgrinder/proc/stop_operating() operating = FALSE diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 059d9c982c..d064a3614f 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -153,6 +153,13 @@ build_path = /obj/item/circuitboard/machine/smoke_machine category = list ("Medical Machinery") +/datum/design/board/reagentgrinder + name = "Machine Design (All-In-One Grinder)" + desc = "The circuit board for an All-In-One Grinder." + id = "reagentgrinder" + build_path = /obj/item/circuitboard/machine/reagentgrinder + category = list ("Medical Machinery") + /datum/design/board/clonecontrol name = "Computer Design (Cloning Machine Console)" desc = "Allows for the construction of circuit boards used to build a new Cloning Machine console." diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 753672c903..067c55662a 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -35,7 +35,7 @@ display_name = "Biological Processing" description = "From slimes to kitchens." prereq_ids = list("biotech") - design_ids = list("smartfridge", "gibber", "deepfryer", "monkey_recycler", "processor", "gibber", "microwave") + design_ids = list("smartfridge", "gibber", "deepfryer", "monkey_recycler", "processor", "gibber", "microwave", "reagentgrinder") research_cost = 2500 export_price = 5000