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