diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 8842a86965f0..f7527fa30303 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -763,3 +763,6 @@ ///called in /obj/item/gun/process_chamber (src) #define COMSIG_GUN_CHAMBER_PROCESSED "gun_chamber_processed" + +///called when an elzu should unroot +#define COMSIG_DIGOUT "dig_out" diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index dbaac99c4296..d79847ea04c8 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -239,3 +239,8 @@ description = "Fishing is relaxing" mood_change = 5 timeout = 3 MINUTES + +/datum/mood_event/root + description = span_nicegreen("I rooted recently, it feels good to charge naturally.\n") + mood_change = 5 + timeout = 5 MINUTES diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index 76a33319631f..c7765ff772ac 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -275,3 +275,29 @@ /atom/movable/screen/alert/status_effect/surrender/Click(location, control, params) . = ..() owner.emote("surrender") + +/datum/status_effect/rooted + id = "rooted" + alert_type = /atom/movable/screen/alert/status_effect/rooted + +/datum/status_effect/rooted/on_apply() + . = ..() + ADD_TRAIT(owner,TRAIT_IMMOBILIZED, TRAIT_STATUS_EFFECT(id)) + ADD_TRAIT(owner,TRAIT_PUSHIMMUNE, TRAIT_STATUS_EFFECT(id)) + SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "root", /datum/mood_event/root) + +/datum/status_effect/rooted/on_remove() + . = ..() + REMOVE_TRAIT(owner,TRAIT_IMMOBILIZED, TRAIT_STATUS_EFFECT(id)) + REMOVE_TRAIT(owner,TRAIT_PUSHIMMUNE, TRAIT_STATUS_EFFECT(id)) + +/atom/movable/screen/alert/status_effect/rooted + name = "Rooted" + desc = "You're currently rooted into the ground and can't move. Click here to start digging yourself out." + icon_state = "dig_out" + +/atom/movable/screen/alert/status_effect/rooted/Click(location, control, params) + . = ..() + to_chat(owner, span_notice("You begin digging yourself free.")) + SEND_SIGNAL(owner,COMSIG_DIGOUT) + diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index 248e9f413795..6aa59e824169 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -1,4 +1,8 @@ #define ELZUOSE_EMAG_COLORS list("#00ffff", "#ffc0cb", "#9400D3", "#4B0082", "#0000FF", "#00FF00", "#FFFF00", "#FF7F00", "#FF0000") +#define GOOD_SOIL list(/turf/open/floor/plating/grass, /turf/open/floor/plating/dirt, /turf/open/floor/ship/dirt, /turf/open/floor/grass/ship, /turf/open/floor/plating/asteroid/whitesands/grass, /turf/open/floor/grass/fairy/beach) +#define DIG_TIME (7.5 SECONDS) +#define ROOT_TIME (3 SECONDS) +#define ROOT_CHARGE_GAIN (5 * ELZUOSE_CHARGE_SCALING_MULTIPLIER) /datum/species/elzuose name = "\improper Elzuose" @@ -14,6 +18,7 @@ attack_type = BURN //burn bish exotic_bloodtype = "E" damage_overlay_type = "" //We are too cool for regular damage overlays + species_age_max = 300 species_traits = list(DYNCOLORS, EYECOLOR, HAIR, FACEHAIR) changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT species_language_holder = /datum/language_holder/ethereal @@ -46,35 +51,118 @@ loreblurb = "Elzuosa are an uncommon and unusual species best described as crystalline, electrically-powered plantpeople. They hail from the warm planet Kalixcis, where they evolved alongside the Sarathi. Kalixcian culture places no importance on blood-bonds, and those from it tend to consider their family anyone they are sufficiently close to, and choose their own names." var/drain_time = 0 //used to keep ethereals from spam draining power sources var/obj/effect/dummy/lighting_obj/ethereal_light + var/datum/action/innate/root/rooting /datum/species/elzuose/Destroy(force) if(ethereal_light) QDEL_NULL(ethereal_light) return ..() -/datum/species/elzuose/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) +/datum/species/elzuose/on_species_gain(mob/living/carbon/_carbon, datum/species/old_species, pref_load) . = ..() - if(!ishuman(C)) + if(!ishuman(_carbon)) return - var/mob/living/carbon/human/ethereal = C + var/mob/living/carbon/human/ethereal = _carbon default_color = "#[ethereal.dna.features["ethcolor"]]" RegisterSignal(ethereal, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emag_act)) RegisterSignal(ethereal, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act)) ethereal_light = ethereal.mob_light() spec_updatehealth(ethereal) + rooting = new + rooting.Grant(_carbon) + RegisterSignal(ethereal, COMSIG_DIGOUT, PROC_REF(digout)) + RegisterSignal(ethereal, COMSIG_MOVABLE_MOVED, PROC_REF(uproot)) //The following code is literally only to make admin-spawned ethereals not be black. - C.dna.features["mcolor"] = C.dna.features["ethcolor"] //Ethcolor and Mut color are both dogshit and will be replaced - for(var/obj/item/bodypart/BP as anything in C.bodyparts) + _carbon.dna.features["mcolor"] = _carbon.dna.features["ethcolor"] //Ethcolor and Mut color are both dogshit and will be replaced + for(var/obj/item/bodypart/BP as anything in _carbon.bodyparts) if(BP.limb_id == SPECIES_ELZUOSE) BP.update_limb(is_creating = TRUE) -/datum/species/elzuose/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load) - UnregisterSignal(C, COMSIG_ATOM_EMAG_ACT) - UnregisterSignal(C, COMSIG_ATOM_EMP_ACT) +/datum/species/elzuose/on_species_loss(mob/living/carbon/human/_carbon, datum/species/new_species, pref_load) + UnregisterSignal(_carbon, COMSIG_ATOM_EMAG_ACT) + UnregisterSignal(_carbon, COMSIG_ATOM_EMP_ACT) + UnregisterSignal(_carbon, COMSIG_DIGOUT) + UnregisterSignal(_carbon, COMSIG_MOVABLE_MOVED) QDEL_NULL(ethereal_light) + if(rooting) + rooting.Remove(_carbon) return ..() +/datum/action/innate/root + name = "Root" + desc = "Root into good soil to gain charge." + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "plant-22" + icon_icon = 'icons/obj/flora/plants.dmi' + background_icon_state = "bg_alien" + +/datum/action/innate/root/Activate() + var/mob/living/carbon/human/_human = owner + var/datum/species/elzuose/_elzu = _human.dna.species + // this is healthy for elzu, they shouldnt be able to overcharge and get heart attacks from this + var/obj/item/organ/stomach/ethereal/stomach = _human.getorganslot(ORGAN_SLOT_STOMACH) + + if(_human.wear_suit && istype(_human.wear_suit, /obj/item/clothing)) + var/obj/item/clothing/CS = _human.wear_suit + if (CS.clothing_flags & THICKMATERIAL) + to_chat(_human, span_warning("Your [CS.name] is too thick to root in!")) + return + + if(stomach.crystal_charge > ELZUOSE_CHARGE_FULL) + to_chat(_human,span_warning("Your charge is full!")) + return + _elzu.drain_time = world.time + ROOT_TIME + _human.visible_message(span_notice("[_human] is digging into the ground"),span_warning("You start to dig yourself into the ground to root. You won't won't be able to move once you start the process."),span_notice("You hear digging.")) + if(!do_after(_human,DIG_TIME, target = _human)) + to_chat(_human,span_warning("You were interupted!")) + return + _human.apply_status_effect(/datum/status_effect/rooted) + to_chat(_human, span_notice("You root into the ground and begin to feed.")) + + while(do_after(_human, ROOT_TIME, target = _human)) + if(istype(stomach)) + to_chat(_human, span_notice("You receive some charge from rooting.")) + stomach.adjust_charge(ROOT_CHARGE_GAIN) + _human.adjustBruteLoss(-3) + _human.adjustFireLoss(-3) + + if(stomach.crystal_charge > ELZUOSE_CHARGE_FULL) + stomach.crystal_charge = ELZUOSE_CHARGE_FULL + to_chat(_human, span_notice("You're full on charge!")) + break + + else + to_chat(_human,span_warning("You're missing your biological battery and can't recieve charge from rooting!")) + break + +/datum/species/elzuose/proc/digout(mob/living/carbon/human/_human) + if(do_after(_human, DIG_TIME,target = _human)) + to_chat(_human,span_notice("You finish digging yourself out.")) + _human.remove_status_effect(/datum/status_effect/rooted) + return + +/datum/species/elzuose/proc/uproot(mob/living/carbon/human/_human) + //You got moved and uprooted, time to suffer the consequences. + if(_human.has_status_effect(/datum/status_effect/rooted)) + _human.visible_message(span_warning("[_human] is forcefully uprooted. That looked like it hurt."),span_warning("You're forcefully unrooted! Ouch!"),span_warning("You hear someone scream in pain.")) + _human.apply_damage(8,BRUTE,BODY_ZONE_CHEST) + _human.apply_damage(8,BRUTE,BODY_ZONE_L_LEG) + _human.apply_damage(8,BRUTE,BODY_ZONE_R_LEG) + _human.emote("scream") + _human.remove_status_effect(/datum/status_effect/rooted) + return + +/datum/action/innate/root/IsAvailable() + if(..()) + var/mob/living/carbon/human/_human = owner + var/turf/terrain = get_turf(_human) + if(_human.has_status_effect(/datum/status_effect/rooted)) + return FALSE + if(is_type_in_list(terrain,GOOD_SOIL)) + return TRUE + return FALSE + /datum/species/elzuose/random_name(gender,unique,lastname) if(unique) return random_unique_lizard_name(gender) @@ -86,30 +174,30 @@ return randname -/datum/species/elzuose/spec_updatehealth(mob/living/carbon/human/H) +/datum/species/elzuose/spec_updatehealth(mob/living/carbon/human/_human) . = ..() if(!ethereal_light) return - if(H.stat != DEAD && !EMPeffect) + if(_human.stat != DEAD && !EMPeffect) if(!emag_effect) - current_color = health_adjusted_color(H, default_color) - set_ethereal_light(H, current_color) + current_color = health_adjusted_color(_human, default_color) + set_ethereal_light(_human, current_color) ethereal_light.set_light_on(TRUE) fixed_mut_color = copytext_char(current_color, 2) else ethereal_light.set_light_on(FALSE) fixed_mut_color = rgb(128,128,128) - for(var/obj/item/bodypart/parts_to_update as anything in H.bodyparts) + for(var/obj/item/bodypart/parts_to_update as anything in _human.bodyparts) parts_to_update.species_color = fixed_mut_color parts_to_update.update_limb() - H.update_body() - H.update_hair() + _human.update_body() + _human.update_hair() -/datum/species/elzuose/proc/health_adjusted_color(mob/living/carbon/human/H, default_color) - var/health_percent = max(H.health, 0) / 100 +/datum/species/elzuose/proc/health_adjusted_color(mob/living/carbon/human/_human, default_color) + var/health_percent = max(_human.health, 0) / 100 var/static/unhealthy_color_red_part = GETREDPART(unhealthy_color) var/static/unhealthy_color_green_part = GETGREENPART(unhealthy_color) @@ -126,130 +214,129 @@ ) return result -/datum/species/elzuose/proc/set_ethereal_light(mob/living/carbon/human/H, current_color) +/datum/species/elzuose/proc/set_ethereal_light(mob/living/carbon/human/_human, current_color) if(!ethereal_light) return - var/health_percent = max(H.health, 0) / 100 + var/health_percent = max(_human.health, 0) / 100 var/light_range = 1 + (1 * health_percent) var/light_power = 1 + round(0.5 * health_percent) ethereal_light.set_light_range_power_color(light_range, light_power, current_color) -/datum/species/elzuose/proc/on_emp_act(mob/living/carbon/human/H, severity) +/datum/species/elzuose/proc/on_emp_act(mob/living/carbon/human/_human, severity) EMPeffect = TRUE - spec_updatehealth(H) - to_chat(H, "You feel the light of your body leave you.") + spec_updatehealth(_human) + to_chat(_human, span_notice("You feel the light of your body leave you.")) switch(severity) if(EMP_LIGHT) - addtimer(CALLBACK(src, PROC_REF(stop_emp), H), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 10 seconds + addtimer(CALLBACK(src, PROC_REF(stop_emp), _human), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 10 seconds if(EMP_HEAVY) - addtimer(CALLBACK(src, PROC_REF(stop_emp), H), 20 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 20 seconds + addtimer(CALLBACK(src, PROC_REF(stop_emp), _human), 20 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 20 seconds -/datum/species/elzuose/proc/on_emag_act(mob/living/carbon/human/H, mob/user) +/datum/species/elzuose/proc/on_emag_act(mob/living/carbon/human/_human, mob/user) if(emag_effect) return emag_effect = TRUE if(user) - to_chat(user, "You tap [H] on the back with your card.") - H.visible_message("[H] starts flickering in an array of colors!") - handle_emag(H) - addtimer(CALLBACK(src, PROC_REF(stop_emag), H), 30 SECONDS) //Disco mode for 30 seconds! This doesn't affect the ethereal at all besides either annoying some players, or making someone look badass. + to_chat(user, span_notice("You tap [_human] on the back with your card.")) + _human.visible_message(span_danger("[_human] starts flickering in an array of colors!")) + handle_emag(_human) + addtimer(CALLBACK(src, PROC_REF(stop_emag), _human), 30 SECONDS) //Disco mode for 30 seconds! This doesn't affect the ethereal at all besides either annoying some players, or making someone look badass. -/datum/species/elzuose/spec_life(mob/living/carbon/human/H) +/datum/species/elzuose/spec_life(mob/living/carbon/human/_human) .=..() - handle_charge(H) + handle_charge(_human) -/datum/species/elzuose/proc/stop_emp(mob/living/carbon/human/H) +/datum/species/elzuose/proc/stop_emp(mob/living/carbon/human/_human) EMPeffect = FALSE - spec_updatehealth(H) - to_chat(H, "You feel more energized as your shine comes back.") + spec_updatehealth(_human) + to_chat(_human, span_notice("You feel more energized as your shine comes back.")) -/datum/species/elzuose/proc/handle_emag(mob/living/carbon/human/H) +/datum/species/elzuose/proc/handle_emag(mob/living/carbon/human/_human) if(!emag_effect) return current_color = pick(ELZUOSE_EMAG_COLORS) - spec_updatehealth(H) - addtimer(CALLBACK(src, PROC_REF(handle_emag), H), 5) //Call ourselves every 0.5 seconds to change color + spec_updatehealth(_human) + addtimer(CALLBACK(src, PROC_REF(handle_emag), _human), 5) //Call ourselves every 0.5 seconds to change color -/datum/species/elzuose/proc/stop_emag(mob/living/carbon/human/H) +/datum/species/elzuose/proc/stop_emag(mob/living/carbon/human/_human) emag_effect = FALSE - spec_updatehealth(H) - H.visible_message("[H] stops flickering and goes back to their normal state!") + spec_updatehealth(_human) + _human.visible_message(span_danger("[_human] stops flickering and goes back to their normal state!")) -/datum/species/elzuose/proc/handle_charge(mob/living/carbon/human/H) +/datum/species/elzuose/proc/handle_charge(mob/living/carbon/human/_human) brutemod = 1.25 - switch(get_charge(H)) + switch(get_charge(_human)) if(ELZUOSE_CHARGE_NONE to ELZUOSE_CHARGE_LOWPOWER) - if(get_charge(H) == ELZUOSE_CHARGE_NONE) - H.throw_alert("ELZUOSE_CHARGE", /atom/movable/screen/alert/etherealcharge, 3) + if(get_charge(_human) == ELZUOSE_CHARGE_NONE) + _human.throw_alert("ELZUOSE_CHARGE", /atom/movable/screen/alert/etherealcharge, 3) else - H.throw_alert("ELZUOSE_CHARGE", /atom/movable/screen/alert/etherealcharge, 2) - if(H.health > 10.5) - apply_damage(0.2, TOX, null, null, H) + _human.throw_alert("ELZUOSE_CHARGE", /atom/movable/screen/alert/etherealcharge, 2) + if(_human.health > 10.5) + apply_damage(0.2, TOX, null, null, _human) brutemod = 1.75 if(ELZUOSE_CHARGE_LOWPOWER to ELZUOSE_CHARGE_NORMAL) - H.throw_alert("ELZUOSE_CHARGE", /atom/movable/screen/alert/etherealcharge, 1) + _human.throw_alert("ELZUOSE_CHARGE", /atom/movable/screen/alert/etherealcharge, 1) brutemod = 1.5 if(ELZUOSE_CHARGE_FULL to ELZUOSE_CHARGE_OVERLOAD) - H.throw_alert("ethereal_overcharge", /atom/movable/screen/alert/ethereal_overcharge, 1) + _human.throw_alert("ethereal_overcharge", /atom/movable/screen/alert/ethereal_overcharge, 1) brutemod = 1.5 if(ELZUOSE_CHARGE_OVERLOAD to ELZUOSE_CHARGE_DANGEROUS) - H.throw_alert("ethereal_overcharge", /atom/movable/screen/alert/ethereal_overcharge, 2) + _human.throw_alert("ethereal_overcharge", /atom/movable/screen/alert/ethereal_overcharge, 2) brutemod = 1.75 if(prob(10)) //10% each tick for ethereals to explosively release excess energy if it reaches dangerous levels - discharge_process(H) + discharge_process(_human) else - H.clear_alert("ELZUOSE_CHARGE") - H.clear_alert("ethereal_overcharge") + _human.clear_alert("ELZUOSE_CHARGE") + _human.clear_alert("ethereal_overcharge") -/datum/species/elzuose/proc/discharge_process(mob/living/carbon/human/H) - to_chat(H, "You begin to lose control over your charge!") - H.visible_message("[H] begins to spark violently!") +/datum/species/elzuose/proc/discharge_process(mob/living/carbon/human/_human) + _human.visible_message(span_danger("[_human] begins to spark violently!"),_human,span_warning("You begin to lose control over your charge!")) var/static/mutable_appearance/overcharge //shameless copycode from lightning spell overcharge = overcharge || mutable_appearance('icons/effects/effects.dmi', "electricity", EFFECTS_LAYER) - H.add_overlay(overcharge) - if(do_mob(H, H, 50, 1)) - H.flash_lighting_fx(5, 7, current_color) - var/obj/item/organ/stomach/ethereal/stomach = H.getorganslot(ORGAN_SLOT_STOMACH) - playsound(H, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5) - H.cut_overlay(overcharge) - tesla_zap(H, 2, (stomach.crystal_charge / ELZUOSE_CHARGE_SCALING_MULTIPLIER) * 50, ZAP_OBJ_DAMAGE | ZAP_ALLOW_DUPLICATES) + _human.add_overlay(overcharge) + if(do_mob(_human, _human, 50, 1)) + _human.flash_lighting_fx(5, 7, current_color) + var/obj/item/organ/stomach/ethereal/stomach = _human.getorganslot(ORGAN_SLOT_STOMACH) + playsound(_human, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5) + _human.cut_overlay(overcharge) + tesla_zap(_human, 2, (stomach.crystal_charge / ELZUOSE_CHARGE_SCALING_MULTIPLIER) * 50, ZAP_OBJ_DAMAGE | ZAP_ALLOW_DUPLICATES) if(istype(stomach)) stomach.adjust_charge(ELZUOSE_CHARGE_FULL - stomach.crystal_charge) - to_chat(H, "You violently discharge energy!") - H.visible_message("[H] violently discharges energy!") + to_chat(_human,span_warning("You violently discharge energy!")) + _human.visible_message(span_danger("[_human] violently discharges energy!")) if(prob(10)) //chance of developing heart disease to dissuade overcharging oneself var/datum/disease/D = new /datum/disease/heart_failure - H.ForceContractDisease(D) - to_chat(H, "You're pretty sure you just felt your heart stop for a second there..") - H.playsound_local(H, 'sound/effects/singlebeat.ogg', 100, 0) - H.Paralyze(100) + _human.ForceContractDisease(D) + to_chat(_human, span_userdanger("You're pretty sure you just felt your heart stop for a second there.")) + _human.playsound_local(_human, 'sound/effects/singlebeat.ogg', 100, 0) + _human.Paralyze(100) return -/datum/species/elzuose/proc/get_charge(mob/living/carbon/H) //this feels like it should be somewhere else. Eh? - var/obj/item/organ/stomach/ethereal/stomach = H.getorganslot(ORGAN_SLOT_STOMACH) +/datum/species/elzuose/proc/get_charge(mob/living/carbon/_human) //this feels like it should be somewhere else. Eh? + var/obj/item/organ/stomach/ethereal/stomach = _human.getorganslot(ORGAN_SLOT_STOMACH) if(istype(stomach)) return stomach.crystal_charge return ELZUOSE_CHARGE_NONE -/datum/species/elzuose/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) +/datum/species/elzuose/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/_human) if(istype(I, /obj/item/multitool)) if(user.a_intent == INTENT_HARM) . = ..() // multitool beatdown return if (emag_effect == TRUE) - to_chat(user, "The multitool can't get a lock on [H]'s EM frequency") + to_chat(user, span_warning("The multitool can't get a lock on [_human]'s EM frequency!")) return - if(user != H) + if(user != _human) // random color change default_color = "#" + GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)] - current_color = health_adjusted_color(H, default_color) - spec_updatehealth(H) - H.visible_message("[H]'s EM frequency is scrambled to a random color.") + current_color = health_adjusted_color(_human, default_color) + spec_updatehealth(_human) + _human.visible_message(span_danger("[_human]'s EM frequency is scrambled to a random color.")) else // select new color var/new_etherealcolor = input(user, "Choose your Elzuose color:", "Character Preference",default_color) as color|null @@ -257,10 +344,10 @@ var/temp_hsv = RGBtoHSV(new_etherealcolor) if(ReadHSV(temp_hsv)[3] >= ReadHSV("#505050")[3]) // elzu colors should be bright ok?? default_color = sanitize_hexcolor(new_etherealcolor, 6, TRUE) - current_color = health_adjusted_color(H, default_color) - spec_updatehealth(H) - H.visible_message("[H] modulates \his EM frequency to [new_etherealcolor].") + current_color = health_adjusted_color(_human, default_color) + spec_updatehealth(_human) + _human.visible_message(span_notice("[_human] modulates [_human.p_their()] EM frequency to [new_etherealcolor]")) else - to_chat(user, "Invalid color. Your color is not bright enough.") + to_chat(user, span_danger("Invalid color. Your color is not bright enough.")) else . = ..() diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi index 1e03d316c2e3..60ada01078d7 100644 Binary files a/icons/hud/screen_alert.dmi and b/icons/hud/screen_alert.dmi differ