From 476cdc3e06a1d9cd68d4dda15e9582eca1d8f328 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 11 Jul 2017 16:49:11 -0400 Subject: [PATCH] Blood Refactor (#6220) * commit for branch swap * branch swap again * BLEED * trying to clear up compile errors * i killed everything when i tested this... * restorealltheblood * I REMOVED A THING * well some progress * stop bleeding * got to swap branches again. * grr * damn bloodcolors * Squash everything * color....colourrrrrrr * color....colourrrrrrr * well now that updated the branch... * Changes * Some tweaks..before i upload something major * COLOR NOT COLOUR...COLOR YES I KNOW NOT EVERYONE SPELLS IT LIKE THAT BUT MY GOD * Foot print shit.. blood coloring is going to be PAIN * trying to handle some colors..maybe. * blood colorsing sucks..di i mention this? * commenting cod malfunctions. * Changes * lets try this * Its too late at night. * blargh * woops * almost works... * progress.. * Branch swap * figured out the overlay issue.... * BRANCH SWAP * BLARGH * fixed merged conflicts..expect something to be horribly wrong. * bunch of changes * Major Fixes - Moved blood_state and bloodiness var definitions to /obj/effect/decal/cleanable/blood as well as /cleanable/Crossed(), in order to make blood color work properly. - These were not used by any other decal, so it was pointless. - Tweaked human/add_blood so that hand_blood_color uses the correct value now. - Corrected gibs having the wrong basecolor. - Tracks of different blood colors will no longer combine weirdly, and will instead form seperate overlays. - This also fixes all of the issues with tracks in general and not updating correctly. - Fixed transfering blood in add_fingerprint; the old detective code didn't use the new format for add_blood(). - Fixed xenomorphs causing runtimes in makeTrail(), and gave them their own trails. Sprites should probably be brightened later. - Fixed mobs occasionally randomly having their blood_DNA list reset. * may have accidently removed shit. * Mrowl * stiff water is not bleeding lowered trail making threshold * tweaks then conflcits * weee * indent * some tweaks * somefox tweaks. * derp * why won't they bleed!? * BLEED DAMMIT * Flattist comments and removes simple animale blood volume Cause i cannot get it to work right. * PRAISE FLATTIST * Simple animals have a blood volume now Bug with trail fixed. * changes * thanksmrowlmrowl * exotice blood trails * makesure is an exotic bleeder has a bleed rate first... * FoxBoxTweakSox * BoxVoxSoXFox * ONE MORE THING * animalsbleedreds * Buh? BUGH! * thisismescreaming * removing note needed thing * Color changes but the rabbit hole continues. * This is not pretty.... * wot * IT WORKS DAMMIT * colors. * germaphobic commit.. * we have to use the old system * nothing to see here * doubleprocarady * try to fix mulebots * mulebot fixed * DONE --- code/__DEFINES/genetics.dm | 1 + code/__DEFINES/misc.dm | 14 +- code/_onclick/item_attack.dm | 4 +- code/datums/outfits/outfit_admin.dm | 6 +- code/game/atoms.dm | 207 ++++++-- .../gamemodes/changeling/powers/fleshmend.dm | 2 - .../gamemodes/changeling/powers/mutations.dm | 6 +- .../gamemodes/changeling/powers/revive.dm | 2 - code/game/gamemodes/cult/cult_items.dm | 2 +- .../gamemodes/miniantags/abduction/gland.dm | 16 +- code/game/gamemodes/vampire/vampire.dm | 8 +- code/game/gamemodes/wizard/artefact.dm | 2 +- code/game/machinery/Sleeper.dm | 11 +- code/game/machinery/adv_med.dm | 21 +- code/game/machinery/computer/Operating.dm | 7 +- code/game/machinery/doors/door.dm | 6 +- code/game/machinery/iv_drip.dm | 39 +- code/game/machinery/recycler.dm | 2 +- .../effects/decals/Cleanable/aliens.dm | 2 + .../effects/decals/Cleanable/humans.dm | 127 +++-- .../effects/decals/Cleanable/robots.dm | 7 +- .../effects/decals/Cleanable/tracks.dm | 239 ++++----- code/game/objects/effects/decals/cleanable.dm | 2 +- code/game/objects/items.dm | 45 -- code/game/objects/items/devices/scanners.dm | 30 +- code/game/objects/items/stacks/medical.dm | 13 + code/game/objects/items/weapons/scissors.dm | 5 +- code/game/objects/items/weapons/soap.dm | 2 +- code/game/objects/structures/kitchen_spike.dm | 5 +- code/game/turfs/simulated.dm | 55 -- code/modules/clothing/clothing.dm | 2 + code/modules/detective_work/detective_work.dm | 4 +- .../detective_work/footprints_and_rag.dm | 9 +- code/modules/mob/living/carbon/alien/alien.dm | 6 + code/modules/mob/living/carbon/carbon.dm | 17 +- .../mob/living/carbon/carbon_defines.dm | 2 + .../mob/living/carbon/human/examine.dm | 5 + code/modules/mob/living/carbon/human/human.dm | 36 +- .../mob/living/carbon/human/human_damage.dm | 9 - .../mob/living/carbon/human/human_defense.dm | 37 +- .../mob/living/carbon/human/human_defines.dm | 2 + .../mob/living/carbon/human/human_movement.dm | 46 +- code/modules/mob/living/carbon/human/life.dm | 4 +- .../living/carbon/human/species/station.dm | 4 +- code/modules/mob/living/carbon/life.dm | 3 + code/modules/mob/living/living.dm | 58 ++- code/modules/mob/living/living_defines.dm | 2 + .../mob/living/simple_animal/bot/mulebot.dm | 62 +-- .../simple_animal/friendly/farm_animals.dm | 5 + .../mob/living/simple_animal/friendly/pet.dm | 1 + .../simple_animal/hostile/mining/hivelord.dm | 6 +- .../mob/living/simple_animal/simple_animal.dm | 8 +- code/modules/projectiles/guns/alien.dm | 2 +- .../projectiles/guns/projectile/saw.dm | 6 +- .../projectiles/guns/projectile/sniper.dm | 6 +- code/modules/reagents/chemistry/colors.dm | 4 +- code/modules/reagents/chemistry/holder.dm | 4 - .../reagents/chemistry/reagents/food.dm | 16 +- .../reagents/chemistry/reagents/medicine.dm | 7 +- .../reagents/chemistry/reagents/misc.dm | 2 +- .../reagents/chemistry/reagents/water.dm | 16 +- code/modules/reagents/reagent_containers.dm | 2 +- .../reagents/reagent_containers/syringes.dm | 187 ++----- .../recycling/disposal-construction.dm | 4 +- .../artifact/effects/unknown_effect_heal.dm | 4 +- .../xenoarchaeology/finds/finds_special.dm | 2 +- code/modules/surgery/organs/blood.dm | 489 +++++++----------- code/modules/surgery/organs/organ.dm | 5 +- code/modules/surgery/organs/organ_external.dm | 6 +- code/modules/surgery/organs/organ_internal.dm | 24 +- code/modules/surgery/organs/vocal_cords.dm | 2 +- icons/effects/blood.dmi | Bin 87234 -> 97368 bytes icons/effects/fluidtracks.dmi | Bin 3990 -> 3990 bytes 73 files changed, 957 insertions(+), 1047 deletions(-) diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index 4f07d54ee01..be243c66386 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -99,6 +99,7 @@ #define NUTRITION_LEVEL_CURSED 0 //Blood levels +#define BLOOD_VOLUME_MAXIMUM 2000 #define BLOOD_VOLUME_NORMAL 560 #define BLOOD_VOLUME_SAFE 501 #define BLOOD_VOLUME_OKAY 336 diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index a2f487086ae..61e5e5069b4 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -334,4 +334,16 @@ #define FIRST_DIAG_STEP 1 #define SECOND_DIAG_STEP 2 -#define ARBITRARY_VIEWRANGE_NOHUD 2 \ No newline at end of file +#define ARBITRARY_VIEWRANGE_NOHUD 2 +#define SECOND_DIAG_STEP 2 + +//Bloody shoes/footprints +#define MAX_SHOE_BLOODINESS 100 +#define BLOODY_FOOTPRINT_BASE_ALPHA 150 +#define BLOOD_GAIN_PER_STEP 100 +#define BLOOD_LOSS_PER_STEP 5 + +//Bloody shoe blood states +#define BLOOD_STATE_HUMAN "blood" +#define BLOOD_STATE_XENO "xeno" +#define BLOOD_STATE_NOT_BLOODY "no blood whatsoever" diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 59cbf9c6219..8d132ed2586 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -183,9 +183,7 @@ M.take_organ_damage(power) if(prob(33)) // Added blood for whacking non-humans too - var/turf/simulated/location = M.loc - if(istype(location, /turf/simulated)) - location.add_blood_floor(M) + M.add_splatter_floor() if("fire") M.take_organ_damage(0, power) to_chat(M, "Aargh it burns!") diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 4a6f2a941ff..d70fc1ca4ac 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -587,6 +587,8 @@ apply_to_card(I, H, list(access_maint_tunnels), "Legit Xenomorph") /datum/outfit/admin/soviet + + gloves = /obj/item/clothing/gloves/combat uniform = /obj/item/clothing/under/soviet back = /obj/item/weapon/storage/backpack/satchel head = /obj/item/clothing/head/ushanka @@ -970,7 +972,7 @@ for(var/obj/item/I in H.contents) if(!istype(I, /obj/item/weapon/implant)) - I.add_blood(H) + I.add_mob_blood(H) if(visualsOnly) return @@ -1005,7 +1007,7 @@ for(var/obj/item/I in H.contents) if(!istype(I, /obj/item/weapon/implant)) - I.add_blood(H) + I.add_mob_blood(H) if(visualsOnly) return diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 292ad651235..8c12e452d1d 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -242,7 +242,7 @@ if(density && !has_gravity(AM)) //thrown stuff bounces off dense stuff in no grav, unless the thrown stuff ends up inside what it hit(embedding, bola, etc...). addtimer(src, "hitby_react", 2, TRUE, AM) -/atom/proc/hitby_react(atom/movable/AM) +/atom/proc/hitby_react(atom/movable/AM) if(AM && isturf(AM.loc)) step(AM, turn(AM.dir, 180)) @@ -365,47 +365,194 @@ A.fingerprintshidden |= fingerprintshidden.Copy() //admin A.fingerprintslast = fingerprintslast +var/list/blood_splatter_icons = list() -//returns 1 if made bloody, returns 0 otherwise -/atom/proc/add_blood(mob/living/carbon/human/M as mob) +/atom/proc/blood_splatter_index() + return "\ref[initial(icon)]-[initial(icon_state)]" - if(!blood_DNA || !istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialise it. +//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") + return + return list("ANIMAL DNA" = "Y-") + +/mob/living/carbon/get_blood_dna_list() + if(get_blood_id() != "blood") + return + var/list/blood_dna = list() + if(dna) + var/mob/living/carbon/human/H = src + blood_dna[dna.unique_enzymes] = H.b_type + else + blood_dna["UNKNOWN DNA"] = "X*" + return blood_dna + +/mob/living/carbon/alien/get_blood_dna_list() + return list("UNKNOWN DNA" = "X*") + +//to add a mob's dna info into an object's blood_DNA list. +/atom/proc/transfer_mob_blood_dna(mob/living/L) + var/new_blood_dna = L.get_blood_dna_list() + if(!new_blood_dna) + return 0 + return transfer_blood_dna(new_blood_dna) + +/obj/effect/decal/cleanable/blood/splatter/transfer_mob_blood_dna(mob/living/L) + ..(L) + var/list/b_data = L.get_blood_data(L.get_blood_id()) + if(b_data) + basecolor = b_data["blood_color"] + else + basecolor = "#A10808" + update_icon() + +/obj/effect/decal/cleanable/blood/footprints/transfer_mob_blood_dna(mob/living/L) + ..(L) + var/list/b_data = L.get_blood_data(L.get_blood_id()) + if(b_data) + basecolor = b_data["blood_color"] + else + basecolor = "#A10808" + update_icon() + +//to add blood dna info to the object's blood_DNA list +/atom/proc/transfer_blood_dna(list/blood_dna) + if(!blood_DNA) blood_DNA = list() + var/old_length = blood_DNA.len + blood_DNA |= blood_dna + if(blood_DNA.len > old_length) + return 1//some new blood DNA was added - blood_color = "#A10808" - if(istype(M)) - if(M.species.flags & NO_BLOOD) - return 0 - M.check_dna() - blood_color = M.species.blood_color - . = 1 +//to add blood from a mob onto something, and transfer their dna info +/atom/proc/add_mob_blood(mob/living/M) + var/list/blood_dna = M.get_blood_dna_list() + if(!blood_dna) + return 0 + var/bloodcolor = "#A10808" + var/list/b_data = M.get_blood_data(M.get_blood_id()) + if(b_data) + bloodcolor = b_data["blood_color"] + + 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) + return 0 + +/obj/add_blood(list/blood_dna, color) + return transfer_blood_dna(blood_dna) + +/obj/item/add_blood(list/blood_dna, color) + var/blood_count = !blood_DNA ? 0 : blood_DNA.len + if(!..()) + return 0 + if(!blood_count)//apply the blood-splatter overlay if it isn't already in there + add_blood_overlay(color) + return 1 //we applied blood to the item + +/obj/item/clothing/gloves/add_blood(list/blood_dna, color) + . = ..() + transfer_blood = rand(2, 4) + +/turf/add_blood(list/blood_dna, 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 + return 1 //we bloodied the floor + +/mob/living/carbon/human/add_blood(list/blood_dna, color) + if(wear_suit) + wear_suit.add_blood(blood_dna, color) + wear_suit.blood_color = color + update_inv_wear_suit(1) + else if(w_uniform) + w_uniform.add_blood(blood_dna, color) + w_uniform.blood_color = color + update_inv_w_uniform(1) + if(head) + head.add_blood(blood_dna, color) + head.blood_color = color + update_inv_head(0,0) + if(glasses) + glasses.add_blood(blood_dna, color) + glasses.blood_color = color + update_inv_glasses(0) + if(gloves) + var/obj/item/clothing/gloves/G = gloves + G.add_blood(blood_dna, color) + G.blood_color = color + verbs += /mob/living/carbon/human/proc/bloody_doodle + else + hand_blood_color = color + bloody_hands = rand(2, 4) + transfer_blood_dna(blood_dna) + verbs += /mob/living/carbon/human/proc/bloody_doodle + + update_inv_gloves(1) //handles bloody hands overlays and updating return 1 -/atom/proc/add_blood_list(mob/living/carbon/M) - // Returns 0 if we have that blood already - if(!istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialise it. - blood_DNA = list() - //if this blood isn't already in the list, add it - if(blood_DNA[M.dna.unique_enzymes]) - return 0 //already bloodied with this blood. Cannot add more. - var/blood_type = "X*" - if(ishuman(M)) - var/mob/living/carbon/human/H = M - blood_type = H.b_type - blood_DNA[M.dna.unique_enzymes] = blood_type - return 1 +/obj/item/proc/add_blood_overlay(color) + 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 = blood_splatter_icons[index] + if(!blood_splatter_icon) + blood_splatter_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply blood-splatters to the initial icon_state for each object + blood_splatter_icon.Blend("#fff", 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) + blood_splatter_icons[index] = blood_splatter_icon -// Only adds blood on the floor -- Skie -/atom/proc/add_blood_floor(mob/living/carbon/M) - return //why the fuck this is at an atom level but only works on simulated turfs I don't know + blood_overlay = image(blood_splatter_icon) + blood_overlay.color = color + overlays += blood_overlay /atom/proc/clean_blood() - src.germ_level = 0 - if(istype(blood_DNA, /list)) - qdel(blood_DNA) + germ_level = 0 + if(islist(blood_DNA)) + blood_DNA = null return 1 + +/obj/item/clean_blood() + . = ..() + if(.) + if(blood_overlay) + overlays -= blood_overlay + +/obj/item/clothing/gloves/clean_blood() + . = ..() + if(.) + transfer_blood = 0 + + +/obj/item/clothing/shoes/clean_blood() + ..() + bloody_shoes = list(BLOOD_STATE_HUMAN = 0, BLOOD_STATE_XENO = 0, BLOOD_STATE_NOT_BLOODY = 0) + blood_state = BLOOD_STATE_NOT_BLOODY + if(ismob(loc)) + var/mob/M = loc + M.update_inv_shoes() + + +/mob/living/carbon/human/clean_blood() + if(gloves) + if(gloves.clean_blood()) + clean_blood() + update_inv_gloves() + gloves.germ_level = 0 + else + ..() // Clear the Blood_DNA list + if(bloody_hands) + bloody_hands = 0 + update_inv_gloves() + update_icons() //apply the now updated overlays to the mob + + /atom/proc/add_vomit_floor(mob/living/carbon/M as mob, var/toxvomit = 0) if( istype(src, /turf/simulated) ) var/obj/effect/decal/cleanable/vomit/this = new /obj/effect/decal/cleanable/vomit(src) diff --git a/code/game/gamemodes/changeling/powers/fleshmend.dm b/code/game/gamemodes/changeling/powers/fleshmend.dm index cd09cc8d764..e6ccafcffa0 100644 --- a/code/game/gamemodes/changeling/powers/fleshmend.dm +++ b/code/game/gamemodes/changeling/powers/fleshmend.dm @@ -13,8 +13,6 @@ var/mob/living/carbon/human/H = user H.restore_blood() H.shock_stage = 0 - spawn(1) - H.fixblood() spawn(0) for(var/i = 0, i<10,i++) user.heal_overall_damage(10, 10) diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm index 13378f6ff8e..943b15a6172 100644 --- a/code/game/gamemodes/changeling/powers/mutations.dm +++ b/code/game/gamemodes/changeling/powers/mutations.dm @@ -76,10 +76,8 @@ H.update_fhair() if(blood_on_castoff) - var/turf/simulated/T = get_turf(H) - if(istype(T)) - T.add_blood(H) //So real blood decals - playsound(H.loc, 'sound/effects/splat.ogg', 50, 1) //So real sounds + H.add_splatter_floor() + playsound(H.loc, 'sound/effects/splat.ogg', 50, 1) //So real sounds changeling.geneticdamage += genetic_damage //Casting off a space suit leaves you weak for a few seconds. changeling.chem_recharge_slowdown -= recharge_slowdown diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index 9077f623a2c..376e6d5a148 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -30,8 +30,6 @@ var/mob/living/carbon/human/H = user H.restore_blood() H.shock_stage = 0 - spawn(1) - H.fixblood() H.species.create_organs(H) // Now that recreating all organs is necessary, the rest of this organ stuff probably // isn't, but I don't want to remove it, just in case. diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 7ec4240769d..289ae7e4656 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -48,7 +48,7 @@ var/mob/living/carbon/human/bleeder = target if(!(cooldown > world.time) && ((bleeder.stat != DEAD) && !(bleeder.species.flags & NO_BLOOD))) user.visible_message("The runes on the blade absorb the blood of [target]!") - bleeder.drip(5000) + bleeder.bleed(5000) cooldown = world.time + 2400 /obj/item/weapon/restraints/legcuffs/bola/cult diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index e58665c514e..09ca45e2049 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -181,21 +181,14 @@ uses = -1 /obj/item/organ/internal/heart/gland/bloody/activate() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.drip(200) + owner.blood_volume -= 20 owner.visible_message("[owner]'s skin erupts with blood!",\ "Blood pours from your skin!") for(var/turf/T in oview(3,owner)) //Make this respect walls and such - T.add_blood_floor(owner) + owner.add_splatter_floor(T) for(var/mob/living/carbon/human/H in oview(3,owner)) //Blood decals for simple animals would be neat. aka Carp with blood on it. - if(H.wear_suit) - H.wear_suit.add_blood(owner) - H.update_inv_wear_suit(0) - else if(H.w_uniform) - H.w_uniform.add_blood(owner) - H.update_inv_w_uniform(0) + H.add_mob_blood(owner) /obj/item/organ/internal/heart/gland/bodysnatch cooldown_low = 600 @@ -211,8 +204,7 @@ C.Copy(owner) C.Start() owner.adjustBruteLoss(40) - var/turf/T = get_turf(owner) - T.add_blood_floor(src) + owner.add_splatter_floor() /obj/effect/cocoon/abductor name = "slimy cocoon" diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index 00c99e76f29..6e0cc7ebd22 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -289,20 +289,20 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha return old_bloodtotal = bloodtotal old_bloodusable = bloodusable - if(!H.vessel.get_reagent_amount("blood")) + if(!H.blood_volume) to_chat(owner, "They've got no blood left to give.") break if(H.stat < DEAD) - blood = min(20, H.vessel.get_reagent_amount("blood")) // if they have less than 20 blood, give them the remnant else they get 20 blood + blood = min(20, H.blood_volume) // if they have less than 20 blood, give them the remnant else they get 20 blood bloodtotal += blood / 2 //divide by 2 to counted the double suction since removing cloneloss -Melandor0 bloodusable += blood / 2 else - blood = min(5, H.vessel.get_reagent_amount("blood")) // The dead only give 5 bloods + blood = min(5, H.blood_volume) // The dead only give 5 bloods bloodtotal += blood if(old_bloodtotal != bloodtotal) to_chat(owner, "You have accumulated [bloodtotal] [bloodtotal > 1 ? "units" : "unit"] of blood[bloodusable != old_bloodusable ? ", and have [bloodusable] left to use" : ""].") check_vampire_upgrade() - H.vessel.remove_reagent("blood", 25) + H.blood_volume -= 25 if(ishuman(owner)) var/mob/living/carbon/human/V = owner V.nutrition = min(NUTRITION_LEVEL_WELL_FED, V.nutrition + (blood / 2)) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index c6f3b4c4280..88251dcdd36 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -525,7 +525,7 @@ var/global/list/multiverse = list() M.equip_to_slot_or_del(sword, slot_r_hand) for(var/obj/item/carried_item in M.contents) if(!istype(carried_item, /obj/item/weapon/implant)) - carried_item.add_blood(M) + carried_item.add_mob_blood(M) if("pirate") M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index f74380432d2..5bd5b69d9dd 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -97,10 +97,10 @@ return if(beaker.reagents.total_volume < beaker.reagents.maximum_volume) - src.occupant.vessel.trans_to(beaker, 1) + src.occupant.transfer_blood_to(beaker, 1) for(var/datum/reagent/x in src.occupant.reagents.reagent_list) src.occupant.reagents.trans_to(beaker, 3) - src.occupant.vessel.trans_to(beaker, 1) + src.occupant.transfer_blood_to(beaker, 1) if(occupant) for(var/A in occupant.reagents.addiction_list) @@ -197,13 +197,12 @@ crisis = (occupant.health < min_health) // I'm not sure WHY you'd want to put a simple_animal in a sleeper, but precedent is precedent // Runtime is aptly named, isn't she? - if(ishuman(occupant) && occupant.vessel && !(occupant.species && occupant.species.flags & NO_BLOOD)) - var/blood_type = occupant.get_blood_name() + if(ishuman(occupant) && !(occupant.species && occupant.species.flags & NO_BLOOD)) occupantData["pulse"] = occupant.get_pulse(GETPULSE_TOOL) occupantData["hasBlood"] = 1 - occupantData["bloodLevel"] = round(occupant.vessel.get_reagent_amount(blood_type)) + occupantData["bloodLevel"] = round(occupant.blood_volume) occupantData["bloodMax"] = occupant.max_blood - occupantData["bloodPercent"] = round(100*(occupant.vessel.get_reagent_amount(blood_type)/occupant.max_blood), 0.01) + occupantData["bloodPercent"] = round(100*(occupant.blood_volume/occupant.max_blood), 0.01) data["occupant"] = occupantData data["maxchem"] = max_chem diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 6d7264e9256..aeb3b37c7bd 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -364,14 +364,12 @@ var/bloodData[0] bloodData["hasBlood"] = 0 - if(ishuman(H) && H.vessel && !(H.species && H.species.flags & NO_BLOOD)) - var/blood_type = H.get_blood_name() - var/blood_volume = round(H.vessel.get_reagent_amount(blood_type)) + if(ishuman(H) && !(H.species && H.species.flags & NO_BLOOD)) bloodData["hasBlood"] = 1 - bloodData["volume"] = blood_volume - bloodData["percent"] = round(((blood_volume / BLOOD_VOLUME_NORMAL)*100)) + bloodData["volume"] = H.blood_volume + bloodData["percent"] = round(((H.blood_volume / BLOOD_VOLUME_NORMAL)*100)) bloodData["pulse"] = H.get_pulse(GETPULSE_TOOL) - bloodData["bloodLevel"] = blood_volume + bloodData["bloodLevel"] = H.blood_volume bloodData["bloodMax"] = H.max_blood occupantData["blood"] = bloodData @@ -532,14 +530,11 @@ if(occupant.has_brain_worms()) dat += "Large growth detected in frontal lobe, possibly cancerous. Surgical removal is recommended.
" - if(occupant.vessel) - var/blood_type = occupant.get_blood_name() - var/blood_volume = round(occupant.vessel.get_reagent_amount(blood_type)) - var/blood_percent = blood_volume / BLOOD_VOLUME_NORMAL - blood_percent *= 100 + var/blood_percent = round((occupant.blood_volume / BLOOD_VOLUME_NORMAL)) + blood_percent *= 100 - extra_font = (blood_volume > 448 ? "" : "") - dat += "[extra_font]\tBlood Level %: [blood_percent] ([blood_volume] units)
" + extra_font = (occupant.blood_volume > 448 ? "" : "") + dat += "[extra_font]\tBlood Level %: [blood_percent] ([occupant.blood_volume] units)
" if(occupant.reagents) dat += "Epinephrine units: [occupant.reagents.get_reagent_amount("Epinephrine")] units
" diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index 19d61e0daf9..64b441b6170 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -148,13 +148,12 @@ occupantData["btCelsius"] = occupant.bodytemperature - T0C occupantData["btFaren"] = ((occupant.bodytemperature - T0C) * (9.0/5.0))+ 32 - if(ishuman(occupant) && occupant.vessel && !(occupant.species && occupant.species.flags & NO_BLOOD)) - var/blood_type = occupant.get_blood_name() + if(ishuman(occupant) && !(occupant.species && occupant.species.flags & NO_BLOOD)) occupantData["pulse"] = occupant.get_pulse(GETPULSE_TOOL) occupantData["hasBlood"] = 1 - occupantData["bloodLevel"] = round(occupant.vessel.get_reagent_amount(blood_type)) + occupantData["bloodLevel"] = round(occupant.blood_volume) occupantData["bloodMax"] = occupant.max_blood - occupantData["bloodPercent"] = round(100*(occupant.vessel.get_reagent_amount(blood_type)/occupant.max_blood), 0.01) //copy pasta ends here + occupantData["bloodPercent"] = round(100*(occupant.blood_volume/occupant.max_blood), 0.01) //copy pasta ends here occupantData["bloodType"]=occupant.b_type if(occupant.surgeries.len) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index d6b295e1811..2b2039c9743 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -278,9 +278,9 @@ L.Weaken(5) else //for simple_animals & borgs L.adjustBruteLoss(DOOR_CRUSH_DAMAGE) - var/turf/simulated/location = loc - if(istype(location, /turf/simulated)) //add_blood doesn't work for borgs/xenos, but add_blood_floor does. - location.add_blood_floor(L) + var/turf/location = get_turf(src) + L.add_splatter_floor(location) + /obj/machinery/door/proc/requiresID() return 1 diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 26785e248b1..7ed7bc8dbc2 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -125,42 +125,15 @@ amount = min(amount, 4) // If the beaker is full, ping if(amount == 0) - if(prob(5)) - visible_message("[src] pings.") + if(prob(5)) visible_message("\The [src] pings.") return - var/mob/living/carbon/human/T = attached - - if(!ishuman(T)) - return - - if(!T.dna) - return - - if(NOCLONE in T.mutations) - return - - if(T.species.flags & NO_BLOOD) - return - - if(T.species.exotic_blood) - T.vessel.trans_to(beaker, amount) - update_icon() - else - var/datum/reagent/B = T.take_blood(beaker, amount) - - if(B) - beaker.reagents.reagent_list |= B - beaker.reagents.update_total() - beaker.on_reagent_change() - beaker.reagents.handle_reactions() - update_icon() - - // If attached is losing too much blood, beep. - var/blood_type = attached.get_blood_name() - if(T.vessel.get_reagent_amount(blood_type) < BLOOD_VOLUME_SAFE && prob(5)) - visible_message("[src] beeps loudly.") + // If the human is losing too much blood, beep. + if(attached.blood_volume < BLOOD_VOLUME_SAFE && prob(5)) + visible_message("\The [src] beeps loudly.") playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) + attached.transfer_blood_to(beaker, amount) + update_icon() /obj/machinery/iv_drip/attack_hand(mob/user) if(!ishuman(user)) diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 698c1c5fe91..9cf58846feb 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -168,7 +168,7 @@ var/const/SAFETY_COOLDOWN = 100 gib = 0 if(L.stat == CONSCIOUS) L.say("ARRRRRRRRRRRGH!!!") - add_blood(L) + add_mob_blood(L) if(!blood && !issilicon(L)) blood = 1 diff --git a/code/game/objects/effects/decals/Cleanable/aliens.dm b/code/game/objects/effects/decals/Cleanable/aliens.dm index 57a32434af2..a3c2bc2c649 100644 --- a/code/game/objects/effects/decals/Cleanable/aliens.dm +++ b/code/game/objects/effects/decals/Cleanable/aliens.dm @@ -3,6 +3,8 @@ desc = "It's green and acidic. It looks like... blood?" icon = 'icons/effects/blood.dmi' basecolor = "#05EE05" + bloodiness = MAX_SHOE_BLOODINESS + blood_state = BLOOD_STATE_XENO /obj/effect/decal/cleanable/blood/gibs/xeno name = "xeno gibs" diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 37063b8a90b..2305bf8feb7 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -16,8 +16,12 @@ var/global/list/image/splatter_cache=list() random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") var/base_icon = 'icons/effects/blood.dmi' var/list/viruses = list() + appearance_flags = NO_CLIENT_COLOR + blood_DNA = list() - var/basecolor="#A10808" // Color when wet. + var/blood_state = BLOOD_STATE_HUMAN + var/bloodiness = MAX_SHOE_BLOODINESS + var/basecolor = "#A10808" // Color when wet. var/amount = 5 appearance_flags = NO_CLIENT_COLOR var/dry_timer = 0 @@ -33,11 +37,11 @@ var/global/list/image/splatter_cache=list() mode_ticker.bloody_floors += T mode_ticker.bloody_floors[T] = T mode_ticker.blood_check() - if(istype(src, /obj/effect/decal/cleanable/blood/gibs)) + if(type == /obj/effect/decal/cleanable/blood/gibs) return - if(src.type == /obj/effect/decal/cleanable/blood) - if(src.loc && isturf(src.loc)) - for(var/obj/effect/decal/cleanable/blood/B in src.loc) + if(type == /obj/effect/decal/cleanable/blood) + if(loc && isturf(loc)) + for(var/obj/effect/decal/cleanable/blood/B in loc) if(B != src) if(B.blood_DNA) blood_DNA |= B.blood_DNA.Copy() @@ -59,44 +63,6 @@ var/global/list/image/splatter_cache=list() if(basecolor == "rainbow") basecolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" color = basecolor -/obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp) - if(!istype(perp)) - return - if(amount < 1) - return - - var/obj/item/organ/external/l_foot = perp.get_organ("l_foot") - var/obj/item/organ/external/r_foot = perp.get_organ("r_foot") - var/hasfeet = 1 - if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED)) - hasfeet = 0 - if(perp.shoes && !perp.buckled)//Adding blood to shoes - var/obj/item/clothing/shoes/S = perp.shoes - if(istype(S)) - S.blood_color = basecolor - S.track_blood = max(amount,S.track_blood) - if(!S.blood_overlay) - S.generate_blood_overlay() - if(!S.blood_DNA) - S.blood_DNA = list() - S.blood_overlay.color = basecolor - S.overlays += S.blood_overlay - if(S.blood_overlay && S.blood_overlay.color != basecolor) - S.blood_overlay.color = basecolor - S.overlays.Cut() - S.overlays += S.blood_overlay - S.blood_DNA |= blood_DNA.Copy() - - else if(hasfeet)//Or feet - perp.feet_blood_color = basecolor - perp.track_blood = max(amount,perp.track_blood) - if(!perp.feet_blood_DNA) - perp.feet_blood_DNA = list() - perp.feet_blood_DNA |= blood_DNA.Copy() - - perp.update_inv_shoes(1) - amount-- - /obj/effect/decal/cleanable/blood/proc/dry() name = dryname desc = drydesc @@ -123,6 +89,46 @@ var/global/list/image/splatter_cache=list() /obj/effect/decal/cleanable/blood/can_bloodcrawl_in() return TRUE +//Add "bloodiness" of this blood's type, to the human's shoes +/obj/effect/decal/cleanable/blood/Crossed(atom/movable/O) + if(ishuman(O)) + var/mob/living/carbon/human/H = O + var/obj/item/organ/external/l_foot = H.get_organ("l_foot") + var/obj/item/organ/external/r_foot = H.get_organ("r_foot") + var/hasfeet = 1 + if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED)) + hasfeet = 0 + if(H.shoes && blood_state && bloodiness) + var/obj/item/clothing/shoes/S = H.shoes + var/add_blood = 0 + if(bloodiness >= BLOOD_GAIN_PER_STEP) + add_blood = BLOOD_GAIN_PER_STEP + else + add_blood = bloodiness + bloodiness -= add_blood + S.bloody_shoes[blood_state] = min(MAX_SHOE_BLOODINESS, S.bloody_shoes[blood_state] + add_blood) + if(blood_DNA && blood_DNA.len) + S.add_blood(H.blood_DNA, basecolor) + S.blood_state = blood_state + S.blood_color = basecolor + update_icon() + H.update_inv_shoes() + else if(hasfeet && blood_state && bloodiness)//Or feet + var/add_blood = 0 + if(bloodiness >= BLOOD_GAIN_PER_STEP) + add_blood = BLOOD_GAIN_PER_STEP + else + add_blood = bloodiness + bloodiness -= add_blood + H.bloody_feet[blood_state] = min(MAX_SHOE_BLOODINESS, H.bloody_feet[blood_state] + add_blood) + if(!H.feet_blood_DNA) + H.feet_blood_DNA = list() + H.blood_state = blood_state + H.feet_blood_DNA |= blood_DNA.Copy() + H.feet_blood_color = basecolor + update_icon() + H.update_inv_shoes() + /obj/effect/decal/cleanable/blood/splatter random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5") amount = 2 @@ -135,11 +141,25 @@ var/global/list/image/splatter_cache=list() icon_state = "1" random_icon_states = list("1","2","3","4","5") amount = 0 - var/list/drips = list() + var/drips = 1 + bloodiness = 0 -/obj/effect/decal/cleanable/blood/drip/New() - ..() - drips |= icon_state +/obj/effect/decal/cleanable/blood/drip/can_bloodcrawl_in() + return TRUE + +/obj/effect/decal/cleanable/trail_holder //not a child of blood on purpose + name = "blood" + icon_state = "ltrails_1" + desc = "Your instincts say you shouldn't be following these." + gender = PLURAL + density = 0 + layer = 2 + random_icon_states = null + var/list/existing_dirs = list() + blood_DNA = list() + +/obj/effect/decal/cleanable/trail_holder/can_bloodcrawl_in() + return TRUE /obj/effect/decal/cleanable/blood/writing icon_state = "tracks" @@ -176,19 +196,16 @@ var/global/list/image/splatter_cache=list() noclear = 1 /obj/effect/decal/cleanable/blood/gibs/update_icon() - var/image/giblets = new(base_icon, "[icon_state]_flesh", dir) if(!fleshcolor || fleshcolor == "rainbow") fleshcolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" giblets.color = fleshcolor - var/icon/blood = new(base_icon,"[icon_state]",dir) - if(basecolor == "rainbow") basecolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" - blood.Blend(basecolor,ICON_MULTIPLY) icon = blood overlays.Cut() overlays += giblets + . = ..() /obj/effect/decal/cleanable/blood/gibs/up random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1") @@ -236,8 +253,16 @@ var/global/list/image/splatter_cache=list() /obj/effect/decal/cleanable/blood/old/New() ..() + bloodiness = 0 dry() +/obj/effect/decal/cleanable/blood/old/can_bloodcrawl_in() + return FALSE + /obj/effect/decal/cleanable/blood/gibs/old/New() ..() + bloodiness = 0 dry() + +/obj/effect/decal/cleanable/blood/gibs/old/can_bloodcrawl_in() + return FALSE diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm index 5fc09b6ec34..dbebd72066d 100644 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ b/code/game/objects/effects/decals/Cleanable/robots.dm @@ -5,13 +5,17 @@ icon_state = "gib1" basecolor="#030303" random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7") + bloodiness = MAX_SHOE_BLOODINESS + +/obj/effect/decal/cleanable/blood/gibs/robot/can_bloodcrawl_in() + return FALSE /obj/effect/decal/cleanable/blood/gibs/robot/update_icon() color = "#FFFFFF" /obj/effect/decal/cleanable/blood/gibs/robot/dry() //pieces of robots do not dry up like return - + /obj/effect/decal/cleanable/blood/gibs/robot/can_bloodcrawl_in() return FALSE @@ -44,6 +48,7 @@ name = "motor oil" desc = "It's black and greasy. Looks like Beepsky made another mess." basecolor="#030303" + bloodiness = MAX_SHOE_BLOODINESS /obj/effect/decal/cleanable/blood/oil/can_bloodcrawl_in() return FALSE diff --git a/code/game/objects/effects/decals/Cleanable/tracks.dm b/code/game/objects/effects/decals/Cleanable/tracks.dm index ad404ce28b3..20dee798e8d 100644 --- a/code/game/objects/effects/decals/Cleanable/tracks.dm +++ b/code/game/objects/effects/decals/Cleanable/tracks.dm @@ -1,165 +1,104 @@ -// Stolen en masse from N3X15 of /vg/station with much gratitude. - -// The idea is to have 4 bits for coming and 4 for going. -#define TRACKS_COMING_NORTH 1 -#define TRACKS_COMING_SOUTH 2 -#define TRACKS_COMING_EAST 4 -#define TRACKS_COMING_WEST 8 -#define TRACKS_GOING_NORTH 16 -#define TRACKS_GOING_SOUTH 32 -#define TRACKS_GOING_EAST 64 -#define TRACKS_GOING_WEST 128 - // 5 seconds #define TRACKS_CRUSTIFY_TIME 50 // color-dir-dry var/global/list/image/fluidtrack_cache=list() -/datum/fluidtrack - var/direction=0 - var/basecolor="#A10808" - var/wet=0 - var/fresh=1 - var/crusty=0 - var/image/overlay - - New(_direction,item_color,_wet) - src.direction=_direction - src.basecolor=item_color - src.wet=_wet - // Footprints, tire trails... /obj/effect/decal/cleanable/blood/tracks - amount = 0 - random_icon_states = null - var/dirs=0 icon = 'icons/effects/fluidtracks.dmi' - icon_state = "" - var/coming_state="blood1" - var/going_state="blood2" - var/updatedtracks=0 - - // dir = id in stack - var/list/setdirs=list( - "1"=0, - "2"=0, - "4"=0, - "8"=0, - "16"=0, - "32"=0, - "64"=0, - "128"=0 - ) - - // List of laid tracks and their colors. - var/list/datum/fluidtrack/stack=list() - - /** - * Add tracks to an existing trail. - * - * @param DNA bloodDNA to add to collection. - * @param comingdir Direction tracks come from, or 0. - * @param goingdir Direction tracks are going to (or 0). - * @param bloodcolor Color of the blood when wet. - */ - proc/AddTracks(var/list/DNA, var/comingdir, var/goingdir, var/bloodcolor="#A10808") - var/updated=0 - // Shift our goingdir 4 spaces to the left so it's in the GOING bitblock. - var/realgoing=goingdir<<4 - - // Current bit - var/b=0 - - // When tracks will start to dry out - var/t=world.time + TRACKS_CRUSTIFY_TIME - - var/datum/fluidtrack/track - - // Process 4 bits - for(var/bi=0;bi<4;bi++) - b = 1 << bi - // COMING BIT - // If setting - if(comingdir&b) - // If not wet or not set - if(dirs&b) - var/sid=setdirs["[b]"] - track=stack[sid] - if(track.wet==t && track.basecolor==bloodcolor) - continue - // Remove existing stack entry - stack.Remove(track) - track=new /datum/fluidtrack(b,bloodcolor,t) - stack.Add(track) - setdirs["[b]"]=stack.Find(track) - updatedtracks |= b - updated=1 - - // GOING BIT (shift up 4) - b=b<<4 - if(realgoing&b) - // If not wet or not set - if(dirs&b) - var/sid=setdirs["[b]"] - track=stack[sid] - if(track.wet==t && track.basecolor==bloodcolor) - continue - // Remove existing stack entry - stack.Remove(track) - track=new /datum/fluidtrack(b,bloodcolor,t) - stack.Add(track) - setdirs["[b]"]=stack.Find(track) - updatedtracks |= b - updated=1 - - dirs |= comingdir|realgoing - blood_DNA |= DNA.Copy() - if(updated) - update_icon() - - update_icon() - overlays.Cut() - color = "#FFFFFF" - var/truedir=0 - - // Update ONLY the overlays that have changed. - for(var/datum/fluidtrack/track in stack) - var/stack_idx=setdirs["[track.direction]"] - var/state=coming_state - truedir=track.direction - if(truedir&240) // Check if we're in the GOING block - state=going_state - truedir=truedir>>4 - - if(track.overlay) - track.overlay=null - var/image/I = image(icon, icon_state=state, dir=num2dir(truedir)) - I.color = track.basecolor - - track.fresh=0 - track.overlay=I - stack[stack_idx]=track - overlays += I - updatedtracks=0 // Clear our memory of updated tracks. - -/obj/effect/decal/cleanable/blood/tracks/footprints - name = "wet footprints" - dryname = "dried footprints" - desc = "Whoops..." - drydesc = "Whoops..." - coming_state = "human1" - going_state = "human2" - amount = 0 - -/obj/effect/decal/cleanable/blood/tracks/wheels name = "wet tracks" dryname = "dried tracks" desc = "Whoops..." drydesc = "Whoops..." - coming_state = "wheels1" - going_state = "wheels2" - desc = "They look like tracks left by wheels." + icon_state = "wheels1" gender = PLURAL random_icon_states = null - amount = 0 \ No newline at end of file + amount = 0 + +//BLOODY FOOTPRINTS +/obj/effect/decal/cleanable/blood/footprints + icon = 'icons/effects/fluidtracks.dmi' + icon_state = "nothingwhatsoever" + desc = "You REALLY shouldn't follow these.." + gender = PLURAL + random_icon_states = null + basecolor="#A10808" + var/entered_dirs = 0 + var/exited_dirs = 0 + blood_state = BLOOD_STATE_HUMAN //the icon state to load images from + + +/obj/effect/decal/cleanable/blood/footprints/Crossed(atom/movable/O) + if(ishuman(O)) + var/mob/living/carbon/human/H = O + var/obj/item/clothing/shoes/S = H.shoes + var/obj/item/organ/external/l_foot = H.get_organ("l_foot") + var/obj/item/organ/external/r_foot = H.get_organ("r_foot") + var/hasfeet = 1 + if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED)) + hasfeet = 0 + if(S && S.bloody_shoes[blood_state] && S.blood_color == basecolor) + S.bloody_shoes[blood_state] = max(S.bloody_shoes[blood_state] - BLOOD_LOSS_PER_STEP, 0) + entered_dirs |= H.dir + if(!S.blood_DNA) + S.blood_DNA = list() + S.blood_DNA |= blood_DNA.Copy() + else if(hasfeet && H.bloody_feet[blood_state] && H.feet_blood_color == basecolor)//Or feet //This will need to be changed. + H.bloody_feet[blood_state] = max(H.bloody_feet[blood_state] - BLOOD_LOSS_PER_STEP, 0) + entered_dirs |= H.dir + if(!H.feet_blood_DNA) + H.feet_blood_DNA = list() + H.feet_blood_DNA |= blood_DNA.Copy() + update_icon() + +/obj/effect/decal/cleanable/blood/footprints/Uncrossed(atom/movable/O) + if(ishuman(O)) + var/mob/living/carbon/human/H = O + var/obj/item/clothing/shoes/S = H.shoes + var/obj/item/organ/external/l_foot = H.get_organ("l_foot") + var/obj/item/organ/external/r_foot = H.get_organ("r_foot") + var/hasfeet = 1 + if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED)) + hasfeet = 0 + if(S && S.bloody_shoes[blood_state] && S.blood_color == basecolor) + S.bloody_shoes[blood_state] = max(S.bloody_shoes[blood_state] - BLOOD_LOSS_PER_STEP, 0) + exited_dirs |= H.dir + if(!S.blood_DNA) + S.blood_DNA = list() + S.blood_DNA |= blood_DNA.Copy() + else if(hasfeet && H.bloody_feet[blood_state] && H.feet_blood_color == basecolor)//Or feet + H.bloody_feet[blood_state] = max(H.bloody_feet[blood_state] - BLOOD_LOSS_PER_STEP, 0) + exited_dirs |= H.dir + if(!H.feet_blood_DNA) + H.feet_blood_DNA = list() + H.feet_blood_DNA |= blood_DNA.Copy() + update_icon() + + +/obj/effect/decal/cleanable/blood/footprints/update_icon() + overlays.Cut() + + for(var/Ddir in cardinal) + if(entered_dirs & Ddir) + var/image/I + if(fluidtrack_cache["entered-[blood_state]-[Ddir]"]) + I = fluidtrack_cache["entered-[blood_state]-[Ddir]"] + else + I = image(icon,"[blood_state]1",dir = Ddir) + fluidtrack_cache["entered-[blood_state]-[Ddir]"] = I + if(I) + I.color = basecolor + overlays += I + if(exited_dirs & Ddir) + var/image/I + if(fluidtrack_cache["exited-[blood_state]-[Ddir]"]) + I = fluidtrack_cache["exited-[blood_state]-[Ddir]"] + else + I = image(icon,"[blood_state]2",dir = Ddir) + fluidtrack_cache["exited-[blood_state]-[Ddir]"] = I + if(I) + I.color = basecolor + overlays += I + + alpha = BLOODY_FOOTPRINT_BASE_ALPHA+bloodiness \ No newline at end of file diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index cfde9ab55a4..f2a936eca57 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -43,4 +43,4 @@ if(reagents) reagents.chem_temp += 30 reagents.handle_reactions() - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 294dda0d674..9f92bfa87f7 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -474,51 +474,6 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d M.AdjustEyeBlurry(rand(3,4)) return -/obj/item/clean_blood() - . = ..() - if(blood_overlay) - overlays.Remove(blood_overlay) - if(istype(src, /obj/item/clothing/gloves)) - var/obj/item/clothing/gloves/G = src - G.transfer_blood = 0 - - -/obj/item/add_blood(mob/living/carbon/human/M as mob) - if(!..()) - return 0 - - if(istype(src, /obj/item/weapon/melee/energy)) - return - - //if we haven't made our blood_overlay already - if( !blood_overlay ) - generate_blood_overlay() - - //apply the blood-splatter overlay if it isn't already in there - if(!blood_DNA.len) - blood_overlay.color = blood_color - overlays += blood_overlay - - //if this blood isn't already in the list, add it - if(istype(M)) - if(blood_DNA[M.dna.unique_enzymes]) - return 0 //already bloodied with this blood. Cannot add more. - blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - return 1 //we applied blood to the item - -/obj/item/proc/generate_blood_overlay() - if(blood_overlay) - return - - var/icon/I = new /icon(icon, icon_state) - I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD) //fills the icon_state with white (except where it's transparent) - I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) //adds blood and the remaining white areas become transparant - - //not sure if this is worth it. It attaches the blood_overlay to every item of the same type if they don't have one already made. - for(var/obj/item/A in world) - if(A.type == type && !A.blood_overlay) - A.blood_overlay = image(I) - /obj/item/singularity_pull(S, current_size) spawn(0) //this is needed or multiple items will be thrown sequentially and not simultaneously if(current_size >= STAGE_FOUR) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index e31c49f9392..7603ba459ff 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -14,6 +14,7 @@ REAGENT SCANNER icon_state = "t-ray0" var/on = 0 slot_flags = SLOT_BELT + w_class = 2 w_class = WEIGHT_CLASS_SMALL item_state = "electronic" materials = list(MAT_METAL=150) @@ -223,20 +224,21 @@ REAGENT SCANNER for(var/datum/wound/W in e.wounds) if(W.internal) user.show_message(text("Internal bleeding detected. Advanced scanner required for location."), 1) break - if(H.vessel) - var/blood_type = H.get_blood_name() - var/blood_volume = round(H.vessel.get_reagent_amount(blood_type)) - var/blood_percent = blood_volume / BLOOD_VOLUME_NORMAL - blood_percent *= 100 - if(blood_volume <= 500) - user.show_message("Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl") - else if(blood_volume <= 336) - user.show_message("Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl") - else - user.show_message("Blood Level Normal: [blood_percent]% [blood_volume]cl") - if(H.species.exotic_blood) - user.show_message("Subject possesses exotic blood.") - user.show_message("Exotic blood type: [blood_type].") + var/blood_id = H.get_blood_id() + if(blood_id) + if(H.bleed_rate) + to_chat(user, "Subject is bleeding!") + var/blood_percent = round((H.blood_volume / BLOOD_VOLUME_NORMAL)*100) + var/blood_type = H.b_type + if(blood_id != "blood")//special blood substance + blood_type = blood_id + if(H.blood_volume <= BLOOD_VOLUME_SAFE && H.blood_volume > BLOOD_VOLUME_OKAY) + user.show_message("LOW blood level [blood_percent] %, [H.blood_volume] cl, type: [blood_type]") + else if(H.blood_volume <= BLOOD_VOLUME_OKAY) + to_chat(user, "CRITICAL blood level [blood_percent] %, [H.blood_volume] cl, type: [blood_type]") + + user.show_message("blood type: [blood_type].") + if(H.undergoing_cardiac_arrest() && H.stat != DEAD) user.show_message("Subject suffering from heart attack: Apply defibrillator immediately.") user.show_message("Subject's pulse: [H.get_pulse(GETPULSE_TOOL)] bpm.") diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 82d2ce8c024..e63d74af020 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -11,6 +11,7 @@ var/heal_burn = 0 var/self_delay = 20 var/unique_handling = 0 //some things give a special prompt, do we want to bypass some checks in parent? + var/stop_bleeding = 0 /obj/item/stack/medical/attack(mob/living/M, mob/user) if(!iscarbon(M) && !isanimal(M)) @@ -37,6 +38,14 @@ to_chat(user, "This can't be used on a robotic limb.") return 1 + if(stop_bleeding) + if(H.bleedsuppress) + to_chat(user, "[H]'s bleeding is already bandaged!") + return 1 + else if(!H.bleed_rate) + to_chat(user, "[H] isn't bleeding!") + return 1 + if(M == user && !unique_handling) user.visible_message("[user] starts to apply [src] on [H]...") if(!do_mob(user, H, self_delay)) @@ -76,6 +85,7 @@ desc = "Some sterile gauze to wrap around bloody stumps." icon_state = "gauze" origin_tech = "biotech=2" + stop_bleeding = 1800 /obj/item/stack/medical/bruise_pack/attack(mob/living/M, mob/user) if(..()) @@ -96,6 +106,9 @@ user.visible_message("[user] bandages the wounds on [H]'s [affecting.name].", \ "You bandage the wounds on [H]'s [affecting.name]." ) + if(stop_bleeding) + if(!H.bleedsuppress) //so you can't stack bleed suppression + H.suppress_bloodloss(stop_bleeding) affecting.heal_damage(heal_brute, heal_burn) H.UpdateDamageIcon() use(1) diff --git a/code/game/objects/items/weapons/scissors.dm b/code/game/objects/items/weapons/scissors.dm index 345d2d2a571..e519b96d0fd 100644 --- a/code/game/objects/items/weapons/scissors.dm +++ b/code/game/objects/items/weapons/scissors.dm @@ -117,9 +117,8 @@ user.visible_message("[user] abruptly stops cutting [M]'s hair and slices their throat!", "You stop cutting [M]'s hair and slice their throat!") //Just a little off the top. H.AdjustLoseBreath(10) //30 Oxy damage over time H.apply_damage(18, BRUTE, "head", sharp =1, used_weapon = "scissors") - var/turf/location = get_turf(H) - if(istype(location, /turf/simulated)) - location.add_blood(H) + var/turf/location = get_turf(src) + H.add_splatter_floor(location) H.bloody_hands(H) H.bloody_body(H) var/mob/living/carbon/human/U = user diff --git a/code/game/objects/items/weapons/soap.dm b/code/game/objects/items/weapons/soap.dm index e4183b5bafd..85dfe4868d0 100644 --- a/code/game/objects/items/weapons/soap.dm +++ b/code/game/objects/items/weapons/soap.dm @@ -38,7 +38,7 @@ else if(istype(target,/mob/living/carbon)) for(var/obj/item/carried_item in target.contents) if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant. - carried_item.add_blood(target)//Oh yes, there will be blood... + 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.bloody_body(target) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 043177551ff..73c47ba98a6 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -82,9 +82,8 @@ playsound(loc, 'sound/effects/splat.ogg', 25, 1) H.forceMove(loc) H.emote("scream") - if(istype(H, /mob/living/carbon/human)) //So you don't get human blood when you spike a giant spidere - var/turf/simulated/pos = get_turf(H) - pos.add_blood_floor(H) + if(ishuman(H)) + H.add_splatter_floor() H.adjustBruteLoss(30) H.buckled = src H.dir = 2 diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index cf1a1303025..22ccbecfdf6 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -45,12 +45,6 @@ if(wet_overlay) overlays -= wet_overlay -/turf/simulated/proc/AddTracks(var/typepath,var/bloodDNA,var/comingdir,var/goingdir,var/bloodcolor="#A10808") - var/obj/effect/decal/cleanable/blood/tracks/tracks = locate(typepath) in src - if(!tracks) - tracks = new typepath(src) - tracks.AddTracks(bloodDNA,comingdir,goingdir,bloodcolor) - /turf/simulated/Entered(atom/A, atom/OL, ignoreRest = 0) ..() if(!ignoreRest) @@ -73,29 +67,6 @@ if(M.flying) return ..() - // Tracking blood - var/list/bloodDNA = null - var/bloodcolor = "" - if(M.shoes) - var/obj/item/clothing/shoes/S = M.shoes - if(S.track_blood && S.blood_DNA) - bloodDNA = S.blood_DNA - bloodcolor = S.blood_color - S.track_blood-- - else - if(M.track_blood && M.feet_blood_DNA) - bloodDNA = M.feet_blood_DNA - bloodcolor = M.feet_blood_color - M.track_blood-- - - if(bloodDNA) - src.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints,bloodDNA,M.dir,0,bloodcolor) // Coming - var/turf/simulated/from = get_step(M,reverse_direction(M.dir)) - if(istype(from) && from) - from.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints,bloodDNA,0,M.dir,bloodcolor) // Going - - bloodDNA = null - switch(src.wet) if(TURF_WET_WATER) if(!(M.slip("wet floor", 4, 2, 0, 1))) @@ -110,32 +81,6 @@ if(!(prob(30) && M.slip("icy floor", 4, 2, 1, 1))) M.inertia_dir = 0 - -//returns 1 if made bloody, returns 0 otherwise -/turf/simulated/add_blood(mob/living/carbon/human/M) - if(!..()) - return 0 - - if(!istype(M)) // To avoid non-humans from causing runtimes whena dding blood to the floor - return 0 - var/obj/effect/decal/cleanable/blood/B = locate() in contents //check for existing blood splatter - if(!B) - B = blood_splatter(src,M.get_blood(M.vessel),1) - if(B) - B.add_blood_list(M) - return 1 //we bloodied the floor - return 0 // Clean floors club - -// Only adds blood on the floor -- Skie -/turf/simulated/add_blood_floor(mob/living/carbon/M as mob) - if(ishuman(M)) - blood_splatter(src,M,1) - if( istype(M, /mob/living/carbon/alien )) - var/obj/effect/decal/cleanable/blood/xeno/this = new /obj/effect/decal/cleanable/blood/xeno(src) - this.blood_DNA["UNKNOWN BLOOD"] = "X*" - else if( istype(M, /mob/living/silicon/robot )) - new /obj/effect/decal/cleanable/blood/oil(src) - /turf/simulated/ChangeTurf(var/path) . = ..() smooth_icon_neighbors(src) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 596259b47da..94b9e50d37b 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -372,6 +372,8 @@ BLIND // can't see anything var/silence_steps = 0 var/shoe_sound_footstep = 1 var/shoe_sound = null + var/blood_state = BLOOD_STATE_NOT_BLOODY + var/list/bloody_shoes = list(BLOOD_STATE_HUMAN = 0, BLOOD_STATE_XENO = 0, BLOOD_STATE_NOT_BLOODY = 0) permeability_coefficient = 0.50 slowdown = SHOES_SLOWDOWN diff --git a/code/modules/detective_work/detective_work.dm b/code/modules/detective_work/detective_work.dm index dd22a439c19..cc53bacc956 100644 --- a/code/modules/detective_work/detective_work.dm +++ b/code/modules/detective_work/detective_work.dm @@ -6,10 +6,10 @@ atom/proc/add_fibers(mob/living/carbon/human/M) if(M.gloves && istype(M.gloves,/obj/item/clothing/)) var/obj/item/clothing/gloves/G = M.gloves if(G.transfer_blood > 1) //bloodied gloves transfer blood to touched objects - if(add_blood(G.bloody_hands_mob)) //only reduces the bloodiness of our gloves if the item wasn't already bloody + if(add_blood(G.blood_DNA, G.blood_color)) //only reduces the bloodiness of our gloves if the item wasn't already bloody G.transfer_blood-- else if(M.bloody_hands > 1) - if(add_blood(M.bloody_hands_mob)) + if(add_blood(M.blood_DNA, M.hand_blood_color)) M.bloody_hands-- if(!suit_fibers) suit_fibers = list() var/fibertext diff --git a/code/modules/detective_work/footprints_and_rag.dm b/code/modules/detective_work/footprints_and_rag.dm index cc6a463a0ee..f0d99152574 100644 --- a/code/modules/detective_work/footprints_and_rag.dm +++ b/code/modules/detective_work/footprints_and_rag.dm @@ -1,18 +1,13 @@ /mob var/bloody_hands = 0 - var/mob/living/carbon/human/bloody_hands_mob - var/track_blood = 0 var/list/feet_blood_DNA - var/track_blood_type var/feet_blood_color + var/blood_state = BLOOD_STATE_NOT_BLOODY + var/list/bloody_feet = list(BLOOD_STATE_HUMAN = 0, BLOOD_STATE_XENO = 0, BLOOD_STATE_NOT_BLOODY = 0) /obj/item/clothing/gloves var/transfer_blood = 0 - var/mob/living/carbon/human/bloody_hands_mob - -/obj/item/clothing/shoes/ - var/track_blood = 0 /obj/item/weapon/reagent_containers/glass/rag name = "damp rag" diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index eef224e8378..8bd8ffe5eed 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -294,3 +294,9 @@ Des: Removes all infected images from the alien. playsound(T, S, volume, 1, range) return 1 return 0 + +/mob/living/carbon/alien/getTrail() + if(getBruteLoss() < 200) + return pick("xltrails_1", "xltrails_2") + else + return pick("xttrails_1", "xttrails_2") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index fa6a3f8a92b..0c4c34d6b40 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -107,7 +107,7 @@ for(var/i=0 to distance) if(blood) if(T) - T.add_blood_floor(src) + add_splatter_floor(T) if(stun) adjustBruteLoss(3) else @@ -477,21 +477,6 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, if(istype(loc, /obj/machinery/atmospherics)) add_ventcrawl(loc) -/mob/living/carbon/clean_blood() - . = ..() - if(ishuman(src)) - var/mob/living/carbon/human/H = src - if(H.gloves) - if(H.gloves.clean_blood()) - H.update_inv_gloves(0,0) - H.gloves.germ_level = 0 - else - if(H.bloody_hands) - H.bloody_hands = 0 - H.update_inv_gloves(0,0) - H.germ_level = 0 - update_icons() //apply the now updated overlays to the mob - //Throwing stuff diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index ab7a5f1d5a9..a409e8460db 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -30,3 +30,5 @@ var/failed_last_breath = 0 //This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks. var/co2overloadtime = null + + blood_volume = BLOOD_VOLUME_NORMAL diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 961ee9ffd0b..9bb3308c944 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -441,6 +441,11 @@ if(display_gloves) msg += "[src] has blood running from under [t_his] gloves!\n" + if(blood_volume < BLOOD_VOLUME_SAFE) + msg += "[t_He] [t_has] pale skin.\n" + if(bleedsuppress) + msg += "[t_He] [t_is] bandaged with something.\n" + if(digitalcamo) msg += "[t_He] [t_is] repulsively uncanny!\n" if(!(skipface || ( wear_mask && ( wear_mask.flags_inv & HIDEFACE || wear_mask.flags_cover & MASKCOVERSMOUTH) ) ) && is_thrall(src) && in_range(user,src)) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index cb3d7723537..76aa7eaa483 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -33,7 +33,6 @@ create_reagents(330) prev_gender = gender // Debug for plural genders - make_blood() martial_art = default_martial_art @@ -539,12 +538,10 @@ popup.open() -// called when something steps onto a human -// this handles mulebots and vehicles -/mob/living/carbon/human/Crossed(var/atom/movable/AM) - if(istype(AM, /obj/vehicle)) - var/obj/vehicle/V = AM - V.RunOver(src) +/mob/living/carbon/human/Crossed(atom/movable/AM) + var/mob/living/simple_animal/bot/mulebot/MB = AM + if(istype(MB)) + MB.RunOver(src) // Get rank from ID, ID inside PDA, PDA, ID in wallet, etc. /mob/living/carbon/human/proc/get_authentification_rank(var/if_no_id = "No id", var/if_no_job = "No job") @@ -1255,12 +1252,6 @@ I.insert(H) /mob/living/carbon/human/revive() - - if(species && !(species.flags & NO_BLOOD)) - var/blood_reagent = get_blood_name() - vessel.add_reagent(blood_reagent, max_blood-vessel.total_volume) - fixblood() - //Fix up all organs and replace lost ones. restore_all_organs() //Rejuvenate and reset all existing organs. check_and_regenerate_organs(src) //Regenerate limbs and organs only if they're really missing. @@ -1332,23 +1323,13 @@ */ //returns 1 if made bloody, returns 0 otherwise -/mob/living/carbon/human/add_blood(mob/living/carbon/human/M as mob) - if(!..()) - return 0 - //if this blood isn't already in the list, add it - if(blood_DNA[M.dna.unique_enzymes]) - return 0 //already bloodied with this blood. Cannot add more. - blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - hand_blood_color = blood_color - src.update_inv_gloves() - verbs += /mob/living/carbon/human/proc/bloody_doodle - return 1 //we applied blood to the item - /mob/living/carbon/human/clean_blood(var/clean_feet) .=..() if(clean_feet && !shoes && istype(feet_blood_DNA, /list) && feet_blood_DNA.len) feet_blood_color = null qdel(feet_blood_DNA) + bloody_feet = list(BLOOD_STATE_HUMAN = 0, BLOOD_STATE_XENO = 0, BLOOD_STATE_NOT_BLOODY = 0) + blood_state = BLOOD_STATE_NOT_BLOODY update_inv_shoes(1) return 1 @@ -1443,10 +1424,6 @@ tail = species.tail - if(vessel) - vessel = null - make_blood() - maxHealth = species.total_health toxins_alert = 0 @@ -1543,7 +1520,6 @@ overlays.Cut() update_mutantrace(1) regenerate_icons() - fixblood() if(!delay_icon_update) UpdateAppearance() diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 4b1e8e66b1b..9a96ec72c28 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -300,15 +300,6 @@ //////////////////////////////////////////// -/* -This function restores the subjects blood to max. -*/ -/mob/living/carbon/human/proc/restore_blood() - if(!(species.flags & NO_BLOOD)) - var/blood_type = get_blood_name() - var/blood_volume = vessel.get_reagent_amount(blood_type) - vessel.add_reagent(blood_type, BLOOD_VOLUME_NORMAL - blood_volume) - /* This function restores all organs. */ diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 4926b60e267..8b9629d656b 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -8,6 +8,7 @@ emp_act */ + /mob/living/carbon/human/bullet_act(obj/item/projectile/P, def_zone) if(P.is_reflectable) @@ -185,7 +186,7 @@ emp_act newmeat.subjectjob = src.job newmeat.reagents.add_reagent ("nutriment", (src.nutrition / 15) / 3) src.reagents.trans_to (newmeat, round ((src.reagents.total_volume) / 3, 1)) - src.loc.add_blood(src) + add_mob_blood(src) --src.meatleft to_chat(user, "You hack off a chunk of meat from [src.name]") if(!src.meatleft) @@ -232,19 +233,18 @@ emp_act var/bloody = 0 if(I.damtype == BRUTE && I.force && prob(25 + I.force * 2)) - I.add_blood(src) //Make the weapon bloody, not the person. + I.add_mob_blood(src) //Make the weapon bloody, not the person. // if(user.hand) user.update_inv_l_hand() //updates the attacker's overlay for the (now bloodied) weapon // else user.update_inv_r_hand() //removed because weapons don't have on-mob blood overlays - if(prob(33)) + if(prob(I.force * 2)) //blood spatter! bloody = 1 var/turf/location = loc if(istype(location, /turf/simulated)) - location.add_blood(src) + add_splatter_floor(location) if(ishuman(user)) var/mob/living/carbon/human/H = user if(get_dist(H, src) <= 1) //people with TK won't get smeared with blood - H.bloody_body(src) - H.bloody_hands(src) + H.add_mob_blood(src) if(!stat) switch(hit_area) @@ -260,15 +260,16 @@ emp_act if(bloody)//Apply blood if(wear_mask) - wear_mask.add_blood(src) + wear_mask.add_mob_blood(src) update_inv_wear_mask(0) if(head) - head.add_blood(src) + head.add_mob_blood(src) update_inv_head(0,0) if(glasses && prob(33)) - glasses.add_blood(src) + glasses.add_mob_blood(src) update_inv_glasses(0) + if("upper body")//Easier to score a stun but lasts less time if(stat == CONSCIOUS && I.force && prob(I.force + 10)) visible_message("[src] has been knocked down!", \ @@ -276,7 +277,13 @@ emp_act apply_effect(5, WEAKEN, armor) if(bloody) - bloody_body(src) + if(wear_suit) + wear_suit.add_mob_blood(src) + update_inv_wear_suit(1) + if(w_uniform) + w_uniform.add_mob_blood(src) + update_inv_w_uniform(1) + if(Iforce > 10 || Iforce >= 5 && prob(33)) @@ -313,22 +320,20 @@ emp_act /mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2) if(gloves) - gloves.add_blood(source) + gloves.add_mob_blood(source) gloves:transfer_blood = amount - gloves:bloody_hands_mob = source else - add_blood(source) + add_mob_blood(source) bloody_hands = amount - bloody_hands_mob = source update_inv_gloves(1) //updates on-mob overlays for bloody hands and/or bloody gloves /mob/living/carbon/human/proc/bloody_body(var/mob/living/source) if(wear_suit) - wear_suit.add_blood(source) + wear_suit.add_mob_blood(source) update_inv_wear_suit(0) return if(w_uniform) - w_uniform.add_blood(source) + w_uniform.add_mob_blood(source) update_inv_w_uniform(1) /mob/living/carbon/human/proc/handle_suit_punctures(var/damtype, var/damage) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 15f9b6d112e..036202e1ae0 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -65,6 +65,8 @@ var/global/default_martial_art = new/datum/martial_art var/meatleft = 3 //For chef item var/decaylevel = 0 // For rotting bodies var/max_blood = BLOOD_VOLUME_NORMAL // For stuff in the vessel + var/bleed_rate = 0 + var/bleedsuppress = 0 //for stopping bloodloss var/check_mutations=0 // Check mutations on next life tick diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 85dd6e81f3c..164eb14e7cd 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -35,12 +35,52 @@ /mob/living/carbon/human/Move(NewLoc, direct) . = ..() - if(shoes && .) // did we actually move? + if(.) // did we actually move? if(!lying && !buckled) + var/obj/item/clothing/shoes/S = shoes if(!has_gravity(loc)) return - var/obj/item/clothing/shoes/S = shoes - S.step_action(src) + //Bloody footprints + var/turf/T = get_turf(src) + var/obj/item/organ/external/l_foot = get_organ("l_foot") + var/obj/item/organ/external/r_foot = get_organ("r_foot") + var/hasfeet = 1 + if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED)) + hasfeet = 0 + + if(shoes) + if(S.bloody_shoes && S.bloody_shoes[S.blood_state]) + var/obj/effect/decal/cleanable/blood/footprints/oldFP = locate(/obj/effect/decal/cleanable/blood/footprints) in T + if(oldFP && oldFP.blood_state == S.blood_state && oldFP.basecolor == S.blood_color) + return + else + //No oldFP or it's a different kind of blood + S.bloody_shoes[S.blood_state] = max(0, S.bloody_shoes[S.blood_state] - BLOOD_LOSS_PER_STEP) + var/obj/effect/decal/cleanable/blood/footprints/FP = new /obj/effect/decal/cleanable/blood/footprints(T) + FP.blood_state = S.blood_state + FP.entered_dirs |= dir + FP.bloodiness = S.bloody_shoes[S.blood_state] + FP.blood_DNA = S.blood_DNA + FP.basecolor = S.blood_color + FP.update_icon() + update_inv_shoes() + else if(hasfeet) + if(bloody_feet && bloody_feet[blood_state]) + var/obj/effect/decal/cleanable/blood/footprints/oldFP = locate(/obj/effect/decal/cleanable/blood/footprints) in T + if(oldFP && oldFP.blood_state == blood_state && oldFP.basecolor == feet_blood_color) + return + else + bloody_feet[blood_state] = max(0, bloody_feet[blood_state] - BLOOD_LOSS_PER_STEP) + var/obj/effect/decal/cleanable/blood/footprints/FP = new /obj/effect/decal/cleanable/blood/footprints(T) + FP.blood_state = blood_state + FP.entered_dirs |= dir + FP.bloodiness = bloody_feet[blood_state] + FP.basecolor = feet_blood_color + FP.update_icon() + update_inv_shoes() + //End bloody footprints + if(S) + S.step_action(src) /mob/living/carbon/human/handle_footstep(turf/T) if(..()) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 3ed573eb2cb..2d693dfedcb 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -893,7 +893,6 @@ if(!in_stasis) handle_organs() - handle_blood() else //dead @@ -1040,8 +1039,7 @@ var/temp = PULSE_NORM - var/blood_type = get_blood_name() - if(round(vessel.get_reagent_amount(blood_type)) <= BLOOD_VOLUME_BAD) //how much blood do we have + if(blood_volume <= BLOOD_VOLUME_BAD)//how much blood do we have temp = PULSE_THREADY //not enough :( if(status_flags & FAKEDEATH) diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 60e71f7e8ab..fe3d8a262b3 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -519,6 +519,7 @@ "is cracking their exoskeleton!", "is stabbing themselves with their mandibles!", "is holding their breath!") + /datum/species/slime name = "Slime People" name_plural = "Slime People" @@ -547,6 +548,7 @@ bodyflags = HAS_SKIN_COLOR | NO_EYES dietflags = DIET_CARN reagent_tag = PROCESS_ORG + blood_color = "#0064C8" exotic_blood = "water" //ventcrawler = 1 //ventcrawling commented out butt_sprite = "slime" @@ -575,7 +577,7 @@ #define SLIMEPERSON_BLOOD_SCALING_FACTOR 5 // Used to adjust how much of an effect the blood has on the rate of color change. Higher is slower. // Slowly shifting to the color of the reagents if((H in recolor_list) && H.reagents.total_volume > SLIMEPERSON_COLOR_SHIFT_TRIGGER) - var/blood_amount = H.vessel.total_volume + var/blood_amount = H.blood_volume var/r_color = mix_color_from_reagents(H.reagents.reagent_list) var/new_body_color = BlendRGB(r_color, rgb(H.r_skin, H.g_skin, H.b_skin), (blood_amount*SLIMEPERSON_BLOOD_SCALING_FACTOR)/((blood_amount*SLIMEPERSON_BLOOD_SCALING_FACTOR)+(H.reagents.total_volume))) var/list/new_color_list = ReadRGB(new_body_color) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index b448732fe8c..2a9aca19206 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -9,6 +9,7 @@ if(..()) . = 1 + handle_blood() for(var/obj/item/organ/internal/O in internal_organs) O.on_life() handle_changeling() @@ -196,6 +197,8 @@ return //remember to remove the "proc" of the child procs of these. +/mob/living/carbon/proc/handle_blood() + return /mob/living/carbon/proc/handle_changeling() return diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 7215c05a8e2..c2600c4feac 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -524,6 +524,7 @@ stat = CONSCIOUS update_fire() regenerate_icons() + restore_blood() if(human_mob) human_mob.update_eyes() human_mob.update_dna() @@ -577,10 +578,10 @@ var/pull_dir = get_dir(src, pulling) if(get_dist(src, pulling) > 1 || ((pull_dir - 1) & pull_dir)) // puller and pullee more than one tile away or in diagonal position - //if(isliving(pulling)) - //var/mob/living/M = pulling - //if(M.lying && !M.buckled && (prob(M.getBruteLoss() * 200 / M.maxHealth))) - //M.makeTrail(T) + if(isliving(pulling)) + var/mob/living/M = pulling + if(M.lying && !M.buckled && (prob(M.getBruteLoss() * 200 / M.maxHealth))) + M.makeTrail(T) pulling.Move(T, get_dir(pulling, T)) // the pullee tries to reach our previous position if(pulling && get_dist(src, pulling) > 1) // the pullee couldn't keep up stop_pulling() @@ -601,6 +602,55 @@ return 1 return 0 +/mob/living/proc/makeTrail(turf/T) + if(!has_gravity(src)) + return + var/blood_exists = 0 + + for(var/obj/effect/decal/cleanable/trail_holder/C in loc) //checks for blood splatter already on the floor + blood_exists = 1 + if(isturf(loc)) + var/trail_type = getTrail() + if(trail_type) + var/brute_ratio = round(getBruteLoss()/maxHealth, 0.1) + if(blood_volume && blood_volume > max(BLOOD_VOLUME_NORMAL*(1 - brute_ratio * 0.25), 0))//don't leave trail if blood volume below a threshold + blood_volume = max(blood_volume - max(1, brute_ratio * 2), 0) //that depends on our brute damage. + var/newdir = get_dir(T, loc) + if(newdir != src.dir) + newdir = newdir | dir + if(newdir == 3) //N + S + newdir = NORTH + else if(newdir == 12) //E + W + newdir = EAST + if((newdir in cardinal) && (prob(50))) + newdir = turn(get_dir(T, loc), 180) + if(!blood_exists) + new /obj/effect/decal/cleanable/trail_holder(loc) + for(var/obj/effect/decal/cleanable/trail_holder/TH in loc) + 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.overlays.Add(image('icons/effects/blood.dmi', trail_type, dir = newdir)) + TH.transfer_mob_blood_dna(src) + if(ishuman(src)) + var/mob/living/carbon/human/H = src + if(H.species.blood_color) + TH.color = H.species.blood_color + else + TH.color = "#A10808" + +/mob/living/carbon/human/makeTrail(turf/T) + + if((species.flags & NO_BLOOD) || species.exotic_blood || !bleed_rate || bleedsuppress) + return + ..() + +/mob/living/proc/getTrail() + if(getBruteLoss() < 300) + return pick("ltrails_1", "ltrails_2") + else + return pick("trails_1", "trails_2") + + /*////////////////////// START RESIST PROCS */////////////////////// diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 397ce90af6c..67c8ca04172 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -59,3 +59,5 @@ var/tesla_ignore = FALSE var/list/say_log = list() //a log of what we've said, plain text, no spans or junk, essentially just each individual "message" + + var/blood_volume = 0 //how much blood the mob has diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 9f8725067b0..a38e97b170b 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -568,23 +568,6 @@ mode = BOT_NO_ROUTE -/mob/living/simple_animal/bot/mulebot/Move(turf/simulated/next) - var/turf/simulated/last = loc - - if(istype(last) && bloodiness) - last.AddTracks(/obj/effect/decal/cleanable/blood/tracks/wheels, currentDNA, 0, get_dir(last, next), currentBloodColor) - - . = ..() - - if(. && istype(next)) - if(bloodiness) - next.AddTracks(/obj/effect/decal/cleanable/blood/tracks/wheels, currentDNA, get_dir(last, next), 0, currentBloodColor) - bloodiness-- - - for(var/mob/living/carbon/human/H in next) - if(H != load) - RunOver(H) - // calculates a path to the current destination // given an optional turf to avoid /mob/living/simple_animal/bot/mulebot/calc_path(turf/avoid = null) @@ -668,6 +651,30 @@ return +/mob/living/simple_animal/bot/mulebot/Move(turf/simulated/next) + . = ..() + + if(. && istype(next)) + if(bloodiness) + var/obj/effect/decal/cleanable/blood/tracks/B = locate() in next + if(!B) + B = new /obj/effect/decal/cleanable/blood/tracks(loc) + if(blood_DNA && blood_DNA.len) + B.blood_DNA |= blood_DNA.Copy() + B.basecolor = currentBloodColor + var/newdir = get_dir(next, loc) + if(newdir == dir) + B.setDir(newdir) + else + newdir = newdir | dir + if(newdir == 3) + newdir = 1 + else if(newdir == 12) + newdir = 4 + B.setDir(newdir) + B.update_icon() + bloodiness-- + // called when bot bumps into anything /mob/living/simple_animal/bot/mulebot/Bump(atom/obs) if(!wires.MobAvoid()) // usually just bumps, but if avoidance disabled knock over mobs @@ -697,21 +704,18 @@ H.apply_damage(0.5*damage, BRUTE, "l_arm", run_armor_check("l_arm", "melee")) H.apply_damage(0.5*damage, BRUTE, "r_arm", run_armor_check("r_arm", "melee")) - var/obj/effect/decal/cleanable/blood/B = new(loc) - B.blood_DNA = list() - B.blood_DNA[H.dna.unique_enzymes] = H.dna.b_type - currentDNA = B.blood_DNA + + var/turf/T = get_turf(src) + H.add_mob_blood(H) + H.add_splatter_floor(T) bloodiness += 4 - currentBloodColor = "#A10808" - if(istype(H)) - var/datum/reagent/blood/bld = H.get_blood(H.vessel) - if(bld.data["blood_colour"]) - currentBloodColor = bld.data["blood_colour"] - return - B.basecolor = currentBloodColor - B.update_icon() + var/list/blood_dna = H.get_blood_dna_list() + if(blood_dna) + transfer_blood_dna(blood_dna) + currentBloodColor = H.species.blood_color + return /mob/living/simple_animal/bot/mulebot/bot_control_message(command, mob/user, user_turf) switch(command) diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 4f3d4588378..b7bd4fc46c1 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -27,6 +27,7 @@ stop_automated_movement_when_pulled = 1 var/milk_content = 0 can_collar = 1 + blood_volume = BLOOD_VOLUME_NORMAL /mob/living/simple_animal/hostile/retaliate/goat/handle_automated_movement() ..() @@ -110,6 +111,7 @@ var/milk_content = 0 can_collar = 1 gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY + blood_volume = BLOOD_VOLUME_NORMAL /mob/living/simple_animal/cow/New() ..() @@ -312,6 +314,7 @@ var/global/chicken_count = 0 maxHealth = 50 can_collar = 1 gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY + blood_volume = BLOOD_VOLUME_NORMAL /mob/living/simple_animal/turkey name = "turkey" @@ -381,6 +384,7 @@ var/global/chicken_count = 0 maxHealth = 50 can_collar = 1 gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY + blood_volume = BLOOD_VOLUME_NORMAL /mob/living/simple_animal/walrus name = "walrus" @@ -404,3 +408,4 @@ var/global/chicken_count = 0 maxHealth = 50 can_collar = 1 gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY + blood_volume = BLOOD_VOLUME_NORMAL diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm index 2d7bc63dc75..7202c8a4054 100644 --- a/code/modules/mob/living/simple_animal/friendly/pet.dm +++ b/code/modules/mob/living/simple_animal/friendly/pet.dm @@ -2,6 +2,7 @@ icon = 'icons/mob/pets.dmi' can_collar = 1 mob_size = MOB_SIZE_SMALL + blood_volume = BLOOD_VOLUME_NORMAL /mob/living/simple_animal/pet/attackby(var/obj/item/O as obj, var/mob/user as mob, params) if(istype(O, /obj/item/weapon/newspaper)) diff --git a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm index 517b71a3a6d..a0f0a2b8b22 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm @@ -203,9 +203,9 @@ reagents.reaction(C, INGEST, fraction) reagents.trans_to(C, volume) -/mob/living/simple_animal/hostile/asteroid/hivelordbrood/blood/proc/link_host(mob/living/carbon/human/H) - faction = list("\ref[src]", "\ref[H]") // Hostile to everyone except the host. - H.vessel.trans_to(src, 30) +/mob/living/simple_animal/hostile/asteroid/hivelordbrood/blood/proc/link_host(mob/living/carbon/C) + faction = list("\ref[src]", "\ref[C]") // Hostile to everyone except the host. + C.transfer_blood_to(src, 30) color = mix_color_from_reagents(reagents.reagent_list) // Legion diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 72c416e8f23..fc331fb74b9 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -422,6 +422,13 @@ damage = O.force if(O.damtype == STAMINA) damage = 0 + if(O.damtype == BRUTE) + if(prob(33)) + O.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 + user.add_mob_blood(src) visible_message("[user] has [O.attack_verb.len ? "[pick(O.attack_verb)]": "attacked"] [src] with [O]!",\ "[user] has [O.attack_verb.len ? "[pick(O.attack_verb)]": "attacked"] you with [O]!") else @@ -432,7 +439,6 @@ "This weapon is ineffective, it does no damage.") adjustBruteLoss(damage) - /mob/living/simple_animal/movement_delay() . = ..() diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm index 18101968d6f..bf0cd79f322 100644 --- a/code/modules/projectiles/guns/alien.dm +++ b/code/modules/projectiles/guns/alien.dm @@ -66,7 +66,7 @@ /obj/item/projectile/bullet/spike/on_hit(atom/target, blocked = 0) if((blocked != 100) && istype(target, /mob/living/carbon/human)) var/mob/living/carbon/human/H = target - H.drip(500) + H.bleed(50) ..() //This gun only functions for armalis. The on-sprite is too huge to render properly on other sprites. diff --git a/code/modules/projectiles/guns/projectile/saw.dm b/code/modules/projectiles/guns/projectile/saw.dm index 8b35ac805b4..3714a7983da 100644 --- a/code/modules/projectiles/guns/projectile/saw.dm +++ b/code/modules/projectiles/guns/projectile/saw.dm @@ -67,9 +67,9 @@ /obj/item/projectile/bullet/saw/bleeding/on_hit(atom/target, blocked = 0, hit_zone) . = ..() - if((blocked != 100) && istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = target - H.drip(350) + if((blocked != 100) && iscarbon(target)) + var/mob/living/carbon/C = target + C.bleed(35) /obj/item/projectile/bullet/saw/hollow damage = 60 diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index b0bcc0743e2..cd8a64fbde6 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -119,9 +119,9 @@ breakthings = FALSE /obj/item/projectile/bullet/sniper/haemorrhage/on_hit(atom/target, blocked = 0, hit_zone) - if((blocked != 100) && istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = target - H.drip(1000) + if((blocked != 100) && iscarbon(target)) + var/mob/living/carbon/C = target + C.bleed(100) return ..() diff --git a/code/modules/reagents/chemistry/colors.dm b/code/modules/reagents/chemistry/colors.dm index 3d4ab41fe9c..0eea945349c 100644 --- a/code/modules/reagents/chemistry/colors.dm +++ b/code/modules/reagents/chemistry/colors.dm @@ -14,8 +14,8 @@ var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d111 var/vol_temp // see libs/IconProcs/IconProcs.dm for(var/datum/reagent/reagent in reagent_list) - if(reagent.id == "blood" && reagent.data && reagent.data["blood_colour"]) - reagent_color = reagent.data["blood_colour"] + if(reagent.id == "blood" && reagent.data && reagent.data["blood_color"]) + reagent_color = reagent.data["blood_color"] else reagent_color = reagent.color diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 662843e337a..9ad885cd9b7 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -135,10 +135,6 @@ var/const/INGEST = 2 for(var/datum/reagent/current_reagent in reagent_list) if(!current_reagent) continue - if(current_reagent.id == "blood" && ishuman(target)) - var/mob/living/carbon/human/H = target - H.inject_blood(my_atom, amount) - continue var/current_reagent_transfer = current_reagent.volume * part if(preserve_data) trans_data = copy_data(current_reagent) diff --git a/code/modules/reagents/chemistry/reagents/food.dm b/code/modules/reagents/chemistry/reagents/food.dm index a18f1c01c42..4fd973878dd 100644 --- a/code/modules/reagents/chemistry/reagents/food.dm +++ b/code/modules/reagents/chemistry/reagents/food.dm @@ -31,11 +31,9 @@ if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients if(prob(50)) M.adjustBruteLoss(-1) - if(H.species.exotic_blood) - H.vessel.add_reagent(H.species.exotic_blood, 0.4) - else - if(!(H.species.flags & NO_BLOOD)) - H.vessel.add_reagent("blood", 0.4) + if(!(H.species.flags & NO_BLOOD))//do not restore blood on things with no blood by nature. + if(H.blood_volume < BLOOD_VOLUME_NORMAL) + H.blood_volume += 0.4 ..() /datum/reagent/consumable/nutriment/protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores @@ -65,11 +63,9 @@ M.satiety += 30 if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.species.exotic_blood) - H.vessel.add_reagent(H.species.exotic_blood, 0.5) - else - if(!(H.species.flags & NO_BLOOD)) - H.vessel.add_reagent("blood", 0.5) + if(!(H.species.flags & NO_BLOOD))//do not restore blood on things with no blood by nature. + if(H.blood_volume < BLOOD_VOLUME_NORMAL) + H.blood_volume += 0.5 ..() /datum/reagent/consumable/sugar diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index 452f9f6d2ff..4b35b5fbeca 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -210,10 +210,11 @@ if(prob(33)) M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER) M.adjustFireLoss(-2*REAGENTS_EFFECT_MULTIPLIER) - if(ishuman(M)) + if(ishuman(M) && prob(33)) var/mob/living/carbon/human/H = M - if(!H.species.exotic_blood && !(H.species.flags & NO_BLOOD) && prob(33)) - H.vessel.add_reagent("blood", 1) + if(!(H.species.flags & NO_BLOOD))//do not restore blood on things with no blood by nature. + if(H.blood_volume < BLOOD_VOLUME_NORMAL) + H.blood_volume += 1 ..() /datum/reagent/medicine/synthflesh diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm index 9670c80afef..815c9b91123 100644 --- a/code/modules/reagents/chemistry/reagents/misc.dm +++ b/code/modules/reagents/chemistry/reagents/misc.dm @@ -148,7 +148,7 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M if(!H.species.exotic_blood && !(H.species.flags & NO_BLOOD)) - H.vessel.add_reagent("blood", 0.8) + H.blood_volume += 0.8 ..() //foam diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index 773d03c6006..ae40dcb5a8f 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -206,6 +206,14 @@ else //ingest, patch or inject M.ForceContractDisease(D) + if(method == INGEST && iscarbon(M)) + var/mob/living/carbon/C = M + if(C.get_blood_id() == "blood") + if((!data || !(data["blood_type"] in get_safe_blood(C.dna.b_type))) && !M.mind.vampire) + C.reagents.add_reagent("toxin", volume * 0.5) + else + C.blood_volume = min(C.blood_volume + round(volume, 0.1), BLOOD_VOLUME_MAXIMUM) + /datum/reagent/blood/on_new(list/data) if(istype(data)) SetViruses(src, data) @@ -234,13 +242,13 @@ preserve += D data["viruses"] = preserve - if(mix_data["blood_colour"]) - color = mix_data["blood_colour"] + if(mix_data["blood_color"]) + color = mix_data["blood_color"] return 1 /datum/reagent/blood/on_update(atom/A) - if(data["blood_colour"]) - color = data["blood_colour"] + if(data["blood_color"]) + color = data["blood_color"] return ..() /datum/reagent/blood/reaction_turf(turf/simulated/T, volume)//splash the blood all over the place diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 009828543ce..c379e869768 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -32,7 +32,7 @@ create_reagents(volume) if(spawned_disease) var/datum/disease/F = new spawned_disease(0) - var/list/data = list("viruses" = list(F), "blood_colour" = "#A10808") + var/list/data = list("viruses" = list(F), "blood_color" = "#A10808") reagents.add_reagent("blood", disease_amount, data) if(list_reagents) reagents.add_reagent_list(list_reagents) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index ebb13f0830c..e4205ef54d0 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -16,6 +16,7 @@ volume = 15 w_class = WEIGHT_CLASS_TINY sharp = 1 + var/busy = 0 var/mode = SYRINGE_DRAW var/projectile_type = /obj/item/projectile/bullet/dart/syringe @@ -58,13 +59,16 @@ ..() return -/obj/item/weapon/reagent_containers/syringe/afterattack(obj/target, mob/user, proximity) - if(!proximity) return - if(!target.reagents) return +/obj/item/weapon/reagent_containers/syringe/afterattack(atom/target, mob/user , proximity) + if(!proximity) + return + if(!target.reagents) + return + var/mob/living/L if(isliving(target)) - var/mob/living/M = target - if(!M.can_inject(user, 1)) + L = target + if(!L.can_inject(user, 1)) return if(mode == SYRINGE_BROKEN) @@ -75,163 +79,84 @@ if(SYRINGE_DRAW) if(reagents.total_volume >= reagents.maximum_volume) - to_chat(user, "The syringe is full.") + to_chat(user, "The syringe is full.") return - if(ismob(target))//Blood! - if(istype(target, /mob/living/carbon/slime)) - to_chat(user, "You are unable to locate any blood.") - return - if(reagents.has_reagent("blood")) - to_chat(user, "There is already a blood sample in this syringe") - return - if(istype(target, /mob/living/carbon))//maybe just add a blood reagent to all mobs. Then you can suck them dry...With hundreds of syringes. Jolly good idea. - var/mob/living/carbon/T = target - if(!T.dna) - to_chat(usr, "You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum)") + if(L) //living mob + var/drawn_amount = reagents.maximum_volume - reagents.total_volume + if(target != user) + target.visible_message("[user] is trying to take a blood sample from [target]!", \ + "[user] is trying to take a blood sample from [target]!") + busy = 1 + if(!do_mob(user, target)) + busy = 0 return - if(NOCLONE in T.mutations) //target done been et, no more blood in him - to_chat(user, "You are unable to locate any blood.") + if(reagents.total_volume >= reagents.maximum_volume) return - - - var/time = 30 - if(istype(target,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = T - if(H.species.flags & NO_BLOOD) - to_chat(usr, "You are unable to locate any blood.") - return - if(target == user) - time = 0 - else - for(var/mob/O in viewers(world.view, user)) - O.show_message(text("[] is trying to take a blood sample from []!", user, target), 1) - if(!do_mob(user, target, time)) - return - - var/amount = reagents.maximum_volume - reagents.total_volume - if(amount == 0) - to_chat(usr, "The syringe is full!") - return - - var/datum/reagent/B - if(istype(T,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = T - if(H.species && H.species.exotic_blood && H.vessel.total_volume) - H.vessel.trans_to(src,amount) - else - B = T.take_blood(src,amount) - else - B = T.take_blood(src,amount) - - if(B) - reagents.reagent_list |= B - reagents.update_total() - on_reagent_change() - reagents.handle_reactions() - - to_chat(user, "You take a blood sample from [target]") - for(var/mob/O in viewers(4, user)) - O.show_message("[user] takes a blood sample from [target].", 1) - else - user.visible_message("[user] takes a sample from [target].", "You take a sample from [target].") + busy = 0 + if(L.transfer_blood_to(src, drawn_amount)) + user.visible_message("[user] takes a blood sample from [L].") + else + to_chat(user, "You are unable to draw any blood from [L]!") else //if not mob if(!target.reagents.total_volume) - to_chat(user, "[target] is empty.") + to_chat(user, "[target] is empty!") return if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers) && !istype(target,/obj/item/slime_extract)) - to_chat(user, "You cannot directly remove reagents from this object.") + to_chat(user, "You cannot directly remove reagents from [target]!") return var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares? - to_chat(user, "You fill the syringe with [trans] units of the solution.") + to_chat(user, "You fill [src] with [trans] units of the solution.") if(reagents.total_volume >= reagents.maximum_volume) mode=!mode update_icon() if(SYRINGE_INJECT) if(!reagents.total_volume) - to_chat(user, "The Syringe is empty.") - return - if(istype(target, /obj/item/weapon/implantcase/chem)) + to_chat(user, "[src] is empty.") return if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes)) - to_chat(user, "You cannot directly fill this object.") + to_chat(user, "You cannot directly fill [target]!") return - if(istype(target, /obj/item/clothing/mask/cigarette)) - var/obj/item/clothing/mask/cigarette/C = target - if(istype(C.loc, /obj/item/weapon/storage/fancy/cigarettes)) - to_chat(user, "You cannot inject a cigarette while it's still in the pack.") - return if(target.reagents.total_volume >= target.reagents.maximum_volume) - to_chat(user, "[target] is full.") + to_chat(user, "[target] is full.") return - var/mob/living/carbon/human/H = target - if(istype(H)) - var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(!affected) - to_chat(user, "\The [H] is missing that limb!") - return - /* else if(affected.status & ORGAN_ROBOT) - to_chat(user, "You cannot inject a robotic limb.") - return */ + if(L) //living mob + if(L != user) + L.visible_message("[user] is trying to inject [L]!", \ + "[user] is trying to inject [L]!") + if(!do_mob(user, L)) + return + if(!reagents.total_volume) + return + if(L.reagents.total_volume >= L.reagents.maximum_volume) + return + L.visible_message("[user] injects [L] with the syringe!", \ + "[user] injects [L] with the syringe!") - if(ismob(target) && target != user) - for(var/mob/O in viewers(world.view, user)) - O.show_message(text("[] is trying to inject []!", user, target), 1) + var/list/rinject = list() + for(var/datum/reagent/R in reagents.reagent_list) + rinject += R.name + var/contained = english_list(rinject) - if(!do_mob(user, target, 30)) return - - for(var/mob/O in viewers(world.view, user)) - O.show_message(text("[] injects [] with the syringe!", user, target), 1) - - if(istype(target,/mob/living)) - var/mob/living/M = target - var/list/injected = list() - for(var/datum/reagent/R in reagents.reagent_list) - injected += R.name - var/contained = english_list(injected) - M.create_attack_log("Has been injected with [name] by [key_name(user)]. Reagents: [contained]") - user.create_attack_log("Used the [name] to inject [key_name(M)]. Reagents: [contained]") - if(M.ckey) - msg_admin_attack("[key_name_admin(user)] injected [key_name_admin(M)] with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)])") - if(!iscarbon(user)) - M.LAssailant = null - else - M.LAssailant = user - - reagents.reaction(target, INGEST) - if(ismob(target) && target == user) - reagents.reaction(target, INGEST) - - spawn(5) - var/datum/reagent/blood/B - for(var/datum/reagent/blood/d in reagents.reagent_list) - B = d - break - var/trans - if(B && istype(target,/mob/living/carbon)) - var/mob/living/carbon/C = target - C.inject_blood(src, 5) + if(L != user) + add_logs(user, L, "injected", src, addition="which had [contained]") else - trans = reagents.trans_to(target, amount_per_transfer_from_this) - to_chat(user, "You inject [trans] units of the solution. The syringe now contains [reagents.total_volume] units.") - if(istype(target, /obj/item/weapon/reagent_containers/food/pill/patch)) - var/obj/item/weapon/reagent_containers/food/pill/patch/P = target - if(P.instant_application) - to_chat(user, "You break the medical seal on the [P]!") - P.instant_application = 0 + log_attack("[user.name] ([user.ckey]) injected [L.name] ([L.ckey]) with [src.name], which had [contained] (INTENT: [uppertext(user.a_intent)])") - if(reagents.total_volume <= 0 && mode==SYRINGE_INJECT) - mode = SYRINGE_DRAW - update_icon() - - return + var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1) + reagents.reaction(L, INGEST, fraction) + reagents.trans_to(target, amount_per_transfer_from_this) + to_chat(user, "You inject [amount_per_transfer_from_this] units of the solution. The syringe now contains [reagents.total_volume] units.") + if (reagents.total_volume <= 0 && mode==SYRINGE_INJECT) + mode = SYRINGE_DRAW + update_icon() /obj/item/weapon/reagent_containers/syringe/update_icon() if(mode == SYRINGE_BROKEN) diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 73fbb455835..e38ea69f345 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -98,7 +98,7 @@ /obj/structure/disposalconstruct/AltClick(mob/user) if(user.incapacitated()) - to_chat(user << "You can't do that right now!") + to_chat(user, "You can't do that right now!") return if(!Adjacent(user)) return @@ -195,7 +195,7 @@ playsound(src.loc, I.usesound, 100, 1) update() return - + var/obj/structure/disposalpipe/CP = locate() in T if(ptype>=6 && ptype <= 8) // Disposal or outlet if(CP) // There's something there diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heal.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heal.dm index b1071222b17..f3b82e18ecd 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heal.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heal.dm @@ -17,14 +17,12 @@ if(affecting && istype(affecting)) affecting.heal_damage(25 * weakness, 25 * weakness) //H:heal_organ_damage(25, 25) - H.vessel.add_reagent("blood",5) + H.blood_volume += 5 H.nutrition += 50 * weakness H.adjustBrainLoss(-25 * weakness) var/radiation = min(H.radiation, 25 * weakness) H.apply_effect(-radiation,IRRADIATE,0) H.bodytemperature = initial(H.bodytemperature) - spawn(1) - H.fixblood() // C.adjustOxyLoss(-25 * weakness) C.adjustToxLoss(-25 * weakness) diff --git a/code/modules/research/xenoarchaeology/finds/finds_special.dm b/code/modules/research/xenoarchaeology/finds/finds_special.dm index 5fd432a7a6f..cf0c1cfa273 100644 --- a/code/modules/research/xenoarchaeology/finds/finds_special.dm +++ b/code/modules/research/xenoarchaeology/finds/finds_special.dm @@ -134,7 +134,7 @@ B.target_turf = pick(range(1, src)) B.blood_DNA = list() B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - M.vessel.remove_reagent("blood",rand(25,50)) + M.blood_volume -= rand(25,50) //animated blood 2 SPOOKY /obj/effect/decal/cleanable/blood/splatter/animated diff --git a/code/modules/surgery/organs/blood.dm b/code/modules/surgery/organs/blood.dm index 9eefe264524..16ab98c525e 100644 --- a/code/modules/surgery/organs/blood.dm +++ b/code/modules/surgery/organs/blood.dm @@ -1,87 +1,42 @@ /**************************************************** BLOOD SYSTEM ****************************************************/ - -/mob/living/carbon/human/var/datum/reagents/vessel //Container for blood and BLOOD ONLY. Do not transfer other chems here. - -//Initializes blood vessels -/mob/living/carbon/human/proc/make_blood() - - if(vessel) +/mob/living/carbon/human/proc/suppress_bloodloss(amount) + if(bleedsuppress) return - - vessel = new/datum/reagents(max_blood) - vessel.my_atom = src - - if(species && species.exotic_blood) - vessel.add_reagent(species.exotic_blood, max_blood) else - vessel.add_reagent("blood", max_blood) - for(var/datum/reagent/blood/B in vessel.reagent_list) - if(B.id == "blood") - B.data = list( - "donor" = src, - "viruses" = null, - "blood_DNA" = dna.unique_enzymes, - "blood_colour" = species.blood_color, - "blood_type" = b_type, - "resistances" = null, - "trace_chem" = null) - spawn(1) - fixblood() + bleedsuppress = 1 + spawn(amount) + bleedsuppress = 0 + if(stat != DEAD && bleed_rate) + to_chat(src, "The blood soaks through your bandage.") + -//Resets blood data -/mob/living/carbon/human/proc/fixblood() - for(var/datum/reagent/blood/B in vessel.reagent_list) - if(B.id == "blood") - B.data = list( - "donor" = src, - "viruses" = null, - "blood_DNA" = dna.unique_enzymes, - "blood_colour" = species.blood_color, - "blood_type" = b_type, - "resistances" = null, - "trace_chem" = null) // Takes care blood loss and regeneration -/mob/living/carbon/human/proc/handle_blood() - var/blood_volume - if(species && species.flags & NO_BLOOD) +/mob/living/carbon/human/handle_blood() + var/list/blood_data = get_blood_data(get_blood_id())//PROCCEPTION + + if(in_stasis) return - if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood. - if(species.exotic_blood) - var/blood_reagent = species.exotic_blood // This is a string of the name of the species' blood reagent - blood_volume = round(vessel.get_reagent_amount(blood_reagent)) - if(blood_volume < max_blood && blood_volume) - vessel.add_reagent(blood_reagent, 0.1) // regenerate blood VERY slowly - if(reagents.has_reagent(blood_reagent)) - vessel.add_reagent(blood_reagent, 0.4) - else - blood_volume = round(vessel.get_reagent_amount("blood")) - //Blood regeneration if there is some space - if(blood_volume < max_blood && blood_volume) - var/datum/reagent/blood/B = locate() in vessel.reagent_list //Grab some blood - if(B) // Make sure there's some blood at all - if(mind) //Handles vampires "eating" blood that isn't their own. - if(mind in ticker.mode.vampires) - for(var/datum/reagent/blood/BL in vessel.reagent_list) - if(nutrition >= NUTRITION_LEVEL_WELL_FED) - break //We don't want blood tranfusions making vampires fat. - if(BL.data["donor"] != src) - nutrition += (15 * REAGENTS_METABOLISM) - BL.volume -= REAGENTS_METABOLISM - if(BL.volume <= 0) - qdel(BL) - break //Only process one blood per tick, to maintain the same metabolism as nutriment for non-vampires. + if(species && species.flags & NO_BLOOD) + bleed_rate = 0 + return - if(B.data["donor"] != src) //If it's not theirs, then we look for theirs - for(var/datum/reagent/blood/D in vessel.reagent_list) - if(D.data["donor"] == src) - B = D - break + if(bodytemperature >= 225 && !(NOCLONE in mutations)) //cryosleep or husked people do not pump the blood. - vessel.add_reagent("blood", 0.1) // regenerate blood VERY slowly + //Blood regeneration if there is some space + if(blood_volume < max_blood && blood_volume) + if(mind) //Handles vampires "eating" blood that isn't their own. + if(mind in ticker.mode.vampires) + if(nutrition >= NUTRITION_LEVEL_WELL_FED) + return //We don't want blood tranfusions making vampires fat. + if(blood_data["donor"] != src) + nutrition += (15 * REAGENTS_METABOLISM) + return //Only process one blood per tick, to maintain the same metabolism as nutriment for non-vampires. + if(blood_volume < BLOOD_VOLUME_NORMAL) + blood_volume += 0.1 // regenerate blood VERY slowly //Effects of bloodloss @@ -102,6 +57,7 @@ adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.02, 1)) if(prob(5)) EyeBlurry(6) + var/word = pick("dizzy","woozy","faint") to_chat(src, "You feel very [word].") if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) @@ -117,264 +73,215 @@ death() //Bleeding out - var/blood_max = 0 + var/temp_bleed = 0 for(var/obj/item/organ/external/temp in bodyparts) if(!(temp.status & ORGAN_BLEEDING) || temp.status & ORGAN_ROBOT) continue for(var/datum/wound/W in temp.wounds) if(W.bleeding()) - blood_max += W.damage / 4 + temp_bleed += W.damage / 4 if(temp.open) - blood_max += 2 //Yer stomach is cut open - drip(blood_max) + temp_bleed += 0.5 -//Makes a blood drop, leaking certain amount of blood from the mob -/mob/living/carbon/human/proc/drip(var/amt as num) + bleed_rate = max(bleed_rate - 0.5, temp_bleed)//if no wounds, other bleed effects (heparin) naturally decreases - if(species && species.flags & NO_BLOOD) //TODO: Make drips come from the reagents instead. - return + if(bleed_rate && !bleedsuppress) + bleed(bleed_rate) - if(!amt) - return +//Makes a blood drop, leaking amt units of blood from the mob +/mob/living/carbon/proc/bleed(amt) + if(blood_volume) + blood_volume = max(blood_volume - amt, 0) + if(isturf(loc)) //Blood loss still happens in locker, floor stays clean + if(amt >= 10) + add_splatter_floor(loc) + else + add_splatter_floor(loc, 1) - var/amm = 0.1 * amt - var/turf/T = get_turf(src) +/mob/living/carbon/human/bleed(amt) + if(!(species && species.flags & NO_BLOOD)) + ..() + if(species.exotic_blood) + var/datum/reagent/R = chemical_reagents_list[get_blood_id()] + if(istype(R) && isturf(loc)) + R.reaction_turf(get_turf(src), amt) - if(species.exotic_blood) - vessel.remove_reagent(species.exotic_blood,amm) - if(vessel.total_volume) - var/fraction = amm / vessel.total_volume - vessel.reaction(T, TOUCH, fraction) - return - - else - vessel.remove_reagent("blood",amm) - blood_splatter(src, src) +/mob/living/proc/restore_blood() + blood_volume = initial(blood_volume) +/mob/living/carbon/human/restore_blood() + blood_volume = BLOOD_VOLUME_NORMAL + bleed_rate = 0 /**************************************************** BLOOD TRANSFERS ****************************************************/ -//Gets blood from mob to the container, preserving all data in it. -/mob/living/carbon/proc/take_blood(obj/item/weapon/reagent_containers/container, var/amount) - var/datum/reagent/B = get_blood(container.reagents) - if(!istype(B, /datum/reagent/blood)) B = new /datum/reagent/blood - B.holder = container - B.volume += amount +//Gets blood from mob to a container or other mob, preserving all data in it. +/mob/living/proc/transfer_blood_to(atom/movable/AM, amount, forced) + if(!blood_volume || !AM.reagents) + return 0 + if(blood_volume < BLOOD_VOLUME_BAD && !forced) + return 0 - //set reagent data - B.data["donor"] = src - B.data["viruses"] = list() + if(blood_volume < amount) + amount = blood_volume - for(var/datum/disease/D in viruses) - B.data["viruses"] += D.Copy() - if(resistances && resistances.len) - B.data["resistances"] = resistances.Copy() + var/blood_id = get_blood_id() + if(!blood_id) + return 0 - B.data["blood_DNA"] = copytext(src.dna.unique_enzymes,1,0) - B.data["blood_type"] = copytext(src.dna.b_type,1,0) + blood_volume -= amount - // Putting this here due to return shenanigans. - if(istype(src,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = src - B.data["blood_colour"] = H.species.blood_color - B.color = B.data["blood_colour"] + var/list/blood_data = get_blood_data(blood_id) - var/list/temp_chem = list() - for(var/datum/reagent/R in src.reagents.reagent_list) - temp_chem += R.id - temp_chem[R.id] = R.volume - B.data["trace_chem"] = list2params(temp_chem) - if(mind) - B.data["mind"] = mind - if(ckey) - B.data["ckey"] = ckey + if(iscarbon(AM)) + var/mob/living/carbon/C = AM + if(blood_id == C.get_blood_id())//both mobs have the same blood substance + if(blood_id == "blood") //normal blood + if(blood_data["viruses"]) + for(var/datum/disease/D in blood_data["viruses"]) + if((D.spread_flags & SPECIAL) || (D.spread_flags & NON_CONTAGIOUS)) + continue + C.ForceContractDisease(D) + if(!(blood_data["blood_type"] in get_safe_blood(C.dna.b_type))) + C.reagents.add_reagent("toxin", amount * 0.5) + return 1 - if(!suiciding) - B.data["cloneable"] = 1 - B.data["gender"] = gender - B.data["real_name"] = real_name - B.data["factions"] = faction - return B + C.blood_volume = min(C.blood_volume + round(amount, 0.1), BLOOD_VOLUME_MAXIMUM) + return 1 -//For humans, blood does not appear from blue, it comes from vessels. -/mob/living/carbon/human/take_blood(obj/item/weapon/reagent_containers/container, var/amount) - if(src.species.exotic_blood) - if(vessel.get_reagent_amount(src.species.exotic_blood) < amount) - return null - var/datum/reagent/W = new /datum/reagent - W.holder = container - W.volume += amount + AM.reagents.add_reagent(blood_id, amount, blood_data, bodytemperature) + return 1 + + +/mob/living/proc/get_blood_data(blood_id) + return + +/mob/living/carbon/human/get_blood_data(blood_id) + if(blood_id == "blood") //actual blood reagent + var/blood_data = list() + //set the blood data + blood_data["donor"] = src + blood_data["viruses"] = list() + + for(var/datum/disease/D in viruses) + blood_data["viruses"] += D.Copy() + + blood_data["blood_DNA"] = copytext(dna.unique_enzymes,1,0) + if(resistances && resistances.len) + blood_data["resistances"] = resistances.Copy() var/list/temp_chem = list() - for(var/datum/reagent/R in src.reagents.reagent_list) - temp_chem += R.id + for(var/datum/reagent/R in reagents.reagent_list) temp_chem[R.id] = R.volume - W.data["trace_chem"] = list2params(temp_chem) - vessel.remove_reagent(src.species.exotic_blood,amount) // Removes blood if human - return W - if(species && species.flags & NO_BLOOD) - return null - else - if(vessel.get_reagent_amount("blood") < amount) - return null - . = ..() - vessel.remove_reagent("blood",amount) // Removes blood if human + blood_data["trace_chem"] = list2params(temp_chem) + if(mind) + blood_data["mind"] = mind + if(ckey) + blood_data["ckey"] = ckey + if(!suiciding) + blood_data["cloneable"] = 1 + blood_data["blood_type"] = copytext(src.dna.b_type,1,0) + blood_data["gender"] = gender + blood_data["real_name"] = real_name + blood_data["blood_color"] = species.blood_color + blood_data["factions"] = faction + return blood_data -//Transfers blood from container ot vessels -/mob/living/carbon/proc/inject_blood(obj/item/weapon/reagent_containers/container, var/amount) - var/datum/reagent/blood/injected = get_blood(container.reagents) +//get the id of the substance this mob use as blood. +/mob/proc/get_blood_id() + return - if(!istype(injected)) +/mob/living/simple_animal/get_blood_id() + if(blood_volume) + return "blood" + +/mob/living/carbon/human/get_blood_id() + if(species.exotic_blood)//some races may bleed water..or kethcup.. + return species.exotic_blood + else if((species && species.flags & NO_BLOOD) || (NOCLONE in mutations)) return - - var/list/chems = list() - chems = params2list(injected.data["trace_chem"]) - for(var/C in chems) - src.reagents.add_reagent(C, (text2num(chems[C]) / BLOOD_VOLUME_NORMAL) * amount)//adds trace chemicals to owner's blood - reagents.update_total() - - container.reagents.remove_reagent("blood", amount) - -//Transfers blood from container ot vessels, respecting blood types compatability. -/mob/living/carbon/human/inject_blood(obj/item/weapon/reagent_containers/container, var/amount) - - var/datum/reagent/blood/injected = get_blood(container.reagents) - - if(!istype(injected)) //Sanity.. - return - - if(species && species.flags & NO_BLOOD) - reagents.add_reagent("blood", amount, injected.data) - reagents.update_total() - return - - var/datum/reagent/blood/our = get_blood(vessel) - - if(!istype(our)) // Do we not have blood? - vessel.add_reagent("blood", amount, injected.data) // This is only ran once, so we need to add back their DNA. - vessel.update_total() - ..() - our = get_blood(vessel) // Get the new blood. - our.data["blood_DNA"] = dna.unique_enzymes // Give it the proper DNA we had before (src.dna) - our.data["blood_type"] = dna.b_type // Proper blood type. - our.data["donor"] = src // Without this, it'd be random each time it was extracted or Null. - return - - if(blood_incompatible(injected.data["blood_type"],our.data["blood_type"]) ) - reagents.add_reagent("toxin",amount * 0.5) - reagents.update_total() - else - vessel.add_reagent("blood", amount, injected.data) - vessel.update_total() - ..() - -//Gets human's own blood. -/mob/living/carbon/proc/get_blood(datum/reagents/container) - var/datum/reagent/blood/res = locate() in container.reagent_list //Grab some blood - if(res) // Make sure there's some blood at all - if(res.data["donor"] != src) //If it's not theirs, then we look for theirs - for(var/datum/reagent/blood/D in container.reagent_list) - if(D.data["donor"] == src) - return D - return res - -/mob/living/carbon/human/get_blood(datum/reagents/container) - if(species.exotic_blood) - return container.get_reagent_from_id(species.exotic_blood) - else - return ..() - -/mob/living/carbon/proc/get_blood_name() return "blood" -/mob/living/carbon/human/get_blood_name() - if(species.exotic_blood) - return species.exotic_blood - else - return ..() +// This is has more potential uses, and is probably faster than the old proc. +/proc/get_safe_blood(bloodtype) + . = list() + if(!bloodtype) + return + switch(bloodtype) + if("A-") + return list("A-", "O-") + if("A+") + return list("A-", "A+", "O-", "O+") + if("B-") + return list("B-", "O-") + if("B+") + return list("B-", "B+", "O-", "O+") + if("AB-") + return list("A-", "B-", "O-", "AB-") + if("AB+") + return list("A-", "A+", "B-", "B+", "O-", "O+", "AB-", "AB+") + if("O-") + return list("O-") + if("O+") + return list("O-", "O+") -/proc/blood_incompatible(donor,receiver) +//to add a splatter of blood or other mob liquid. +/mob/living/proc/add_splatter_floor(turf/T, small_drip) + if(get_blood_id() != "blood")//is it blood or welding fuel? + return - var/donor_antigen = copytext(donor,1,lentext(donor)) - var/receiver_antigen = copytext(receiver,1,lentext(receiver)) - var/donor_rh = findtext("+",donor) - var/receiver_rh = findtext("+",receiver) + if(!T) + T = get_turf(src) - if(donor_rh && !receiver_rh) return 1 - switch(receiver_antigen) - if("A") - if(donor_antigen != "A" && donor_antigen != "O") return 1 - if("B") - if(donor_antigen != "B" && donor_antigen != "O") return 1 - if("O") - if(donor_antigen != "O") return 1 - //AB is a universal receiver. - return 0 + var/list/temp_blood_DNA + var/list/b_data = get_blood_data(get_blood_id()) -/* -Target: Thing/tile to get bloody -Source: Human or blood reagent -Large: Whether the splat should be big or not -*/ -/proc/blood_splatter(var/target,var/source,var/large = 0) - - var/obj/effect/decal/cleanable/blood/B - var/decal_type = /obj/effect/decal/cleanable/blood/splatter - var/turf/T = get_turf(target) - var/datum/reagent/blood/bld - if(istype(source,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = source - bld = H.get_blood(H.vessel) - if(H.species.exotic_blood) - H.vessel.reaction(T, TOUCH) + if(small_drip) + // Only a certain number of drips (or one large splatter) can be on a given turf. + var/obj/effect/decal/cleanable/blood/drip/drop = locate() in T + if(drop) + if(drop.drips < 3) + drop.drips++ + drop.overlays |= pick(drop.random_icon_states) + drop.transfer_mob_blood_dna(src) + drop.basecolor = b_data["blood_color"] + drop.update_icon() + else + temp_blood_DNA = list() + temp_blood_DNA |= drop.blood_DNA.Copy() //we transfer the dna from the drip to the splatter + qdel(drop) + else + drop = new(T) + drop.transfer_mob_blood_dna(src) + drop.basecolor = b_data["blood_color"] + drop.update_icon() return - else if(H.species.flags & NO_BLOOD) - return - else if(istype(source, /datum/reagent)) - bld = source - if(!istype(bld, /datum/reagent/blood)) - var/datum/reagent/R = bld - if(istype(R)) - R.reaction_turf(T, R.volume) - return - else if(source) - log_runtime(EXCEPTION("Non-human or reagent blood source. Area: [get_area(source)], Name: [source]"), source) - - // Are we dripping or splattering? - var/list/drips = list() - // Only a certain number of drips (or one large splatter) can be on a given turf. - for(var/obj/effect/decal/cleanable/blood/drip/drop in T) - drips |= drop.drips - qdel(drop) - if(!large && drips.len < 3) - decal_type = /obj/effect/decal/cleanable/blood/drip // Find a blood decal or create a new one. - B = locate(decal_type) in T + var/obj/effect/decal/cleanable/blood/B = locate() in T if(!B) - B = new decal_type(T) + B = new /obj/effect/decal/cleanable/blood/splatter(T) + B.transfer_mob_blood_dna(src) //give blood info to the blood decal. + if(temp_blood_DNA) + B.blood_DNA |= temp_blood_DNA + B.update_icon() - var/obj/effect/decal/cleanable/blood/drip/drop = B - if(istype(drop) && drips && drips.len && !large) - drop.overlays |= drips - drop.drips |= drips +/mob/living/carbon/human/add_splatter_floor(turf/T, small_drip) + if(!(species && species.flags & NO_BLOOD)) + ..() - // If there's no data to copy, call it quits here. - if(!bld) - return B +/mob/living/carbon/alien/add_splatter_floor(turf/T, small_drip) + if(!T) + T = get_turf(src) + var/obj/effect/decal/cleanable/blood/xeno/B = locate() in T.contents + if(!B) + B = new(T) + B.blood_DNA["UNKNOWN DNA"] = "X*" - // Update appearance. - if(bld.data["blood_colour"]) - B.basecolor = bld.data["blood_colour"] - B.update_icon() - - // Update blood information. - if(bld.data["blood_DNA"]) - B.blood_DNA = list() - if(bld.data["blood_type"]) - B.blood_DNA[bld.data["blood_DNA"]] = bld.data["blood_type"] - else - B.blood_DNA[bld.data["blood_DNA"]] = "O+" - - return B +/mob/living/silicon/robot/add_splatter_floor(turf/T, small_drip) + if(!T) + T = get_turf(src) + var/obj/effect/decal/cleanable/blood/oil/B = locate() in T.contents + if(!B) + B = new(T) \ No newline at end of file diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 572a4112f06..414bdc0e844 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -32,6 +32,7 @@ var/list/organ_cache = list() var/sterile = 0 //can the organ be infected by germs? var/tough = 0 //can organ be easily damaged? + /obj/item/organ/Destroy() processing_objects.Remove(src) if(owner) @@ -316,9 +317,9 @@ var/list/organ_cache = list() loc = get_turf(owner) processing_objects |= src var/datum/reagent/blood/organ_blood - if(reagents) organ_blood = reagents.get_reagent_from_id(owner.get_blood_name()) + if(reagents) organ_blood = reagents.get_reagent_from_id(owner.get_blood_id()) if((!organ_blood || !organ_blood.data["blood_DNA"]) && (owner && !(owner.species.flags & NO_BLOOD))) - owner.vessel.trans_to(src, 5, 1, 1) + owner.transfer_blood_to(src) if(owner && vital && is_primary_organ()) // I'd do another check for species or whatever so that you couldn't "kill" an IPC by removing a human head from them, but it doesn't matter since they'll come right back from the dead if(user) diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index b43b7ad1c64..7ad38b5060d 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -577,9 +577,9 @@ Note that amputating the affected organ does in fact remove the infection from t var/bicardose = owner.reagents.get_reagent_amount("styptic_powder") if(!bicardose) //styptic powder stops internal wounds from growing bigger with time, and also stop bleeding W.open_wound(0.1 * wound_update_accuracy) - owner.vessel.remove_reagent("blood",0.05 * W.damage * wound_update_accuracy) + owner.blood_volume -= (0.05 * W.damage * wound_update_accuracy) - owner.vessel.remove_reagent("blood",0.02 * W.damage * wound_update_accuracy) + owner.blood_volume -= (0.02 * W.damage * wound_update_accuracy) if(prob(1 * wound_update_accuracy)) owner.custom_pain("You feel a stabbing pain in your [name]!",1) @@ -744,7 +744,7 @@ Note that amputating the affected organ does in fact remove the infection from t switch(disintegrate) if(DROPLIMB_SHARP) compile_icon() - add_blood(victim) + add_blood(victim.blood_DNA, victim.species.blood_color) var/matrix/M = matrix() M.Turn(rand(180)) src.transform = M diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 602a6e295d5..e07208cc97d 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -224,10 +224,11 @@ if(world.time > (last_pump + pump_delay)) if(ishuman(owner) && owner.client) //While this entire item exists to make people suffer, they can't control disconnects. var/mob/living/carbon/human/H = owner - H.vessel.remove_reagent("blood", blood_loss) - to_chat(H, "You have to keep pumping your blood!") - if(H.client) - H.client.color = "red" //bloody screen so real + if(!(H.species.flags & NO_BLOOD)) + H.blood_volume = max(H.blood_volume - blood_loss, 0) + to_chat(H, "You have to keep pumping your blood!") + if(H.client) + H.client.color = "red" //bloody screen so real else last_pump = world.time //lets be extra fair *sigh* @@ -256,13 +257,14 @@ var/mob/living/carbon/human/H = owner if(istype(H)) - H.vessel.add_reagent("blood", (cursed_heart.blood_loss*0.5))//gain half the blood back from a failure - if(owner.client) - owner.client.color = "" + if(!(H.species.flags & NO_BLOOD)) + H.blood_volume = min(H.blood_volume + cursed_heart.blood_loss*0.5, BLOOD_VOLUME_MAXIMUM) + if(owner.client) + owner.client.color = "" - H.adjustBruteLoss(-cursed_heart.heal_brute) - H.adjustFireLoss(-cursed_heart.heal_burn) - H.adjustOxyLoss(-cursed_heart.heal_oxy) + H.adjustBruteLoss(-cursed_heart.heal_brute) + H.adjustFireLoss(-cursed_heart.heal_burn) + H.adjustOxyLoss(-cursed_heart.heal_oxy) /obj/item/organ/internal/lungs name = "lungs" @@ -289,7 +291,7 @@ if(is_bruised()) if(prob(2)) owner.custom_emote(1, "coughs up blood!") - owner.drip(10) + owner.bleed(1) if(prob(4)) owner.custom_emote(1, "gasps for air!") owner.AdjustLoseBreath(5) diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index d3f3c2c933b..4bb0f2846c7 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -244,7 +244,7 @@ var/static/regex/multispin_words = regex("like a record baby") //BLEED else if((findtext(message, bleed_words))) for(var/mob/living/carbon/human/H in listeners) - H.drip(100 * power_multiplier) + H.bleed_rate += (5 * power_multiplier) next_command = world.time + cooldown_damage //FIRE diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi index 28e2fd791ff0ec32c709d040728dbe8cfe4e8962..855c443a2031363d2581ca051902f3fba95f42c7 100644 GIT binary patch literal 97368 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�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 literal 87234 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 F(++{jM&keg