From f84df6300b3e5bd44919980637514c6ffe7997c8 Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Wed, 6 Aug 2025 21:03:37 -0500 Subject: [PATCH] Every so slightly buffs airlock crushing (#92403) ## About The Pull Request +5 damage to airlock crushing Now uses apply damage (which means it can wound and is affected by physiology) Has a wound bonus so it has the potential to cause wounds. In testing it seems super uncommon unless you're frail though. ## Why It's Good For The Game 15 damage for being smashed in a door? Insane ## Changelog :cl: Melbert balance: Airlock crushing now does 20 damage, up from 15. Also may uncommonly cause wounds. Also is properly affected by damage reduction or modifiers. /:cl: --- .../signals/signals_mob/signals_mob_living.dm | 2 ++ code/__DEFINES/mobs.dm | 2 +- code/datums/wounds/bones.dm | 2 ++ code/game/machinery/doors/door.dm | 21 +++++++++---------- code/modules/transport/tram/tram_doors.dm | 17 ++++++--------- 5 files changed, 21 insertions(+), 23 deletions(-) diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm index 095206e4f56..1f5f19ba610 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm @@ -27,6 +27,8 @@ #define COMSIG_LIVING_ENTER_STAMCRIT "living_enter_stamcrit" ///from /obj/structure/door/crush(): (mob/living/crushed, /obj/machinery/door/crushing_door) #define COMSIG_LIVING_DOORCRUSHED "living_doorcrush" + /// Stop the door from causing wounds (damage still applies though) + #define DOORCRUSH_NO_WOUND (1<<0) ///from base of mob/living/resist() (/mob/living) #define COMSIG_LIVING_RESIST "living_resist" ///from base of mob/living/ignite_mob() (/mob/living) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index e338a6790f3..a4311d37279 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -465,7 +465,7 @@ #define APPRENTICE_AGE_MIN 29 //youngest an apprentice can be #define SHOES_SLOWDOWN 0 //How much shoes slow you down by default. Negative values speed you up #define POCKET_STRIP_DELAY (4 SECONDS) //time taken to search somebody's pockets -#define DOOR_CRUSH_DAMAGE 15 //the amount of damage that airlocks deal when they crush you +#define DOOR_CRUSH_DAMAGE 20 //the amount of damage that airlocks deal when they crush you #define HUNGER_FACTOR 0.05 //factor at which mob nutrition decreases #define ETHEREAL_DISCHARGE_RATE (1e-3 * STANDARD_ETHEREAL_CHARGE) // Rate at which ethereal stomach charge decreases diff --git a/code/datums/wounds/bones.dm b/code/datums/wounds/bones.dm index f0d6fefe07c..8103f7047f1 100644 --- a/code/datums/wounds/bones.dm +++ b/code/datums/wounds/bones.dm @@ -279,6 +279,8 @@ if(prob(40)) victim.visible_message(span_danger("[victim]'s dislocated [limb.plaintext_zone] pops back into place!"), span_userdanger("Your dislocated [limb.plaintext_zone] pops back into place! Ow!")) remove_wound() + return DOORCRUSH_NO_WOUND + return NONE /datum/wound/blunt/bone/moderate/try_handling(mob/living/user) if(user.usable_hands <= 0 || user.pulling != victim) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index aa033e79412..9cb7dea5cc6 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -584,24 +584,23 @@ for(var/turf/checked_turf in locs) for(var/mob/living/future_pancake in checked_turf) future_pancake.visible_message(span_warning("[src] closes on [future_pancake], crushing [future_pancake.p_them()]!"), span_userdanger("[src] closes on you and crushes you!")) - SEND_SIGNAL(future_pancake, COMSIG_LIVING_DOORCRUSHED, src) + var/sig_return = SEND_SIGNAL(future_pancake, COMSIG_LIVING_DOORCRUSHED, src) + future_pancake.add_splatter_floor(loc) + log_combat(src, future_pancake, "crushed") + var/door_wounding = (sig_return & DOORCRUSH_NO_WOUND) ? CANT_WOUND : 10 if(isalien(future_pancake)) //For xenos - future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE * 1.5) //Xenos go into crit after aproximately the same amount of crushes as humans. + future_pancake.apply_damage(DOOR_CRUSH_DAMAGE * 1.5, BRUTE, BODY_ZONE_CHEST, wound_bonus = door_wounding, attacking_item = src) //Xenos go into crit after aproximately the same amount of crushes as humans. future_pancake.emote("roar") else if(ismonkey(future_pancake)) //For monkeys future_pancake.emote("screech") - future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE) - future_pancake.Paralyze(100) + future_pancake.apply_damage(DOOR_CRUSH_DAMAGE, BRUTE, BODY_ZONE_CHEST, wound_bonus = door_wounding, attacking_item = src) + future_pancake.Paralyze(10 SECONDS) else if(ishuman(future_pancake)) //For humans - future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE) future_pancake.emote("scream") - future_pancake.Paralyze(100) + future_pancake.apply_damage(DOOR_CRUSH_DAMAGE, BRUTE, BODY_ZONE_CHEST, wound_bonus = door_wounding, attacking_item = src) + future_pancake.Paralyze(10 SECONDS) else //for simple_animals & borgs - future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE) - var/turf/location = get_turf(src) - //add_blood doesn't work for borgs/xenos, but add_blood_floor does. - future_pancake.add_splatter_floor(location) - log_combat(src, future_pancake, "crushed") + future_pancake.apply_damage(DOOR_CRUSH_DAMAGE, BRUTE, BODY_ZONE_CHEST, wound_bonus = door_wounding, attacking_item = src) for(var/obj/vehicle/sealed/mecha/mech in get_turf(src)) // Your fancy metal won't save you here! mech.take_damage(DOOR_CRUSH_DAMAGE) log_combat(src, mech, "crushed") diff --git a/code/modules/transport/tram/tram_doors.dm b/code/modules/transport/tram/tram_doors.dm index 5f902497803..17173e79cd9 100644 --- a/code/modules/transport/tram/tram_doors.dm +++ b/code/modules/transport/tram/tram_doors.dm @@ -159,19 +159,14 @@ for(var/turf/checked_turf in locs) for(var/mob/living/future_pancake in checked_turf) future_pancake.visible_message(span_warning("[src] beeps angrily and closes on [future_pancake]!"), span_userdanger("[src] beeps angrily and closes on you!")) - SEND_SIGNAL(future_pancake, COMSIG_LIVING_DOORCRUSHED, src) + var/sig_return = SEND_SIGNAL(future_pancake, COMSIG_LIVING_DOORCRUSHED, src) + future_pancake.add_splatter_floor(loc) + log_combat(src, future_pancake, "crushed") + var/door_wounding = (sig_return & DOORCRUSH_NO_WOUND) ? CANT_WOUND : 10 + future_pancake.apply_damage(DOOR_CRUSH_DAMAGE * 2, BRUTE, BODY_ZONE_CHEST, wound_bonus = door_wounding, attacking_item = src) + future_pancake.Paralyze(2 SECONDS) if(ishuman(future_pancake)) future_pancake.emote("scream") - future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE * 2) - future_pancake.Paralyze(2 SECONDS) - - else //for simple_animals & borgs - future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE * 2) - var/turf/location = get_turf(src) - //add_blood doesn't work for borgs/xenos, but add_blood_floor does. - future_pancake.add_splatter_floor(location) - - log_combat(src, future_pancake, "crushed") for(var/obj/vehicle/sealed/mecha/mech in checked_turf) // Your fancy metal won't save you here! mech.take_damage(DOOR_CRUSH_DAMAGE)