Files
Bubberstation/code/datums/elements/bugkiller_reagent.dm
Ghom 999bde8f84 Most screen alerts now fit the player's hud style. (#93493)
## About The Pull Request
Most screen alerts that use the midnight hud style no longer have the
button baked in their icon. Other screen alerts with their own
background or shape (robot and mech alerts, atmos, heretic buffs or
debuffs etc.) are not affected. Also updated a couple sprites but didn't
spend too much time on them. Mostly reusing existing assets.

Montage of how the alerts look on threee different hud styles
(Operative, Trasen-Knox, Detective, ALSO I FIXED THE BUCKLED ALERT
ALREADY):
<img width="293" height="323" alt="image"
src="https://github.com/user-attachments/assets/3a2b972b-aa5a-4c27-a454-c8c39acf6e20"
/>
It looks only a smidge iffy on the syndicate since the top and bottom
borders aren't layered over all the overlays, but it isn't something to
worry about in this PR.

## Why It's Good For The Game
Screen alerts always had the midnight hud button baked in their icon
states (now overlays), which completely disregard the player's hud
setting, much unlike action alerts buttons. Melbert has also said that
it'd be nice if the code for action buttons could also be used in screen
alerts and viceversa, to slim things down. That's obviously not what I'm
doing today, but having most of the screen alerts already without the
baked background will surely help if we ever pursue that objective.

## Changelog

🆑
refactor: Refactored screen alerts a little. Most should now fit the
player's hud style. Report any issue.
imageadd: A few screen alerts have been polished/updated a little.
/🆑
2025-10-31 15:30:39 -06:00

92 lines
3.1 KiB
Plaintext

/// Simple element to be applied to reagents
/// When those reagents are exposed to mobs with the bug biotype, causes toxins damage
/// If this delivers the killing blow on a non-humanoid mob, it applies a special status effect that does a funny animation
/datum/element/bugkiller_reagent
/datum/element/bugkiller_reagent/Attach(datum/target)
. = ..()
if(!istype(target, /datum/reagent))
return
RegisterSignal(target, COMSIG_REAGENT_EXPOSE_MOB, PROC_REF(on_expose))
/datum/element/bugkiller_reagent/Detach(datum/source, ...)
. = ..()
UnregisterSignal(source, COMSIG_REAGENT_EXPOSE_MOB)
/datum/element/bugkiller_reagent/proc/on_expose(
datum/reagent/source,
mob/living/exposed_mob,
methods = TOUCH,
reac_volume,
show_message = TRUE,
touch_protection = 0,
)
SIGNAL_HANDLER
if(exposed_mob.stat == DEAD)
return
if(!(exposed_mob.mob_biotypes & MOB_BUG))
return
// capping damage so splashing a beaker on a moth is not an instant crit
var/damage = min(round(0.4 * reac_volume * (1 - touch_protection), 0.1), 12)
if(damage < 1)
return
if(!(exposed_mob.mob_biotypes & MOB_HUMANOID) && exposed_mob.health <= damage)
// no-ops if they are already in the process of dying
exposed_mob.apply_status_effect(/datum/status_effect/bugkiller_death)
return
if(exposed_mob.apply_damage(damage, TOX) && damage >= 6)
// yes i know it's not burn damage. the burning is on the inside.
to_chat(exposed_mob, span_danger("You feel a burning sensation."))
/// If bugkiller delivers a lethal dosage, applies this effect which does a funny animation THEN kills 'em
/// Also makes it so simplemobs / basicmobs no longer delete when they die (if they do)
/datum/status_effect/bugkiller_death
id = "bugkiller_death"
alert_type = /atom/movable/screen/alert/status_effect/bugkiller_death
/// How many times the spasm loops
var/spasm_loops = 0
/datum/status_effect/bugkiller_death/on_creation(mob/living/new_other, duration = 4 SECONDS)
src.duration = duration
src.spasm_loops = ROUND_UP(duration / 0.8) // one spasm ~= 0.8 deciseconds (yes deciseconds)
return ..()
/datum/status_effect/bugkiller_death/on_apply()
if(owner.stat == DEAD)
return FALSE
playsound(owner, 'sound/mobs/humanoids/human/scream/malescream_1.ogg', 25, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, frequency = 5)
to_chat(owner, span_userdanger("The world begins to go dark..."))
owner.spasm_animation(spasm_loops)
owner.adjust_eye_blur(duration)
return TRUE
/datum/status_effect/bugkiller_death/on_remove()
if(owner.stat == DEAD || QDELETED(owner))
return
ADD_TRAIT(owner, TRAIT_BUGKILLER_DEATH, REF(src))
if(isbasicmob(owner))
var/mob/living/basic/basic_owner = owner
basic_owner.basic_mob_flags &= ~DEL_ON_DEATH
basic_owner.basic_mob_flags |= FLIP_ON_DEATH
if(isanimal(owner))
var/mob/living/simple_animal/simple_owner = owner
simple_owner.del_on_death = FALSE
simple_owner.flip_on_death = TRUE
owner.investigate_log("died to being sprayed with bugkiller.", INVESTIGATE_DEATHS)
owner.death()
/atom/movable/screen/alert/status_effect/bugkiller_death
name = "Overwhelming Toxicity"
desc = "Don't go into the light!"
use_user_hud_icon = TRUE
overlay_state = "paralysis"