diff --git a/code/__DEFINES/rendering/atom_hud.dm b/code/__DEFINES/rendering/atom_hud.dm index 25763c0d637d..b51fefcac7aa 100644 --- a/code/__DEFINES/rendering/atom_hud.dm +++ b/code/__DEFINES/rendering/atom_hud.dm @@ -2,31 +2,53 @@ // note: if you add more HUDs, even for non-human atoms, make sure to use unique numbers for the defines! // /datum/atom_hud expects these to be unique // these need to be strings in order to make them associative lists -#define HEALTH_HUD "1" // dead, alive, sick, health status -#define STATUS_HUD "2" // a simple line rounding the mob's number health -#define ID_HUD "3" // the job asigned to your ID -#define WANTED_HUD "4" // wanted, released, parroled, security status -#define IMPLOYAL_HUD "5" // loyality implant -#define IMPCHEM_HUD "6" // chemical implant -#define IMPTRACK_HUD "7" // tracking implant -#define DIAG_STAT_HUD "8" // Silicon/Mech/Circuit Status -#define DIAG_HUD "9" // Silicon health bar -#define DIAG_BATT_HUD "10"// Borg/Mech/Circutry power meter -#define DIAG_MECH_HUD "11"// Mech health bar -#define DIAG_BOT_HUD "12"// Bot HUDs -#define DIAG_CIRCUIT_HUD "13"// Circuit assembly health bar -#define DIAG_TRACK_HUD "14"// Mech/Silicon tracking beacon, Circutry long range icon -#define DIAG_AIRLOCK_HUD "15"//Airlock shock overlay -#define DIAG_PATH_HUD "16"//Bot path indicators -#define GLAND_HUD "17"//Gland indicators for abductors -#define SENTIENT_DISEASE_HUD "18" -#define AI_DETECT_HUD "19" + +/// Dead, alive, sick, health status +#define HEALTH_HUD "1" +/// A simple line rounding the mob's number health +#define STATUS_HUD "2" +/// The job asigned to your ID +#define ID_HUD "3" +/// Wanted, released, parroled, security status +#define WANTED_HUD "4" +/// Loyality implant +#define IMPLOYAL_HUD "5" +/// Chemical implant +#define IMPCHEM_HUD "6" +/// Tracking implant +#define IMPTRACK_HUD "7" +/// Silicon/Mech/Circuit Status +#define DIAG_STAT_HUD "8" +/// Silicon health bar +#define DIAG_HUD "9" +/// Borg/Mech/Circutry power meter +#define DIAG_BATT_HUD "10" +/// Mech health bar +#define DIAG_MECH_HUD "11" +/// Bot HUDs +#define DIAG_BOT_HUD "12" +/// Circuit assembly health bar +#define DIAG_CIRCUIT_HUD "13" +/// Mech/Silicon tracking beacon, Circutry long range icon +#define DIAG_TRACK_HUD "14" +/// Airlock shock overlay +#define DIAG_AIRLOCK_HUD "15" +/// Bot path indicators +#define DIAG_PATH_HUD "16" +/// Gland indicators for abductors +#define GLAND_HUD "17" +#define SENTIENT_DISEASE_HUD "18" +#define AI_DETECT_HUD "19" #define NANITE_HUD "20" #define DIAG_NANITE_FULL_HUD "21" -#define RAD_HUD "22" //radation alerts for medical huds -#define DIAG_LAUNCHPAD_HUD "23" //Displays launchpads' targeting reticle -//for antag huds. these are used at the /mob level -#define ANTAG_HUD "24" +/// Radation alerts for medical huds +#define RAD_HUD "22" +/// Displays launchpads' targeting reticle +#define DIAG_LAUNCHPAD_HUD "23" +/// Displays damage numbers, NOT USED BY THE ATOM TAKING DAMAGE, BUT RATHER AN EFFECT CREATED ON THEIR LOCATION +#define DAMAGE_INDICATOR_HUD "24" +/// For antag huds. these are used at the /mob level +#define ANTAG_HUD "25" //by default everything in the hud_list of an atom is an image //a value in hud_list with one of these will change that behavior @@ -34,35 +56,37 @@ //data HUD (medhud, sechud) defines //Don't forget to update human/New() if you change these! -#define DATA_HUD_SECURITY_BASIC 1 -#define DATA_HUD_SECURITY_ADVANCED 2 -#define DATA_HUD_MEDICAL_BASIC 3 -#define DATA_HUD_MEDICAL_ADVANCED 4 -#define DATA_HUD_DIAGNOSTIC_BASIC 5 -#define DATA_HUD_DIAGNOSTIC_ADVANCED 6 -#define DATA_HUD_ABDUCTOR 7 -#define DATA_HUD_SENTIENT_DISEASE 8 -#define DATA_HUD_AI_DETECT 9 +#define DATA_HUD_SECURITY_BASIC 1 +#define DATA_HUD_SECURITY_ADVANCED 2 +#define DATA_HUD_MEDICAL_BASIC 3 +#define DATA_HUD_MEDICAL_ADVANCED 4 +#define DATA_HUD_DIAGNOSTIC_BASIC 5 +#define DATA_HUD_DIAGNOSTIC_ADVANCED 6 +#define DATA_HUD_ABDUCTOR 7 +#define DATA_HUD_DAMAGE_INDICATOR 8 +#define DATA_HUD_SENTIENT_DISEASE 9 +#define DATA_HUD_AI_DETECT 10 //antag HUD defines -#define ANTAG_HUD_CULT 10 -#define ANTAG_HUD_REV 11 -#define ANTAG_HUD_OPS 12 -#define ANTAG_HUD_WIZ 13 -#define ANTAG_HUD_SHADOW 14 -#define ANTAG_HUD_TRAITOR 15 -#define ANTAG_HUD_NINJA 16 -#define ANTAG_HUD_CHANGELING 17 -#define ANTAG_HUD_ABDUCTOR 18 -#define ANTAG_HUD_DEVIL 19 -#define ANTAG_HUD_SINTOUCHED 20 -#define ANTAG_HUD_SOULLESS 21 -#define ANTAG_HUD_CLOCKWORK 22 -#define ANTAG_HUD_BROTHER 23 -#define ANTAG_HUD_BLOODSUCKER 24 -#define ANTAG_HUD_FUGITIVE 25 -#define ANTAG_HUD_HERETIC 26 -#define ANTAG_HUD_SPACECOP 27 -#define ANTAG_HUD_GANGSTER 28 +#define ANTAG_HUD_CULT 11 +#define ANTAG_HUD_REV 12 +#define ANTAG_HUD_OPS 13 +#define ANTAG_HUD_WIZ 14 +#define ANTAG_HUD_SHADOW 15 +#define ANTAG_HUD_TRAITOR 16 +#define ANTAG_HUD_NINJA 17 +#define ANTAG_HUD_CHANGELING 18 +#define ANTAG_HUD_ABDUCTOR 19 +#define ANTAG_HUD_DEVIL 20 +#define ANTAG_HUD_SINTOUCHED 21 +#define ANTAG_HUD_SOULLESS 22 +#define ANTAG_HUD_CLOCKWORK 23 +#define ANTAG_HUD_BROTHER 24 +#define ANTAG_HUD_BLOODSUCKER 25 +#define ANTAG_HUD_FUGITIVE 26 +#define ANTAG_HUD_HERETIC 27 +#define ANTAG_HUD_SPACECOP 28 +#define ANTAG_HUD_GANGSTER 29 -#define ADD_HUD_TO_COOLDOWN 20 //cooldown for being shown the images for any particular data hud +/// Cooldown for being shown the images for any particular data hud +#define ADD_HUD_TO_COOLDOWN 20 diff --git a/code/_rendering/atom_huds/atom_hud.dm b/code/_rendering/atom_huds/atom_hud.dm index cb8974988d08..bb3eda35650c 100644 --- a/code/_rendering/atom_huds/atom_hud.dm +++ b/code/_rendering/atom_huds/atom_hud.dm @@ -11,6 +11,7 @@ GLOBAL_LIST_INIT(huds, list( DATA_HUD_DIAGNOSTIC_BASIC = new/datum/atom_hud/data/diagnostic/basic(), DATA_HUD_DIAGNOSTIC_ADVANCED = new/datum/atom_hud/data/diagnostic/advanced(), DATA_HUD_ABDUCTOR = new/datum/atom_hud/abductor(), + DATA_HUD_DAMAGE_INDICATOR = new/datum/atom_hud/data/damage_indicator(), DATA_HUD_SENTIENT_DISEASE = new/datum/atom_hud/sentient_disease(), DATA_HUD_AI_DETECT = new/datum/atom_hud/ai_detector(), ANTAG_HUD_CULT = new/datum/atom_hud/antag(), diff --git a/code/_rendering/atom_huds/data_huds.dm b/code/_rendering/atom_huds/data_huds.dm index f120a0b82431..c3608c845ca5 100644 --- a/code/_rendering/atom_huds/data_huds.dm +++ b/code/_rendering/atom_huds/data_huds.dm @@ -60,6 +60,9 @@ /datum/atom_hud/data/bot_path hud_icons = list(DIAG_PATH_HUD) +/datum/atom_hud/data/damage_indicator + hud_icons = list(DAMAGE_INDICATOR_HUD) + /datum/atom_hud/abductor hud_icons = list(GLAND_HUD) @@ -521,3 +524,84 @@ holder.icon_state = "electrified" else holder.icon_state = "" + +/* + Damage indicator handlers +*/ + +GLOBAL_LIST_EMPTY(tracked_damage_indicators) + +/// Throws a damage indicator! This proc is non-blocking. +/mob/proc/throw_damage_indicator(damage_amount, damage_type) + set waitfor = FALSE + + if(isturf(loc)) + new /obj/effect/dummy/damage_indicator(loc, damage_amount, damage_type, WEAKREF(src)) + +/obj/effect/dummy/damage_indicator + hud_possible = list(DAMAGE_INDICATOR_HUD) + pixel_y = 16 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + var/damage_amount + var/damage_type + var/datum/weakref/damaged_atom + +/obj/effect/dummy/damage_indicator/Initialize(mapload, amount, type, source) + . = ..() + if(!amount) + return INITIALIZE_HINT_QDEL + + if(type && source) + LAZYADD(GLOB.tracked_damage_indicators, src) + + prepare_huds() + var/datum/atom_hud/data/damage_indicator/dam_hud = GLOB.huds[DATA_HUD_DAMAGE_INDICATOR] + dam_hud.add_to_hud(src) + + damage_amount = amount + damage_type = type + damaged_atom = source + + for(var/obj/effect/dummy/damage_indicator/different_damage_indicator as anything in GLOB.tracked_damage_indicators) + if(different_damage_indicator == src) + continue + if(damage_type != different_damage_indicator.damage_type) + continue + var/datum/weakref/check_this = damaged_atom.resolve() + var/datum/weakref/check_other = different_damage_indicator.damaged_atom.resolve() + if(isnull(check_this) || isnull(check_other)) + continue + if(check_this != check_other) + continue + if(!isnum(damage_amount) || !isnum(different_damage_indicator.damage_amount)) + continue + + damage_amount += different_damage_indicator.damage_amount + qdel(different_damage_indicator) + + var/text_color = "= crit_threshold) - adjustOxyLoss(-5) + var/to_heal = clamp(-getOxyLoss(), -5, 0) + if((health >= crit_threshold) && to_heal) + adjustOxyLoss(to_heal) oxygen_used = breath.get_moles(GAS_O2) clear_alert("not_enough_oxy") SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "suffocation") diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 76e620b20498..08627c7a0622 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -148,6 +148,7 @@ bruteloss = clamp((bruteloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) if(updating_health) updatehealth() + throw_damage_indicator(amount, BRUTE) return amount /mob/living/proc/getOxyLoss() @@ -159,6 +160,7 @@ oxyloss = clamp((oxyloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) if(updating_health) updatehealth() + throw_damage_indicator(amount, OXY) return amount /mob/living/proc/setOxyLoss(amount, updating_health = TRUE, forced = FALSE) @@ -167,6 +169,7 @@ oxyloss = amount if(updating_health) updatehealth() + throw_damage_indicator(amount, OXY) return amount //By default, returns toxins damage no matter what kind of tox damage the target is using. @@ -190,11 +193,13 @@ if(HAS_TRAIT(src, TRAIT_ROBOTIC_ORGANISM)) affected_by = TOX_SYSCORRUPT if(toxins_type != TOX_OMNI && toxins_type != affected_by) + throw_damage_indicator("IMMUNE", TOX) return FALSE toxloss = clamp((toxloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) if(updating_health) updatehealth() + throw_damage_indicator(amount, TOX) return amount //Defaults to omni here because setToxLoss is used by very few things that usually want to set all types @@ -206,11 +211,13 @@ if(HAS_TRAIT(src, TRAIT_ROBOTIC_ORGANISM)) affected_by = TOX_SYSCORRUPT if(toxins_type != TOX_OMNI && toxins_type != affected_by) + throw_damage_indicator("IMMUNE", TOX) return FALSE toxloss = amount if(updating_health) updatehealth() + throw_damage_indicator(amount, TOX) return amount /mob/living/proc/getFireLoss() @@ -223,6 +230,7 @@ fireloss = clamp((fireloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) if(updating_health) updatehealth() + throw_damage_indicator(amount, BURN) return amount /mob/living/proc/getCloneLoss() @@ -234,6 +242,7 @@ cloneloss = clamp((cloneloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) if(updating_health) updatehealth() + throw_damage_indicator(amount, CLONE) return amount /mob/living/proc/setCloneLoss(amount, updating_health = TRUE, forced = FALSE) @@ -242,6 +251,7 @@ cloneloss = amount if(updating_health) updatehealth() + throw_damage_indicator(amount, CLONE) return amount /mob/living/proc/adjustOrganLoss(slot, amount, maximum) diff --git a/code/modules/mob/living/silicon/pai/pai_defense.dm b/code/modules/mob/living/silicon/pai/pai_defense.dm index e54d5e05b7c4..248563c8a2d0 100644 --- a/code/modules/mob/living/silicon/pai/pai_defense.dm +++ b/code/modules/mob/living/silicon/pai/pai_defense.dm @@ -80,16 +80,22 @@ return amount /mob/living/silicon/pai/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE) - return take_holo_damage(amount) + . = take_holo_damage(amount) + if(.) + throw_damage_indicator(., BRUTE) /mob/living/silicon/pai/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE) - return take_holo_damage(amount) + . = take_holo_damage(amount) + if(.) + throw_damage_indicator(., BURN) /mob/living/silicon/pai/adjustStaminaLoss(amount, updating_health, forced = FALSE) if(forced) - take_holo_damage(amount) + . = take_holo_damage(amount) else - take_holo_damage(amount * 0.25) + . = take_holo_damage(amount * 0.25) + if(.) + throw_damage_indicator(., STAMINA) /mob/living/silicon/pai/adjustOrganLoss(slot, amount, maximum = 500) //I kept this in, unlike tg DefaultCombatKnockdown(amount * 0.2) diff --git a/code/modules/mob/living/simple_animal/damage_procs.dm b/code/modules/mob/living/simple_animal/damage_procs.dm index f47845882995..c4e8c29f5953 100644 --- a/code/modules/mob/living/simple_animal/damage_procs.dm +++ b/code/modules/mob/living/simple_animal/damage_procs.dm @@ -1,41 +1,42 @@ -/mob/living/simple_animal/proc/adjustHealth(amount, updating_health = TRUE, forced = FALSE) +/mob/living/simple_animal/proc/adjustHealth(amount, updating_health = TRUE, forced = FALSE, damage_type = BRUTE) if(!forced && (status_flags & GODMODE)) return FALSE bruteloss = round(clamp(bruteloss + amount, 0, maxHealth),DAMAGE_PRECISION) if(updating_health) updatehealth() + throw_damage_indicator(amount, damage_type) return amount /mob/living/simple_animal/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE) if(forced) - . = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced) + . = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced, BRUTE) else if(damage_coeff[BRUTE]) - . = adjustHealth(amount * damage_coeff[BRUTE] * CONFIG_GET(number/damage_multiplier), updating_health, forced) + . = adjustHealth(amount * damage_coeff[BRUTE] * CONFIG_GET(number/damage_multiplier), updating_health, forced, BRUTE) /mob/living/simple_animal/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE) if(forced) - . = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced) + . = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced, BURN) else if(damage_coeff[BURN]) - . = adjustHealth(amount * damage_coeff[BURN] * CONFIG_GET(number/damage_multiplier), updating_health, forced) + . = adjustHealth(amount * damage_coeff[BURN] * CONFIG_GET(number/damage_multiplier), updating_health, forced, BURN) /mob/living/simple_animal/adjustOxyLoss(amount, updating_health = TRUE, forced = FALSE) if(forced) - . = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced) + . = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced, OXY) else if(damage_coeff[OXY]) - . = adjustHealth(amount * damage_coeff[OXY] * CONFIG_GET(number/damage_multiplier), updating_health, forced) + . = adjustHealth(amount * damage_coeff[OXY] * CONFIG_GET(number/damage_multiplier), updating_health, forced, OXY) /mob/living/simple_animal/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE, toxins_type = TOX_DEFAULT) if(forced) - . = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced) + . = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced, TOX) else if(damage_coeff[TOX]) - . = adjustHealth(amount * damage_coeff[TOX] * CONFIG_GET(number/damage_multiplier), updating_health, forced) + . = adjustHealth(amount * damage_coeff[TOX] * CONFIG_GET(number/damage_multiplier), updating_health, forced, TOX) /mob/living/simple_animal/adjustCloneLoss(amount, updating_health = TRUE, forced = FALSE) if(forced) - . = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced) + . = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced, CLONE) else if(damage_coeff[CLONE]) - . = adjustHealth(amount * damage_coeff[CLONE] * CONFIG_GET(number/damage_multiplier), updating_health, forced) + . = adjustHealth(amount * damage_coeff[CLONE] * CONFIG_GET(number/damage_multiplier), updating_health, forced, CLONE) /mob/living/simple_animal/adjustStaminaLoss(amount, forced = FALSE) return diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index c4ab435ee0cf..e384a7bd8c2b 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -303,12 +303,18 @@ return FALSE brute_dam += brute + if(brute) + owner.throw_damage_indicator(brute, BRUTE) burn_dam += burn + if(burn) + owner.throw_damage_indicator(burn, BURN) //We've dealt the physical damages, if there's room lets apply the stamina damage. var/current_damage = get_damage(TRUE) //This time around, count stamina loss too. var/available_damage = max_damage - current_damage stamina_dam += round(clamp(stamina, 0, min(max_stamina_damage - stamina_dam, available_damage)), DAMAGE_PRECISION) + if(stamina) + owner.throw_damage_indicator(stamina, STAMINA) if(disabled && stamina > 10) incoming_stam_mult = max(0.01, incoming_stam_mult/(stamina*0.1)) diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 058de79d046a..28fc63f0c3fe 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -128,7 +128,7 @@ /obj/item/organ/lungs/proc/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/H) //TODO: add lung damage = less oxygen gains - var/breathModifier = (5-(5*(damage/maxHealth)/2)) //range 2.5 - 5 + var/breathModifier = clamp(-H.getOxyLoss(), -(5-(5*(damage/maxHealth)/2)), 0) //range 2.5 - 5 if((H.status_flags & GODMODE)) return if(HAS_TRAIT(H, TRAIT_NOBREATH)) @@ -212,8 +212,8 @@ H.throw_alert(alert_category, alert_type) else H.failed_last_breath = FALSE - if(H.health >= H.crit_threshold) - H.adjustOxyLoss(-breathModifier) + if((H.health >= H.crit_threshold) && breathModifier) + H.adjustOxyLoss(breathModifier) if(alert_category) H.clear_alert(alert_category) var/list/danger_reagents = GLOB.gas_data.breath_reagents_dangerous diff --git a/interface/skin.dmf b/interface/skin.dmf index d80b5dcd2244..28c320a8a73c 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -108,7 +108,7 @@ window "mapwindow" text-color = none is-default = true saved-params = "zoom;letterbox;zoom-mode" - style = ".center { text-align: center; } .maptext { font-family: 'Small Fonts'; font-size: 7px; -dm-text-outline: 1px black; color: white; line-height: 1.1; } .command_headset { font-weight: bold;\tfont-size: 8px; } .context { font-family: 'Pixellari'; font-size: 12pt; -dm-text-outline: 1px black; } .subcontext { font-family: 'TinyUnicode'; font-size: 12pt; line-height: 0.75; } .small { font-size: 6px; } .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .greentext { color: #00FF00; font-size: 7px; } .redtext { color: #FF0000; font-size: 7px; } .clown { color: #FF69Bf; font-size: 7px; font-weight: bold; } .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; } .italics { font-size: 6px; }" + style = ".center { text-align: center; } .maptext { font-family: 'Small Fonts'; font-size: 7px; -dm-text-outline: 1px black; color: white; line-height: 1.1; } .command_headset { font-weight: bold;\tfont-size: 8px; } .context { font-family: 'Pixellari'; font-size: 12pt; -dm-text-outline: 1px black; } .subcontext { font-family: 'TinyUnicode'; font-size: 12pt; line-height: 0.75; } .small { font-size: 6px; } .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .greentext { color: #00FF00; font-size: 7px; } .redtext { color: #FF0000; font-size: 7px; } .clown { color: #FF69Bf; font-size: 7px; font-weight: bold; } .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; } .italics { font-size: 6px; } .damage_indicator { font-family: 'TinyUnicode'; font-size: 12pt; line-height: 0.75; text-align: center; -dm-text-outline: 1px black; }" elem "status_bar" type = LABEL pos = 0,1008 diff --git a/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm b/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm index 0457b853b780..9ad1baf34568 100644 --- a/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm +++ b/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm @@ -9,4 +9,5 @@ update_stamina() if((combat_flags & COMBAT_FLAG_HARD_STAMCRIT) && amount > 20) incomingstammult = max(0.01, incomingstammult/(amount*0.05)) + throw_damage_indicator(amount, STAMINA) return amount