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)