From ec03e591d23b2ab45c7a1bc1ca2f340f8033e4cf Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Mon, 15 Sep 2025 08:00:32 -0400 Subject: [PATCH] Mech Jaws Of Life (#21358) This PR makes the mech clamp share a bit more in common with the paramedic's own "Jaws of Life" by making it so that it has unique sound effects to play while forcing open airlocks, and also breaks airlocks when opening them. So now there's actually a consistent cost to using the mech clamps in their capacity as airlock forcers, as opposed to them strictly being an upgrade over the JOL. https://github.com/user-attachments/assets/d32c58e3-5f0a-4024-928d-35891d7d3ed7 --- .../heavy_vehicle/equipment/utility.dm | 20 +++++++++++++++---- .../hellfirejag-mech_clamp_stuff.yml | 5 +++++ 2 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 html/changelogs/hellfirejag-mech_clamp_stuff.yml diff --git a/code/modules/heavy_vehicle/equipment/utility.dm b/code/modules/heavy_vehicle/equipment/utility.dm index 02cf1bbfab4..78db97983cf 100644 --- a/code/modules/heavy_vehicle/equipment/utility.dm +++ b/code/modules/heavy_vehicle/equipment/utility.dm @@ -64,6 +64,7 @@ return var/obj/machinery/door/airlock/AD = target if(!AD.operating) + playsound(src.loc, 'sound/machines/hydraulic_long.ogg', 100, 1, ignore_walls = TRUE) if(AD.welded || AD.locked) AD.visible_message(SPAN_WARNING("\The [owner] begins prying on \the [AD]!")) var/time_to_open = 15 SECONDS @@ -73,21 +74,23 @@ AD.welded = FALSE AD.locked = FALSE AD.update_icon() - playsound(AD, 'sound/effects/meteorimpact.ogg', 100, 1) playsound(AD, 'sound/machines/airlock_open_force.ogg', 100, 1) AD.visible_message(SPAN_WARNING("\The [owner] tears \the [AD] open!")) - INVOKE_ASYNC(AD, TYPE_PROC_REF(/obj/machinery/door/airlock, open)) + INVOKE_ASYNC(AD, TYPE_PROC_REF(/obj/machinery/door/airlock, open), TRUE) + break_door(AD) else AD.visible_message(SPAN_WARNING("\The [owner] begins forcing \the [AD]!")) if(do_after(user, 5 SECONDS, owner, (DO_DEFAULT & ~DO_USER_CAN_TURN) | DO_USER_UNIQUE_ACT, extra_checks = CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(atom_maintain_position), AD, AD.loc)) && !(AD.operating || AD.welded || AD.locked)) if(AD.density) - INVOKE_ASYNC(AD, TYPE_PROC_REF(/obj/machinery/door/airlock, open)) + INVOKE_ASYNC(AD, TYPE_PROC_REF(/obj/machinery/door/airlock, open), TRUE) playsound(AD, 'sound/machines/airlock_open_force.ogg', 100, 1) AD.visible_message(SPAN_DANGER("\The [owner] forces \the [AD] open!")) + break_door(AD) else - INVOKE_ASYNC(AD, TYPE_PROC_REF(/obj/machinery/door/airlock, close)) + INVOKE_ASYNC(AD, TYPE_PROC_REF(/obj/machinery/door/airlock, close), TRUE) playsound(AD, 'sound/machines/airlock_close_force.ogg', 100, 1) AD.visible_message(SPAN_DANGER("\The [owner] forces \the [AD] closed!")) + break_door(AD) return if(length(carrying) >= carrying_capacity) @@ -130,6 +133,15 @@ to_chat(user, SPAN_NOTICE("You push [target] out of the way.")) owner.visible_message(SPAN_NOTICE("[owner] pushes [target] out of the way.")) +/obj/item/mecha_equipment/clamp/proc/break_door(var/obj/machinery/door/airlock/Airlock) + if(Airlock.bolt_cut_state == 2) + return + + playsound(Airlock, 'sound/effects/meteorimpact.ogg', 100, 1, ignore_walls = TRUE) + Airlock.visible_message(SPAN_DANGER("\The [Airlock]'s bolts give off a deafening mechanical screech as they are torn apart.")) + Airlock.bolt_cut_state = 2 + Airlock.set_broken() + /obj/item/mecha_equipment/clamp/attack_self(var/mob/user) . = ..() if(.) diff --git a/html/changelogs/hellfirejag-mech_clamp_stuff.yml b/html/changelogs/hellfirejag-mech_clamp_stuff.yml new file mode 100644 index 00000000000..29f48e02d31 --- /dev/null +++ b/html/changelogs/hellfirejag-mech_clamp_stuff.yml @@ -0,0 +1,5 @@ +author: Hellfirejag +delete-after: True +changes: + - rscadd: "Mech clamps now produce new sound effects while forcing open airlocks." + - rscadd: "Mech clamps now break airlocks when forcing them open."