From 1c7882cb1160fa65ea7c9db2ab0b509a9739b954 Mon Sep 17 00:00:00 2001 From: Octus <62493359+Tokorizo@users.noreply.github.com> Date: Sun, 4 Sep 2022 04:36:11 -0500 Subject: [PATCH] Ports the TG Dish Drive. A quality of life machine for service. (#18855) * ILOVEBARTENDING * improvements * oopsie daisy * Apply suggestions from code review Co-authored-by: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com> Co-authored-by: ElorgRHG <71735193+ElorgRHG@users.noreply.github.com> * Update cable.dm * fixes cable runtimes * Apply suggestions from code review Co-authored-by: Sirryan2002 <80364400+Sirryan2002@users.noreply.github.com> * applies for code critique * steelslayerreview * Update code/game/machinery/constructable_frame.dm Co-authored-by: Sirryan2002 <80364400+Sirryan2002@users.noreply.github.com> Co-authored-by: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com> Co-authored-by: ElorgRHG <71735193+ElorgRHG@users.noreply.github.com> Co-authored-by: Sirryan2002 <80364400+Sirryan2002@users.noreply.github.com> --- code/game/machinery/constructable_frame.dm | 27 ++++ code/game/machinery/dish_drive.dm | 134 ++++++++++++++++++ code/game/machinery/vending.dm | 2 + .../objects/items/weapons/storage/boxes.dm | 13 ++ code/modules/mob/living/living.dm | 9 ++ code/modules/power/cable.dm | 8 +- .../research/designs/machine_designs.dm | 10 ++ icons/obj/kitchen.dmi | Bin 34957 -> 35872 bytes paradise.dme | 1 + 9 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 code/game/machinery/dish_drive.dm diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 43208497026..d9dad06528e 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -658,6 +658,33 @@ to destroy them and players will be able to make replacements. /obj/item/stock_parts/manipulator = 2, /obj/item/reagent_containers/glass/beaker = 2) +/obj/item/circuitboard/dish_drive + board_name = "Dish Drive" + build_path = /obj/machinery/dish_drive + board_type = "machine" + origin_tech = "programming=2" + req_components = list( + /obj/item/stock_parts/manipulator = 1, + /obj/item/stock_parts/matter_bin = 1, + /obj/item/stack/sheet/glass = 1) + var/suction = TRUE + var/transmit = TRUE + +/obj/item/circuitboard/dish_drive/examine(mob/user) + . = ..() + . += "Its suction function is [suction ? "enabled" : "disabled"]. Use it in-hand to switch." + . += "Its disposal auto-transmit function is [transmit ? "enabled" : "disabled"]. Alt-click it to switch." + +/obj/item/circuitboard/dish_drive/attack_self(mob/living/user) + suction = !suction + to_chat(user, "You [suction ? "enable" : "disable"] the board's suction function.") + +/obj/item/circuitboard/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.") + /obj/item/circuitboard/chem_dispenser/soda board_name = "Soda Machine" build_path = /obj/machinery/chem_dispenser/soda diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm new file mode 100644 index 00000000000..ad505a4bf5f --- /dev/null +++ b/code/game/machinery/dish_drive.dm @@ -0,0 +1,134 @@ +/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 = 'icons/obj/kitchen.dmi' + icon_state = "synthesizer" + idle_power_usage = 8 //5 with default parts + active_power_usage = 13 //10 with default parts + anchored = FALSE + density = FALSE + pass_flags = PASSTABLE + var/static/list/collectable_items = list(/obj/item/trash/waffles, + /obj/item/trash/plate, + /obj/item/trash/tray, + /obj/item/reagent_containers/food/drinks/drinkingglass, + /obj/item/kitchen/utensil/fork, + /obj/item/shard, + /obj/item/broken_bottle) + var/static/list/disposable_items = list(/obj/item/trash/waffles, + /obj/item/trash/plate, + /obj/item/trash/tray, + /obj/item/shard, + /obj/item/broken_bottle) + var/time_since_dishes = 0 + var/suction_enabled = TRUE + var/transmit_enabled = TRUE + var/list/dish_drive_contents + +/obj/machinery/dish_drive/Initialize(mapload) + . = ..() + component_parts = list() + component_parts += new /obj/item/circuitboard/dish_drive(null) + component_parts += new /obj/item/stock_parts/manipulator(null) + component_parts += new /obj/item/stock_parts/matter_bin(null) + component_parts += new /obj/item/stack/sheet/glass(null) + RefreshParts() + +/obj/machinery/dish_drive/examine(mob/user) + . = ..() + if(user.Adjacent(src)) + . += "Alt-click it to beam its waste storage contents to any nearby disposal bins." + +/obj/machinery/dish_drive/attack_hand(mob/living/user) + if(!LAZYLEN(dish_drive_contents)) + to_chat(user, "There's nothing in [src]!") + return + var/obj/item/I = LAZYACCESS(dish_drive_contents, LAZYLEN(dish_drive_contents)) //the most recently-added item + LAZYREMOVE(dish_drive_contents, I) + user.put_in_hands(I) + to_chat(user, "You take out [I] from [src].") + playsound(src, 'sound/items/pshoom.ogg', 15, TRUE) + flick("synthesizer_beam", src) + +/obj/machinery/dish_drive/screwdriver_act(mob/user, obj/item/I) + if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I)) + return TRUE + +/obj/machinery/dish_drive/wrench_act(mob/user, obj/item/I) + if(default_unfasten_wrench(user, I)) + return TRUE + +/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/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, collectable_items) && I.loc != src && (!I.reagents || !I.reagents.total_volume)) + if(I.Adjacent(src)) + LAZYADD(dish_drive_contents, I) + visible_message("[src] beams up [I]!") + I.forceMove(src) + playsound(src, 'sound/items/pshoom.ogg', 15, 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.can_use(src, !issilicon(user))) + do_the_dishes(TRUE) + +/obj/machinery/dish_drive/proc/do_the_dishes(manual) + if(!LAZYLEN(dish_drive_contents)) + if(manual) + visible_message("[src] is empty!") + return + var/obj/machinery/disposal/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', 15, TRUE) + return + var/disposed = 0 + for(var/obj/item/I in dish_drive_contents) + if(is_type_in_list(I, disposable_items)) + LAZYREMOVE(dish_drive_contents, I) + I.forceMove(bin) + use_power(active_power_usage) + disposed++ + if(disposed) + visible_message("[src] [pick("whooshes", "bwooms", "fwooms", "pshooms")] and beams [disposed] stored item\s into the nearby [bin.name].") + playsound(src, 'sound/items/pshoom.ogg', 15, TRUE) + playsound(bin, 'sound/items/pshoom.ogg', 15, TRUE) + Beam(bin, icon_state = "rped_upgrade", time = 5) + bin.update_icon() + flick("synthesizer_beam", src) + else + visible_message("There are no disposable items in [src]!") + time_since_dishes = world.time + 60 SECONDS diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 09e8bb8122a..711b40784e4 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -2219,6 +2219,7 @@ /obj/item/clothing/accessory/waistcoat = 2, /obj/item/reagent_containers/glass/rag = 3) contraband = list(/obj/item/toy/figure/crew/chef = 1) + premium = list(/obj/item/storage/box/dish_drive = 1) refill_canister = /obj/item/vending_refill/chefdrobe /obj/machinery/vending/bardrobe @@ -2239,6 +2240,7 @@ /obj/item/clothing/accessory/waistcoat = 2, /obj/item/reagent_containers/glass/rag = 3) contraband = list(/obj/item/toy/figure/crew/bartender = 1) + premium = list(/obj/item/storage/box/dish_drive = 1) refill_canister = /obj/item/vending_refill/bardrobe /obj/machinery/vending/hydrodrobe diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 9efb1862639..8d1267d80be 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -917,6 +917,19 @@ new /obj/item/implantcase/mindshield(src) new /obj/item/implanter/mindshield(src) +/obj/item/storage/box/dish_drive + name = "DIY Dish Drive Kit" + desc = "Contains everything you need to build your own Dish Drive!" + +/obj/item/storage/box/dish_drive/populate_contents() + new /obj/item/stack/sheet/metal/(src, 5) + new /obj/item/stack/cable_coil/five(src) + new /obj/item/circuitboard/dish_drive(src) + new /obj/item/stack/sheet/glass(src) + new /obj/item/stock_parts/manipulator(src) + new /obj/item/stock_parts/matter_bin(src) + new /obj/item/screwdriver(src) + #undef NODESIGN #undef NANOTRASEN #undef SYNDI diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 67b9dc11e1e..d32cfcf7a7c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -975,6 +975,15 @@ visible_message("[user] butchers [src].") gib() +/mob/living/proc/can_use(atom/movable/M, be_close = FALSE) + if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) + to_chat(src, "You can't do that right now!") + return FALSE + if(be_close && !in_range(M, src)) + to_chat(src, "You are too far away!") + return FALSE + return TRUE + /mob/living/movement_delay(ignorewalk = 0) . = ..() if(isturf(loc)) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 7bb38b242c3..d3d9003780a 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -515,7 +515,6 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe/cable_restrain /obj/item/stack/cable_coil/New(loc, length = MAXCOIL, paramcolor = null) ..() - amount = length if(paramcolor) color = paramcolor pixel_x = rand(-2,2) @@ -835,6 +834,13 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe/cable_restrain update_appearance(UPDATE_NAME|UPDATE_ICON_STATE) update_wclass() + +/obj/item/stack/cable_coil/five + +// Passes '5' to the parent as `new_amount`, so 5 coils are created. +/obj/item/stack/cable_coil/five/New(loc, new_amount = 5, merge = TRUE, paramcolor = null) + ..() + /obj/item/stack/cable_coil/yellow color = COLOR_YELLOW diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 663490496b6..c261251744e 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -342,6 +342,16 @@ build_path = /obj/item/circuitboard/smartfridge category = list ("Misc. Machinery") +/datum/design/dish_drive + name = "Machine Design (Dish Drive Board)" + desc = "The circuit board for a dish drive." + id = "dishdrive" + req_tech = list("programming" = 1) + build_type = IMPRINTER + materials = list(MAT_GLASS = 1000) + build_path = /obj/item/circuitboard/dish_drive + category = list("Misc. Machinery") + /datum/design/monkey_recycler name = "Machine Design (Monkey Recycler Board)" desc = "The circuit board for a monkey recycler." diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 0d13c90cd1528019cbf1eb6d43097e8be84b51eb..c162b1007d86ede55e7e526add6bcd9ea47e7963 100644 GIT binary patch delta 14381 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 delta 13468 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 KlP#Aq4gP