From 08bc84d3db6b62d0502a486743d483c0dbaa9563 Mon Sep 17 00:00:00 2001 From: Ashe Higgs Date: Tue, 20 Feb 2018 18:09:59 -0500 Subject: [PATCH] Adds the dish drive, obtainable through techwebs and with circuit boards in the chef and bartender's lockers (#35759) * Adds the dish drive * a e s t h e t i c * Puts a dish drive circuit in the chef locker * wardrobes, better control * shiz! * shiz! (x2) --- code/game/machinery/dish_drive.dm | 121 ++++++++++++++++++ .../circuitboards/machine_circuitboards.dm | 25 ++++ .../crates_lockers/closets/job_closets.dm | 2 + .../research/designs/machine_designs.dm | 7 + code/modules/research/techweb/all_nodes.dm | 2 +- goon/icons/obj/kitchen.dmi | Bin 0 -> 1197 bytes tgstation.dme | 1 + 7 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 code/game/machinery/dish_drive.dm create mode 100644 goon/icons/obj/kitchen.dmi diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm new file mode 100644 index 0000000000..2254500afe --- /dev/null +++ b/code/game/machinery/dish_drive.dm @@ -0,0 +1,121 @@ +/obj/machinery/dish_drive + name = "dish drive" + desc = "A culinary marvel that uses matter-to-energy conversion to store dishes and shards. Convenient! \ + Additional features include a vacuum function to suck in nearby dishes, and an automatic transfer beam that empties its contents into nearby disposal bins every now and then. \ + Or you can just drop your plates on the floor, like civilized folk." + icon = 'goon/icons/obj/kitchen.dmi' + icon_state = "synthesizer" + idle_power_usage = 8 //5 with default parts + active_power_usage = 13 //10 with default parts + anchored = TRUE + density = FALSE + circuit = /obj/item/circuitboard/machine/dish_drive + var/static/list/item_types = list(/obj/item/trash/waffles, + /obj/item/trash/plate, + /obj/item/trash/tray, + /obj/item/reagent_containers/glass/bowl, + /obj/item/reagent_containers/food/drinks/drinkingglass, + /obj/item/kitchen/fork, + /obj/item/shard, + /obj/item/broken_bottle) + var/time_since_dishes = 0 + var/suction_enabled = TRUE + var/transmit_enabled = TRUE + +/obj/machinery/dish_drive/Initialize() + . = ..() + RefreshParts() + +/obj/machinery/dish_drive/examine(mob/user) + ..() + if(user.Adjacent(src)) + to_chat(user, "Alt-click it to beam its contents to any nearby disposal bins.") + +/obj/machinery/dish_drive/attack_hand(mob/living/user) + if(!contents.len) + to_chat(user, "There's nothing in [src]!") + return + var/obj/item/I = contents[contents.len] //the most recently-added item + user.put_in_hands(I) + to_chat(user, "You take out [I] from [src].") + playsound(src, 'sound/items/pshoom.ogg', 50, TRUE) + flick("synthesizer_beam", src) + +/obj/machinery/dish_drive/attackby(obj/item/I, mob/living/user, params) + if(is_type_in_list(I, item_types) && user.a_intent != INTENT_HARM) + if(!user.transferItemToLoc(I, src)) + return + to_chat(user, "You put [I] in [src], and it's beamed into energy!") + playsound(src, 'sound/items/pshoom.ogg', 50, TRUE) + flick("synthesizer_beam", src) + return + else if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I)) + return + else if(default_unfasten_wrench(user, I)) + return + else if(default_deconstruction_crowbar(I, FALSE)) + return + ..() + +/obj/machinery/dish_drive/RefreshParts() + idle_power_usage = initial(idle_power_usage) + active_power_usage = initial(active_power_usage) + use_power = initial(use_power) + var/total_rating = 0 + for(var/obj/item/stock_parts/S in component_parts) + total_rating += S.rating + if(total_rating >= 9) + active_power_usage = 0 + use_power = NO_POWER_USE + else + idle_power_usage = max(0, idle_power_usage - total_rating) + active_power_usage = max(0, active_power_usage - total_rating) + var/obj/item/circuitboard/machine/dish_drive/board = locate() in component_parts + if(board) + suction_enabled = board.suction + transmit_enabled = board.transmit + +/obj/machinery/dish_drive/process() + if(time_since_dishes <= world.time && transmit_enabled) + do_the_dishes() + if(!suction_enabled) + return + for(var/obj/item/I in view(4, src)) + if(is_type_in_list(I, item_types) && I.loc != src && (!I.reagents || !I.reagents.total_volume)) + if(I.Adjacent(src)) + visible_message("[src] beams up [I]!") + I.forceMove(src) + playsound(src, 'sound/items/pshoom.ogg', 50, TRUE) + flick("synthesizer_beam", src) + else + step_towards(I, src) + +/obj/machinery/dish_drive/attack_ai(mob/living/user) + if(stat) + return + to_chat(user, "You send a disposal transmission signal to [src].") + do_the_dishes(TRUE) + +/obj/machinery/dish_drive/AltClick(mob/living/user) + if(user.canUseTopic(src, !issilicon(user))) + do_the_dishes(TRUE) + +/obj/machinery/dish_drive/proc/do_the_dishes(manual) + if(!contents.len) + return + var/obj/machinery/disposal/bin/bin = locate() in view(7, src) + if(!bin) + if(manual) + visible_message("[src] buzzes. There are no disposal bins in range!") + playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + return + for(var/obj/item/I in contents) + I.forceMove(bin) + use_power(active_power_usage) + visible_message("[src] [pick("whooshes", "bwooms", "fwooms", "pshooms")] and beams its stored dishes into the nearby [bin.name].") + playsound(src, 'sound/items/pshoom.ogg', 50, TRUE) + playsound(bin, 'sound/items/pshoom.ogg', 50, TRUE) + Beam(bin, icon_state = "rped_upgrade", time = 5) + bin.update_icon() + flick("synthesizer_beam", src) + time_since_dishes = world.time + 600 diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 7831978cbe..98db95ec06 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -718,3 +718,28 @@ req_components = list( /obj/item/stack/sheet/glass = 1, /obj/item/vending_refill/donksoft = 3) + +/obj/item/circuitboard/machine/dish_drive + name = "Dish Drive (Machine Board)" + build_path = /obj/machinery/dish_drive + req_components = list( + /obj/item/stack/sheet/glass = 1, + /obj/item/stock_parts/manipulator = 1, + /obj/item/stock_parts/matter_bin = 2) + var/suction = TRUE + var/transmit = TRUE + +/obj/item/circuitboard/machine/dish_drive/examine(mob/user) + ..() + to_chat(user, "Its suction function is [suction ? "enabled" : "disabled"]. Use it in-hand to switch.") + to_chat(user, "Its disposal auto-transmit function is [transmit ? "enabled" : "disabled"]. Alt-click it to switch.") + +/obj/item/circuitboard/machine/dish_drive/attack_self(mob/living/user) + suction = !suction + to_chat(user, "You [suction ? "enable" : "disable"] the board's suction function.") + +/obj/item/circuitboard/machine/dish_drive/AltClick(mob/living/user) + if(!user.Adjacent(src)) + return + transmit = !transmit + to_chat(user, "You [transmit ? "enable" : "disable"] the board's automatic disposal transmission.") diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index b0d8c89c59..9d10ba36ba 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -25,6 +25,7 @@ new /obj/item/reagent_containers/glass/rag(src) new /obj/item/storage/box/beanbag(src) new /obj/item/clothing/suit/armor/vest/alt(src) + new /obj/item/circuitboard/machine/dish_drive(src) new /obj/item/clothing/glasses/sunglasses/reagent(src) new /obj/item/clothing/neck/petcollar(src) new /obj/item/storage/belt/bandolier(src) @@ -48,6 +49,7 @@ new /obj/item/clothing/head/soft/mime(src) new /obj/item/storage/box/mousetraps(src) new /obj/item/storage/box/mousetraps(src) + new /obj/item/circuitboard/machine/dish_drive(src) new /obj/item/clothing/suit/toggle/chef(src) new /obj/item/clothing/under/rank/chef(src) new /obj/item/clothing/head/chefhat(src) diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index b724c69e3b..fc06dcd0ab 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -426,3 +426,10 @@ id = "cell_charger" build_path = /obj/item/circuitboard/machine/cell_charger category = list ("Misc. Machinery") + +/datum/design/board/dish_drive + name = "Machine Design (Dish Drive)" + desc = "The circuit board for a dish drive." + id = "dish_drive" + build_path = /obj/item/circuitboard/machine/dish_drive + category = list ("Misc. Machinery") diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 1f2b906857..afdbcb4d4d 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", "reagentgrinder") + design_ids = list("smartfridge", "gibber", "deepfryer", "monkey_recycler", "processor", "gibber", "microwave", "reagentgrinder", "dish_drive") research_cost = 2500 export_price = 5000 diff --git a/goon/icons/obj/kitchen.dmi b/goon/icons/obj/kitchen.dmi new file mode 100644 index 0000000000000000000000000000000000000000..b45307a64704dc88d87daf9666d4dc8c84c95d9a GIT binary patch literal 1197 zcmV;e1XBBnP)V=-0C=30i?IsAFcd}Sysx;lt4dQ{vq*|$Xn#Q>d71~dg(N8L*E@9W;&u+4 zQ{&p*+yL7<`f$oJPcXQg8d6^gCBop`l8P*^ST@PU7luKVm#IX~vT~|O1xXnOn$$D- zkvHCJkMlqE{lR|RA6im@-+qCCK4_}Z4HmX{^aJL(JzZp*^F{yw1KLSMK~#90?OSa~ z6JY>;F6K=QXPcfl6*Ux%WAw-VMVn9%n7<_Ymz6&TL0rrrP%8?dsK~((f<+QRP!a`U z{|vH-q%xIkAX+$(Hq;!>Uz%V)+LougFYj(|w)cVK-R}K(o_qG*?&~?G`K%Awj9sJ! zkOnn?v;fke29Op&8q@&N0!V`zKw1E4Sfnb}X6DypOEJ+pjw?|;@cjIo=)1kp4ofx1 zsO_IAen|sjOEKKIbscYpUa2OPg4=T#9Tz*nfm7WlQ~Z(!B$1z+t6P8`n9Z+f0L$(+ zRRC#zSp)30V${{~x=HM|;%)acn_qDTIGts>1?Yj<{IUidZ#ilhQE^F?=02I=mo#8u zE{uB*9s!V_Lb3P)0N`bR5ML%gV`YUE)myErICbVKu3WkR4t1&pXNq5O7l_P8(GlpB ztQQ0U&Wch1z{(1X+J_V9>sbTO)%aF4m+9&^KLT~)cM#_&%zdPEzq#4l;U=0A=5FPhSp8*%gYQ&d##gWGc~wQ!~T z(~hSEJ^TQ${;2^N@hbA0axv8CIV37cfH^Rts+}qWa#<_b9A?Xs%UaX6e?9b8RO*FR zejqUe8iI;r%N_-ihnULxS~wj=Tk0c=KN0)zG1V>!p63w?g;2A%1m9=ADT*+fA5cF7 zBn_|^+7X$JLJ$Nze)1e;C3VQLt*7dL#Ti7xUm*wrBC}BdKqxeU%5o=$hu;GLM#q;> zS?)wAGy!{|U6mjs_|H4KQtk5da%A}#xhF&EuF1Cpt@i>l$uGMLSgJWj%Qd{w$OM1Z z-x8w+kQP81)Bw@~NP`+cS^#NK14s)X4Qc>s0i;0&^E`00000 LNkvXXu0mjfJeeI& literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index 4052c7ee8e..e5ff8ed7b1 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -529,6 +529,7 @@ #include "code\game\machinery\dance_machine.dm" #include "code\game\machinery\defibrillator_mount.dm" #include "code\game\machinery\deployable.dm" +#include "code\game\machinery\dish_drive.dm" #include "code\game\machinery\dna_scanner.dm" #include "code\game\machinery\doppler_array.dm" #include "code\game\machinery\droneDispenser.dm"