From ccf239688a35d2805e2525cfb05c38b1ad261a30 Mon Sep 17 00:00:00 2001 From: Sun-Soaked <45698967+MemedHams@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:54:59 -0500 Subject: [PATCH] Fixes bloodstains getting stuck (#2456) ![image](https://github.com/shiptest-ss13/Shiptest/assets/45698967/0cfb95d1-673a-47a9-94dc-af3fba94430a) As shown in image, bloodstains were getting stuck in the shape of the first item to draw blood that round Ports the rest of [https://github.com/BeeStation/BeeStation-Hornet/pull/3111](url), which seems to fix it. Blub :) :cl: fix: bloodstains no longer steal the shape of the first item to spill blood /:cl: --- code/datums/components/forensics.dm | 4 +++- code/datums/elements/decals/blood.dm | 26 +++++++------------------- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/code/datums/components/forensics.dm b/code/datums/components/forensics.dm index e92e6eec3ee1..3c006073304c 100644 --- a/code/datums/components/forensics.dm +++ b/code/datums/components/forensics.dm @@ -190,4 +190,6 @@ return if(!length(blood_DNA)) return - parent.AddElement(/datum/element/decal/blood, _color = get_blood_dna_color(blood_DNA)) + if(isitem(parent)) + var/obj/item/I = parent + I.AddElement(/datum/element/decal/blood, initial(I.icon) || I.icon, initial(I.icon_state) || I.icon_state, _color = get_blood_dna_color(blood_DNA)) diff --git a/code/datums/elements/decals/blood.dm b/code/datums/elements/decals/blood.dm index a2a7245eea9a..85f75bef2416 100644 --- a/code/datums/elements/decals/blood.dm +++ b/code/datums/elements/decals/blood.dm @@ -12,27 +12,15 @@ return ..() /datum/element/decal/blood/generate_appearance(_icon, _icon_state, _dir, _layer, _color, _alpha, source) - var/obj/item/I = source - if(!_icon) - _icon = 'icons/effects/blood.dmi' - if(!_icon_state) - _icon_state = "itemblood" + if(!_icon || !_icon_state) + return FALSE if(!_color) _color = COLOR_BLOOD - var/item_icon = I.icon - var/item_icon_state = I.icon_state - var/static/list/blood_splatter_appearances = list() - //try to find a pre-processed blood-splatter. otherwise, make a new one - var/index = "[REF(item_icon)]-[item_icon_state]" - pic = blood_splatter_appearances[index] - - if(!pic) - var/icon/blood_splatter_icon = icon(I.icon, I.icon_state, null, 1) //we only want to apply blood-splatters to the initial icon_state for each object - blood_splatter_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent) - blood_splatter_icon.Blend(icon(_icon, _icon_state), ICON_MULTIPLY) //adds blood and the remaining white areas become transparant - pic = mutable_appearance(blood_splatter_icon, initial(I.icon_state)) - pic.color = _color - blood_splatter_appearances[index] = pic + var/icon/blood_splatter_icon = icon(_icon, _icon_state, , 1) //we only want to apply blood-splatters to the initial icon_state for each object + blood_splatter_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent) + blood_splatter_icon.Blend(icon('icons/effects/blood.dmi', "itemblood"), ICON_MULTIPLY) //adds blood and the remaining white areas become transparant + pic = mutable_appearance(blood_splatter_icon) + pic.color = _color return TRUE /datum/element/decal/blood/proc/get_examine_name(datum/source, mob/user, list/override)