Files
Bubberstation/code/datums/elements/decals/blood.dm
T
13spacemenandGitHub db9cd93cc8 [NO GBP] fixes item blood overlays "leaking" onto other objects (#81662)
Looks like KEEP_TOGETHER is necessary after all

before
![Screenshot 2024-02-24
144648](https://github.com/tgstation/tgstation/assets/46101244/e973b372-8391-4678-bc26-28b9d32f05af)

after
![Screenshot 2024-02-24
144001](https://github.com/tgstation/tgstation/assets/46101244/b6c25fcd-9c7f-4f3a-8b8f-69d98b81d424)


## Changelog
🆑
fix: Blood overlays on items no longer leak onto other objects
/🆑
2024-02-26 18:04:37 +01:00

43 lines
1.7 KiB
Plaintext

/datum/element/decal/blood
/datum/element/decal/blood/Attach(datum/target, _icon, _icon_state, _dir, _plane, _layer, _alpha, _color, _smoothing, _cleanable=CLEAN_TYPE_BLOOD, _description, mutable_appearance/_pic)
if(!isitem(target))
return ELEMENT_INCOMPATIBLE
. = ..()
RegisterSignal(target, COMSIG_ATOM_GET_EXAMINE_NAME, PROC_REF(get_examine_name), TRUE)
/datum/element/decal/blood/Detach(atom/source)
UnregisterSignal(source, COMSIG_ATOM_GET_EXAMINE_NAME)
if(isitem(source))
var/obj/item/source_item = source
REMOVE_KEEP_TOGETHER(source_item, type)
return ..()
/datum/element/decal/blood/generate_appearance(_icon, _icon_state, _dir, _plane, _layer, _color, _alpha, _smoothing, source)
var/obj/item/I = source
ADD_KEEP_TOGETHER(I, type)
var/icon = I.icon
var/icon_state = I.icon_state
if(!icon || !icon_state)
// It's something which takes on the look of other items, probably
icon = I.icon
icon_state = I.icon_state
var/icon/icon_for_size = icon(icon, icon_state)
var/scale_factor_x = icon_for_size.Width()/world.icon_size
var/scale_factor_y = icon_for_size.Height()/world.icon_size
var/mutable_appearance/blood_splatter = mutable_appearance('icons/effects/blood.dmi', "itemblood", appearance_flags = RESET_COLOR) //MA of the blood that we apply
blood_splatter.transform = blood_splatter.transform.Scale(scale_factor_x, scale_factor_y)
blood_splatter.blend_mode = BLEND_INSET_OVERLAY
blood_splatter.color = _color
pic = blood_splatter
return TRUE
/datum/element/decal/blood/proc/get_examine_name(datum/source, mob/user, list/override)
SIGNAL_HANDLER
var/atom/A = source
override[EXAMINE_POSITION_ARTICLE] = A.gender == PLURAL? "some" : "a"
override[EXAMINE_POSITION_BEFORE] = " blood-stained "
return COMPONENT_EXNAME_CHANGED