diff --git a/code/datums/blood_types.dm b/code/datums/blood_types.dm index 3ba5c74d4c4..388e1874a11 100644 --- a/code/datums/blood_types.dm +++ b/code/datums/blood_types.dm @@ -53,7 +53,7 @@ GLOBAL_LIST_INIT_TYPED(blood_types, /datum/blood_type, init_subtypes_w_path_keys * * new_splat - whether this is a newly instantiated blood decal, or an existing one this blood is being added to */ /datum/blood_type/proc/set_up_blood(obj/effect/decal/cleanable/blood/blood, new_splat = FALSE) - return + blood.color = color /// A base type for all blood used by humans (NOT humanoids), for organization's sake /datum/blood_type/human diff --git a/code/datums/components/decals/blood.dm b/code/datums/components/decals/blood.dm index ced97880bf9..6c039ea32e3 100644 --- a/code/datums/components/decals/blood.dm +++ b/code/datums/components/decals/blood.dm @@ -8,6 +8,8 @@ RegisterSignal(parent, COMSIG_ATOM_GET_EXAMINE_NAME, PROC_REF(get_examine_name)) /datum/component/decal/blood/generate_appearance(_icon, _icon_state, _dir, _layer, _color) + var/imported_color = _color || COLOR_BLOOD + var/obj/item/I = parent if(I.bigboy) if(!_icon) @@ -32,11 +34,11 @@ 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)) blood_splatter_appearances[index] = pic + pic.color = imported_color pic.alpha = 150 return TRUE /datum/component/decal/blood/apply(atom/thing) - //pic.color = source.get_blood_dna_color() || COLOR_BLOOD return ..() /datum/component/decal/blood/proc/get_examine_name(datum/source, mob/user, list/override) diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index 65e0dac5199..384d8f98a3c 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -3,6 +3,7 @@ desc = "" icon = 'icons/effects/blood.dmi' icon_state = "floor1" + color = COLOR_BLOOD random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6") blood_state = BLOOD_STATE_HUMAN bloodiness = BLOOD_AMOUNT_PER_DECAL @@ -48,7 +49,7 @@ H.bloody_hands++ H.update_inv_gloves() -/obj/effect/decal/cleanable/blood/Initialize(mapload) +/obj/effect/decal/cleanable/blood/Initialize(mapload, override_color) . = ..() if(. == INITIALIZE_HINT_QDEL) return . @@ -58,6 +59,8 @@ pixel_y = base_pixel_y + rand(5,5) blood_timer = addtimer(CALLBACK(src, PROC_REF(become_dry)), rand(5 MINUTES,15 MINUTES), TIMER_STOPPABLE) GLOB.weather_act_upon_list += src + if(override_color) + color = override_color /obj/effect/decal/cleanable/blood/proc/become_dry() @@ -91,7 +94,6 @@ C.alpha = initial(alpha) C.bloodiness = initial(bloodiness) C.name = initial(name) - C.color = initial(color) /obj/effect/decal/cleanable/blood/Destroy() deltimer(blood_timer) @@ -117,13 +119,13 @@ /obj/effect/decal/cleanable/blood/splatter/replace_decal(obj/effect/decal/cleanable/C) // Returns true if we should give up in favor of the pre-existing decal if(..()) - var/obj/effect/decal/cleanable/blood/splatter/P = C - P.drips++ - if(P.drips > 2) + var/obj/effect/decal/cleanable/blood/splatter/previous = C + previous.drips++ + if(previous.drips > 2) var/turf/T = loc if(istype(T)) - new /obj/effect/decal/cleanable/blood(T) - qdel(P) + new /obj/effect/decal/cleanable/blood(T, previous.color) + qdel(previous) return TRUE @@ -144,11 +146,13 @@ appearance_flags = NO_CLIENT_COLOR var/blood_timer -/obj/effect/decal/cleanable/trail_holder/Initialize(mapload) +/obj/effect/decal/cleanable/trail_holder/Initialize(mapload, override_color) . = ..() if(. == INITIALIZE_HINT_QDEL) return . blood_timer = addtimer(CALLBACK(src, PROC_REF(become_dry)), rand(5 MINUTES,8 MINUTES), TIMER_STOPPABLE) + if(override_color) + color = override_color /obj/effect/decal/cleanable/trail_holder/Destroy() deltimer(blood_timer) @@ -185,7 +189,7 @@ for(var/i in 0 to rand(1,3)) sleep(2) if(i > 0) - new /obj/effect/decal/cleanable/blood/splatter(loc, diseases) + new /obj/effect/decal/cleanable/blood/splatter(loc, color) if(!step_to(src, get_step(src, direction), 0)) break @@ -252,21 +256,21 @@ if(istype(T)) var/obj/effect/decal/cleanable/blood/puddle/PUD = locate() in T if(!PUD) - PUD = new(T) + PUD = new(T, color) PUD.blood_vol = blood_vol /obj/effect/decal/cleanable/blood/drip/replace_decal(obj/effect/decal/cleanable/C) // Returns true if we should give up in favor of the pre-existing decal if(..()) - var/obj/effect/decal/cleanable/blood/drip/P = C - P.drips++ - if(P.drips > 5) + var/obj/effect/decal/cleanable/blood/drip/previous = C + previous.drips++ + if(previous.drips > 5) var/turf/T = loc if(istype(T)) - var/obj/effect/decal/cleanable/blood/puddle/PUD = new(T) + var/obj/effect/decal/cleanable/blood/puddle/PUD = new(T, previous.color) PUD.blood_vol = blood_vol - qdel(P) + qdel(previous) else - P.update_appearance(UPDATE_ICON_STATE) + previous.update_appearance(UPDATE_ICON_STATE) return TRUE /obj/effect/decal/cleanable/blood/puddle @@ -294,9 +298,10 @@ /obj/effect/decal/cleanable/blood/puddle/replace_decal(obj/effect/decal/cleanable/C) // Returns true if we should give up in favor of the pre-existing decal if(..()) - var/obj/effect/decal/cleanable/blood/puddle/P = C - P.blood_vol += 10 - P.update_appearance(UPDATE_ICON_STATE) + var/obj/effect/decal/cleanable/blood/puddle/previous = C + previous.blood_vol += 10 + previous.update_appearance(UPDATE_ICON_STATE) + previous.color = color return TRUE diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 2a7580a9285..6322611ebd2 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -7,7 +7,9 @@ plane = GAME_PLANE_FOV_HIDDEN var/splatter_type = "splatter" -/obj/effect/temp_visual/dir_setting/bloodsplatter/Initialize(mapload, set_dir) +/obj/effect/temp_visual/dir_setting/bloodsplatter/Initialize(mapload, set_dir, datum/blood_type/bloodtype) + if(bloodtype) + color = bloodtype.color if(set_dir in GLOB.diagonals) icon_state = "[splatter_type][pick(1, 2, 6)]" else diff --git a/code/game/objects/items/natural/animals.dm b/code/game/objects/items/natural/animals.dm index 50e15366baf..03579cbdef5 100644 --- a/code/game/objects/items/natural/animals.dm +++ b/code/game/objects/items/natural/animals.dm @@ -139,6 +139,7 @@ if(rotten && istype(I,/obj/item/reagent_containers/food/snacks)) var/obj/item/reagent_containers/food/snacks/F = I F.become_rotten() + new /obj/effect/decal/cleanable/blood/splatter(get_turf(src)) user.adjust_experience(/datum/skill/labor/butchering, amt2raise, FALSE) qdel(src) diff --git a/code/game/objects/structures/meathook.dm b/code/game/objects/structures/meathook.dm index 55ab6d341d2..a4871f53a88 100644 --- a/code/game/objects/structures/meathook.dm +++ b/code/game/objects/structures/meathook.dm @@ -111,12 +111,12 @@ STOP_PROCESSING(SSmachines, src) return L.blood_drained++ + var/datum/blood_type/bloodtype = L.get_blood_type() var/obj/item/reagent_containers/container = locate(/obj/item/reagent_containers) in get_turf(src) playsound(src, 'sound/misc/bleed (3).ogg', 100, FALSE) if(container && container.is_open_container() && container.reagents.total_volume < container.reagents.maximum_volume) - var/datum/blood_type/type = L.get_blood_type() - container.reagents.add_reagent(initial(type.reagent_type), 5, data = type.get_blood_data(L)) + container.reagents.add_reagent(initial(bloodtype.reagent_type), 5, data = bloodtype.get_blood_data(L)) else var/obj/effect/decal/cleanable/blood/puddle/P = locate() in get_turf(src) if(P) @@ -129,7 +129,7 @@ D.drips++ D.update_appearance(UPDATE_ICON_STATE) else - new /obj/effect/decal/cleanable/blood/drip(get_turf(src)) + new /obj/effect/decal/cleanable/blood/drip(get_turf(src), bloodtype.color) /obj/structure/meathook/proc/release_mob(mob/living/M) REMOVE_TRAIT(M, TRAIT_EASYDISMEMBER, "[type]") diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index d3a8668560c..7e682bee6a2 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -307,7 +307,7 @@ W.water_volume = 10 return - var/obj/effect/decal/cleanable/blood/splatter/splatter = new /obj/effect/decal/cleanable/blood/splatter(T) + var/obj/effect/decal/cleanable/blood/splatter/splatter = new /obj/effect/decal/cleanable/blood/splatter(T, blood.color) splatter.transfer_mob_blood_dna(src) splatter.update_appearance(UPDATE_ICON_STATE) @@ -334,8 +334,7 @@ var/obj/item/reagent_containers/container = locate(/obj/item/reagent_containers) in T playsound(src, 'sound/misc/bleed (3).ogg', 100, FALSE) if(container && container.is_open_container() && container.reagents.total_volume < container.reagents.maximum_volume) - var/datum/blood_type/type = get_blood_type() - container.reagents.add_reagent(initial(type.reagent_type), 5, data = type.get_blood_data(src)) + container.reagents.add_reagent(initial(blood.reagent_type), 5, data = blood.get_blood_data(src)) else var/obj/effect/decal/cleanable/blood/puddle/P = locate() in T if(P) @@ -350,7 +349,7 @@ D.transfer_mob_blood_dna(src) D.update_appearance(UPDATE_ICON_STATE) else - var/obj/effect/decal/cleanable/blood/drip/splatter = new /obj/effect/decal/cleanable/blood/drip(T) + var/obj/effect/decal/cleanable/blood/drip/splatter = new /obj/effect/decal/cleanable/blood/drip(T, blood.color) splatter.transfer_mob_blood_dna(src) splatter.update_appearance(UPDATE_ICON_STATE) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 0a1616da314..9429f625aa1 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -229,7 +229,7 @@ if(get_dist(user, src) <= 1) //people with TK won't get smeared with blood user.add_mob_blood(src) var/splatter_dir = get_dir(user, src) - new /obj/effect/temp_visual/dir_setting/bloodsplatter(loc, splatter_dir) + new /obj/effect/temp_visual/dir_setting/bloodsplatter(loc, splatter_dir, get_blood_type()) if(affecting.body_zone == BODY_ZONE_HEAD) if(wear_mask) wear_mask.add_mob_blood(src) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 48723581a70..df631b0c2ca 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1905,7 +1905,7 @@ GLOBAL_LIST_EMPTY(roundstart_species) bloody = 1 var/turf/location = H.loc var/splatter_dir = get_dir(H, user) - new /obj/effect/temp_visual/dir_setting/bloodsplatter(H.loc, splatter_dir) + new /obj/effect/temp_visual/dir_setting/bloodsplatter(H.loc, splatter_dir, H.get_blood_type()) if(istype(location)) H.add_splatter_floor(location) if(get_dist(user, H) <= 1) //people with TK won't get smeared with blood diff --git a/code/modules/mob/living/carbon/human/species_types/automatons/_automaton.dm b/code/modules/mob/living/carbon/human/species_types/automatons/_automaton.dm index d7a3b686dde..25ea7600a6a 100644 --- a/code/modules/mob/living/carbon/human/species_types/automatons/_automaton.dm +++ b/code/modules/mob/living/carbon/human/species_types/automatons/_automaton.dm @@ -35,7 +35,6 @@ species_traits = list( NO_UNDERWEAR, NOTRANSSTING, - NOBLOOD ) inherent_traits = list( TRAIT_NOMOOD, @@ -84,6 +83,8 @@ exotic_bloodtype = /datum/blood_type/oil + bleed_mod = 0.2 // 80% less bleed rate from injuries + custom_id = "automaton" custom_clothes = FALSE diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 0e1e80b8295..6486f73fa6b 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -122,6 +122,7 @@ GLOBAL_PROTECT(no_child_icons) var/list/limb_overlaysa = list() var/list/limb_overlaysb = list() var/list/limb_overlaysc = list() + var/bloodcolor = get_blood_type().color for(var/obj/item/bodypart/BP as anything in bodyparts) var/list/damage_overlays = list() var/list/legdam_overlays = list() @@ -133,17 +134,23 @@ GLOBAL_PROTECT(no_child_icons) if(!BP.skeletonized) if(BP.brutestate) var/mutable_appearance/damage_overlay = mutable_appearance(limb_icon, "[BP.body_zone]_[BP.brutestate]0", -DAMAGE_LAYER) + damage_overlay.color = bloodcolor damage_overlays += damage_overlay var/mutable_appearance/legdam_overlay = mutable_appearance(limb_icon, "legdam_[BP.body_zone]_[BP.brutestate]0", -LEG_DAMAGE_LAYER) + legdam_overlay.color = bloodcolor legdam_overlays += legdam_overlay var/mutable_appearance/armdam_overlay = mutable_appearance(limb_icon, "armdam_[BP.body_zone]_[BP.brutestate]0", -ARM_DAMAGE_LAYER) + armdam_overlay.color = bloodcolor armdam_overlays += armdam_overlay if(BP.burnstate) var/mutable_appearance/damage_overlay = mutable_appearance(limb_icon, "[BP.body_zone]_0[BP.burnstate]", -DAMAGE_LAYER) + damage_overlay.color = bloodcolor damage_overlays += damage_overlay var/mutable_appearance/legdam_overlay = mutable_appearance(limb_icon, "legdam_[BP.body_zone]_0[BP.burnstate]", -LEG_DAMAGE_LAYER) + legdam_overlay.color = bloodcolor legdam_overlays += legdam_overlay var/mutable_appearance/armdam_overlay = mutable_appearance(limb_icon, "armdam_[BP.body_zone]_0[BP.burnstate]", -ARM_DAMAGE_LAYER) + armdam_overlay.color = bloodcolor armdam_overlays += armdam_overlay if(BP.get_bleed_rate()) bleed_checker = TRUE @@ -164,10 +171,13 @@ GLOBAL_PROTECT(no_child_icons) wound_overlays |= wound.mob_overlay for(var/wound_overlay in wound_overlays) var/mutable_appearance/damage_overlay = mutable_appearance(limb_icon, "[BP.body_zone]_[wound_overlay]", -DAMAGE_LAYER) + damage_overlay.color = bloodcolor damage_overlays += damage_overlay var/mutable_appearance/legdam_overlay = mutable_appearance(limb_icon, "legdam_[BP.body_zone]_[wound_overlay]", -LEG_DAMAGE_LAYER) + legdam_overlay.color = bloodcolor legdam_overlays += legdam_overlay var/mutable_appearance/armdam_overlay = mutable_appearance(limb_icon, "armdam_[BP.body_zone]_[wound_overlay]", -ARM_DAMAGE_LAYER) + armdam_overlay.color = bloodcolor armdam_overlays += armdam_overlay if(!bleed_checker && BP.bandage) var/mutable_appearance/damage_overlay = mutable_appearance(limb_icon, "[BP.body_zone]_b", -DAMAGE_LAYER) @@ -183,17 +193,23 @@ GLOBAL_PROTECT(no_child_icons) if(!BP.skeletonized) if(BP.brutestate) var/mutable_appearance/damage_overlay = mutable_appearance(limb_icon, "[BP.aux_zone]_[BP.brutestate]0", -DAMAGE_LAYER) + damage_overlay.color = bloodcolor damage_overlays += damage_overlay var/mutable_appearance/legdam_overlay = mutable_appearance(limb_icon, "legdam_[BP.aux_zone]_[BP.brutestate]0", -LEG_DAMAGE_LAYER) + legdam_overlay.color = bloodcolor legdam_overlays += legdam_overlay var/mutable_appearance/armdam_overlay = mutable_appearance(limb_icon, "armdam_[BP.aux_zone]_[BP.brutestate]0", -ARM_DAMAGE_LAYER) + armdam_overlay.color = bloodcolor armdam_overlays += armdam_overlay if(BP.burnstate) var/mutable_appearance/damage_overlay = mutable_appearance(limb_icon, "[BP.aux_zone]_0[BP.burnstate]", -DAMAGE_LAYER) + damage_overlay.color = bloodcolor damage_overlays += damage_overlay var/mutable_appearance/legdam_overlay = mutable_appearance(limb_icon, "legdam_[BP.aux_zone]_0[BP.burnstate]", -LEG_DAMAGE_LAYER) + legdam_overlay.color =bloodcolor legdam_overlays += legdam_overlay var/mutable_appearance/armdam_overlay = mutable_appearance(limb_icon, "armdam_[BP.aux_zone]_0[BP.burnstate]", -ARM_DAMAGE_LAYER) + armdam_overlay.color = bloodcolor armdam_overlays += armdam_overlay if(bleed_checker) if(BP.bandage) @@ -209,10 +225,13 @@ GLOBAL_PROTECT(no_child_icons) //We got the wound overlays before, it's all good for(var/wound_overlay in wound_overlays) var/mutable_appearance/damage_overlay = mutable_appearance(limb_icon, "[BP.aux_zone]_[wound_overlay]", -DAMAGE_LAYER) + damage_overlay.color = bloodcolor damage_overlays += damage_overlay var/mutable_appearance/legdam_overlay = mutable_appearance(limb_icon, "legdam_[BP.aux_zone]_[wound_overlay]", -LEG_DAMAGE_LAYER) + legdam_overlay.color =bloodcolor legdam_overlays += legdam_overlay var/mutable_appearance/armdam_overlay = mutable_appearance(limb_icon, "armdam_[BP.aux_zone]_[wound_overlay]", -ARM_DAMAGE_LAYER) + armdam_overlay.color = bloodcolor armdam_overlays += armdam_overlay if(!bleed_checker && BP.bandage) var/mutable_appearance/damage_overlay = mutable_appearance(limb_icon, "[BP.aux_zone]_b", -DAMAGE_LAYER) diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 13a73880096..f4149e8a334 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -227,6 +227,8 @@ if(BP.burnstate) damage_overlay.add_overlay("[BP.dmg_overlay_type]_[BP.body_zone]_0[BP.burnstate]") + var/datum/blood_type/bloodtype = get_blood_type() + damage_overlay.color = bloodtype.color apply_overlay(DAMAGE_LAYER) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 8e5addb84ad..2485dc7918d 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1182,12 +1182,14 @@ if((newdir in GLOB.cardinals) && (prob(50))) newdir = turn(get_dir(target_turf, start), 180) if(!blood_exists) - new /obj/effect/decal/cleanable/trail_holder(start) + new /obj/effect/decal/cleanable/trail_holder(start, get_blood_type().color) for(var/obj/effect/decal/cleanable/trail_holder/TH in start) if((!(newdir in TH.existing_dirs) || trail_type == "trails_1" || trail_type == "trails_2") && TH.existing_dirs.len <= 16) //maximum amount of overlays is 16 (all light & heavy directions filled) TH.existing_dirs += newdir - TH.add_overlay(image('icons/effects/blood.dmi', trail_type, dir = newdir)) + var/image/bloodthing = image('icons/effects/blood.dmi', trail_type, dir = newdir) + bloodthing.color = get_blood_type().color + TH.add_overlay(bloodthing) TH.transfer_mob_blood_dna(src) /mob/living/carbon/human/makeTrail(turf/T) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 4680d4edd80..85dc06d444c 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -276,7 +276,7 @@ var/splatter_dir = dir if(starting) splatter_dir = get_dir(starting, target_loca) - new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_loca, splatter_dir) + new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_loca, splatter_dir, L.get_blood_type()) if(prob(33)) L.add_splatter_floor(target_loca) diff --git a/code/modules/spells/spell_types/pointed/projectile/blood_steal.dm b/code/modules/spells/spell_types/pointed/projectile/blood_steal.dm index 501787c2a00..4e03f826f30 100644 --- a/code/modules/spells/spell_types/pointed/projectile/blood_steal.dm +++ b/code/modules/spells/spell_types/pointed/projectile/blood_steal.dm @@ -61,4 +61,4 @@ span_userdanger("Blood erupts from my body!"), span_hear("I hear a fluid spill..."), ) - new /obj/effect/decal/cleanable/blood/puddle(get_turf(H)) + new /obj/effect/decal/cleanable/blood/puddle(get_turf(H), H.get_blood_type().color) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 77b1920a2c5..06330fe037c 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -184,13 +184,18 @@ if(skeletonized || !length(food_type)) to_chat(user, span_warning("[src] has no meat to eat.")) return + var/bloodcolor = COLOR_BLOOD + if(owner) + bloodcolor = owner.get_blood_type().color + else if(original_owner) + bloodcolor = original_owner.get_blood_type().color var/obj/item/held_item = user.get_active_held_item() if(isanimal(user)) visible_message("[user] begins to eat \the [src].") playsound(src, 'sound/foley/gross.ogg', 100, FALSE) if(!do_after(user, 5 SECONDS, src)) return - new /obj/effect/decal/cleanable/blood/splatter(get_turf(src)) + new /obj/effect/decal/cleanable/blood/splatter(get_turf(src), bloodcolor) qdel(src) return else if(held_item?.get_sharpness() && held_item.wlength == WLENGTH_SHORT) @@ -208,7 +213,7 @@ var/obj/item/reagent_containers/food/snacks/food = new choose_type(get_turf(src)) if(rotted) food.become_rotten() - new /obj/effect/decal/cleanable/blood/splatter(get_turf(src)) + new /obj/effect/decal/cleanable/blood/splatter(get_turf(src), bloodcolor) user.adjust_experience(/datum/skill/labor/butchering, amt2raise, FALSE) qdel(src) return @@ -250,7 +255,12 @@ pixel_x = base_pixel_x + rand(-3, 3) pixel_y = base_pixel_y + rand(-3, 3) if(!skeletonized) - new /obj/effect/decal/cleanable/blood/splatter(get_turf(src)) + var/bloodcolor = COLOR_BLOOD + if(owner) + bloodcolor = owner.get_blood_type().color + else if(original_owner) + bloodcolor = original_owner.get_blood_type().color + new /obj/effect/decal/cleanable/blood/splatter(get_turf(src), bloodcolor) //empties the bodypart from its organs and other things inside it /obj/item/bodypart/proc/drop_organs(mob/user, violent_removal) @@ -637,7 +647,10 @@ image_dir = SOUTH if(dmg_overlay_type) if(brutestate) - . += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_[brutestate]0_[icon_gender]", -DAMAGE_LAYER, image_dir) + var/image/brute_image = image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_[brutestate]0_[icon_gender]", -DAMAGE_LAYER, image_dir) + if(owner) + brute_image.color = owner.get_blood_type().color + . += brute_image if(burnstate) . += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]_[icon_gender]", -DAMAGE_LAYER, image_dir) diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi index 51aa5d4d283..d50e2fb1946 100644 Binary files a/icons/effects/blood.dmi and b/icons/effects/blood.dmi differ diff --git a/icons/mob/dam_mob.dmi b/icons/mob/dam_mob.dmi index fe92746b43e..0bd95aa7ac8 100644 Binary files a/icons/mob/dam_mob.dmi and b/icons/mob/dam_mob.dmi differ diff --git a/icons/roguetown/mob/bodies/dam/dam_child.dmi b/icons/roguetown/mob/bodies/dam/dam_child.dmi index c6cf1d86d70..f9ac4b301b4 100644 Binary files a/icons/roguetown/mob/bodies/dam/dam_child.dmi and b/icons/roguetown/mob/bodies/dam/dam_child.dmi differ diff --git a/icons/roguetown/mob/bodies/dam/dam_female.dmi b/icons/roguetown/mob/bodies/dam/dam_female.dmi index eca96869293..25184775d4c 100644 Binary files a/icons/roguetown/mob/bodies/dam/dam_female.dmi and b/icons/roguetown/mob/bodies/dam/dam_female.dmi differ diff --git a/icons/roguetown/mob/bodies/dam/dam_male.dmi b/icons/roguetown/mob/bodies/dam/dam_male.dmi index c9866608abb..614e7db229f 100644 Binary files a/icons/roguetown/mob/bodies/dam/dam_male.dmi and b/icons/roguetown/mob/bodies/dam/dam_male.dmi differ