From d93d19c7d1f7b9a4aaa3d9a8cb5ecbaee533a316 Mon Sep 17 00:00:00 2001 From: jimmyl <70376633+mc-oofert@users.noreply.github.com> Date: Thu, 16 May 2024 19:31:06 +0200 Subject: [PATCH] mobile defibrillator mount (#83000) ## About The Pull Request ![image](https://github.com/tgstation/tgstation/assets/70376633/e8650bc6-e915-499c-8a63-eba0a70b4a96) ![image](https://github.com/tgstation/tgstation/assets/70376633/14a95345-e436-43c7-b4a7-de2502fc59cc) 5 iron and 1 sheet of silver and 15 cable to craft its a defib mount but mobile, thats basically it ## Why It's Good For The Game good for maps where there are no good spots to place wall defib mounts or if you cant or dont want to take off your backpack (maybe using a modsuit?) and theres no defib mount nearby ## Changelog :cl: add: mobile defibrillator mount /:cl: --- code/datums/components/crafting/furniture.dm | 12 ++++ code/game/machinery/defibrillator_mount.dm | 56 +++++++++++++++---- code/game/objects/items/defib.dm | 2 + icons/obj/machines/defib_mount.dmi | Bin 635 -> 1347 bytes 4 files changed, 58 insertions(+), 12 deletions(-) diff --git a/code/datums/components/crafting/furniture.dm b/code/datums/components/crafting/furniture.dm index 6cfe215a4b7..dfa43ad87c2 100644 --- a/code/datums/components/crafting/furniture.dm +++ b/code/datums/components/crafting/furniture.dm @@ -47,3 +47,15 @@ tool_behaviors = list(TOOL_SCREWDRIVER) category = CAT_FURNITURE time = 5 SECONDS + +/datum/crafting_recipe/defib_mobile + name = "Mobile Defibrillator Mount" + reqs = list( + /obj/item/stack/sheet/mineral/silver = 1, + /obj/item/stack/sheet/iron = 5, + /obj/item/stack/cable_coil = 15, + ) + result = /obj/machinery/defibrillator_mount/mobile + tool_behaviors = list(TOOL_SCREWDRIVER) + category = CAT_FURNITURE + time = 7 SECONDS diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm index 207a3f753ef..785357e3b5b 100644 --- a/code/game/machinery/defibrillator_mount.dm +++ b/code/game/machinery/defibrillator_mount.dm @@ -51,25 +51,23 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/defibrillator_mount, 28) /obj/machinery/defibrillator_mount/update_overlays() . = ..() - - if(!defib) + if(isnull(defib)) return - . += "defib" + var/mutable_appearance/defib_overlay = mutable_appearance(icon, "defib", layer = layer+0.01, offset_spokesman = src) if(defib.powered) - var/obj/item/stock_parts/cell/C = get_cell() - . += (defib.safety ? "online" : "emagged") - var/ratio = C.charge / C.maxcharge - ratio = CEILING(ratio * 4, 1) * 25 - . += "charge[ratio]" + var/obj/item/stock_parts/cell/cell = defib.cell + var/mutable_appearance/safety = mutable_appearance(icon, defib.safety ? "online" : "emagged", offset_spokesman = src) + var/mutable_appearance/charge_overlay = mutable_appearance(icon, "charge[CEILING((cell.charge / cell.maxcharge) * 4, 1) * 25]", offset_spokesman = src) + + defib_overlay.overlays += list(safety, charge_overlay) if(clamps_locked) - . += "clamps" + var/mutable_appearance/clamps = mutable_appearance(icon, "clamps", offset_spokesman = src) + defib_overlay.overlays += clamps -/obj/machinery/defibrillator_mount/get_cell() - if(defib) - return defib.get_cell() + . += defib_overlay //defib interaction /obj/machinery/defibrillator_mount/attack_hand(mob/living/user, list/modifiers) @@ -220,3 +218,37 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/defibrillator_mount, 28) icon_state = "penlite_mount" custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 0.5) result_path = /obj/machinery/defibrillator_mount/charging + +//mobile defib + +/obj/machinery/defibrillator_mount/mobile + name = "mobile defibrillator mount" + icon_state = "mobile" + anchored = FALSE + density = TRUE + +/obj/machinery/defibrillator_mount/mobile/Initialize(mapload) + . = ..() + AddElement(/datum/element/noisy_movement) + +/obj/machinery/defibrillator_mount/mobile/wrench_act_secondary(mob/living/user, obj/item/tool) + if(user.combat_mode) + return ..() + if(defib) + to_chat(user, span_warning("The mount can't be deconstructed while a defibrillator unit is loaded!")) + ..() + return TRUE + balloon_alert(user, "deconstructing...") + tool.play_tool_sound(src) + if(tool.use_tool(src, user, 5 SECONDS)) + playsound(loc, 'sound/items/deconstruct.ogg', 50, vary = TRUE) + deconstruct() + return TRUE + +/obj/machinery/defibrillator_mount/mobile/on_deconstruction(disassembled) + if(disassembled) + new /obj/item/stack/sheet/iron(drop_location(), 5) + new /obj/item/stack/sheet/mineral/silver(drop_location(), 1) + new /obj/item/stack/cable_coil(drop_location(), 15) + else + new /obj/item/stack/sheet/iron(drop_location(), 5) diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 7a661b640ba..ac164df007c 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -368,6 +368,7 @@ if(!req_defib) return RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(check_range)) + RegisterSignal(defib.loc, COMSIG_MOVABLE_MOVED, PROC_REF(check_range)) /obj/item/shockpaddles/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) . = ..() @@ -434,6 +435,7 @@ . = ..() if(user) UnregisterSignal(user, COMSIG_MOVABLE_MOVED) + UnregisterSignal(defib.loc, COMSIG_MOVABLE_MOVED) if(req_defib) if(user) to_chat(user, span_notice("The paddles snap back into the main unit.")) diff --git a/icons/obj/machines/defib_mount.dmi b/icons/obj/machines/defib_mount.dmi index 4518bb33783ae55510be5f50beb7b182fdbb9e87..846d6342538872ed664e7b0271883eebdba16404 100644 GIT binary patch literal 1347 zcmZ{ic}&xH7{>Q_dbT8LyNUvVUMI?gTL=B`zs7E-?WB62!RHruNgWjqYz>1*p{P zjyDdqGHN{a7xYc+x=r#t@TEhN&B4BTgl9LS+Cx8v?r3^2+W$R|Un7IwsNS8`l%Lr| zxJ4sxDSC`mMZV6>7_zLe`m7-GDzB)+|vu4P$??lv?{H&q*5enQO0F)(zm zF2B}Ti@i8o-^;coZJ`cKn#rTcy8Z%L{B`ZNlJWxXrwC5#F&&L*z_AIi+S-FgN2HbozA1E6Au$GQ5G`lbgC#cGEbQfKqewM}2C=N+v;XVVFj zXwy>v8I}$`j91>ra7S61A4xXlWB1af=z!8J8o`yF!w%#5qP@=RSkqno;wRyDyczc} z)G>C9NapEyI=Yw`?YKw6z0rp!-v3SU<6-TbOC%?ZumPdODRDsoBd`&mfC>mfAP^a? zuz`UAs3*OW&EB1Rr@GoUFGmbFYMT*@#VkE@YwM#2jgZUrjj5mPfDn|_*7kH37qVD! zP@cR!$AZ~T%lY|>tKtGYk_v+NVW#HmdRH(%h|d%kM+f?KimK8M)JZ;riOI=Vr@g!w zHb5wECR>eAryC1DXbFas-o@@u3&N!^sADZz zS}!9x8nF1Kg)iYqBgNlS8ZqwB2FL6XhLA&W z6cFqLd_E=W;_BOu&e5l`u8hiv?z%`9-~cD7PzleqWYItm#zK&61Rwr{0Rs>fVE<%|P-kQEla?@b1RF$jRLT4WXrl@0od?e?6ZnF z%8sJ}htUpD(pW-8b-Y}2_Wgjzy;iKTy+k>SdRkE z+DL!xMGw7U?7KIdi-|BFxk&(Dm7O?e&p97{rNFM}(Z1P)5-~W%JRRWp`JGr>3;}zn zJp5@FX?~7XV0VzY*}}m4Yb5n15bnWxG#|PHcjcw%odjH1habMh9Pl)$?P);j2J+3A zBGSBb$B2)%M&B(Ur~;`fKp!q$uZ((0Q!o{@?QTWIp?+^?f7q_=dt1z{taPmH^Ffj} gH9|e1R delta 621 zcmV-z0+Rj13i||*8Gi!+0082oihBS609Q~(^b0d!JMQvg8b*k%9#0Kj@wSbuaxWpiV4X>fFDZ*Bkp zc$|%q%L>9U5JlI?SA=#e(uc*B8)=a)>@P?(V-m=tBvJA2jV*`^G2P8DXD)N^gXK6n0vro4c7DL0v@3~fH70xyaNlTAhZQUW(T4b0fEBf*zFWVQNR8A zc)~AXGC&cKrb*%(Bmrx8fcQ#CelGw30001hL&);w^}@2gT5cI&TL)0G%(h+>`;-6x z0002|p=NSq_xaVx-UVg#G+x~^T|hsdEvSl8ryo?&IL>c`hVM