Files
CHOMPStation2/code/datums/components/traits/drippy.dm
CHOMPStation2StaffMirrorBot 311364da39 [MIRROR] Makes drippy unregister Living Life (#10902)
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
2025-05-16 14:30:10 +02:00

69 lines
1.8 KiB
Plaintext

/datum/component/drippy
var/drip_chance = 5
var/blood_color = "#A10808"
var/mob/living/owner
/datum/component/drippy/Initialize()
if(!isliving(parent))
return COMPONENT_INCOMPATIBLE
owner = parent
if(ishuman(parent))
var/mob/living/carbon/human/temp_owner = parent
blood_color = rgb(temp_owner.r_skin,temp_owner.g_skin,temp_owner.b_skin)
RegisterSignal(owner, COMSIG_LIVING_LIFE, PROC_REF(process_component))
/datum/component/drippy/proc/process_component()
if(QDELETED(parent))
return
if(!prob(drip_chance))
return
if(owner.stat == DEAD)
return
var/turf/T = get_turf(owner.loc)
if(!isturf(T))
return
var/obj/effect/decal/cleanable/blood/B
var/decal_type = /obj/effect/decal/cleanable/blood/splatter
// Are we dripping or splattering?
var/list/drips = list()
// Only a certain number of drips (or one large splatter) can be on a given turf.
for(var/obj/effect/decal/cleanable/blood/drip/drop in T)
drips |= drop.drips
qdel(drop)
if(drips.len < 4)
decal_type = /obj/effect/decal/cleanable/blood/drip
// Find a blood decal or create a new one.
B = locate(decal_type) in T
if(!B)
B = new decal_type(T)
var/obj/effect/decal/cleanable/blood/drip/drop = B
if(istype(drop) && drips && drips.len)
drop.add_overlay(drips)
drop.drips |= drips
B.basecolor = blood_color
B.update_icon()
if(istype(B, drop)) //We're a drop.
B.name = "drips of something"
else //We're a puddle.
B.name = "puddle of something"
B.desc = "It's thick and gooey. Perhaps it's the chef's cooking?"
B.dryname = "dried something"
B.drydesc = "It's dry and crusty. The janitor isn't doing their job."
B.fluorescent = 0
B.invisibility = INVISIBILITY_NONE
/datum/component/drippy/Destroy(force = FALSE)
UnregisterSignal(owner, COMSIG_LIVING_LIFE)
owner = null
. = ..()