From 20740bda399a0a51fca5d115585c7f95e6faf32e Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 20 Feb 2019 00:38:23 -0500 Subject: [PATCH 1/3] a bloody fun time - atomizes the med rework's blood effect changes and makes the blood reagent act more like you'd expect --- code/_onclick/item_attack.dm | 4 ++-- code/game/machinery/doors/door.dm | 2 +- code/game/objects/structures/kitchen_spike.dm | 2 +- code/modules/detectivework/detective_work.dm | 9 +++++++++ code/modules/mob/living/carbon/carbon_defense.dm | 13 +++++++------ code/modules/mob/living/carbon/human/species.dm | 2 +- code/modules/projectiles/projectile.dm | 3 +-- .../reagents/chemistry/reagents/other_reagents.dm | 6 ++++++ code/modules/surgery/bodyparts/dismemberment.dm | 6 ++---- 9 files changed, 30 insertions(+), 17 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 355b46850b..126c1ea4c6 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -125,8 +125,8 @@ if(prob(33)) I.add_mob_blood(src) var/turf/location = get_turf(src) - add_splatter_floor(location) - if(get_dist(user, src) <= 1) //people with TK won't get smeared with blood + bleed(totitemdamage) + if(totitemdamage >= 10 && get_dist(user, src) <= 1) //people with TK won't get smeared with blood user.add_mob_blood(src) return TRUE //successful attack diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 222caeb595..99b3120b0f 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -327,7 +327,7 @@ L.adjustBruteLoss(DOOR_CRUSH_DAMAGE) var/turf/location = get_turf(src) //add_blood doesn't work for borgs/xenos, but add_blood_floor does. - L.add_splatter_floor(location) + L.bleed(DOOR_CRUSH_DAMAGE) for(var/obj/mecha/M in get_turf(src)) M.take_damage(DOOR_CRUSH_DAMAGE) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index b73c6e496c..75b34b22f6 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -75,7 +75,7 @@ L.visible_message("[user] slams [L] onto the meat spike!", "[user] slams you onto the meat spike!", "You hear a squishy wet noise.") L.forceMove(drop_location()) L.emote("scream") - L.add_splatter_floor() + L.bleed(30) L.adjustBruteLoss(30) L.setDir(2) buckle_mob(L, force=1) diff --git a/code/modules/detectivework/detective_work.dm b/code/modules/detectivework/detective_work.dm index 42d6fcbe1e..c892bfeffc 100644 --- a/code/modules/detectivework/detective_work.dm +++ b/code/modules/detectivework/detective_work.dm @@ -93,6 +93,15 @@ else if(length(blood_dna)) AddComponent(/datum/component/forensics, null, null, blood_dna) bloody_hands = rand(2, 4) + if(head) + head.add_blood_DNA(blood_dna) + update_inv_head() + else if(wear_mask) + wear_mask.add_blood_DNA(blood_dna) + update_inv_wear_mask() + if(wear_neck) + wear_neck.add_blood_DNA(blood_dna) + update_inv_neck() update_inv_gloves() //handles bloody hands overlays and updating return TRUE diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index d81ef09d14..30180312bb 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -87,21 +87,22 @@ //CIT CHANGES END HERE apply_damage(totitemdamage, I.damtype, affecting) //CIT CHANGE - replaces I.force with totitemdamage if(I.damtype == BRUTE && affecting.status == BODYPART_ORGANIC) - if(prob(33)) + var/basebloodychance = affecting.brute_dam + totitemdamage + if(prob(basebloodychance)) I.add_mob_blood(src) var/turf/location = get_turf(src) - add_splatter_floor(location) - if(get_dist(user, src) <= 1) //people with TK won't get smeared with blood + bleed(totitemdamage) + if(totitemdamage >= 10 && get_dist(user, src) <= 1) //people with TK won't get smeared with blood user.add_mob_blood(src) if(affecting.body_zone == BODY_ZONE_HEAD) - if(wear_mask) + if(wear_mask && prob(basebloodychance)) wear_mask.add_mob_blood(src) update_inv_wear_mask() - if(wear_neck) + if(wear_neck && prob(basebloodychance)) wear_neck.add_mob_blood(src) update_inv_neck() - if(head) + if(head && prob(basebloodychance)) head.add_mob_blood(src) update_inv_head() diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index aee1daa449..35576a9005 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1552,7 +1552,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) bloody = 1 var/turf/location = H.loc if(istype(location)) - H.add_splatter_floor(location) + H.bleed(totitemdamage) if(get_dist(user, H) <= 1) //people with TK won't get smeared with blood user.add_mob_blood(H) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index a23bf1f4ed..38bacb0d76 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -164,8 +164,7 @@ new /obj/effect/temp_visual/dir_setting/bloodsplatter/xenosplatter(target_loca, splatter_dir) else new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_loca, splatter_dir) - if(prob(33)) - L.add_splatter_floor(target_loca) + L.bleed(damage) else if(impact_effect_type && !hitscan) new impact_effect_type(target_loca, hitx, hity) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index a7e4e0f590..4b4f118a9c 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -32,6 +32,12 @@ else C.blood_volume = min(C.blood_volume + round(reac_volume, 0.1), BLOOD_VOLUME_MAXIMUM) + if(reac_volume >= 10 && istype(L)) + L.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) + +/datum/reagent/blood/reaction_obj(obj/O, volume) + if(volume >= 3 && istype(O)) + O.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) /datum/reagent/blood/on_new(list/data) if(istype(data)) diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 73d0ab305e..1a46a9dcb1 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -26,9 +26,7 @@ burn() return 1 add_mob_blood(C) - var/turf/location = C.loc - if(istype(location)) - C.add_splatter_floor(location) + C.bleed(40) var/direction = pick(GLOB.cardinals) var/t_range = rand(2,max(throw_range/2, 2)) var/turf/target_turf = get_turf(src) @@ -54,7 +52,7 @@ . = list() var/organ_spilled = 0 var/turf/T = get_turf(C) - C.add_splatter_floor(T) + C.bleed(50) playsound(get_turf(C), 'sound/misc/splort.ogg', 80, 1) for(var/X in C.internal_organs) var/obj/item/organ/O = X From c11aba9368ae766f7b912df1296763a564a48a0d Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 20 Feb 2019 03:37:07 -0500 Subject: [PATCH 2/3] oh, right. i've gotta add a snowflake check since /living lacks bleed() in the base code --- code/_onclick/item_attack.dm | 6 +++++- code/game/machinery/doors/door.dm | 6 +++++- code/game/objects/structures/kitchen_spike.dm | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 126c1ea4c6..e8f718e590 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -125,7 +125,11 @@ if(prob(33)) I.add_mob_blood(src) var/turf/location = get_turf(src) - bleed(totitemdamage) + if(iscarbon(src)) + var/mob/living/carbon/C = src + C.bleed(totitemdamage) + else + add_splatter_floor(location) if(totitemdamage >= 10 && get_dist(user, src) <= 1) //people with TK won't get smeared with blood user.add_mob_blood(src) return TRUE //successful attack diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 99b3120b0f..9c01c186e1 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -327,7 +327,11 @@ L.adjustBruteLoss(DOOR_CRUSH_DAMAGE) var/turf/location = get_turf(src) //add_blood doesn't work for borgs/xenos, but add_blood_floor does. - L.bleed(DOOR_CRUSH_DAMAGE) + if(iscarbon(L)) + var/mob/living/carbon/C = L + C.bleed(DOOR_CRUSH_DAMAGE) + else + L.add_splatter_floor(location) for(var/obj/mecha/M in get_turf(src)) M.take_damage(DOOR_CRUSH_DAMAGE) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 75b34b22f6..b9a75f88af 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -75,7 +75,11 @@ L.visible_message("[user] slams [L] onto the meat spike!", "[user] slams you onto the meat spike!", "You hear a squishy wet noise.") L.forceMove(drop_location()) L.emote("scream") - L.bleed(30) + if(iscarbon(L)) + var/mob/living/carbon/C = L + C.bleed(30) + else + L.add_splatter_floor() L.adjustBruteLoss(30) L.setDir(2) buckle_mob(L, force=1) From a386632c8aaf85b949f9bc891c30d1d0bd4b9f51 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 20 Feb 2019 04:04:23 -0500 Subject: [PATCH 3/3] travis is a travesty --- code/modules/mob/living/carbon/carbon_defense.dm | 1 - code/modules/projectiles/projectile.dm | 6 +++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 30180312bb..d8bb90460a 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -90,7 +90,6 @@ var/basebloodychance = affecting.brute_dam + totitemdamage if(prob(basebloodychance)) I.add_mob_blood(src) - var/turf/location = get_turf(src) bleed(totitemdamage) if(totitemdamage >= 10 && get_dist(user, src) <= 1) //people with TK won't get smeared with blood user.add_mob_blood(src) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 38bacb0d76..267770eb22 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -164,7 +164,11 @@ new /obj/effect/temp_visual/dir_setting/bloodsplatter/xenosplatter(target_loca, splatter_dir) else new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_loca, splatter_dir) - L.bleed(damage) + if(iscarbon(L)) + var/mob/living/carbon/C = L + C.bleed(damage) + else + L.add_splatter_floor(target_loca) else if(impact_effect_type && !hitscan) new impact_effect_type(target_loca, hitx, hity)