diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 23d18bdf863..22c92de2083 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -429,7 +429,8 @@ #define MAX_REVIVE_FIRE_DAMAGE 180 #define MAX_REVIVE_BRUTE_DAMAGE 180 -#define HUMAN_FIRE_STACK_ICON_NUM 3 +// If a mob has a higher threshold than this, the icon shown will be increased to the big fire icon. +#define MOB_BIG_FIRE_STACK_THRESHOLD 3 #define GRAB_PIXEL_SHIFT_PASSIVE 6 #define GRAB_PIXEL_SHIFT_AGGRESSIVE 12 diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm index 869fa9b2f04..ec990b9f2b2 100644 --- a/code/modules/mob/living/carbon/carbon_update_icons.dm +++ b/code/modules/mob/living/carbon/carbon_update_icons.dm @@ -77,6 +77,28 @@ overlays_standing[HANDS_LAYER] = hands apply_overlay(HANDS_LAYER) +/mob/living/carbon/update_fire_overlay(stacks, on_fire, last_icon_state, suffix = "") + var/fire_icon = "[dna?.species.fire_overlay || "human"]_[stacks > MOB_BIG_FIRE_STACK_THRESHOLD ? "big_fire" : "small_fire"][suffix]" + + if(!GLOB.fire_appearances[fire_icon]) + GLOB.fire_appearances[fire_icon] = mutable_appearance('icons/mob/onfire.dmi', fire_icon, -FIRE_LAYER, appearance_flags = RESET_COLOR) + + if((stacks > 0 && on_fire) || HAS_TRAIT(src, TRAIT_PERMANENTLY_ONFIRE)) + if(fire_icon == last_icon_state) + return last_icon_state + + remove_overlay(FIRE_LAYER) + overlays_standing[FIRE_LAYER] = GLOB.fire_appearances[fire_icon] + apply_overlay(FIRE_LAYER) + return fire_icon + + if(!last_icon_state) + return last_icon_state + + remove_overlay(FIRE_LAYER) + apply_overlay(FIRE_LAYER) + return null + /mob/living/carbon/update_damage_overlays() remove_overlay(DAMAGE_LAYER) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index fe45a5781fa..e3bd697b8ff 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -1050,35 +1050,6 @@ for(var/obj/item/burning in burning_items) burning.fire_act((stacks * 25 * delta_time)) //damage taken is reduced to 2% of this value by fire_act() -/mob/living/carbon/human/update_fire_overlay(stacks, on_fire, last_icon_state, suffix = "") - var/fire_icon = "generic_burning[suffix]" - if(stacks > HUMAN_FIRE_STACK_ICON_NUM) - if(dna && dna.species) - fire_icon = "[dna.species.fire_overlay][suffix]" - else - fire_icon = "human_burning[suffix]" - - if(!GLOB.fire_appearances[fire_icon]) - var/mutable_appearance/new_fire_overlay = mutable_appearance('icons/mob/onfire.dmi', fire_icon, -FIRE_LAYER) - new_fire_overlay.appearance_flags = RESET_COLOR - GLOB.fire_appearances[fire_icon] = new_fire_overlay - - if((stacks > 0 && on_fire) || HAS_TRAIT(src, TRAIT_PERMANENTLY_ONFIRE)) - if(fire_icon == last_icon_state) - return last_icon_state - - remove_overlay(FIRE_LAYER) - overlays_standing[FIRE_LAYER] = GLOB.fire_appearances[fire_icon] - apply_overlay(FIRE_LAYER) - return fire_icon - - if(!last_icon_state) - return last_icon_state - - remove_overlay(FIRE_LAYER) - apply_overlay(FIRE_LAYER) - return null - /mob/living/carbon/human/on_fire_stack(delta_time, times_fired, datum/status_effect/fire_handler/fire_stacks/fire_handler) SEND_SIGNAL(src, COMSIG_HUMAN_BURNING) burn_clothing(delta_time, times_fired, fire_handler.stacks) @@ -1086,3 +1057,4 @@ if(dna && dna.species) no_protection = dna.species.handle_fire(src, delta_time, times_fired, no_protection) fire_handler.harm_human(delta_time, times_fired, no_protection) + diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 05b22b038af..1fbb0110efb 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -166,7 +166,7 @@ GLOBAL_LIST_EMPTY(features_by_species) var/bodytemp_cold_damage_limit = BODYTEMP_COLD_DAMAGE_LIMIT /// The icon_state of the fire overlay added when sufficently ablaze and standing. see onfire.dmi - var/fire_overlay = "human_burning" + var/fire_overlay = "human" ///the species that body parts are surgically compatible with (found in _DEFINES/mobs.dm) ///current acceptable bitfields are HUMAN_BODY, ALIEN_BODY, LARVA_BODY, MONKEY_BODY, or NONE diff --git a/code/modules/mob/living/carbon/human/species_types/monkeys.dm b/code/modules/mob/living/carbon/human/species_types/monkeys.dm index a10d9c76dac..26b407fcdcd 100644 --- a/code/modules/mob/living/carbon/human/species_types/monkeys.dm +++ b/code/modules/mob/living/carbon/human/species_types/monkeys.dm @@ -54,7 +54,7 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/monkey, BODY_ZONE_CHEST = /obj/item/bodypart/chest/monkey, ) - fire_overlay = "monkey_burning" + fire_overlay = "monkey" dust_anim = "dust-m" gib_anim = "gibbed-m" diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index ec7ae0b4c3c..aa9dbb3402f 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1005,8 +1005,9 @@ /mob/living/silicon/robot/proc/untip_roleplay() to_chat(src, span_notice("Your frustration has empowered you! You can now right yourself faster!")) + /mob/living/silicon/robot/update_fire_overlay(stacks, on_fire, last_icon_state, suffix = "") - var/fire_icon = "generic_burning[suffix]" + var/fire_icon = "generic_fire[suffix]" if(!GLOB.fire_appearances[fire_icon]) var/mutable_appearance/new_fire_overlay = mutable_appearance('icons/mob/onfire.dmi', fire_icon, -FIRE_LAYER) @@ -1024,3 +1025,4 @@ cut_overlay(GLOB.fire_appearances[fire_icon]) return null + diff --git a/icons/mob/onfire.dmi b/icons/mob/onfire.dmi index 4fa6ec88acd..09ffc089c78 100644 Binary files a/icons/mob/onfire.dmi and b/icons/mob/onfire.dmi differ