Refactors Item Blood Overlays (#16826)

* Refactors Item Blood Overlays

* update

* remove blood color changing
This commit is contained in:
Fox McCloud
2021-10-01 16:57:54 -04:00
committed by GitHub
parent 5db2b348ff
commit ee22c8d4ee
6 changed files with 29 additions and 94 deletions
+26 -41
View File
@@ -657,9 +657,6 @@
GLOBAL_LIST_EMPTY(blood_splatter_icons)
/atom/proc/blood_splatter_index()
return "\ref[initial(icon)]-[initial(icon_state)]"
//returns the mob's dna info as a list, to be inserted in an object's blood_DNA list
/mob/living/proc/get_blood_dna_list()
if(get_blood_id() != "blood")
@@ -726,56 +723,52 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
return add_blood(blood_dna, bloodcolor)
//to add blood onto something, with blood dna info to include.
/atom/proc/add_blood(list/blood_dna, color)
/atom/proc/add_blood(list/blood_dna, b_color)
return FALSE
/obj/add_blood(list/blood_dna, color)
/obj/add_blood(list/blood_dna, b_color)
return transfer_blood_dna(blood_dna)
/obj/item/add_blood(list/blood_dna, color)
var/blood_count = !blood_DNA ? 0 : blood_DNA.len
/obj/item/add_blood(list/blood_dna, b_color)
var/blood_count = !blood_DNA ? 0 : length(blood_DNA)
if(!..())
return FALSE
if(!blood_count)//apply the blood-splatter overlay if it isn't already in there
add_blood_overlay(color)
blood_color = b_color // update the blood color
if(!blood_count) //apply the blood-splatter overlay if it isn't already in there
add_blood_overlay()
return TRUE //we applied blood to the item
/obj/item/clothing/gloves/add_blood(list/blood_dna, color)
/obj/item/clothing/gloves/add_blood(list/blood_dna, b_color)
. = ..()
transfer_blood = rand(2, 4)
/turf/add_blood(list/blood_dna, color)
/turf/add_blood(list/blood_dna, b_color)
var/obj/effect/decal/cleanable/blood/splatter/B = locate() in src
if(!B)
B = new /obj/effect/decal/cleanable/blood/splatter(src)
B.transfer_blood_dna(blood_dna) //give blood info to the blood decal.
B.basecolor = color
B.basecolor = b_color
return TRUE //we bloodied the floor
/mob/living/carbon/human/add_blood(list/blood_dna, color)
/mob/living/carbon/human/add_blood(list/blood_dna, b_color)
if(wear_suit)
wear_suit.add_blood(blood_dna, color)
wear_suit.blood_color = color
wear_suit.add_blood(blood_dna, b_color)
update_inv_wear_suit()
else if(w_uniform)
w_uniform.add_blood(blood_dna, color)
w_uniform.blood_color = color
w_uniform.add_blood(blood_dna, b_color)
update_inv_w_uniform()
if(head)
head.add_blood(blood_dna, color)
head.blood_color = color
head.add_blood(blood_dna, b_color)
update_inv_head()
if(glasses)
glasses.add_blood(blood_dna, color)
glasses.blood_color = color
glasses.add_blood(blood_dna, b_color)
update_inv_glasses()
if(gloves)
var/obj/item/clothing/gloves/G = gloves
G.add_blood(blood_dna, color)
G.blood_color = color
G.add_blood(blood_dna, b_color)
verbs += /mob/living/carbon/human/proc/bloody_doodle
else
hand_blood_color = color
hand_blood_color = b_color
bloody_hands = rand(2, 4)
transfer_blood_dna(blood_dna)
verbs += /mob/living/carbon/human/proc/bloody_doodle
@@ -783,21 +776,13 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
update_inv_gloves() //handles bloody hands overlays and updating
return TRUE
/obj/item/proc/add_blood_overlay(color)
/obj/item/proc/add_blood_overlay()
if(initial(icon) && initial(icon_state))
//try to find a pre-processed blood-splatter. otherwise, make a new one
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), 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
add_overlay(blood_overlay)
var/list/params = GLOB.blood_splatter_icons["[blood_color]"]
if(!params)
params = layering_filter(icon = icon('icons/effects/blood.dmi', "itemblood"), color = blood_color, blend_mode = BLEND_INSET_OVERLAY)
GLOB.blood_splatter_icons["[blood_color]"] = params
add_filter("blood_splatter", 1, params)
/atom/proc/clean_blood(radiation_clean = FALSE)
germ_level = 0
@@ -827,9 +812,9 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
/obj/item/clean_blood(radiation_clean = FALSE)
. = ..()
if(. && blood_overlay)
cut_overlay(blood_overlay)
QDEL_NULL(blood_overlay)
if(.)
if(initial(icon) && initial(icon_state))
remove_filter("blood_splatter")
/obj/item/clothing/gloves/clean_blood(radiation_clean = FALSE)
. = ..()
@@ -109,9 +109,7 @@
H.apply_damage(10, BRUTE, "chest", H.run_armor_check(target_part, MELEE))
//blood splatters
blood_color = H.dna.species.blood_color
new /obj/effect/temp_visual/dir_setting/bloodsplatter(H.drop_location(), splatter_dir, blood_color)
new /obj/effect/temp_visual/dir_setting/bloodsplatter(H.drop_location(), splatter_dir, H.dna.species.blood_color)
//organs go everywhere
if(target_part && prob(10 * drill_level))
-1
View File
@@ -5,7 +5,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/item_state = null
var/lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
var/righthand_file = 'icons/mob/inhands/items_righthand.dmi'
-23
View File
@@ -187,28 +187,5 @@
var/mob/living/carbon/human/H = user
H.update_inv_l_hand()
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_color)
playsound(loc, extend_sound, 50, TRUE)
add_fingerprint(user)
/obj/item/melee/classic_baton/telescopic/blood_splatter_index()
return "\ref[icon]-[icon_state]"
/obj/item/melee/classic_baton/telescopic/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)
@@ -206,29 +206,6 @@
H.update_inv_l_hand()
H.update_inv_r_hand()
add_fingerprint(user)
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)
/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)
// *************************************
// Nutrient defines for hydroponics
@@ -88,9 +88,8 @@
/datum/species/slime/proc/blend(mob/living/carbon/human/H)
var/new_color = BlendRGB(H.skin_colour, "#acacac", 0.5) // Blends this to make it work better
if(H.blood_color != new_color) // Put here, so if it's a roundstart, dyed, or CMA'd slime, their blood changes to match skin
H.blood_color = new_color
H.dna.species.blood_color = H.blood_color
if(H.dna.species.blood_color != new_color) // Put here, so if it's a roundstart, dyed, or CMA'd slime, their blood changes to match skin
H.dna.species.blood_color = new_color
/datum/species/slime/handle_life(mob/living/carbon/human/H)
// Slowly shifting to the color of the reagents