From 936d19c0a0026835ce43e82d97c128f9eb7f2872 Mon Sep 17 00:00:00 2001 From: HMBGERDO <61080616+HMBGERDO@users.noreply.github.com> Date: Wed, 26 Jun 2024 22:57:30 +0200 Subject: [PATCH] Blood spread fixes and tweaks (#26048) * blood spread fixes and tweaks * just to make sure * soap cant be bloodied, better check on gloves --- code/game/atoms.dm | 8 ++++++++ code/game/objects/items.dm | 1 + code/game/objects/items/weapons/soap.dm | 5 ++++- code/modules/detective_work/detective_work.dm | 11 +++++------ code/modules/mob/living/carbon/human/appearance.dm | 7 +++++++ .../mob/living/carbon/human/human_defense.dm | 13 +++++++++---- code/modules/projectiles/projectile_base.dm | 2 +- code/modules/surgery/other.dm | 2 +- code/modules/surgery/surgery.dm | 2 +- 9 files changed, 37 insertions(+), 14 deletions(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index b4cfe0a781f..98bcca85a89 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -19,6 +19,8 @@ var/blood_color /// Wont gloves/hands spend blood spill points to make this bloody var/easy_to_spill_blood = FALSE + /// Will the atom spread blood when touched? + var/should_spread_blood = FALSE var/pass_flags = 0 /// The higher the germ level, the more germ on the atom. var/germ_level = GERM_LEVEL_AMBIENT @@ -898,10 +900,14 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) return FALSE /obj/add_blood(list/blood_dna, b_color) + if(isnull(b_color)) + b_color = "#A10808" blood_color = b_color return transfer_blood_dna(blood_dna) /obj/item/add_blood(list/blood_dna, b_color) + if(isnull(b_color)) + b_color = "#A10808" var/blood_count = !blood_DNA ? 0 : length(blood_DNA) if(!..()) return FALSE @@ -915,6 +921,8 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) transfer_blood = rand(2, 4) /turf/add_blood(list/blood_dna, b_color) + if(isnull(b_color)) + b_color = "#A10808" var/obj/effect/decal/cleanable/blood/splatter/B = locate() in src if(!B) B = new /obj/effect/decal/cleanable/blood/splatter(src) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 5c81736b756..f0eb4e5ac75 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -54,6 +54,7 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons /// Determines what it can pass over/through. IE. 'PASSTABLE' will allow it to pass over tables pass_flags = PASSTABLE pressure_resistance = 4 + should_spread_blood = TRUE var/obj/item/master /// Flags which determine which body parts are protected from heat. Use the HEAD, UPPER_TORSO, LOWER_TORSO, etc. flags. See setup.dm diff --git a/code/game/objects/items/weapons/soap.dm b/code/game/objects/items/weapons/soap.dm index e7c486d5a40..d474d5a264b 100644 --- a/code/game/objects/items/weapons/soap.dm +++ b/code/game/objects/items/weapons/soap.dm @@ -31,6 +31,9 @@ return target.cleaning_act(user, src, cleanspeed) +/obj/item/soap/add_blood(list/blood_dna, b_color) + return + /obj/item/soap/proc/eat_soap(mob/living/carbon/human/drask/user) times_eaten++ playsound(user.loc, 'sound/items/eatfood.ogg', 50, 0) @@ -96,7 +99,7 @@ if(!istype(carried_item, /obj/item/bio_chip))//If it's not an implant. carried_item.add_mob_blood(target)//Oh yes, there will be blood... var/mob/living/carbon/human/H = target - H.bloody_hands(target,0) + H.make_bloody_hands(H.get_blood_dna_list(), H.get_blood_color()) H.bloody_body(target) return diff --git a/code/modules/detective_work/detective_work.dm b/code/modules/detective_work/detective_work.dm index ea9596dafa4..3c034c8c995 100644 --- a/code/modules/detective_work/detective_work.dm +++ b/code/modules/detective_work/detective_work.dm @@ -8,10 +8,10 @@ else if(G.transfer_blood > 1 && add_blood(G.blood_DNA, G.blood_color)) G.transfer_blood-- - if(blood_DNA) + if(blood_DNA && should_spread_blood) var/old_transfer_blood = G.transfer_blood G.add_blood(blood_DNA, blood_color) - G.transfer_blood = old_transfer_blood + G.transfer_blood = max(1, old_transfer_blood) M.update_inv_gloves() else @@ -20,11 +20,10 @@ else if(M.bloody_hands > 1 && add_blood(M.blood_DNA, M.hand_blood_color)) M.bloody_hands-- - if(blood_DNA) + if(blood_DNA && should_spread_blood) var/old_bloody_hands = M.bloody_hands - M.add_blood(blood_DNA, blood_color) - M.bloody_hands = old_bloody_hands - M.update_inv_gloves() + M.make_bloody_hands(blood_DNA, blood_color) + M.bloody_hands = max(1, old_bloody_hands) if(!suit_fibers) suit_fibers = list() var/fibertext diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index 39760db276e..3aaebf3a078 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -498,3 +498,10 @@ valid_alt_heads += alternate_head return sortTim(valid_alt_heads, GLOBAL_PROC_REF(cmp_text_asc)) + +/mob/living/carbon/human/proc/get_blood_color() + var/bloodcolor = "#A10808" + var/list/b_data = get_blood_data(get_blood_id()) + if(b_data) + bloodcolor = b_data["blood_color"] + return bloodcolor diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index ada1db48e5b..ee1b197b72c 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -616,11 +616,16 @@ emp_act visible_message("[I] embeds itself in [src]'s [L.name]!","[I] embeds itself in your [L.name]!") return TRUE -/mob/living/carbon/human/proc/bloody_hands(mob/living/source, amount = 2) +/mob/living/carbon/human/proc/make_bloody_hands(list/blood_dna, b_color) + if(isnull(b_color)) + b_color = "#A10808" if(gloves) - gloves.add_mob_blood(source) + gloves.add_blood(blood_dna, blood_color) else - add_mob_blood(source) + hand_blood_color = b_color + bloody_hands = rand(2, 4) + transfer_blood_dna(blood_dna) + add_verb(src, /mob/living/carbon/human/proc/bloody_doodle) update_inv_gloves() //updates on-mob overlays for bloody hands and/or bloody gloves /mob/living/carbon/human/proc/bloody_body(mob/living/source) @@ -657,7 +662,7 @@ emp_act if(bleed_rate && ishuman(user)) var/mob/living/carbon/human/attacker = user - attacker.bloody_hands(src) + attacker.make_bloody_hands(get_blood_dna_list(), get_blood_color()) /mob/living/carbon/human/attack_larva(mob/living/carbon/alien/larva/L) if(..()) //successful larva bite. diff --git a/code/modules/projectiles/projectile_base.dm b/code/modules/projectiles/projectile_base.dm index c0b25e63acf..ac8f9b91abf 100644 --- a/code/modules/projectiles/projectile_base.dm +++ b/code/modules/projectiles/projectile_base.dm @@ -201,7 +201,7 @@ L.add_splatter_floor(target_loca, shift_x = shift["x"], shift_y = shift["y"]) if(istype(H)) for(var/mob/living/carbon/human/M in step_over) //Bloody the mobs who're infront of the spray. - M.bloody_hands(H) + M.make_bloody_hands(H.get_blood_dna_list(), H.get_blood_color()) /* Uncomment when bloody_body stops randomly not transferring blood colour. M.bloody_body(H) */ else if(impact_effect_type && !hitscan) diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 22da9cad876..59b9d14998f 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -109,7 +109,7 @@ affected.fix_internal_bleeding() if(ishuman(user) && prob(40)) var/mob/living/carbon/human/U = user - U.bloody_hands(target, 0) + U.make_bloody_hands(target.get_blood_dna_list(), target.get_blood_color()) return SURGERY_STEP_CONTINUE diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 6f22fb03501..20cdc7e0425 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -446,7 +446,7 @@ var/mob/living/carbon/human/H = user switch(blood_level) if(SURGERY_BLOODSPREAD_HANDS) - H.bloody_hands(target, 0) + H.make_bloody_hands(target.get_blood_dna_list(), target.get_blood_color()) if(SURGERY_BLOODSPREAD_FULLBODY) H.bloody_body(target) return