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 4518bb33783..846d6342538 100644 Binary files a/icons/obj/machines/defib_mount.dmi and b/icons/obj/machines/defib_mount.dmi differ