Merge pull request #16798 from SabreML/telescopic-blood-overlays

Blood overlay fix for telescopic weapons
This commit is contained in:
Fox McCloud
2021-09-28 00:31:41 -04:00
committed by GitHub
4 changed files with 29 additions and 18 deletions
+6 -6
View File
@@ -789,15 +789,15 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
var/index = blood_splatter_index()
var/icon/blood_splatter_icon = GLOB.blood_splatter_icons[index]
if(!blood_splatter_icon)
blood_splatter_icon = icon(initial(icon), initial(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 = icon(initial(icon), initial(icon_state), frame = 1) //we only want to apply blood-splatters to the initial icon_state for each object
blood_splatter_icon.Blend("#ffffff", 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
blood_splatter_icon = fcopy_rsc(blood_splatter_icon)
GLOB.blood_splatter_icons[index] = blood_splatter_icon
blood_overlay = image(blood_splatter_icon)
blood_overlay.color = color
overlays += blood_overlay
add_overlay(blood_overlay)
/atom/proc/clean_blood(radiation_clean = FALSE)
germ_level = 0
@@ -827,9 +827,9 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
/obj/item/clean_blood(radiation_clean = FALSE)
. = ..()
if(.)
if(blood_overlay)
overlays -= blood_overlay
if(. && blood_overlay)
cut_overlay(blood_overlay)
QDEL_NULL(blood_overlay)
/obj/item/clothing/gloves/clean_blood(radiation_clean = FALSE)
. = ..()
-1
View File
@@ -6,7 +6,6 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect
move_resist = null // Set in the Initialise depending on the item size. Unless it's overriden by a specific item
var/discrete = 0 // used in item_attack.dm to make an item not show an attack message to viewers
var/image/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite
var/blood_overlay_color = null
var/item_state = null
var/lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
var/righthand_file = 'icons/mob/inhands/items_righthand.dmi'
+2 -2
View File
@@ -189,9 +189,10 @@
H.update_inv_r_hand()
// Update blood splatter
if(blood_overlay)
var/blood_color = blood_overlay.color
cut_overlay(blood_overlay)
qdel(blood_overlay)
add_blood_overlay(blood_overlay_color)
add_blood_overlay(blood_color)
playsound(loc, extend_sound, 50, TRUE)
add_fingerprint(user)
@@ -210,5 +211,4 @@
blood_overlay = image(blood_splatter_icon)
blood_overlay.color = color
blood_overlay_color = color
add_overlay(blood_overlay)
+21 -9
View File
@@ -206,16 +206,28 @@
H.update_inv_l_hand()
H.update_inv_r_hand()
add_fingerprint(user)
if(!blood_DNA)
return
if(blood_overlay && (blood_DNA.len >= 1)) //updated blood overlay, if any
overlays.Cut() //this might delete other item overlays as well but eeeeeh
if(blood_overlay) //updated blood overlay, if any
var/blood_color = blood_overlay.color
cut_overlay(blood_overlay)
qdel(blood_overlay)
add_blood_overlay(blood_color)
var/icon/I = new /icon(icon, icon_state)
I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)), ICON_ADD)
I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"), ICON_MULTIPLY)
blood_overlay = I
overlays += blood_overlay
/obj/item/scythe/tele/blood_splatter_index()
return "\ref[icon]-[icon_state]"
/obj/item/scythe/tele/add_blood_overlay(color)
var/index = blood_splatter_index()
var/icon/blood_splatter_icon = GLOB.blood_splatter_icons[index]
if(!blood_splatter_icon)
blood_splatter_icon = icon(icon, icon_state)
blood_splatter_icon.Blend("#ffffff", ICON_ADD)
blood_splatter_icon.Blend(icon('icons/effects/blood.dmi', "itemblood"), ICON_MULTIPLY)
blood_splatter_icon = fcopy_rsc(blood_splatter_icon)
GLOB.blood_splatter_icons[index] = blood_splatter_icon
blood_overlay = image(blood_splatter_icon)
blood_overlay.color = color
add_overlay(blood_overlay)
// *************************************