mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-15 09:03:23 +01:00
Refactors Item Blood Overlays (#16826)
* Refactors Item Blood Overlays * update * remove blood color changing
This commit is contained in:
+26
-41
@@ -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))
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user