From 1cdd5f011f8225a6549db943c86a4ce37e9fcef4 Mon Sep 17 00:00:00 2001 From: paprka Date: Tue, 20 Jan 2015 19:17:59 -0800 Subject: [PATCH 01/22] blood for the blood god --- .../effects/decals/Cleanable/humans.dm | 11 +- code/modules/mob/living/carbon/human/blood.dm | 310 ++++++++++++++++++ code/modules/mob/living/carbon/human/human.dm | 2 + .../mob/living/carbon/human/human_defines.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 3 + code/modules/reagents/Chemistry-Holder.dm | 40 ++- .../Chemistry-Reagents/Chemistry-Reagents.dm | 1 - .../reagents/reagent_containers/blood_pack.dm | 48 +++ .../reagents/reagent_containers/syringes.dm | 60 +--- tgstation.dme | 1 + 10 files changed, 431 insertions(+), 47 deletions(-) create mode 100644 code/modules/mob/living/carbon/human/blood.dm create mode 100644 code/modules/reagents/reagent_containers/blood_pack.dm diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index f3817b101fc..d8b7892af48 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -91,6 +91,13 @@ var/datum/disease/ND = D.Copy(1) b.viruses += ND ND.holder = b - if (step_to(src, get_step(src, direction), 0)) - break \ No newline at end of file + break + +/obj/effect/decal/cleanable/blood/drip + name = "drips of blood" + desc = "It's red." + gender = PLURAL + icon = 'icons/effects/drip.dmi' + icon_state = "1" + random_icon_states = list("1","2","3","4","5") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm new file mode 100644 index 00000000000..7f554f0964d --- /dev/null +++ b/code/modules/mob/living/carbon/human/blood.dm @@ -0,0 +1,310 @@ +/**************************************************** + BLOOD SYSTEM +****************************************************/ +//Blood levels +var/const/BLOOD_VOLUME_SAFE = 501 +var/const/BLOOD_VOLUME_OKAY = 336 +var/const/BLOOD_VOLUME_BAD = 224 +var/const/BLOOD_VOLUME_SURVIVE = 122 + +/mob/living/carbon/human/var/datum/reagents/vessel //Container for blood and BLOOD ONLY. Do not transfer other chems here. +/mob/living/carbon/human/var/var/pale = 0 //Should affect how mob sprite is drawn, but currently doesn't. + +//Initializes blood vessels +/mob/living/carbon/human/proc/make_blood() + + if(vessel) + return + + vessel = new/datum/reagents(600) + vessel.my_atom = src + + if(NOBLOOD in dna.species.specflags) + return + + vessel.add_reagent("blood",560) + spawn(1) + fixblood() + +//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_type"=dna.blood_type,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) + +// Takes care blood loss and regeneration +/mob/living/carbon/human/proc/handle_blood() + + if(NOBLOOD in dna.species.specflags) + return + + if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood. + + var/blood_volume = round(vessel.get_reagent_amount("blood")) + + //Blood regeneration if there is some space + if(blood_volume < 560 && 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(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 + + B.volume += 0.1 // regenerate blood VERY slowly + if (reagents.has_reagent("nutriment")) //Getting food speeds it up + B.volume += 0.4 + reagents.remove_reagent("nutriment", 0.1) + if (reagents.has_reagent("iron")) //Hematogen candy anyone? + B.volume += 0.8 + reagents.remove_reagent("iron", 0.1) + + //Effects of bloodloss + switch(blood_volume) + if(BLOOD_VOLUME_SAFE to 10000) + if(pale) + pale = 0 + update_body() + if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) + if(!pale) + pale = 1 + update_body() + var/word = pick("dizzy","woosey","faint") + src << "\red You feel [word]" + if(prob(1)) + var/word = pick("dizzy","woosey","faint") + src << "\red You feel [word]" + if(oxyloss < 20) + oxyloss += 3 + if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) + if(!pale) + pale = 1 + update_body() + eye_blurry += 6 + if(oxyloss < 50) + oxyloss += 10 + oxyloss += 1 + if(prob(5)) + Paralyse(rand(1,3)) + var/word = pick("dizzy","woosey","faint") + src << "\red You feel extremely [word]" + if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) + oxyloss += 5 + if(prob(15)) + var/word = pick("dizzy","woosey","faint") + src << "\red You feel extremely [word]" + if(0 to BLOOD_VOLUME_SURVIVE) + // There currently is a strange bug here. If the mob is not below -100 health + // when death() is called, apparently they will be just fine, and this way it'll + // spam deathgasp. Adjusting toxloss ensures the mob will stay dead. + death() + + //Bleeding out + var/blood_max = 0 + for(var/obj/item/organ/limb/org in organs) + var/brutedamage = org.brute_dam + + if(brutedamage > 40) + blood_max += 0.5 + if(brutedamage > 60) + blood_max += 1 + if(brutedamage > 80) + blood_max += 2 + + drip(blood_max) + +//Makes a blood drop, leaking amt units of blood from the mob +/mob/living/carbon/human/proc/drip(var/amt as num) + + if(NOBLOOD in dna.species.specflags) + return + + if(!amt) + return + + vessel.remove_reagent("blood",amt) + blood_splatter(src,src) + +/**************************************************** + 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(!B) B = new /datum/reagent/blood + B.holder = container + B.volume += amount + + //set reagent data + B.data["donor"] = src + + /* + if(T.virus && T.virus.spread_type != SPECIAL) + B.data["virus"] = new T.virus.type(0) + */ + + for(var/datum/disease/D in src.viruses) + if(!B.data["viruses"]) + B.data["viruses"] = list() + + B.data["viruses"] += new D.type(0, D, 1) + + B.data["blood_DNA"] = copytext(src.dna.unique_enzymes,1,0) + if(src.resistances&&src.resistances.len) + B.data["resistances"] = src.resistances.Copy() + var/list/temp_chem = list() + for(var/datum/reagent/R in src.reagents.reagent_list) + temp_chem += R.name + temp_chem[R.name] = R.volume + B.data["trace_chem"] = list2params(temp_chem) + if(mind) + B.data["mind"] = src.mind + if(ckey) + B.data["ckey"] = src.ckey + if(!suiciding) + B.data["cloneable"] = 1 + B.data["blood_type"] = copytext(src.dna.blood_type,1,0) + B.data["gender"] = src.gender + B.data["real_name"] = src.real_name + B.data["factions"] = src.faction + return B + +//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(NOBLOOD in dna.species.specflags) + return null + + if(vessel.get_reagent_amount("blood") < amount) + return null + + . = ..() + vessel.remove_reagent("blood",amount) // Removes blood if human + +//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) + + if(NOBLOOD in dna.species.specflags) + reagents.add_reagent("blood", amount, injected.data) + reagents.update_total() + return + + if(!injected) + return + + var/list/chems = list() + chems = params2list(injected.data["trace_chem"]) + for(var/C in chems) + src.reagents.add_reagent(C, (text2num(chems[C]) / 560) * 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) + + var/datum/reagent/blood/our = get_blood(vessel) + + if (!injected || !our) + return + if(blood_incompatible(injected.data["blood_type"],our.data["blood_type"],injected.data["species"],our.data["species"]) ) + 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/proc/blood_incompatible(donor,receiver,donor_species,receiver_species) + if(!donor || !receiver) return 0 + + if(donor_species && receiver_species) + if(donor_species != receiver_species) + return 1 + + var/donor_antigen = copytext(donor,1,lentext(donor)) + var/receiver_antigen = copytext(receiver,1,lentext(receiver)) + var/donor_rh = (findtext(donor,"+")>0) + var/receiver_rh = (findtext(receiver,"+")>0) + + 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 + +/mob/living/carbon/proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large) + + var/obj/effect/decal/cleanable/blood/B + var/decal_type = /obj/effect/decal/cleanable/blood/splatter + var/turf/T = get_turf(target) + + if(istype(source,/mob/living/carbon/human)) + var/mob/living/carbon/human/M = source + source = M.get_blood(M.vessel) + else if(istype(source,/mob/living/carbon/monkey)) + var/mob/living/carbon/monkey/donor = source + if(donor.dna) + source = new() + source.data["blood_DNA"] = donor.dna.unique_enzymes + source.data["blood_type"] = donor.dna.blood_type + + // Are we dripping or splattering? + if(!large) + + // Only a certain number of drips can be on a given turf. + var/list/drips = list() + var/list/drip_icons = list("1","2","3","4","5") + + for(var/obj/effect/decal/cleanable/blood/drip/drop in T) + drips += drop + drip_icons.Remove(drop.icon_state) + + // If we have too many drips, remove them and spawn a proper blood splatter. + if(drips.len >= 5) + //TODO: copy all virus data from drips to new splatter? + for(var/obj/effect/decal/cleanable/blood/drip/drop in drips) + del drop + else + decal_type = /obj/effect/decal/cleanable/blood/drip + + // Find a blood decal or create a new one. + B = locate(decal_type) in T + if(!B) + B = new decal_type(T) + + // If there's no data to copy, call it quits here. + if(!source) + return B + + // Update blood information. + if(source.data["blood_DNA"]) + B.blood_DNA = list() + if(source.data["blood_type"]) + B.blood_DNA[source.data["blood_DNA"]] = source.data["blood_type"] + else + B.blood_DNA[source.data["blood_DNA"]] = "O+" + + return B \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 068333c71a1..9549db4a779 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -26,6 +26,8 @@ internal_organs += new /obj/item/organ/heart internal_organs += new /obj/item/organ/brain + make_blood() + // for spawned humans; overwritten by other code ready_dna(src) randomize_human(src) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index de9f0ea57c0..52ac1a6c0db 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -17,7 +17,7 @@ var/lip_style = null //no lipstick by default- arguably misleading, as it could be used for general makeup var/age = 30 //Player's age (pure fluff) - var/blood_type = "A+" //Player's bloodtype (Not currently used, just character fluff) + var/blood_type = "A+" //Player's bloodtype var/underwear = "Nude" //Which underwear the player wants var/undershirt = "Nude" //Which undershirt the player wants diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 4b8964e6f20..a6477d24f93 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -84,6 +84,9 @@ //Disabilities handle_disabilities() + //Blud + handle_blood() + //Random events (vomiting etc) handle_random_events() diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 17e51b1f63d..ab071558348 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -107,9 +107,15 @@ datum/reagents/proc/trans_to(var/obj/target, var/amount=1, var/multiplier=1, var var/part = amount / src.total_volume var/trans_data = null for (var/datum/reagent/current_reagent in src.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 = current_reagent.data + trans_data = copy_data(current_reagent) R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data) src.remove_reagent(current_reagent.id, current_reagent_transfer) @@ -523,6 +529,38 @@ datum/reagents/proc/delete() if(my_atom) my_atom.reagents = null + //two helper functions to preserve data across reactions (needed for xenoarch) +datum/reagents/proc/get_data(var/reagent_id) + for(var/datum/reagent/D in reagent_list) + if(D.id == reagent_id) + //world << "proffering a data-carrying reagent ([reagent_id])" + return D.data + +datum/reagents/proc/set_data(var/reagent_id, var/new_data) + for(var/datum/reagent/D in reagent_list) + if(D.id == reagent_id) + //world << "reagent data set ([reagent_id])" + D.data = new_data + +datum/reagents/proc/copy_data(var/datum/reagent/current_reagent) + if (!current_reagent || !current_reagent.data) return null + if (!istype(current_reagent.data, /list)) return current_reagent.data + + var/list/trans_data = current_reagent.data.Copy() + + // We do this so that introducing a virus to a blood sample + // doesn't automagically infect all other blood samples from + // the same donor. + // + // Technically we should probably copy all data lists, but + // that could possibly eat up a lot of memory needlessly + // if most data lists are read-only. + if (trans_data["viruses"]) + var/list/v = trans_data["viruses"] + trans_data["viruses"] = v.Copy() + + return trans_data + /////////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm index 1f1c086844e..b0c5efc3804 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm @@ -166,7 +166,6 @@ datum/reagent/blood/on_merge(var/list/data) src.data["viruses"] = preserve return 1 - datum/reagent/blood/reaction_turf(var/turf/simulated/T, var/volume)//splash the blood all over the place if(!istype(T)) return var/datum/reagent/blood/self = src diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm new file mode 100644 index 00000000000..c091f1db8e1 --- /dev/null +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -0,0 +1,48 @@ +/obj/item/weapon/reagent_containers/blood + name = "BloodPack" + desc = "Contains blood used for transfusion." + icon = 'icons/obj/bloodpack.dmi' + icon_state = "empty" + volume = 200 + + var/blood_type = null + + New() + ..() + if(blood_type != null) + name = "BloodPack [blood_type]" + reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) + update_icon() + + on_reagent_change() + update_icon() + + update_icon() + var/percent = round((reagents.total_volume / volume) * 100) + switch(percent) + if(0 to 9) icon_state = "empty" + if(10 to 50) icon_state = "half" + if(51 to INFINITY) icon_state = "full" + +/obj/item/weapon/reagent_containers/blood/APlus + blood_type = "A+" + +/obj/item/weapon/reagent_containers/blood/AMinus + blood_type = "A-" + +/obj/item/weapon/reagent_containers/blood/BPlus + blood_type = "B+" + +/obj/item/weapon/reagent_containers/blood/BMinus + blood_type = "B-" + +/obj/item/weapon/reagent_containers/blood/OPlus + blood_type = "O+" + +/obj/item/weapon/reagent_containers/blood/OMinus + blood_type = "O-" + +/obj/item/weapon/reagent_containers/blood/empty + name = "Empty BloodPack" + desc = "Seems pretty useless... Maybe if there were a way to fill it?" + icon_state = "empty" \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 55809262260..496f759c092 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -74,11 +74,10 @@ 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/amount = src.reagents.maximum_volume - src.reagents.total_volume var/mob/living/carbon/T = target - var/datum/reagent/B = new /datum/reagent/blood if(!check_dna_integrity(T)) user << "You are unable to locate any blood." return - if(NOCLONE in T.mutations) //target done been et, no more blood in him + if(NOCLONE in T.mutations) //target done been eat, no more blood in him user << "You are unable to locate any blood." return if(target != user) @@ -89,46 +88,14 @@ busy = 0 return busy = 0 - B.holder = src - B.volume = amount - //set reagent data - B.data["donor"] = T + var/datum/reagent/B + B = T.take_blood(src,amount) - /* - if(T.virus && T.virus.spread_type != SPECIAL) - B.data["virus"] = new T.virus.type(0) - */ - - for(var/datum/disease/D in T.viruses) - if(!B.data["viruses"]) - B.data["viruses"] = list() - - B.data["viruses"] += new D.type(0, D, 1) - - B.data["blood_DNA"] = copytext(T.dna.unique_enzymes,1,0) - if(T.resistances&&T.resistances.len) - B.data["resistances"] = T.resistances.Copy() - if(istype(target, /mob/living/carbon/human))//I wish there was some hasproperty operation... - var/mob/living/carbon/human/HT = target - B.data["blood_type"] = copytext(HT.dna.blood_type,1,0) - var/list/temp_chem = list() - for(var/datum/reagent/R in target.reagents.reagent_list) - temp_chem += R.name - temp_chem[R.name] = R.volume - B.data["trace_chem"] = list2params(temp_chem) - if(T.mind) - B.data["mind"] = T.mind - if(T.ckey) - B.data["ckey"] = T.ckey - if(!T.suiciding) - B.data["cloneable"] = 1 - B.data["gender"] = T.gender - B.data["real_name"] = T.real_name - B.data["factions"] = T.faction - reagents.reagent_list += B - reagents.update_total() - on_reagent_change() - reagents.handle_reactions() + if (B) + src.reagents.reagent_list += B + src.reagents.update_total() + src.on_reagent_change() + src.reagents.handle_reactions() user.visible_message("[user] takes a blood sample from [target].") else //if not mob @@ -188,7 +155,16 @@ reagents.reaction(target, INGEST) spawn(5) target.add_fingerprint(user) - var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) + var/datum/reagent/blood/B + for(var/datum/reagent/blood/d in src.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) + else + trans = src.reagents.trans_to(target, amount_per_transfer_from_this) user << "You inject [trans] unit\s of the solution. [src] now contains [reagents.total_volume] unit\s." if(reagents.total_volume <= 0 && mode == SYRINGE_INJECT) mode = SYRINGE_DRAW diff --git a/tgstation.dme b/tgstation.dme index 45986d097b7..84a80ac8482 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1072,6 +1072,7 @@ #include "code\modules\mob\living\carbon\brain\life.dm" #include "code\modules\mob\living\carbon\brain\MMI.dm" #include "code\modules\mob\living\carbon\brain\say.dm" +#include "code\modules\mob\living\carbon\human\blood.dm" #include "code\modules\mob\living\carbon\human\death.dm" #include "code\modules\mob\living\carbon\human\emote.dm" #include "code\modules\mob\living\carbon\human\examine.dm" From 39d5fa01d8840ff14b707b34b852b42c88929255 Mon Sep 17 00:00:00 2001 From: paprka Date: Wed, 21 Jan 2015 15:06:21 -0800 Subject: [PATCH 02/22] update, gauze, etc --- code/game/objects/items/stacks/medical.dm | 44 ++++++++++++------ .../objects/items/weapons/storage/firstaid.dm | 31 ++++++------ code/modules/mob/living/carbon/human/blood.dm | 40 ++++++++-------- .../mob/living/carbon/human/examine.dm | 8 ++++ code/modules/mob/living/carbon/human/human.dm | 4 +- .../mob/living/carbon/human/human_defines.dm | 3 ++ .../mob/living/carbon/human/species_types.dm | 7 ++- code/modules/reagents/Chemistry-Holder.dm | 2 - .../reagents/reagent_containers/blood_pack.dm | 26 +++++------ icons/obj/bloodpack.dmi | Bin 0 -> 1072 bytes icons/obj/items.dmi | Bin 62469 -> 63407 bytes tgstation.dme | 1 + 12 files changed, 101 insertions(+), 65 deletions(-) create mode 100644 icons/obj/bloodpack.dmi diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 74ee638df91..a1490448880 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -9,6 +9,8 @@ throw_range = 7 var/heal_brute = 0 var/heal_burn = 0 + var/stop_bleeding = 0 + var/self_delay = 50 /obj/item/stack/medical/attack(mob/living/carbon/M as mob, mob/user as mob) @@ -29,31 +31,34 @@ user << "You don't have the dexterity to do this!" return 1 - if (user) + if(isliving(M)) + if(!M.can_inject(user, 1)) + return + + if(user) if (M != user) - user.visible_message( \ - "[user] has applied [src] on [M].", \ - "You apply \the [src] to [M]." \ - ) + user.visible_message("[user] applies the [src] on [M].", "You apply the [src] on [M].") else var/t_himself = "itself" if (user.gender == MALE) t_himself = "himself" else if (user.gender == FEMALE) t_himself = "herself" + user.visible_message("[user] starts to apply the [src] on [t_himself]...", "You begin applying the [src] on yourself...") + if(!do_mob(user, M, self_delay)) return + user.visible_message("[user] applies the [src] on [t_himself].", "You apply the [src] on yourself.") - user.visible_message( \ - "[M] applied [src] on [t_himself].", \ - "You apply \the [src] on yourself." \ - ) - - if (istype(M, /mob/living/carbon/human)) + if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M var/obj/item/organ/limb/affecting = H.get_organ(check_zone(user.zone_sel.selecting)) + if(stop_bleeding) + if(H.bleedsuppress) //so you can't stack bleed suppression + H.suppress_bloodloss(stop_bleeding) + if(affecting.status == ORGAN_ORGANIC) //Limb must be organic to be healed - RR - if (affecting.heal_damage(src.heal_brute, src.heal_burn, 0)) + if(affecting.heal_damage(src.heal_brute, src.heal_burn, 0)) H.update_damage_overlays(0) M.updatehealth() @@ -72,9 +77,22 @@ singular_name = "bruise pack" desc = "A pack designed to treat blunt-force trauma." icon_state = "brutepack" - heal_brute = 60 + heal_brute = 40 origin_tech = "biotech=1" +/obj/item/stack/medical/gauze + name = "medical gauze" + desc = "A roll of elastic cloth that is extremely effective at stopping bloodloss, but does not heal wounds." + singular_name = "medical gauze" + icon_state = "gauze" + stop_bleeding = 3000 //five minutes + +/obj/item/stack/medical/gauze/improvised + name = "improvised gauze" + singular_name = "improvised gauze" + desc = "A roll of cloth roughly cut from something that can stop bloodloss, but does not heal wounds." + stop_bleeding = 1200 //two minutes + /obj/item/stack/medical/ointment name = "ointment" desc = "Used to treat those nasty burns." diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 063b565b512..04d16afc073 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -31,8 +31,8 @@ new /obj/item/device/healthanalyzer(src) new /obj/item/weapon/reagent_containers/hypospray/medipen(src) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) + new /obj/item/stack/medical/ointment(src) + new /obj/item/stack/medical/ointment(src) new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) @@ -45,11 +45,11 @@ /obj/item/weapon/storage/firstaid/regular/New() ..() if (empty) return - new /obj/item/weapon/reagent_containers/pill/patch/styptic(src) - new /obj/item/weapon/reagent_containers/pill/patch/styptic(src) - new /obj/item/weapon/reagent_containers/pill/patch/styptic(src) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) + new /obj/item/stack/medical/gauze(src) + new /obj/item/stack/medical/ointment(src) + new /obj/item/stack/medical/ointment(src) + new /obj/item/stack/medical/bruise_pack(src) + new /obj/item/stack/medical/bruise_pack(src) new /obj/item/device/healthanalyzer(src) new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) return @@ -102,13 +102,16 @@ /obj/item/weapon/storage/firstaid/tactical/New() ..() if (empty) return - new /obj/item/clothing/tie/stethoscope( src ) - new /obj/item/weapon/surgicaldrill ( src ) - new /obj/item/weapon/reagent_containers/hypospray/combat( src ) - new /obj/item/weapon/reagent_containers/pill/patch/styptic( src ) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src ) - new /obj/item/weapon/reagent_containers/syringe/lethal/choral( src ) - new /obj/item/clothing/glasses/hud/health/night( src ) + new /obj/item/stack/medical/gauze(src) + new /obj/item/stack/medical/gauze(src) + new /obj/item/stack/medical/ointment(src) + new /obj/item/stack/medical/bruise_pack(src) + new /obj/item/stack/medical/bruise_pack(src) + new /obj/item/device/healthanalyzer(src) + new /obj/item/weapon/surgicaldrill(src) + new /obj/item/weapon/reagent_containers/hypospray/combat(src) + new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) + new /obj/item/clothing/glasses/hud/health/night(src) return diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm index 7f554f0964d..40cf7d1a2ce 100644 --- a/code/modules/mob/living/carbon/human/blood.dm +++ b/code/modules/mob/living/carbon/human/blood.dm @@ -32,6 +32,16 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 if(B.id == "blood") B.data = list("donor"=src,"viruses"=null,"blood_DNA"=dna.unique_enzymes,"blood_type"=dna.blood_type,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) +/mob/living/carbon/human/proc/suppress_bloodloss(var/amount) + if(bleedsuppress) + return + else + bleedsuppress = 1 + spawn(amount) + bleedsuppress = 0 + if(stat != DEAD) + src << "Your bandage wears off." + // Takes care blood loss and regeneration /mob/living/carbon/human/proc/handle_blood() @@ -70,38 +80,32 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 if(!pale) pale = 1 update_body() - var/word = pick("dizzy","woosey","faint") - src << "\red You feel [word]" - if(prob(1)) - var/word = pick("dizzy","woosey","faint") - src << "\red You feel [word]" + var/word = pick("dizzy","woozy","faint") + src << "You feel [word]." if(oxyloss < 20) oxyloss += 3 if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) if(!pale) pale = 1 update_body() - eye_blurry += 6 if(oxyloss < 50) oxyloss += 10 oxyloss += 1 if(prob(5)) - Paralyse(rand(1,3)) - var/word = pick("dizzy","woosey","faint") - src << "\red You feel extremely [word]" + eye_blurry += 6 + var/word = pick("dizzy","woozy","faint") + src << "You feel very [word]." if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) oxyloss += 5 if(prob(15)) - var/word = pick("dizzy","woosey","faint") - src << "\red You feel extremely [word]" + Paralyse(rand(1,3)) + var/word = pick("dizzy","woozy","faint") + src << "You feel extremely [word]." if(0 to BLOOD_VOLUME_SURVIVE) - // There currently is a strange bug here. If the mob is not below -100 health - // when death() is called, apparently they will be just fine, and this way it'll - // spam deathgasp. Adjusting toxloss ensures the mob will stay dead. death() //Bleeding out - var/blood_max = 0 + blood_max = 0 for(var/obj/item/organ/limb/org in organs) var/brutedamage = org.brute_dam @@ -111,15 +115,13 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 blood_max += 1 if(brutedamage > 80) blood_max += 2 - + if(bleedsuppress) + blood_max = 0 drip(blood_max) //Makes a blood drop, leaking amt units of blood from the mob /mob/living/carbon/human/proc/drip(var/amt as num) - if(NOBLOOD in dna.species.specflags) - return - if(!amt) return diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 8d0aeed8e5c..79bda25cad5 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -230,6 +230,14 @@ else msg += "[t_He] [t_is] quite chubby.\n" + if(pale) + msg += "[t_He] [t_has] pale skin.\n" + + if(bleedsuppress) + msg += "[t_He] [t_is] bandaged with something.\n" + else if(blood_max) + msg += "[t_He] [t_is] bleeding!\n" + msg += "" if(!appears_dead) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 9549db4a779..d9d22804723 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -26,12 +26,12 @@ internal_organs += new /obj/item/organ/heart internal_organs += new /obj/item/organ/brain - make_blood() - // for spawned humans; overwritten by other code ready_dna(src) randomize_human(src) + make_blood() + ..() var/mob/M = src faction |= "\ref[M]" diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 52ac1a6c0db..6bd44a4115d 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -49,3 +49,6 @@ var/xylophone = 0 //For the spoooooooky xylophone cooldown var/gender_ambiguous = 0 //if something goes wrong during gender reassignment this generates a line in examine + + var/blood_max = 0 //how much are we bleeding + var/bleedsuppress = 0 //for stopping bloodloss, eventually this will be limb-based like bleeding \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm index 719aa2cda70..15c107c539b 100644 --- a/code/modules/mob/living/carbon/human/species_types.dm +++ b/code/modules/mob/living/carbon/human/species_types.dm @@ -127,6 +127,7 @@ sexes = 0 ignored_by = list(/mob/living/simple_animal/hostile/faithless) meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/shadow + specflags = list(NOBREATH,NOBLOOD,RADIMMUNE) /datum/species/shadow/spec_life(mob/living/carbon/human/H) var/light_amount = 0 @@ -152,7 +153,7 @@ default_color = "00FFFF" darksight = 3 invis_sight = SEE_INVISIBLE_LEVEL_ONE - specflags = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR) + specflags = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD) hair_color = "mutcolor" hair_alpha = 150 ignored_by = list(/mob/living/carbon/slime) @@ -169,7 +170,7 @@ default_color = "00FF90" say_mod = "chirps" eyes = "jelleyes" - specflags = list(MUTCOLORS,EYECOLOR) + specflags = list(MUTCOLORS,EYECOLOR,NOBLOOD) meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/slime /* @@ -228,6 +229,7 @@ id = "skeleton" sexes = 0 meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/skeleton + specflags = list(NOBREATH,HEATRES,COLDRES,NOBLOOD,RADIMMUNE) /* ZOMBIES */ @@ -239,6 +241,7 @@ say_mod = "moans" sexes = 0 meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/zombie + specflags = list(NOBREATH,HEATRES,COLDRES,NOBLOOD,RADIMMUNE) /datum/species/zombie/handle_speech(message) var/list/message_list = text2list(message, " ") diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index ab071558348..c1ab1df890d 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -107,8 +107,6 @@ datum/reagents/proc/trans_to(var/obj/target, var/amount=1, var/multiplier=1, var var/part = amount / src.total_volume var/trans_data = null for (var/datum/reagent/current_reagent in src.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) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index c091f1db8e1..28307d0a058 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -7,22 +7,22 @@ var/blood_type = null - New() - ..() - if(blood_type != null) - name = "BloodPack [blood_type]" - reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) - update_icon() - - on_reagent_change() +/obj/item/weapon/reagent_containers/blood/New() + ..() + if(blood_type != null) + name = "BloodPack [blood_type]" + reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) update_icon() +/obj/item/weapon/reagent_containers/blood/on_reagent_change() update_icon() - var/percent = round((reagents.total_volume / volume) * 100) - switch(percent) - if(0 to 9) icon_state = "empty" - if(10 to 50) icon_state = "half" - if(51 to INFINITY) icon_state = "full" + +/obj/item/weapon/reagent_containers/blood/update_icon() + var/percent = round((reagents.total_volume / volume) * 100) + switch(percent) + if(0 to 9) icon_state = "empty" + if(10 to 50) icon_state = "half" + if(51 to INFINITY) icon_state = "full" /obj/item/weapon/reagent_containers/blood/APlus blood_type = "A+" diff --git a/icons/obj/bloodpack.dmi b/icons/obj/bloodpack.dmi new file mode 100644 index 0000000000000000000000000000000000000000..afd95f6dba5b7505ee3266fdfbb8f46bc670a06f GIT binary patch literal 1072 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 Date: Wed, 21 Jan 2015 16:00:57 -0800 Subject: [PATCH 03/22] adds IV drips --- code/game/machinery/iv_drip.dm | 164 ++++++++++++++++++++ code/game/objects/items/devices/scanners.dm | 18 ++- code/game/objects/items/stacks/medical.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 2 + icons/obj/iv_drip.dmi | Bin 0 -> 881 bytes tgstation.dme | 1 + 6 files changed, 185 insertions(+), 2 deletions(-) create mode 100644 code/game/machinery/iv_drip.dm create mode 100644 icons/obj/iv_drip.dmi diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm new file mode 100644 index 00000000000..38e6c24de13 --- /dev/null +++ b/code/game/machinery/iv_drip.dm @@ -0,0 +1,164 @@ +/obj/machinery/iv_drip + name = "\improper IV drip" + icon = 'icons/obj/iv_drip.dmi' + anchored = 0 + density = 1 + + +/obj/machinery/iv_drip/var/mob/living/carbon/human/attached = null +/obj/machinery/iv_drip/var/mode = 1 // 1 is injecting, 0 is taking blood. +/obj/machinery/iv_drip/var/obj/item/weapon/reagent_containers/beaker = null + +/obj/machinery/iv_drip/update_icon() + if(src.attached) + icon_state = "hooked" + else + icon_state = "" + + overlays = null + + if(beaker) + var/datum/reagents/reagents = beaker.reagents + if(reagents.total_volume) + var/image/filling = image('icons/obj/iv_drip.dmi', src, "reagent") + + var/percent = round((reagents.total_volume / beaker.volume) * 100) + switch(percent) + if(0 to 9) filling.icon_state = "reagent0" + if(10 to 24) filling.icon_state = "reagent10" + if(25 to 49) filling.icon_state = "reagent25" + if(50 to 74) filling.icon_state = "reagent50" + if(75 to 79) filling.icon_state = "reagent75" + if(80 to 90) filling.icon_state = "reagent80" + if(91 to INFINITY) filling.icon_state = "reagent100" + + filling.icon += mix_color_from_reagents(reagents.reagent_list) + overlays += filling + +/obj/machinery/iv_drip/MouseDrop(over_object, src_location, over_location) + ..() + + if(attached) + visible_message("[src.attached] is detached from \the [src]") + src.attached = null + src.update_icon() + return + + if(in_range(src, usr) && ishuman(over_object) && get_dist(over_object, src) <= 1) + visible_message("[usr] attaches \the [src] to \the [over_object].") + src.attached = over_object + src.update_icon() + + +/obj/machinery/iv_drip/attackby(obj/item/weapon/W as obj, mob/user as mob) + if (istype(W, /obj/item/weapon/reagent_containers)) + if(!isnull(src.beaker)) + user << "There is already a reagent container loaded!" + return + + user.drop_item() + W.loc = src + src.beaker = W + user << "You attach \the [W] to \the [src]." + src.update_icon() + return + else + return ..() + + +/obj/machinery/iv_drip/process() + set background = 1 + + if(src.attached) + + if(!(get_dist(src, src.attached) <= 1 && isturf(src.attached.loc))) + attached.visible_message("The needle is ripped out of you, doesn't that hurt?") + src.attached:apply_damage(3, BRUTE, pick("r_arm", "l_arm")) + src.attached = null + src.update_icon() + return + + if(src.attached && src.beaker) + // Give blood + if(mode) + if(src.beaker.volume > 0) + var/transfer_amount = REAGENTS_METABOLISM + if(istype(src.beaker, /obj/item/weapon/reagent_containers/blood)) + // speed up transfer on blood packs + transfer_amount = 4 + src.beaker.reagents.trans_to(src.attached, transfer_amount) + update_icon() + + // Take blood + else + var/amount = beaker.reagents.maximum_volume - beaker.reagents.total_volume + amount = min(amount, 4) + // If the beaker is full, ping + if(amount == 0) + if(prob(5)) visible_message("\The [src] pings.") + return + + var/mob/living/carbon/human/T = attached + + if(!istype(T)) return + if(!T.dna) + return + if(NOCLONE in T.mutations) + return + + if(NOBLOOD in T.dna.species.specflags) + return + + // If the human is losing too much blood, beep. + if(T.vessel.get_reagent_amount("blood") < BLOOD_VOLUME_SAFE) if(prob(5)) + visible_message("\The [src] beeps loudly.") + playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1) + 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() + +/obj/machinery/iv_drip/attack_hand(mob/user as mob) + if(src.beaker) + src.beaker.loc = get_turf(src) + src.beaker = null + update_icon() + else + toggle_mode() + + +/obj/machinery/iv_drip/verb/toggle_mode() + set category = "Object" + set name = "Toggle Mode" + set src in view(1) + + if(!istype(usr, /mob/living)) + usr << "\red You can't do that." + return + + if(usr.stat) + return + + mode = !mode + usr << "The IV drip is now [mode ? "injecting" : "taking blood"]." + +/obj/machinery/iv_drip/examine() + set src in view() + ..() + if (!(usr in view(2)) && usr!=src.loc) return + + usr << "The IV drip is [mode ? "injecting" : "taking blood"]." + + if(beaker) + if(beaker.reagents && beaker.reagents.reagent_list.len) + usr << "\blue Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid." + else + usr << "\blue Attached is an empty [beaker]." + else + usr << "\blue No chemicals are attached." + + usr << "\blue [attached ? attached : "No one"] is attached." \ No newline at end of file diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 1c665893f85..c84d0078f14 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -139,7 +139,7 @@ MASS SPECTROMETER // Damage descriptions - user.show_message(text("[] | [] | [] | []", oxy_loss > 50 ? " Severe oxygen deprivation detected" : "Subject bloodstream oxygen level normal", tox_loss > 50 ? " Dangerous amount of toxins detected" : "Subject bloodstream toxin level minimal", fire_loss > 50 ? " Severe burn damage detected" : "Subject burn injury status O.K", brute_loss > 50 ? " Severe anatomical damage detected" : "Subject brute-force injury status O.K"), 1) + user.show_message(text("[] | [] | [] | []", oxy_loss > 50 ? " Severe oxygen deprivation detected" : "Subject bloodstream oxygen level normal", tox_loss > 50 ? " Dangerous amount of toxins detected" : "Subject bloodstream toxin level minimal", fire_loss > 50 ? " Severe burn damage detected" : "Subject burn injury status O.K", brute_loss > 50 ? " Severe tissue damage detected" : "Subject brute-force injury status O.K"), 1) if(M.getStaminaLoss()) user.show_message("Subject appears to be suffering from fatigue.", 1) @@ -160,6 +160,22 @@ MASS SPECTROMETER else if (M.getBrainLoss() >= 10) user.show_message("Significant brain damage detected. Subject may have had a concussion.", 1) + // Blood Level + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H:vessel) + var/blood_volume = round(H:vessel.get_reagent_amount("blood")) + var/blood_percent = blood_volume / 560 + var/blood_type = H.dna.blood_type + blood_percent *= 100 + if(blood_volume <= 500 && blood_volume > 336) + user.show_message("Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]") + else if(blood_volume <= 336) + user.show_message("Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl. Type: [blood_type]") + else + user.show_message("Blood Level Normal: [blood_percent]% [blood_volume]cl. Type: [blood_type]") + + /obj/item/device/healthanalyzer/verb/toggle_mode() set name = "Switch Verbosity" set category = "Object" diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index a1490448880..32b3f83ca56 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -54,7 +54,7 @@ var/obj/item/organ/limb/affecting = H.get_organ(check_zone(user.zone_sel.selecting)) if(stop_bleeding) - if(H.bleedsuppress) //so you can't stack bleed suppression + if(!H.bleedsuppress) //so you can't stack bleed suppression H.suppress_bloodloss(stop_bleeding) if(affecting.status == ORGAN_ORGANIC) //Limb must be organic to be healed - RR diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 3ed06021ef6..4d68abbf598 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -168,6 +168,8 @@ if(status == "") status = "OK" src << "\t [status == "OK" ? "\blue" : "\red"] My [org.getDisplayName()] is [status]." + if(H.blood_max) + src << "You are bleeding!" if(staminaloss) if(staminaloss > 30) src << "You're completely exhausted." diff --git a/icons/obj/iv_drip.dmi b/icons/obj/iv_drip.dmi new file mode 100644 index 0000000000000000000000000000000000000000..9adc8ec4cb5d82cef2b0c7645e0527c3dedb1084 GIT binary patch literal 881 zcmeAS@N?(olHy`uVBq!ia0vp^4M3d0!3HF+R#kZdsd-f)5hX6E#mPmP1tppJc?=8{ zb9&Eg5iG4 zUow7hYaZXy)O6Xg;9K81mVkmc7TglG8n;g#6=Pxb^~iL)UhqsQH9*0#dP41^ZS`;Z z%G{!KDyKNT`4sDrVY_bWvad_0XH~w-PL03&X4ULXyMBsqGw_iD8q5CYe2eO&oL%o2 z7?}DzT^vIy=DfYL(f6=}L|dZt#obBl{0%Ozzi7UQJY1WyG?mw^;5-x01kQ{VHjSDA zOE?5;p5OWTZvXpQtrn(l^Y>UL2`~RQ!(QvfF7Lg}9mY{lB=r;@2Jdd3itYiaoKa-~amg0i6!t406xAILB&KGFV>-EiMYuU-G`>G0dzuD&e!^}Q^A`S$jJ z+d8pd7`9#7misE!VC4*kX<@BvBP$gnd>Ga+ycQ95$kT2Rea5uoo5NU bx??`k`$uej9D^w^4>5SU`njxgN@xNAL Date: Wed, 21 Jan 2015 17:11:15 -0800 Subject: [PATCH 04/22] faster bleeding --- code/modules/mob/living/carbon/human/blood.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm index 40cf7d1a2ce..8f4d268c3b9 100644 --- a/code/modules/mob/living/carbon/human/blood.dm +++ b/code/modules/mob/living/carbon/human/blood.dm @@ -109,11 +109,11 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 for(var/obj/item/organ/limb/org in organs) var/brutedamage = org.brute_dam - if(brutedamage > 40) + if(brutedamage > 20) blood_max += 0.5 - if(brutedamage > 60) + if(brutedamage > 40) blood_max += 1 - if(brutedamage > 80) + if(brutedamage > 60) blood_max += 2 if(bleedsuppress) blood_max = 0 From a9d402e3d9e816af56589de2ff537a5c96ac2039 Mon Sep 17 00:00:00 2001 From: paprka Date: Wed, 21 Jan 2015 17:19:11 -0800 Subject: [PATCH 05/22] drip tweak --- code/modules/mob/living/carbon/human/blood.dm | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm index 8f4d268c3b9..e332ec07d70 100644 --- a/code/modules/mob/living/carbon/human/blood.dm +++ b/code/modules/mob/living/carbon/human/blood.dm @@ -257,7 +257,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 //AB is a universal receiver. return 0 -/mob/living/carbon/proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large) +/mob/living/carbon/proc/blood_splatter(var/target,var/datum/reagent/blood/source) var/obj/effect/decal/cleanable/blood/B var/decal_type = /obj/effect/decal/cleanable/blood/splatter @@ -273,24 +273,21 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 source.data["blood_DNA"] = donor.dna.unique_enzymes source.data["blood_type"] = donor.dna.blood_type - // Are we dripping or splattering? - if(!large) + // Only a certain number of drips can be on a given turf. + var/list/drips = list() + var/list/drip_icons = list("1","2","3","4","5") - // Only a certain number of drips can be on a given turf. - var/list/drips = list() - var/list/drip_icons = list("1","2","3","4","5") + for(var/obj/effect/decal/cleanable/blood/drip/drop in T) + drips += drop + drip_icons.Remove(drop.icon_state) - for(var/obj/effect/decal/cleanable/blood/drip/drop in T) - drips += drop - drip_icons.Remove(drop.icon_state) - - // If we have too many drips, remove them and spawn a proper blood splatter. - if(drips.len >= 5) - //TODO: copy all virus data from drips to new splatter? - for(var/obj/effect/decal/cleanable/blood/drip/drop in drips) - del drop - else - decal_type = /obj/effect/decal/cleanable/blood/drip + // If we have too many drips, remove them and spawn a proper blood splatter. + if(drips.len >= 5) + //TODO: copy all virus data from drips to new splatter? + for(var/obj/effect/decal/cleanable/blood/drip/drop in drips) + del drop + else + decal_type = /obj/effect/decal/cleanable/blood/drip // Find a blood decal or create a new one. B = locate(decal_type) in T From 89167471135be5603d98f1591e293cbb0c0e2ddb Mon Sep 17 00:00:00 2001 From: paprka Date: Wed, 21 Jan 2015 18:18:28 -0800 Subject: [PATCH 06/22] fixes dual var --- code/modules/mob/living/carbon/human/blood.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm index e332ec07d70..373b6e3674a 100644 --- a/code/modules/mob/living/carbon/human/blood.dm +++ b/code/modules/mob/living/carbon/human/blood.dm @@ -8,7 +8,7 @@ var/const/BLOOD_VOLUME_BAD = 224 var/const/BLOOD_VOLUME_SURVIVE = 122 /mob/living/carbon/human/var/datum/reagents/vessel //Container for blood and BLOOD ONLY. Do not transfer other chems here. -/mob/living/carbon/human/var/var/pale = 0 //Should affect how mob sprite is drawn, but currently doesn't. +/mob/living/carbon/human/var/pale = 0 //Should affect how mob sprite is drawn, but currently doesn't. //Initializes blood vessels /mob/living/carbon/human/proc/make_blood() From 5361458b510682be1fe648d6d2adc9fa83ce042a Mon Sep 17 00:00:00 2001 From: paprka Date: Fri, 23 Jan 2015 21:00:09 -0800 Subject: [PATCH 07/22] some updates --- code/game/atoms.dm | 8 ++-- code/modules/admin/create_mob.dm | 1 + .../detectivework/footprints_and_rag.dm | 20 ---------- code/modules/mob/living/carbon/human/blood.dm | 40 +++++++++++-------- 4 files changed, 30 insertions(+), 39 deletions(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 1c6692677cb..723e8d81a61 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -329,11 +329,12 @@ var/list/blood_splatter_icons = list() bloody_hands_mob = M return 1 -/turf/simulated/add_blood(mob/living/carbon/M) +/turf/simulated/add_blood(mob/living/carbon/human/M) if(..() == 0) return 0 var/obj/effect/decal/cleanable/blood/B = locate() in contents //check for existing blood splatter - if(!B) B = new /obj/effect/decal/cleanable/blood(src) //make a bloood splatter if we couldn't find one + if(!B) + blood_splatter(src,M.get_blood(M.vessel),1) B.add_blood_list(M) return 1 //we bloodied the floor @@ -366,7 +367,8 @@ var/list/blood_splatter_icons = list() if(istype(src, /turf/simulated)) if(check_dna_integrity(M)) //mobs with dna = (monkeys + humans at time of writing) var/obj/effect/decal/cleanable/blood/B = locate() in contents - if(!B) B = new(src) + if(!B) + blood_splatter(src,M,1) B.blood_DNA[M.dna.unique_enzymes] = M.dna.blood_type else if(istype(M, /mob/living/carbon/alien)) var/obj/effect/decal/cleanable/xenoblood/B = locate() in contents diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 425837d9e84..656f0adfb7c 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -20,4 +20,5 @@ H.hair_color = random_short_color() H.facial_hair_color = H.hair_color H.eye_color = random_eye_color() + H.dna.blood_type = random_blood_type() H.update_icons() \ No newline at end of file diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm index 098f7bfea7c..a2d323e81d8 100644 --- a/code/modules/detectivework/footprints_and_rag.dm +++ b/code/modules/detectivework/footprints_and_rag.dm @@ -8,26 +8,6 @@ var/mob/living/carbon/human/bloody_hands_mob - -/proc/blood_incompatible(donor,receiver) - - 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(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 - - /obj/item/weapon/reagent_containers/glass/rag name = "damp rag" desc = "For cleaning up messes, you suppose." diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm index 373b6e3674a..6a4bee74152 100644 --- a/code/modules/mob/living/carbon/human/blood.dm +++ b/code/modules/mob/living/carbon/human/blood.dm @@ -234,7 +234,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 return D return res -/mob/living/carbon/proc/blood_incompatible(donor,receiver,donor_species,receiver_species) +proc/blood_incompatible(donor,receiver,donor_species,receiver_species) if(!donor || !receiver) return 0 if(donor_species && receiver_species) @@ -257,8 +257,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 //AB is a universal receiver. return 0 -/mob/living/carbon/proc/blood_splatter(var/target,var/datum/reagent/blood/source) - +proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large) var/obj/effect/decal/cleanable/blood/B var/decal_type = /obj/effect/decal/cleanable/blood/splatter var/turf/T = get_turf(target) @@ -273,21 +272,24 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 source.data["blood_DNA"] = donor.dna.unique_enzymes source.data["blood_type"] = donor.dna.blood_type - // Only a certain number of drips can be on a given turf. - var/list/drips = list() - var/list/drip_icons = list("1","2","3","4","5") + // Are we dripping or splattering? + if(!large) - for(var/obj/effect/decal/cleanable/blood/drip/drop in T) - drips += drop - drip_icons.Remove(drop.icon_state) + // Only a certain number of drips can be on a given turf. + var/list/drips = list() + var/list/drip_icons = list("1","2","3","4","5") - // If we have too many drips, remove them and spawn a proper blood splatter. - if(drips.len >= 5) - //TODO: copy all virus data from drips to new splatter? - for(var/obj/effect/decal/cleanable/blood/drip/drop in drips) - del drop - else - decal_type = /obj/effect/decal/cleanable/blood/drip + for(var/obj/effect/decal/cleanable/blood/drip/drop in T) + drips += drop + drip_icons.Remove(drop.icon_state) + + // If we have too many drips, remove them and spawn a proper blood splatter. + if(drips.len >= 5) + //TODO: copy all virus data from drips to new splatter? + for(var/obj/effect/decal/cleanable/blood/drip/drop in drips) + del drop + else + decal_type = /obj/effect/decal/cleanable/blood/drip // Find a blood decal or create a new one. B = locate(decal_type) in T @@ -306,4 +308,10 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 else B.blood_DNA[source.data["blood_DNA"]] = "O+" + // Update virus information. + for(var/datum/disease/D in source.data["viruses"]) + var/datum/disease/new_virus = D.Copy(1) + source.data["viruses"] += new_virus + new_virus.holder = B + return B \ No newline at end of file From f071655ea4f821185277f4f88e1290ea510b6ee3 Mon Sep 17 00:00:00 2001 From: paprka Date: Sat, 24 Jan 2015 01:12:57 -0800 Subject: [PATCH 08/22] updates and optimizations --- code/game/atoms.dm | 2 + code/game/machinery/bots/cleanbot.dm | 1 + .../machinery/computer/HolodeckControl.dm | 3 + code/game/machinery/iv_drip.dm | 12 ++-- .../effects/decals/Cleanable/humans.dm | 12 ++-- code/game/objects/items/devices/scanners.dm | 4 +- code/game/objects/items/stacks/medical.dm | 11 ++-- code/modules/mob/living/carbon/human/blood.dm | 6 +- .../mob/living/carbon/human/human_damage.dm | 4 ++ code/modules/mob/living/living.dm | 58 +++++++++++-------- 10 files changed, 70 insertions(+), 43 deletions(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 723e8d81a61..732d74f7a00 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -335,6 +335,7 @@ var/list/blood_splatter_icons = list() var/obj/effect/decal/cleanable/blood/B = locate() in contents //check for existing blood splatter if(!B) blood_splatter(src,M.get_blood(M.vessel),1) + B = locate(/obj/effect/decal/cleanable/blood) in contents B.add_blood_list(M) return 1 //we bloodied the floor @@ -369,6 +370,7 @@ var/list/blood_splatter_icons = list() var/obj/effect/decal/cleanable/blood/B = locate() in contents if(!B) blood_splatter(src,M,1) + B = locate(/obj/effect/decal/cleanable/blood) in contents B.blood_DNA[M.dna.unique_enzymes] = M.dna.blood_type else if(istype(M, /mob/living/carbon/alien)) var/obj/effect/decal/cleanable/xenoblood/B = locate() in contents diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm index 45c7aad316d..63d7a2e8b14 100644 --- a/code/game/machinery/bots/cleanbot.dm +++ b/code/game/machinery/bots/cleanbot.dm @@ -222,6 +222,7 @@ text("[on ? "On" : "Off"]")) target_types += /obj/effect/decal/cleanable/xenoblood/xgibs target_types += /obj/effect/decal/cleanable/blood/ target_types += /obj/effect/decal/cleanable/blood/gibs/ + target_types += /obj/effect/decal/cleanable/blooddrip/ target_types += /obj/effect/decal/cleanable/trail_holder /obj/machinery/bot/cleanbot/proc/clean(var/obj/effect/decal/cleanable/target) diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 5badb4c9f9f..61e409d9cd4 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -230,6 +230,9 @@ for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck) qdel(B) + for(var/obj/effect/decal/cleanable/blooddrip/D in linkedholodeck) + qdel(D) + for(var/mob/living/simple_animal/hostile/carp/C in linkedholodeck) qdel(C) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 38e6c24de13..d14c2de4bf0 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -72,7 +72,7 @@ if(src.attached) if(!(get_dist(src, src.attached) <= 1 && isturf(src.attached.loc))) - attached.visible_message("The needle is ripped out of you, doesn't that hurt?") + attached << ("The IV drip needle is ripped out of you, doesn't that hurt?You can't do that." return if(usr.stat) @@ -155,10 +155,10 @@ if(beaker) if(beaker.reagents && beaker.reagents.reagent_list.len) - usr << "\blue Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid." + usr << "Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid.Attached is an empty [beaker].No chemicals are attached.[attached ? attached : "No one"] is attached.Subject is bleeding!") var/blood_volume = round(H:vessel.get_reagent_amount("blood")) var/blood_percent = blood_volume / 560 var/blood_type = H.dna.blood_type diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 32b3f83ca56..29991b298ca 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -37,16 +37,16 @@ if(user) if (M != user) - user.visible_message("[user] applies the [src] on [M].", "You apply the [src] on [M].") + user.visible_message("[user] applies [src] on [M].", "You apply [src] on [M].") else var/t_himself = "itself" if (user.gender == MALE) t_himself = "himself" else if (user.gender == FEMALE) t_himself = "herself" - user.visible_message("[user] starts to apply the [src] on [t_himself]...", "You begin applying the [src] on yourself...") + user.visible_message("[user] starts to apply [src] on [t_himself]...", "You begin applying [src] on yourself...") if(!do_mob(user, M, self_delay)) return - user.visible_message("[user] applies the [src] on [t_himself].", "You apply the [src] on yourself.") + user.visible_message("[user] applies [src] on [t_himself].", "You apply [src] on yourself.") if(istype(M, /mob/living/carbon/human)) @@ -82,7 +82,8 @@ /obj/item/stack/medical/gauze name = "medical gauze" - desc = "A roll of elastic cloth that is extremely effective at stopping bloodloss, but does not heal wounds." + desc = "A roll of elastic cloth that is extremely effective at stopping bleeding, but does not heal wounds." + gender = PLURAL singular_name = "medical gauze" icon_state = "gauze" stop_bleeding = 3000 //five minutes @@ -90,7 +91,7 @@ /obj/item/stack/medical/gauze/improvised name = "improvised gauze" singular_name = "improvised gauze" - desc = "A roll of cloth roughly cut from something that can stop bloodloss, but does not heal wounds." + desc = "A roll of cloth roughly cut from something that can stop bleeding, but does not heal wounds." stop_bleeding = 1200 //two minutes /obj/item/stack/medical/ointment diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm index 6a4bee74152..991c083e466 100644 --- a/code/modules/mob/living/carbon/human/blood.dm +++ b/code/modules/mob/living/carbon/human/blood.dm @@ -279,17 +279,17 @@ proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large) var/list/drips = list() var/list/drip_icons = list("1","2","3","4","5") - for(var/obj/effect/decal/cleanable/blood/drip/drop in T) + for(var/obj/effect/decal/cleanable/blooddrip/drop in T) drips += drop drip_icons.Remove(drop.icon_state) // If we have too many drips, remove them and spawn a proper blood splatter. if(drips.len >= 5) //TODO: copy all virus data from drips to new splatter? - for(var/obj/effect/decal/cleanable/blood/drip/drop in drips) + for(var/obj/effect/decal/cleanable/blooddrip/drop in drips) del drop else - decal_type = /obj/effect/decal/cleanable/blood/drip + decal_type = /obj/effect/decal/cleanable/blooddrip // Find a blood decal or create a new one. B = locate(decal_type) in T diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index b13f76395c3..0e9ec240ca8 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -140,6 +140,10 @@ mob/living/carbon/human/proc/hat_fall_prob() if(update) update_damage_overlays(0) +/mob/living/carbon/human/proc/restore_blood() + if(NOBLOOD in dna.species.specflags) + var/blood_volume = vessel.get_reagent_amount("blood") + vessel.add_reagent("blood",560.0-blood_volume) //////////////////////////////////////////// diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 7a6348c833a..07e04b8d265 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -410,6 +410,9 @@ Sorry Giacom. Please don't be mad :( dead_mob_list -= src living_mob_list += src if(!isanimal(src)) stat = CONSCIOUS + if(ishuman(src)) + var/mob/living/carbon/human/human_mob = src + human_mob.restore_blood() update_fire() regenerate_icons() ..() @@ -492,30 +495,8 @@ Sorry Giacom. Please don't be mad :( M.stop_pulling() //this is the gay blood on floor shit -- Added back -- Skie - if (M.lying && (prob(M.getBruteLoss() / 2))) - var/blood_exists = 0 - var/trail_type = M.getTrail() - for(var/obj/effect/decal/cleanable/trail_holder/C in M.loc) //checks for blood splatter already on the floor - blood_exists = 1 - if (istype(M.loc, /turf/simulated) && trail_type != null) - var/newdir = get_dir(T, M.loc) - if(newdir != M.dir) - newdir = newdir | M.dir - if(newdir == 3) //N + S - newdir = NORTH - else if(newdir == 12) //E + W - newdir = EAST - if((newdir in list(1, 2, 4, 8)) && (prob(50))) - newdir = turn(get_dir(T, M.loc), 180) - if(!blood_exists) - new /obj/effect/decal/cleanable/trail_holder(M.loc) - for(var/obj/effect/decal/cleanable/trail_holder/H in M.loc) - if((!(newdir in H.existing_dirs) || trail_type == "trails_1" || trail_type == "trails_2") && H.existing_dirs.len <= 16) //maximum amount of overlays is 16 (all light & heavy directions filled) - H.existing_dirs += newdir - H.overlays.Add(image('icons/effects/blood.dmi',trail_type,dir = newdir)) - if(check_dna_integrity(M)) //blood DNA - var/mob/living/carbon/DNA_helper = pulling - H.blood_DNA[DNA_helper.dna.unique_enzymes] = DNA_helper.dna.blood_type + if(M.lying && (prob(M.getBruteLoss() / 2))) + makeTrail(T, M) pulling.Move(T, get_dir(pulling, T)) if(M) M.start_pulling(t) @@ -532,6 +513,35 @@ Sorry Giacom. Please don't be mad :( for(var/mob/living/carbon/slime/M in view(1,src)) M.UpdateFeed(src) +/mob/living/proc/makeTrail(var/turf/T, var/mob/living/M) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if((NOBLOOD in H.dna.species.specflags) || (!H.blood_max) || (H.bleedsuppress)) + return + var/blood_exists = 0 + var/trail_type = M.getTrail() + for(var/obj/effect/decal/cleanable/trail_holder/C in M.loc) //checks for blood splatter already on the floor + blood_exists = 1 + if (istype(M.loc, /turf/simulated) && trail_type != null) + var/newdir = get_dir(T, M.loc) + if(newdir != M.dir) + newdir = newdir | M.dir + if(newdir == 3) //N + S + newdir = NORTH + else if(newdir == 12) //E + W + newdir = EAST + if((newdir in list(1, 2, 4, 8)) && (prob(50))) + newdir = turn(get_dir(T, M.loc), 180) + if(!blood_exists) + new /obj/effect/decal/cleanable/trail_holder(M.loc) + for(var/obj/effect/decal/cleanable/trail_holder/H in M.loc) + if((!(newdir in H.existing_dirs) || trail_type == "trails_1" || trail_type == "trails_2") && H.existing_dirs.len <= 16) //maximum amount of overlays is 16 (all light & heavy directions filled) + H.existing_dirs += newdir + H.overlays.Add(image('icons/effects/blood.dmi',trail_type,dir = newdir)) + if(check_dna_integrity(M)) //blood DNA + var/mob/living/carbon/DNA_helper = pulling + H.blood_DNA[DNA_helper.dna.unique_enzymes] = DNA_helper.dna.blood_type + /mob/living/proc/getTrail() //silicon and simple_animals don't get blood trails return null From 5ac37a6b691873355f77c525c01b22d306870313 Mon Sep 17 00:00:00 2001 From: paprka Date: Sat, 24 Jan 2015 01:36:38 -0800 Subject: [PATCH 09/22] updates packs --- code/datums/supplypacks.dm | 1 + code/game/machinery/vending.dm | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 9a2b80739f7..0deb9acea38 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -544,6 +544,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /obj/item/weapon/reagent_containers/glass/bottle/toxin, /obj/item/weapon/reagent_containers/glass/beaker/large, /obj/item/weapon/reagent_containers/glass/beaker/large, + /obj/item/stack/medical/gauze, /obj/item/weapon/storage/box/beakers, /obj/item/weapon/storage/box/syringes, /obj/item/weapon/storage/box/bodybags) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index d4c77a3aa8a..0d7e99f079d 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -764,7 +764,7 @@ icon_deny = "med-deny" product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" req_access_txt = "5" - products = list(/obj/item/weapon/reagent_containers/syringe = 12,/obj/item/weapon/reagent_containers/pill/patch/styptic = 10, + products = list(/obj/item/weapon/reagent_containers/syringe = 12,/obj/item/stack/medical/gauze = 8,/obj/item/weapon/reagent_containers/pill/patch/styptic = 10, /obj/item/weapon/reagent_containers/pill/patch/silver_sulf = 10,/obj/item/weapon/reagent_containers/glass/bottle/charcoal = 4, /obj/item/weapon/reagent_containers/glass/bottle/epinephrine = 4,/obj/item/weapon/reagent_containers/glass/bottle/morphine = 4, /obj/item/weapon/reagent_containers/glass/bottle/diphenhydramine = 4,/obj/item/weapon/reagent_containers/glass/bottle/potass_iodide = 3, /obj/item/weapon/reagent_containers/glass/bottle/salglu_solution = 5,/obj/item/weapon/reagent_containers/glass/bottle/atropine = 3,/obj/item/weapon/reagent_containers/syringe/antiviral = 6,/obj/item/weapon/reagent_containers/syringe/calomel = 10,/obj/item/weapon/reagent_containers/pill/salbutamol = 10,/obj/item/weapon/reagent_containers/pill/mannitol = 10,/obj/item/weapon/reagent_containers/pill/mutadone = 5,/obj/item/device/healthanalyzer = 4, /obj/item/device/sensor_device = 2) From d13288350af8ce6926dafcad1b315ff9a48cc925 Mon Sep 17 00:00:00 2001 From: paprka Date: Sat, 24 Jan 2015 01:51:14 -0800 Subject: [PATCH 10/22] fixes noblood check --- code/modules/mob/living/carbon/human/human_damage.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 0e9ec240ca8..b15db63a746 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -141,7 +141,7 @@ mob/living/carbon/human/proc/hat_fall_prob() if(update) update_damage_overlays(0) /mob/living/carbon/human/proc/restore_blood() - if(NOBLOOD in dna.species.specflags) + if(!NOBLOOD in dna.species.specflags) var/blood_volume = vessel.get_reagent_amount("blood") vessel.add_reagent("blood",560.0-blood_volume) From 1f3ab829ccf7e78faf2b9ebf0b6950ab734af1d8 Mon Sep 17 00:00:00 2001 From: paprka Date: Sat, 24 Jan 2015 21:15:20 -0800 Subject: [PATCH 11/22] updated bloodrips --- icons/effects/drip.dmi | Bin 3953 -> 699 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/effects/drip.dmi b/icons/effects/drip.dmi index c78843e5863f0b2c2d342df205ffd4acc392c91a..a36887103d176d1d3f9048998ba48037254ed8bc 100644 GIT binary patch delta 542 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 Date: Sat, 24 Jan 2015 21:27:24 -0800 Subject: [PATCH 12/22] added blood packs and iv drips to cargo --- code/datums/supplypacks.dm | 22 +++++++++++++++++++ .../reagents/reagent_containers/blood_pack.dm | 8 +++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 0deb9acea38..1a06118c135 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -608,6 +608,28 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine access = access_cmo +/datum/supply_packs/medical/bloodpacks + name = "Blood Pack Variety Crate" + contains = list(/obj/item/weapon/reagent_containers/blood/empty, + /obj/item/weapon/reagent_containers/blood/empty, + /obj/item/weapon/reagent_containers/blood/APlus, + /obj/item/weapon/reagent_containers/blood/AMinus, + /obj/item/weapon/reagent_containers/blood/BPlus, + /obj/item/weapon/reagent_containers/blood/BMinus, + /obj/item/weapon/reagent_containers/blood/OPlus, + /obj/item/weapon/reagent_containers/blood/OMinus) + cost = 35 + containertype = /obj/structure/closet/crate/freezer + containername = "blood pack crate" + +/datum/supply_packs/medical/iv_drip + name = "IV Drip Crate" + contains = list(/obj/machinery/iv_drip) + cost = 30 + containertype = /obj/structure/closet/crate/secure + containername = "iv drip crate" + access = access_cmo + ////////////////////////////////////////////////////////////////////////////// //////////////////////////// Science ///////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 28307d0a058..93f53a19cc1 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -1,6 +1,6 @@ /obj/item/weapon/reagent_containers/blood - name = "BloodPack" - desc = "Contains blood used for transfusion." + name = "blood pack" + desc = "Contains blood used for transfusion. Must be attached to an IV drip." icon = 'icons/obj/bloodpack.dmi' icon_state = "empty" volume = 200 @@ -10,7 +10,7 @@ /obj/item/weapon/reagent_containers/blood/New() ..() if(blood_type != null) - name = "BloodPack [blood_type]" + name = "blood pack [blood_type]" reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) update_icon() @@ -43,6 +43,6 @@ blood_type = "O-" /obj/item/weapon/reagent_containers/blood/empty - name = "Empty BloodPack" + name = "empty blood pack" desc = "Seems pretty useless... Maybe if there were a way to fill it?" icon_state = "empty" \ No newline at end of file From d9f49a4eb56d61202a94ce0a3158bdf547adcb62 Mon Sep 17 00:00:00 2001 From: paprka Date: Sun, 25 Jan 2015 16:53:12 -0800 Subject: [PATCH 13/22] colon and locate() for blood --- code/game/objects/items/devices/scanners.dm | 2 +- code/modules/reagents/reagent_containers/syringes.dm | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 22deea89bd3..41877c85f4e 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -166,7 +166,7 @@ MASS SPECTROMETER if(H.vessel) if(H.blood_max) user.show_message("Subject is bleeding!") - var/blood_volume = round(H:vessel.get_reagent_amount("blood")) + var/blood_volume = round(H.vessel.get_reagent_amount("blood")) var/blood_percent = blood_volume / 560 var/blood_type = H.dna.blood_type blood_percent *= 100 diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index eb180105fd7..82ef30e7873 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -155,10 +155,7 @@ reagents.reaction(target, INGEST) spawn(5) target.add_fingerprint(user) - var/datum/reagent/blood/B - for(var/datum/reagent/blood/d in src.reagents.reagent_list) - B = d - break + var/datum/reagent/blood/B = locate() in src.reagents.reagent_list var/trans if(B && istype(target,/mob/living/carbon)) var/mob/living/carbon/C = target From 88b75316581cd9b795285bba567a119a296a6e3f Mon Sep 17 00:00:00 2001 From: paprka Date: Sun, 25 Jan 2015 20:17:07 -0800 Subject: [PATCH 14/22] iv drip sprite update --- icons/obj/iv_drip.dmi | Bin 881 -> 1034 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/iv_drip.dmi b/icons/obj/iv_drip.dmi index 9adc8ec4cb5d82cef2b0c7645e0527c3dedb1084..7c6898d36cd00be7f612bfe4a3d43635d4b9fc17 100644 GIT binary patch delta 842 zcmey!*2OX5Y(2BOr;B4q#hkZu_U7F-5NTcC<>Vm7&3Z@t#ge1Z4QK9|R-Csk2uiC8KjBS4LvHQ(yKGJ>AY_CyMPH9O_agAOBb5d2-4k^}i}C z)A`p~JKXuS@ip_~(lxi|o6qj`c{Vv?hTcy{ji0?*4$@|E$9LVWpA{+Gxu^C1|M;C+ zUtd37ZTEN0KY^mU#atK8%*wF;vaz;o{~v+3uhk#fI-QgMI+Nwt>j?R2`-?*VCD&~` zv!_CFmw;29_T&T8b1FYi(#_AY+0MV?-2C&!u{vCf6+7G+87HZ9UMbDpqR+}PVb?lU zPoc%NnhpzQgf$#gZ&b<`UbwN|zu}h<&O#(i}^b!VSkzVKJlkr`SI-G7`fdpGQUu6;8s`ls1^o~!dG z@37lv|K!ro+y}9&62gj4zUT27s5zZD&vl_$;8XcJhPRuZzbw((r_(4mDd5xmtqLjs zlRARuMA^MHR(xi@j^U%#H80J~G~X+EO7;3Z^*8>{4m$Ot^;2iSXKC&QQ;ecAW~g*( zEUhZd>S>v^|N5*0Nr5kRt$X_KOea z82U^Zeb)P{=WSGSsBStUdUVl+pEk=I*dhcU%z1s;Ip_Zz>yjIXw$x^?Zi)?K`10-i z$~qfS9=`s1rUMI6%;95YXlH70W+X=VeV&-D$@Pm{U+Y=40)v=~0aJ4r%ZcYZKUbP0l+XkKrDS#- delta 688 zcmeC;_{cWlY&}z-r;B4q#hkZyHu@fRkZ4PkzPLMyoxj25^%u<-k%wzjmZtKW6`W_{ znZTK`!lqF(U-=}DW3>Ml*H`?yBR?%To6etX;1 zmnFZxm*p?t-X3sUC-w`&woBV`U&R`%oWU?HtaWWWIvp?`rSb}5|HZx@yHL)0U$9$sqkJ$P+22%zg@O1TaS?83{1OSt5H@E-* From 32ef260c7483bb172799fa0ca00171311aaa6e02 Mon Sep 17 00:00:00 2001 From: paprka Date: Sun, 25 Jan 2015 22:45:50 -0800 Subject: [PATCH 15/22] made the iv drip even easier to see on medical tiles --- icons/obj/iv_drip.dmi | Bin 1034 -> 1047 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/iv_drip.dmi b/icons/obj/iv_drip.dmi index 7c6898d36cd00be7f612bfe4a3d43635d4b9fc17..daa6d5e9e0f0ad3f674ebaaf48465c53c214c4bd 100644 GIT binary patch delta 740 zcmVa3#N11%JrG#{F1juli}-6L|^0 z_&X7i+n={;(>86w<@{O|pnh8S7DHzYYDbbh-b>^EI@$8!zv1QZmHD>35qWSSzflu7s2$1R@#E6+hgSFGq18Px*|rT-HGkL)Rn&>JPC>bw zKoODl)14#-iGPS3nry~es+!;TeM!?)Yu!RB018#jpQfq!zOS_|D}Vu2&aYbmjGDmj z179VRd-?YD@KvLeH9}QyfJ|{AztJh6{d6bogFj2lZ3w;#T*%KJzyKHW7g7O4{v8Ex z=ftkDDZeckHG%K3N&=Jecov-f4uU`?lgY;Qt|!-@@_&x83v9X)Sf~IZ`#T>7L9mZu zoTG37_QiWufvm=v`vHO=cz%_QP5lom065kOuJ2#N@h&VMIKL_t(|ob8;wZrd;vg|CW2Ko$!H+!yGi#an>P-Zgm7J8)8G z*U*@tZ;`c=_UuJAFPbuDsR2V-3TR=6LXK<1E-i_s$a6kGKz?MC$Nqdt$&{ie{UijJ z53V~v-14#O1LJk9+n+a^jZEf~XqYbfK`8l+DnJ`HUdOuKntxdniM)m1|6jQ(_3PuS zKK-oz5ORK_3ee1&Xg~C^eRjY65bf(H;ypsnAN838#_L!gmcMdU{$qZ&%)EFZx)4Hs zE0e&NYjH>eW=u@e)OHg=auES8!T+iPd7og;1EguX z+g#(*+=mqa9Pb1;_C}B4lfREIlfYg>z}@qeeE+!}s(&v=9DAdys@iRr!bSd}=~V%~ ze)%n%$)}(fJQ|C~E?*uu1ZYpa4?Rsi(&Vq6$}oK0+ZVVCX?y|6%Frh7CkiA(Y5O?IE59H zZvz$-Rs_iBx$`@8xNhGU;O`H>Gl2velhFe(9}WcohXQ~@0l@hK9ua_2Psb>^00000 LNkvXXu0mjffb?Fl From 1c59e972ce7679b5ba66bb3d8e8ae1ddbbb9cfc9 Mon Sep 17 00:00:00 2001 From: paprka Date: Mon, 26 Jan 2015 00:21:11 -0800 Subject: [PATCH 16/22] adds iv drip and blood packs to the map --- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 41 ++++++++++--------- code/modules/mob/living/carbon/human/blood.dm | 6 +-- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 51d550d9d9a..6d5fba121ee 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -3305,7 +3305,7 @@ "blC" = (/obj/structure/closet,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/checkpoint/medical) "blD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/checkpoint/medical) "blE" = (/obj/machinery/light_switch{pixel_x = 28; pixel_y = 0},/obj/item/weapon/screwdriver{pixel_y = 10},/obj/item/device/radio/off,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/checkpoint/medical) -"blF" = (/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) +"blF" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/APlus,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "blG" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "blH" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "blI" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) @@ -3939,7 +3939,7 @@ "bxM" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper) "bxN" = (/obj/structure/stool/bed/chair,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper) "bxO" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper) -"bxP" = (/obj/structure/closet/wardrobe/pjs,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/camera{c_tag = "Medbay Treatment Center"; dir = 4; network = list("SS13"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bxP" = (/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bxQ" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bxR" = (/obj/effect/landmark/start{name = "Medical Doctor"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bxS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) @@ -4003,7 +4003,7 @@ "byY" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper) "byZ" = (/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper) "bza" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper) -"bzb" = (/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bzb" = (/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bzc" = (/obj/machinery/light,/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/floor/plasteel,/area/medical/sleeper) "bzd" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel,/area/medical/sleeper) "bze" = (/obj/structure/table/reinforced,/obj/item/weapon/wrench{pixel_x = 5; pixel_y = -5},/turf/simulated/floor/plasteel,/area/medical/sleeper) @@ -4338,7 +4338,7 @@ "bFv" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitehall"},/area/medical/sleeper) "bFw" = (/obj/machinery/computer/operating,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bFx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitehall"},/area/medical/sleeper) -"bFy" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/structure/sign/nosmoking_2{pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"},/area/medical/sleeper) +"bFy" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -30},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bFz" = (/obj/structure/table/glass,/obj/machinery/camera{c_tag = "Medbay Cryogenics"; dir = 2; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel,/area/medical/sleeper) "bFA" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/folder/white,/obj/item/weapon/hand_labeler,/obj/item/weapon/gun/syringe,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bFB" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/firedoor/heavy,/turf/simulated/floor/engine,/area/toxins/explab) @@ -4405,15 +4405,15 @@ "bGK" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 1},/area/medical/sleeper) "bGL" = (/obj/machinery/camera{c_tag = "Telescience Test Chamber"; dir = 1; network = list("SS13","RD")},/obj/machinery/light,/obj/structure/sign/nosmoking_2{pixel_y = -32},/turf/simulated/floor/engine,/area/toxins/explab) "bGM" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 1},/area/medical/sleeper) -"bGN" = (/obj/structure/closet/crate/freezer,/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel,/area/medical/sleeper) -"bGO" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bGN" = (/obj/structure/table,/obj/machinery/requests_console{announcementConsole = 0; department = "Medbay"; departmentType = 1; name = "Medbay RC"; pixel_x = 0; pixel_y = -30; pixel_z = 0},/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bGO" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bGP" = (/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) -"bGQ" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bGQ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bGR" = (/obj/structure/table,/obj/machinery/light,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) -"bGS" = (/obj/structure/table,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/reagent_containers/glass/beaker/large/charcoal,/obj/item/weapon/reagent_containers/glass/beaker/large/epinephrine,/obj/item/weapon/reagent_containers/glass/beaker/large/styptic,/obj/item/weapon/reagent_containers/glass/beaker/large/silver_sulfadiazine,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) -"bGT" = (/obj/structure/table,/obj/machinery/requests_console{announcementConsole = 0; department = "Medbay"; departmentType = 1; name = "Medbay RC"; pixel_x = 0; pixel_y = -30; pixel_z = 0},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) -"bGU" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -30},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/o2{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) -"bGV" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/brute{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/brute{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bGS" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/o2,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bGT" = (/obj/structure/closet/crate/freezer,/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/item/weapon/reagent_containers/blood/empty{pixel_x = 2; pixel_y = 1},/obj/item/weapon/reagent_containers/blood/empty{pixel_x = -3; pixel_y = -4},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 5; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/BMinus{pixel_x = 6; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/APlus{pixel_x = -5; pixel_y = 3},/obj/item/weapon/reagent_containers/blood/AMinus,/turf/simulated/floor/plasteel,/area/medical/sleeper) +"bGU" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bGV" = (/obj/structure/sign/nosmoking_2{pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"},/area/medical/sleeper) "bGW" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bGX" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bGY" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) @@ -4717,7 +4717,7 @@ "bMK" = (/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos) "bML" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/space,/area/space) "bMM" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/wall/r_wall,/area/medical/virology) -"bMN" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) +"bMN" = (/obj/machinery/vending/wallmed{pixel_x = 28; pixel_y = 0},/obj/machinery/camera{c_tag = "Medbay Recovery Room"; dir = 8; network = list("SS13")},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bMO" = (/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 29},/obj/machinery/camera{c_tag = "Virology Break Room"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bMP" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bMQ" = (/obj/item/weapon/bedsheet,/obj/structure/stool/bed,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) @@ -4795,7 +4795,7 @@ "bOk" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "bOl" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "bOm" = (/obj/structure/grille,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/toxins/misc_lab) -"bOn" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed{pixel_x = 28; pixel_y = 0},/obj/machinery/camera{c_tag = "Medbay Recovery Room"; dir = 8; network = list("SS13")},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bOn" = (/obj/structure/table,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = 7; pixel_y = -3},/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/item/weapon/reagent_containers/glass/bottle/toxin{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bOo" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/toxins/misc_lab) "bOp" = (/turf/simulated/wall,/area/toxins/misc_lab) "bOq" = (/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -4810,7 +4810,7 @@ "bOz" = (/obj/machinery/door/airlock/engineering{name = "Construction Area"; req_access_txt = "32"},/turf/simulated/floor/plating,/area/construction) "bOA" = (/turf/simulated/floor/plasteel,/area/hallway/primary/aft) "bOB" = (/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 5},/area/hallway/primary/aft) -"bOC" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = 7; pixel_y = -3},/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/item/weapon/reagent_containers/glass/bottle/toxin{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bOC" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/camera{c_tag = "Medbay Treatment Center"; dir = 4; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bOD" = (/obj/structure/dispenser{pixel_x = -1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos) "bOE" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/atmos) "bOF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) @@ -6417,6 +6417,7 @@ "ctu" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/space) "ctv" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_s"; name = "south of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space) "ctw" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) +"ctx" = (/obj/structure/table,/obj/item/weapon/reagent_containers/blood/empty,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "ctB" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/ai_monitored/storage/secure) "ctC" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/chem_heater,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry) "ctD" = (/obj/effect/landmark{name = "blobstart"},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/engine,/area/toxins/explab) @@ -6601,7 +6602,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafavMbdyavMavMavMavMavMavMbdAavMaafaafaafaaabdDbgybdDbgzbeZbgAbgBbcraVbbgCbgDbgEbgFbgGbgGbgGbgGbgGbgGbgHbgIbgJbfdbgKbgLaYpaYpaYpaYpaYpaYpbgMaYpaYpaYpbgNbgObgPbgQbgRbaHbaHbeabgSbecbedaHYbgTaYxbgUaYAaYAaYAaYAbfAbaSbgVaYxaafbfCbfDbgWbgXbgYbfDbgZaafaYHbhabbYbhbbhcbajbesbajbajaYHaXqaHYaHYbeubqqbhebhfbhgbhhbhibfXbhjbfXbhkbfXbfXbhlbfYbhmbhnbhobezbhpbgdbhqbgdbhpbhrbgdbeAbhsbhtbhubhvbeGbhwbeIbhxbhybhzbhAbhAbeKbhBbhCbhDbhEbhFbhGbhHbeKbhIbhJbhKbeRbhLbhMbhLbhNbhObhObeRbhPbgxaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaafaaabdDbhQbhRbhSbhTbhTbhUbhVaWPbhWaOcbhXbhYbhZbhZbhZbiabiabiabiabiabiabiabibbgNbicbidbiebifbigbihbiibijaYpbikbilbimbinbinbiobaHbaHbeabaHaYvbedaHYaWUbipbiqbirbisbitaYAbiubaSaYxaYxaafbfCbfDbgXbfDbgXbfDbgZaafaYHaYHbivbcZbiwbajbixbiybizaYHaXqaHYbiAbiBbiCbiDbqrbiFbrWbiHbfXbiIbiJbiKbiLbiLbiMbfYbiNbhnbiObezbhpbgdbhqbiPbhpbiQbiRbeAbiSbiTbiUbiVbeGbgibeIbiWbiXbiXbiYbiZbjabjbbjcbjcbjcbjdbjebjfbeKbjgbhJbjhbeRbjibjjbjkbjlbjmbjnbeRbhPbgxbjobjobjobjoaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaafaaabdDbjpbdDbjqbjrbjrbjsbdDbjtbjtaOcbjubjvbjubjubjubjvbjuaOcaOcaYpaYpaYpbjwbgNbjxbjxbjybjxbjxbjxbiibjxbjzbjAbjBbjCbjDbjEbjEbjEbjEbjFbjGbjHbjIbjJbjKbjLbjMbjNbjObjPaYAbfAbaSaYxaafaafbfCbfDbgYbjQbgWbjRbgZaafaafaYHbjSbjTaYHaYHaYHaYHbjUaYHbjVaHYaHYbeubjWbhebjXbhgbhhbjYbfXbjZbkabkbbkcbtmbkebezbkfbkgbkhbezbhpbgdbkibkjbhpbkkbgdbeAbeGbeGbeGbeGbeGbgibeIbklbkmbknbkobkpbkqbkrbksbktbktbkubkvbkwbeKbkxbhJbkybeRbkzbkAbkBbkCbkDbkEbeRbhPbkFbkGbkHbkIbkHaaaaaaaafaaaaafaaaaafaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaafaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaabdDbkJbhRbkKbjrbkLbkMbdDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkNbkObkPbkQbkRbkSbkSbkTbkSbkSbkSbkUbkSbkVbkWbkXbkYbkZbecbecbecblaaYvblbaYvblcbldaKAbipbleblfblfblfblfblgblhbliaafaaabljblkbllbfDbfDblmbgZaaaaafblnbloblpblqblrblsblnbltblnbluaHYaHYbeublvbhectCblwblxbeublybjZbkablzblAbfXblBbezblCblDblEbezblFblGblHblIblJblKblLblMblNblOblNblNblNblPbeIblQbhyblRblSblTbkqblUblVblWblWblXblYblZbeKbmabgrbmbbeRbmcbmdbmebkCbhObmfbeRbhPbmgbmhbmibmibmibmibmibmibmjaafaaaaafaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaafaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaabdDbkJbhRbkKbjrbkLbkMbdDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkNbkObkPbkQbkRbkSbkSbkTbkSbkSbkSbkUbkSbkVbkWbkXbkYbkZbecbecbecblaaYvblbaYvblcbldaKAbipbleblfblfblfblfblgblhbliaafaaabljblkbllbfDbfDblmbgZaaaaafblnbloblpblqblrblsblnbltblnbluaHYaHYbeublvbhectCblwblxbeublybjZbkablzblAbfXblBbezblCblDblEbezctxblGblHblIblJblKblLblMblNblOblNblNblNblPbeIblQbhyblRblSblTbkqblUblVblWblWblXblYblZbeKbmabgrbmbbeRbmcbmdbmebkCbhObmfbeRbhPbmgbmhbmibmibmibmibmibmibmjaafaaaaafaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaabdDbmkbhRbhRbhRbdDbdDbdDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkNbmlbjxbmmbmnbmobmnbmnbmnbmnbmnbmpbmnbmqbmrbmsbmtbmubmvbecbmwbaHbmxbmybmzbedbmAbmBbipbipblibmCbmDbmEbmFbmGbliaaaaaabfCbmHbmIbmJbmIbmKbgZaaaaaablnbmLbmMbmNblnbmOblnbltblnbluaHYaHYbeubmPbhebjXbmQbmRbeubmSbmTbmUbmVbmWbfXbmXbezbfYbmYbmZbezbeAbnabeAbeBbnbbncbncbncbncbncbncbncbncbgibeIbndbkmbknbnebnfbngbnhbnibnibniblXbkvbnjbnkbnlbnmbnnbnobnpbnqbnpbnrbhObnsbeRbntbnubnubnubnubnubnubnubnvbgxbjobjobjoaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnwbkNbkNbnxbjxbjxbjxbnybnzbnzbnzbjxbjxbjxbjxbjzbnAbeabnBbnCbnDbnEbnFbnGbnHbaHbmzbnIbnJbnKbnLbnMbnNbnObnPbnQbnRbnSbliaafaaabfCbnTbnUbnUbnUbnVbgZaaaaafblnbnWbnXbnYblnbnZblnbltblnboaaHYaKJbobbocbodboebofbogbeubohbjZbhkbmVboibojbmSbmSbokbolbombonboobopbfXboqborbosbvtboubovbowboxboybncbgibeIbozboAboBboCboDbeKboEbnibniboFboGbkvboHboIboJboKboLbnoboMboNbhOboOboPboQbeRboRbrVbrVbrVbrVbrVbrVbrVbhPbgxboTboUbjobjoaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboVboWboVboXboYbjxbjxbiibjxbjxbjxbjxbjxboZaYpaYpbpabpbbjEbpcbpdbecbpebaHbpfbaHbpgblubmAbphbpibpjbpkbplbpmbpnbpobppbliaaaaaabfCbpqbprbpsbprbptbgZaaaaaabpubpvbpwbpubpubpubpubpxbpubpyaKAaKAbeubeubpzbpAbpBbpCbeubpDbjZbpEbpFbpFbpFbpFbpFbpGbpHbpIbpJbpFbpKbpFbpLbpMbosbpNbpObpPbpQbpRbpSbncbpTbpUbpVbpWbpWbpXbpYbpZbqabqbbqbbqcbqdbkvbqebqfbqgbqhbqibnobnobqjbqkbqlbqmbnobeRbrVbrVbrXbvwbrZbrYbsabrVbqsbqtbqubqvbqwbjoaaaaafaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6610,20 +6611,20 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtobqxbqybqxbmlbtpbjxbjxbtqbjxbtpbjxbjxbjxbqAbtraYpbtsbttbnGbtubtvbecbpbbjEbtwbtxbmzbsnbqHaWUbpibtyblibtzbtAbtBbtCbmGbliaaaaaaaafbtDbtEbnUbtFbtGaafaaaaaabqVbtHbtIbtJbtKbtLbtMbtNbpubtOaHYaHYbmSbmSbtPbtQbpGbtRbtSbtTbtUbtVbtWbtXbtWbtXbtWbtXbtWbtXbtYbtZbsPbuabubbucbudbuebufbugbuhbuibujbncbukbulbumbnmbunbhJbhJbuobhJbhJbupbuqburbusbutbtcbuubuvbuwbuxbuxbuxbuybuybuybuybuybwcbwbbwebwdbwebwfbwebrVbtnbgxbsdbuEbjobjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabuFbuGbuFbuHbuIbuHbuHbuHbuHbuHbuJbuKbjxbqAbuLaYpbuMbaHbuNbuObuPbuQbuRbuRbuRbuQbuQbuSbqHaJkbuTbpjblibuUbuVbuWbuXbuYbliaaaaaaaafbuZbvabqRbvbbvcaafaaaaaabqVbvdbvebvfbvgbtLbtMbtNbpubvhaHYaHYbvibvjbvkbvlbvmbvnbtXbvobvpbvqbvrbvsbDibvubvvbvubFzbtXbhkbjZbsPbvxbvybvzbvAbvBbvCbvDbvEbvEbvFbvGbvHbvIbvJbvKbvLbvMbvNbvMbvMbvObvMbvMbvPbvQbvRbvRbvSbvTbqibuxbvUbvVbvWbvXbvYbFDbuybxjbxibzCbyAbzDbxibAVbrVbtnbgxbwgbqvbwhbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnwbkNbkNbkNaYpbkNbkNbkNbwibwibwibwibwjbwkbwkbwibwibwlbwlbwmbwnbuQbwobwpbwqbwrbuQbsnbqHaHZaIcaIcbliblibwsbliblibwtbliaHUaHUaHUbwubwvbsubwwbwxaHUaHUaHUbpubpubpubpubpubpubpubpubpubvhaHYbwybtXbtXbtXbwzbtXbtXbtXbwAbvpbwBbwCbwDbwEbwFbwGbwHbwIbwDbhkbjZbsPbwJbwKbwLbwMbwNbwObrAbrAbrAbwPbwQbwRbwSbwTbwTbwTbwTbwUbwTbwTbwTbwVbwVbwWbwXbwYbwYbwZbxabqibuxbxbbxcbxdbxebxfbxgbxhbrVbrVbFBbFBbFBbrVcfYbrVbtnbgxbsdbsebjobjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibxkbxlbxmbxnbxobxpbwkbxqbxrbxsbxtbxubxvbxwbxxbxybuQbsnbqHaHYaHYaHYbxzaKQbxAaKAbxBbxCbxDaVLaVLaVLbxEbxFbxGbxHbxIaHYaHYaHYaHYaKQaHYaKAaHYaHYaHYbxzaHYbvhaHYbxJbtXbxKbxLbxMbxNbxObtXbxPbxQbxRbxSbwDbwEbwEbxTbxUbxVbwDbhkbxWbsPbrAbxXbxYbxZbwQbyabybbycbydbncbncbeHbyebwTbyfbygbyhbyibyjbykbwTbylbymbynbyobypbwYbyqbyrbysbytbyubyvbywbyxbyybyzbxhchfchfchfchfchfchfchfbrVbtnbgxbsdbsebjoaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibxkbxlbxmbxnbxobxpbwkbxqbxrbxsbxtbxubxvbxwbxxbxybuQbsnbqHaHYaHYaHYbxzaKQbxAaKAbxBbxCbxDaVLaVLaVLbxEbxFbxGbxHbxIaHYaHYaHYaHYaKQaHYaKAaHYaHYaHYbxzaHYbvhaHYbxJbtXbxKbxLbxMbxNbxObtXbOCbxQbxRbxSbwDbwEbwEbxTbxUbxVbwDbhkbxWbsPbrAbxXbxYbxZbwQbyabybbycbydbncbncbeHbyebwTbyfbygbyhbyibyjbykbwTbylbymbynbyobypbwYbyqbyrbysbytbyubyvbywbyxbyybyzbxhchfchfchfchfchfchfchfbrVbtnbgxbsdbsebjoaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwkbyBbyCbyDbyEbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObxxbyPbuQbsnbyQaHYaHYaHYaHYaHYaHYaKAaHYbqHaHYaHYaHYaHYaHYbyRbySbyTaHYaHYaHYaHYaHYaHYaHYaKAbyUaHYaHYaHYaHYbvhbyVbyWbtSbyXbyYbyZbyYbzabtXbzbbvpbvqbzcbtXbzdbzebzfbzgbzhbtXbhkbjZbsPbsPbsPbsPbsPbncbncbncbncbncbncbzibgibzjbwTbzkbzlbzmbznbzobzpbwTbzqbzrbzsbztbzubwYbyqbzvbzwbzxbzybzzbzzbzzbzAbzBbxhchfchfctEctDchfchfchfbrVbtnbgxbsdbsebjobjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibzEbzFbzGbzHbzIbzJbwkbxrbxrbzKbzLbuRbzMbzNbzObzPbuQbzQbzRbzSbzSbzSbzTbzSbzSbzUbzSbzVaHYbzWbzXbzYbzYbzZbAabAbbAcbAdbAeaVLaVLbAfaVLbAgbAhaVLbAibAjbAkbAlaHYaHYbtXbAmbAnbAobtWbApbtXbtWbAqbArbtXbtXbtXbtXbtXbtXbtXbtXbhkbjZbfXbAsbAtbAubAvbAwbAxbAybAzbAAbAwbzibgibABbwTbACbADbAEbAFbAGbAHbwTbAIbAJbAKbALbAMbwYbyqbANbAObuybAPbAQbARbASbATbAUbxhchfchfchfbGLchfchfchfbrVbtnbqtbAWbqvbqwbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibwibwkbwkbwkbwkbwibwibAXbAYbAZbBabuQbuQbuQbuQbuQbuQbBbbBcaIcaIcaIcaIcbBdbBdbBdbBdbBdbBdbBdbBdbBdbBdbBebBfbBgbBhbBhbBhbBhbBhbBibBhbBhbBjbBhbyebBkbyeaIdaJlbBlbtXbBmbBnbBobBpbBqbtXbBrbxQbBsbBtbBubBvbBwbBxbBybBzbBAbBBbBCbBDbBDbBEbBFbBGbBHbBIbBJbBKbBLbAwbzibgibBMbBMbBMbBMbBMbBMbBMbBMbBMbBNbBNbBNbBNbBNbBNbBObBPbBQbuybuybuybuybuybuybuybxhbrVbrVbrVbrVbrVbrVbrVbrVbtnbgxbBRbBSbjobjoaafaafaafaagaagaagaagaagaagaagaagaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBTaaaaaaaaaaafaaaaaabwlbBUbBVbBWbBXbBYbBZbCabCbbCcbCdbCebCfaaaaaaaafaaabBdbCgbChbCibCjbCkbClbCmbCnbCobCpbCqbCrbBhbCsbCtcuzbCubCwbCvbCvbCxbCybCzbCAbyebyebyebyebtXbCBbCCbCDbCCbCEbtXbCFbvpbCGbCHbCIbCJbCIbCIbCKbCLbCMbCNbCObCObCObCPbCQbvlbCRbCSbCTbCUbCVbAwbzibgibBMbCWbCWbCWbCXbCWbCWbCWbBMbCYbCYbCZbCYbCYbBNbDabDbbqibDcbDdbDebDfbDgbDhbJqbDjbDkbDlbDmbDnbDobDpbDqbDqbDrbDsbDdbDdbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajxaekaeZaekaelaaaaafaaabwlbwlbDtbxrbDubDvbDwbDxbDybDybDzbDAbDBbDCaafbDDbDEbDFbDGbDHbDIbDJbDIbDKbDIbDIbDIbBdbDLbDMbDNbBhbDObDPbDQbDRbDSbCvbDTbBjbBhbDUbDVbDWbDXbDYbDZbEabEbbCCbEcbCCbxQbEdbEebEfbEgbtXbEhbEibCCbCCbEjbEkbmSbmSbmSbmSbmSbElbEmbpGbEnbEobEpbBKbEqbAwbzibgibBMbCWbCWbCWbCWbCWbCWbCWbBMbErbEsbEtbEubEvbBNbEwbExbEybEzbEAbEBbECbEDbEDbEDbEDbEEbEFbEGbDnbjobEHbEIbEJbEJbEKbELbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObENaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZbEPbEQbEPajZbERbERbERbwlbESbxrbETbEUbEVbEWbwlbBcbEXbBcbBcbEYbEZaaabFabFbbFcbFdbDIbDIbFebDIbFfbFgbFhbDIbBdbDLbFibFjbBhbFkbFlbFmbFnbFobCvbFpbBjbzibFqbFrbFsbFrbFtbFubtXbFvbCIbFwbCIbFxbtSbFybCJbOnbtXbFAbCCbCCbCCbOCbFCbmSbPIbFEbFFbFGbBEbFHbvlbFIbBKbBKbFJbFKbFLbFMbFNbBMbCWbCWbCWbCWbCWbCWbCWbBMbFObFPbFQbFRbFSbFTbFUbFVbtbbFWbFXbEDbFYbEDbEDbEDbEDbEDbEDbEDbDnbFZbGabGbbGcbGdbGebGfbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbGgbENbEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZalQaHnalQaeZbERbGhbGibwlbGjbxrbGkbxrbxrbEWbwlbGlbGmbGnbBcbEYbEZaafbFabGobGpbGqbGrbGsbGrbGrbGtbGubGrbGrbGvbGwbGxbGybBhbGzbBhbBhbBhbBhbGAbGBbGCbGDbGEbGFbGGbGHbGIbGIbtXbGJbGKcltbGMbGNbtXbGObGPbGQbtXbGRbGSbGUbGTbGVbGWbmSbGXbGYbpFbGZbHabHbbHcbCRbHdbBKbBKbHebAwbzibgibBMbBMbHfbCWbCWbHgbHfbBMbBMbHhbHibHjbHkbHlbBNbHmbHnbtbbHobHpbHqbHqbHrbHsbHtbHqbHubHvbHwbHxbHybHzbHAbHBbHCbHDbHEbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObHGbHHbHIbEObHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZbEPbEQbEPajZbERbERbERbwlbESbxrbETbEUbEVbEWbwlbBcbEXbBcbBcbEYbEZaaabFabFbbFcbFdbDIbDIbFebDIbFfbFgbFhbDIbBdbDLbFibFjbBhbFkbFlbFmbFnbFobCvbFpbBjbzibFqbFrbFsbFrbFtbFubtXbFvbCIbFwbCIbFxbtSbGVbCJbMNbtXbFAbCCbCCbCCbOnbFCbmSbPIbFEbFFbFGbBEbFHbvlbFIbBKbBKbFJbFKbFLbFMbFNbBMbCWbCWbCWbCWbCWbCWbCWbBMbFObFPbFQbFRbFSbFTbFUbFVbtbbFWbFXbEDbFYbEDbEDbEDbEDbEDbEDbEDbDnbFZbGabGbbGcbGdbGebGfbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbGgbENbEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZalQaHnalQaeZbERbGhbGibwlbGjbxrbGkbxrbxrbEWbwlbGlbGmbGnbBcbEYbEZaafbFabGobGpbGqbGrbGsbGrbGrbGtbGubGrbGrbGvbGwbGxbGybBhbGzbBhbBhbBhbBhbGAbGBbGCbGDbGEbGFbGGbGHbGIbGIbtXbGJbGKcltbGMbGTbtXbGUbGPbGQbtXbGRbGSbFybGNbGObGWbmSbGXbGYbpFbGZbHabHbbHcbCRbHdbBKbBKbHebAwbzibgibBMbBMbHfbCWbCWbHgbHfbBMbBMbHhbHibHjbHkbHlbBNbHmbHnbtbbHobHpbHqbHqbHrbHsbHtbHqbHubHvbHwbHxbHybHzbHAbHBbHCbHDbHEbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObHGbHHbHIbEObHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZalQalQalQbHJbHKbxrbxrbHLbGjbxrbxrbxrbxrbEWbwlbHMbGnbHNbBcbEYbEZaaabFabHObHPbHQbDIbDIbHRbDIbHSbHTbHUbHVbBdbHWbHXbHYbHZbIabIbbIbbIbbIbbIbbIcbIbbIdbIebIfbIgbIhbIibIjbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbIkbmSbmSbmSbmSbmSbIlbImbhjbAwbAwbAwbAwbAwbAwbzibgibBMbInbIobIpbIqbIrbIsbInbItbHhbHibHjbIubIvbIwbIxbIybuwbIzbDdbIAbIAbIBbICbIDbIEbEDbEDbIFbDnbIGbIHbIIbDdbIJbIKbIKbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObILbIMbIMbIMbINbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZaHnaHnaHnaeZbERbIObIPbIQbIRbxrbxrbISbITbIUbwlbBcbBcbBcbBcbEYbDCaafbIVbDEbIWbDGbIXbDIbIYbDIbDIbDIbDIbDIbBdbDLbIZbJabJbbJcbJcbJcbJcbJcbJcbJdbJebJfbJgbJhbJibJjbJkbJlbJmbJnbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJobJpbmSbGXcqlbBDbJrbBEbJsbJtbJubJvbJvbJwbJxbJgbJybJzbBMbJAbJBbJCbJDbJEbJFbJGbItbItbItbItbItbItbJHbJIbJJbJKbJLbDdbDnbDnbDnbDnbDnbDnbJMbEDbEDbDnbjobEHbgxbDdbJNbJObJPbJQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJRbJSbJRbIMbJTbIMbJUbJVbENaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZamIbJWbJXajZbERbERbERbwlbwlbERbERbERbwlbwlbwlaaaaaaaaabJYbJZbEZaaaaaaaafaaabBdbKabKbbKcbDIbKdbKebKfbKgbKhbKibKjbKkbKlbKmbKnbKobKpbKqbKmbKmbKmbKmbKmbKrbKsbKmbKmbKtbKmbKubKmbKmbKmbKmbKmbyebyebyebyebyebyebyebyebKvbKwbmSbKxbKybKzbKAbKBbKCbKDbKEbKFbKFbKGbKFbKFbKHbKIbBMbKJbKKbKLbKKbKMbKKbKNbKObKPbKQbKRbKSbKTbKUbyqbHnbqibKVaafbKWbKXbKYbKZbLabKZbLbbLcbLdbDnbLebtnbLfbDdbDdbDdbDdbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObLgbIMbIMbIMbLhbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanTaekbLiaekafOaaaaaaaaaaafaaIaafaaaaafaaIaafaaaaaaaaaaafbJYbEYbEZaafaafaafaafbBdbBdbBdbBdbBdbBdbBdbBdbBdbBdbLjbLkbLlbLmbKmbKnbKobKpbKqbLnbLnbLobLpbLqbLrbLsbLtbLubLvbLwbLxbLybLzbLAbLBbLCbLDbLDbLDbLDbLDbLDbLEbyebKvbLFbLGbLGbLGbLGbLGbLHbLIbLJbLGbLGbLGbLGbLGbLGbLFbLKbLLbLMbLNbLObLNbLPbLQbLRbLSbLSbLSbLSbLSbLSbLTbLUbLVbqibKVaafbKWbLWbLWbLXbLYbLZbMabMbbMcbDnbMdbtnbkFbjobMebMfbjoaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObMgbMhbMibMjbHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaIaafaaaaafaaIaafaaaaaaaaaaaabJYbEYbEZaaaaaaaaaaafbMkbMlbMlbMmbMnbMobMobMpbMpbMkbDLbMqbKkbMrbKmbMsbMtbMtbMubMvbLnbMwbMxbMybMzbMAbMBbMCbMDbMEbMFbMGbMFbMHbMIbMJaafbMKbMKbMKbMKbMKbMLbyebKvbMMbMNbMObMPbMQbLGbMRbMSbMTbLGbMUbMVbMWbMVbMUbLFbMXbBMbKKbKKbKKbMYbKKbKKbMZbNabNbbNbbNcbNbbNbbNdbNebNfbNgbKVaafbKWbLWbNhbKZbNibKZbNjbNkbNlbDnbsebtnbkFbjobsebsebjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbNmbENbMjaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBcbBcbJYbJYbJYbBcbBcaaaaaaaaaaaabJYbEYbEZaaaaaaaaaaafbMkbNnbMmbMmbMmbMmbMobYnbNpbNqbNrbKjbNsbNtbNubNvbNwbNxbNybNzbNAbNwbNwbNwbNybNBbNCbNDbNEbNFbLBbNGbNHbNIbNJbNKbLDbNLbNMbNNbNObMKbMLbNPbKvbLFbNQbMUbMUbMUbLGbNRbNSbNTbLGbMVbNUbMVbNVbNWbNXbNYbBMbNZbOabObbOcbOdbOebOfbOgbOhbOibOjbOkbOlbItbOmbZlbOobOpbOpbDnbDnbDnbDnbDnbDnbDdbDdbDdbDnbsebtnbOqbsebsebOrbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObENaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaIaafaaaaafaaIaafaaaaaaaaaaaabJYbEYbEZaaaaaaaaaaafbMkbMlbMlbMmbMnbMobMobMpbMpbMkbDLbMqbKkbMrbKmbMsbMtbMtbMubMvbLnbMwbMxbMybMzbMAbMBbMCbMDbMEbMFbMGbMFbMHbMIbMJaafbMKbMKbMKbMKbMKbMLbyebKvbMMblFbMObMPbMQbLGbMRbMSbMTbLGbMUbMVbMWbMVbMUbLFbMXbBMbKKbKKbKKbMYbKKbKKbMZbNabNbbNbbNcbNbbNbbNdbNebNfbNgbKVaafbKWbLWbNhbKZbNibKZbNjbNkbNlbDnbsebtnbkFbjobsebsebjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbNmbENbMjaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBcbBcbJYbJYbJYbBcbBcaaaaaaaaaaaabJYbEYbEZaaaaaaaaaaafbMkbNnbMmbMmbMmbMmbMobYnbNpbNqbNrbKjbNsbNtbNubNvbNwbNxbNybNzbNAbNwbNwbNwbNybNBbNCbNDbNEbNFbLBbNGbNHbNIbNJbNKbLDbNLbNMbNNbNObMKbMLbNPbKvbLFbNQbMUbMUbxPbLGbNRbNSbNTbLGbMVbNUbMVbNVbNWbNXbNYbBMbNZbOabObbOcbOdbOebOfbOgbOhbOibOjbOkbOlbItbOmbZlbOobOpbOpbDnbDnbDnbDnbDnbDnbDdbDdbDdbDnbsebtnbOqbsebsebOrbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObENaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcbOsbGnbOtbGnbOubBcaaaaaaaaaaaabJYbJZbEZaaaaafbJYbJYbMkbMmbMmbOwbOvbMmbOxbMobMobOzbDLbMqbOAbOBbZmbODbOEbOFbOGbOHbOIbOFbOJbOFbOKbOLbOMbLubONbOObOPbOQbORbOSbOTbOUaafbOVbOWbNObOXbMKbMLbNPbKvbLFbOYbOZbMUbPabLGbPbbPcbPdbLGbMUbPebPfbMUbMUbLFbKvbBMbItbItbItbItbJHbPgbPhbPibJHbItbItbItbItbItbPjbPkbPlbPmbPnbPobPpbPqbPpbPrbOpbPsbPtbPubPvbPwbtnbkFbjobjobjobjoabtaafaafaafaagaagaagaagaagaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbBcbPxbGnbGnbGnbPybBcaaaaaaaaaaaabJYbEYbEZaaaaafbJYbPzbPAbPBbMmbMmcbdbPDbPDbPDbPEbPFcbebMqbOAbPHccdbPJbPKbMFbPLbPMbPNbPObPPbPQbPRbPSbPSbPTbPUbLBbPVbPWbPXbPYbPZbQabQbbNLbQcbNObNObMKbMLbNPbKvbLFbQdbMUbQebLHbLGbLGbQfbLGbLGbQgbQhbQibQgbQgbLFbKvbBMbQjbQkbQkbQlbQmbKKbQnbQobQpbQqbCWbCWbCWbItbQrbQsbQtbQubQvbPobQwbQxbQybQzbOmbPtbQAbPtbPvbBRbQBbQCbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcbPxbGnbGnbQDbQEbBcaaaaafaaaaaabJYbEYbDCbBcbBcbBcbQFbMkbQGbMmbMmcqmbQHbQIbQJbQKbMkcqnbMqbOAbPHcqobQLbQMbMFbMFbQNbLnbQObQPbQQbQRbMFbMFbLubQSbQTbQUbQVbQWbQXbQWbQYaafbMKbMKbMKbMKbMKbMLbyebKvbLFbQZbRabRabRbbRcbRdbRebRfbRgbMUbPebMUbMUcqpbLFbKvbBMbCWbCWbCWbRhbRibKKbRjbKKbRkbRlbCWbCWbCWbItbRmbRnbRobRpbRqbRrbRsbRtbRrbRubOpbRvbPtbRwbPvbjobRxbRybjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm index 991c083e466..802eec5049f 100644 --- a/code/modules/mob/living/carbon/human/blood.dm +++ b/code/modules/mob/living/carbon/human/blood.dm @@ -109,11 +109,11 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 for(var/obj/item/organ/limb/org in organs) var/brutedamage = org.brute_dam - if(brutedamage > 20) + if(brutedamage > 30) blood_max += 0.5 - if(brutedamage > 40) + if(brutedamage > 50) blood_max += 1 - if(brutedamage > 60) + if(brutedamage > 70) blood_max += 2 if(bleedsuppress) blood_max = 0 From cc94e4eb9c0a4de2c154a5d3eeeee1ebbb356d17 Mon Sep 17 00:00:00 2001 From: paprka Date: Mon, 26 Jan 2015 03:58:23 -0800 Subject: [PATCH 17/22] changelog and nerf --- code/game/objects/items/stacks/medical.dm | 4 ++-- html/changelogs/Paprka-ointmentandshit.yml | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 html/changelogs/Paprka-ointmentandshit.yml diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 29991b298ca..02f70309dd0 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -86,13 +86,13 @@ gender = PLURAL singular_name = "medical gauze" icon_state = "gauze" - stop_bleeding = 3000 //five minutes + stop_bleeding = 1800 //180 seconds /obj/item/stack/medical/gauze/improvised name = "improvised gauze" singular_name = "improvised gauze" desc = "A roll of cloth roughly cut from something that can stop bleeding, but does not heal wounds." - stop_bleeding = 1200 //two minutes + stop_bleeding = 900 //90 seconds /obj/item/stack/medical/ointment name = "ointment" diff --git a/html/changelogs/Paprka-ointmentandshit.yml b/html/changelogs/Paprka-ointmentandshit.yml new file mode 100644 index 00000000000..ea04e9e1fa0 --- /dev/null +++ b/html/changelogs/Paprka-ointmentandshit.yml @@ -0,0 +1,4 @@ +author: Paprika +delete-after: True +changes: + - rscadd: "Added blood and bleeding. If you take enough brute damage on a certain limb, you will start bleeding, and will need to patch your bleeding with gauze from medbay. You can replace lost blood by eating nutritious food and waiting for your heart to reproduce it, or by getting a blood transfusion from an IV drip." \ No newline at end of file From 1ce5722eac780e17b781b54cd42c5267da5c7f6c Mon Sep 17 00:00:00 2001 From: paprka Date: Sat, 31 Jan 2015 23:14:12 -0800 Subject: [PATCH 18/22] map conflicts and other changes --- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 56 +++--- .../objects/items/weapons/storage/firstaid.dm | 182 +++++++++--------- .../reagents/reagent_containers/blood_pack.dm | 3 + icons/obj/items.dmi | Bin 63407 -> 63441 bytes 4 files changed, 121 insertions(+), 120 deletions(-) diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 5ae648be540..59b4b1df020 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -1023,10 +1023,10 @@ "atI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "atJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/maintenance/fpmaint2) "atK" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) -"atL" = (/obj/structure/mirror{icon_state = "mirror_broke"; pixel_y = 28; shattered = 1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"atL" = (/obj/structure/mirror{icon_state = "mirror_broke"; pixel_y = 28; shattered = 1},/obj/machinery/iv_drip,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "atM" = (/obj/structure/computerframe,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "atN" = (/obj/structure/mirror{icon_state = "mirror_broke"; pixel_y = 28; shattered = 1},/obj/item/weapon/shard{icon_state = "medium"},/obj/item/weapon/circuitboard/operating,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) -"atO" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/stool/bed/chair,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"atO" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/stool/bed/chair,/obj/item/weapon/reagent_containers/blood/random,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "atP" = (/obj/item/weapon/airlock_painter,/obj/structure/lattice,/obj/structure/closet,/turf/space,/area/space) "atQ" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{tag = "icon-manifold (WEST)"; icon_state = "manifold"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "atR" = (/obj/machinery/atmospherics/unary/tank/air{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) @@ -1201,9 +1201,9 @@ "axe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 1},/area/hallway/secondary/entry) "axf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel,/area/hallway/secondary/entry) "axg" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry) -"axh" = (/obj/structure/closet/wardrobe/white,/obj/item/clothing/shoes/jackboots,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"axh" = (/obj/structure/closet/wardrobe/white,/obj/item/clothing/shoes/jackboots,/obj/item/weapon/reagent_containers/blood/random,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "axi" = (/obj/structure/table/glass,/obj/item/weapon/hemostat,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) -"axj" = (/obj/structure/table/glass,/obj/item/weapon/restraints/handcuffs/cable/zipties,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"axj" = (/obj/structure/table/glass,/obj/item/weapon/restraints/handcuffs/cable/zipties,/obj/item/weapon/reagent_containers/blood/random,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "axk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "axl" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "axm" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) @@ -3939,7 +3939,7 @@ "bxM" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper) "bxN" = (/obj/structure/stool/bed/chair,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper) "bxO" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper) -"bxP" = (/obj/structure/closet/wardrobe/pjs,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/camera{c_tag = "Medbay Treatment Center"; dir = 4; network = list("SS13"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bxP" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/camera{c_tag = "Medbay Treatment Center"; dir = 4; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bxQ" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bxR" = (/obj/effect/landmark/start{name = "Medical Doctor"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bxS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) @@ -4003,7 +4003,7 @@ "byY" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper) "byZ" = (/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper) "bza" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper) -"bzb" = (/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bzb" = (/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bzc" = (/obj/machinery/light,/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/floor/plasteel,/area/medical/sleeper) "bzd" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel,/area/medical/sleeper) "bze" = (/obj/structure/table/reinforced,/obj/item/weapon/wrench{pixel_x = 5; pixel_y = -5},/turf/simulated/floor/plasteel,/area/medical/sleeper) @@ -4131,7 +4131,7 @@ "bBw" = (/obj/structure/closet/secure_closet/medical3,/obj/machinery/alarm{pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bBx" = (/obj/structure/closet/secure_closet/medical3,/obj/machinery/camera{c_tag = "Medbay Storage"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bBy" = (/obj/structure/table,/obj/item/weapon/storage/box/bodybags{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/rxglasses,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) -"bBz" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bBz" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bBA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/sleeper) "bBB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitebluecorner"},/area/medical/medbay) "bBC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) @@ -4195,7 +4195,7 @@ "bCI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bCJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bCK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) -"bCL" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bCL" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bCM" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Medbay Storage"; req_access_txt = "45"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bCN" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/medbay) "bCO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) @@ -4272,7 +4272,7 @@ "bEh" = (/obj/structure/table,/obj/item/weapon/storage/belt/medical{pixel_x = 0; pixel_y = 2},/obj/item/weapon/storage/belt/medical{pixel_x = 0; pixel_y = 2},/obj/item/weapon/storage/belt/medical{pixel_x = 0; pixel_y = 2},/obj/item/clothing/tie/stethoscope,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bEi" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bEj" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) -"bEk" = (/obj/structure/disposalpipe/segment,/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bEk" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bEl" = (/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = -30; pixel_y = 0},/obj/machinery/camera{c_tag = "Medbay South"; dir = 4; network = list("SS13")},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bEm" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bEn" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/cmo) @@ -4340,9 +4340,9 @@ "bFx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitehall"},/area/medical/sleeper) "bFy" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/structure/sign/nosmoking_2{pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"},/area/medical/sleeper) "bFz" = (/obj/structure/table/glass,/obj/machinery/camera{c_tag = "Medbay Cryogenics"; dir = 2; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel,/area/medical/sleeper) -"bFA" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/folder/white,/obj/item/weapon/hand_labeler,/obj/item/weapon/gun/syringe,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bFA" = (/obj/machinery/vending/wallmed{pixel_x = 28; pixel_y = 0},/obj/machinery/camera{c_tag = "Medbay Recovery Room"; dir = 8; network = list("SS13")},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bFB" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/firedoor/heavy,/turf/simulated/floor/engine,/area/toxins/explab) -"bFC" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bFC" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/item/weapon/gun/syringe,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bFD" = (/obj/structure/flora/tree/festivus,/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/crew_quarters/hor) "bFE" = (/obj/structure/stool/bed/chair/office/light{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bFF" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/door_control{id = "medpriv4"; name = "Privacy Shutters"; pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) @@ -4405,16 +4405,16 @@ "bGK" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 1},/area/medical/sleeper) "bGL" = (/obj/machinery/camera{c_tag = "Telescience Test Chamber"; dir = 1; network = list("SS13","RD")},/obj/machinery/light,/obj/structure/sign/nosmoking_2{pixel_y = -32},/turf/simulated/floor/engine,/area/toxins/explab) "bGM" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 1},/area/medical/sleeper) -"bGN" = (/obj/structure/closet/crate/freezer,/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel,/area/medical/sleeper) +"bGN" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = 7; pixel_y = -3},/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bGO" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bGP" = (/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) -"bGQ" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bGQ" = (/obj/structure/closet/crate/freezer,/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty{pixel_x = -3; pixel_y = -3},/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/BMinus{pixel_x = -4; pixel_y = 4},/obj/item/weapon/reagent_containers/blood/BPlus{pixel_x = 1; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = -2; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/turf/simulated/floor/plasteel,/area/medical/sleeper) "bGR" = (/obj/structure/table,/obj/machinery/light,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) -"bGS" = (/obj/structure/table,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/reagent_containers/glass/beaker/large/charcoal,/obj/item/weapon/reagent_containers/glass/beaker/large/epinephrine,/obj/item/weapon/reagent_containers/glass/beaker/large/styptic,/obj/item/weapon/reagent_containers/glass/beaker/large/silver_sulfadiazine,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) -"bGT" = (/obj/structure/table,/obj/machinery/requests_console{announcementConsole = 0; department = "Medbay"; departmentType = 1; name = "Medbay RC"; pixel_x = 0; pixel_y = -30; pixel_z = 0},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) -"bGU" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -30},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/o2{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) -"bGV" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/brute{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/brute{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) -"bGW" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bGS" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bGT" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 3; pixel_y = -3},/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/o2{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bGU" = (/obj/structure/table,/obj/machinery/requests_console{announcementConsole = 0; department = "Medbay"; departmentType = 1; name = "Medbay RC"; pixel_x = 0; pixel_y = -30; pixel_z = 0},/obj/item/weapon/storage/firstaid/regular{pixel_x = 3; pixel_y = -3},/obj/item/weapon/storage/firstaid/fire{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bGV" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -30},/obj/item/weapon/storage/firstaid/regular{pixel_x = 3; pixel_y = -3},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/toxin{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bGW" = (/obj/machinery/light,/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bGX" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bGY" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bGZ" = (/obj/machinery/door/airlock/medical{name = "Patient Room"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) @@ -4480,7 +4480,7 @@ "bIh" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bIi" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bIj" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"bIk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall,/area/medical/sleeper) +"bIk" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 3; pixel_y = -3},/obj/item/weapon/storage/firstaid/brute{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/brute,/obj/item/weapon/storage/firstaid/brute{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) "bIl" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bIm" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bIn" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/shieldwallgen{req_access = list(55)},/turf/simulated/floor/plating,/area/toxins/xenobiology) @@ -4717,7 +4717,7 @@ "bMK" = (/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos) "bML" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/space,/area/space) "bMM" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/wall/r_wall,/area/medical/virology) -"bMN" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) +"bMN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/medical/sleeper) "bMO" = (/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 29},/obj/machinery/camera{c_tag = "Virology Break Room"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bMP" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bMQ" = (/obj/item/weapon/bedsheet,/obj/structure/stool/bed,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) @@ -4795,7 +4795,7 @@ "bOk" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "bOl" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "bOm" = (/obj/structure/grille,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/toxins/misc_lab) -"bOn" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed{pixel_x = 28; pixel_y = 0},/obj/machinery/camera{c_tag = "Medbay Recovery Room"; dir = 8; network = list("SS13")},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bOn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/medical/sleeper) "bOo" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/toxins/misc_lab) "bOp" = (/turf/simulated/wall,/area/toxins/misc_lab) "bOq" = (/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -4810,7 +4810,7 @@ "bOz" = (/obj/machinery/door/airlock/engineering{name = "Construction Area"; req_access_txt = "32"},/turf/simulated/floor/plating,/area/construction) "bOA" = (/turf/simulated/floor/plasteel,/area/hallway/primary/aft) "bOB" = (/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 5},/area/hallway/primary/aft) -"bOC" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = 7; pixel_y = -3},/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/item/weapon/reagent_containers/glass/bottle/toxin{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper) +"bOC" = (/turf/simulated/wall/r_wall,/area/medical/medbay) "bOD" = (/obj/structure/dispenser{pixel_x = -1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos) "bOE" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/atmos) "bOF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) @@ -6263,6 +6263,7 @@ "cqw" = (/obj/machinery/door/airlock/hatch{name = "Teleporter Room"; req_access_txt = "17;65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) "cqx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/tcommsat/computer) "cqy" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/tcommsat/computer) +"cqz" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty{pixel_x = -3; pixel_y = -3},/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/BMinus{pixel_x = -4; pixel_y = 4},/obj/item/weapon/reagent_containers/blood/BPlus{pixel_x = 1; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = -2; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "cqA" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity West"; dir = 1; network = list("Singularity")},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cqB" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity East"; dir = 1; network = list("Singularity")},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cqC" = (/obj/item/device/radio/intercom{dir = 8; freerange = 1; name = "Station Intercom (Telecoms)"; pixel_x = 0; pixel_y = 26},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel,/area/tcommsat/computer) @@ -6305,6 +6306,7 @@ "crn" = (/obj/machinery/door_control{id = "teledoor"; name = "AI Satellite Teleport Shutters Control"; pixel_x = 25; pixel_y = 0; req_access_txt = "17;65"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) "cro" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat) "crp" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"crq" = (/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "crs" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) "cru" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/aisat) "crv" = (/obj/machinery/door/poddoor/shutters{id = "teledoor"; name = "AI Satellite Teleport Access"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) @@ -6618,14 +6620,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibwibwkbwkbwkbwkbwibwibAXbAYbAZbBabuQbuQbuQbuQbuQbuQbBbbBcaIcaIcaIcaIcbBdbBdbBdbBdbBdbBdbBdbBdbBdbBdbBebBfbBgbBhbBhbBhbBhbBhbBibBhbBhbBjbBhbyebBkbyeaIdaJlbBlbtXbBmbBnbBobBpbBqbtXbBrbxQbBsbBtbBubBvbBwbBxbBybBzbBAbBBbBCbBDbBDbBEbBFbBGbBHbBIbBJbBKbBLbAwbzibgibBMbBMbBMbBMbBMbBMbBMbBMbBMbBNbBNbBNbBNbBNbBNbBObBPbBQbuybuybuybuybuybuybuybxhbrVbrVbrVbrVbrVbrVbrVbrVbtnbgxbBRbBSbjobjoaafaafaafaagaagaagaagaagaagaagaagaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBTaaaaaaaaaaafaaaaaabwlbBUbBVbBWbBXbBYbBZbCabCbbCcbCdbCebCfaaaaaaaafaaabBdbCgbChbCibCjbCkbClbCmbCnbCobCpbCqbCrbBhbCsbCtbCubCvbCwbCvbCvbCxbCybCzbCAbyebyebyebyebtXbCBbCCbCDbCCbCEbtXbCFbvpbCGbCHbCIbCJbCIbCIbCKbCLbCMbCNbCObCObCObCPbCQbvlbCRbCSbCTbCUbCVbAwbzibgibBMbCWbCWbCWbCXbCWbCWbCWbBMbCYbCYbCZbCYbCYbBNbDabDbbqibDcbDdbDebDfbDgbDhbJqbDjbDkbDlbDmbDnbDobDpbDqbDqbDrbDsbDdbDdbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajxaekaeZaekaelaaaaafaaabwlbwlbDtbxrbDubDvbDwbDxbDybDybDzbDAbDBbDCaafbDDbDEbDFbDGbDHbDIbDJbDIbDKbDIbDIbDIbBdbDLbDMbDNbBhbDObDPbDQbDRbDSbCvbDTbBjbBhbDUbDVbDWbDXbDYbDZbEabEbbCCbEcbCCbxQbEdbEebEfbEgbtXbEhbEibCCbCCbEjbEkbmSbmSbmSbmSbmSbElbEmbpGbEnbEobEpbBKbEqbAwbzibgibBMbCWbCWbCWbCWbCWbCWbCWbBMbErbEsbEtbEubEvbBNbEwbExbEybEzbEAbEBbECbEDbEDbEDbEDbEEbEFbEGbDnbjobEHbEIbEJbEJbEKbELbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObENaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZbEPbEQbEPajZbERbERbERbwlbESbxrbETbEUbEVbEWbwlbBcbEXbBcbBcbEYbEZaaabFabFbbFcbFdbDIbDIbFebDIbFfbFgbFhbDIbBdbDLbFibFjbBhbFkbFlbFmbFnbFobCvbFpbBjbzibFqbFrbFsbFrbFtbFubtXbFvbCIbFwbCIbFxbtSbFybCJbOnbtXbFAbCCbCCbCCbOCbFCbmSbPIbFEbFFbFGbBEbFHbvlbFIbBKbBKbFJbFKbFLbFMbFNbBMbCWbCWbCWbCWbCWbCWbCWbBMbFObFPbFQbFRbFSbFTbFUbFVbtbbFWbFXbEDbFYbEDbEDbEDbEDbEDbEDbEDbDnbFZbGabGbbGcbGdbGebGfbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbGgbENbEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZalQaHnalQaeZbERbGhbGibwlbGjbxrbGkbxrbxrbEWbwlbGlbGmbGnbBcbEYbEZaafbFabGobGpbGqbGrbGsbGrbGrbGtbGubGrbGrbGvbGwbGxbGybBhbGzbBhbBhbBhbBhbGAbGBbGCbGDbGEbGFbGGbGHbGIbGIbtXbGJbGKcltbGMbGNbtXbGObGPbGQbtXbGRbGSbGUbGTbGVbGWbmSbGXbGYbpFbGZbHabHbbHcbCRbHdbBKbBKbHebAwbzibgibBMbBMbHfbCWbCWbHgbHfbBMbBMbHhbHibHjbHkbHlbBNbHmbHnbtbbHobHpbHqbHqbHrbHsbHtbHqbHubHvbHwbHxbHybHzbHAbHBbHCbHDbHEbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObHGbHHbHIbEObHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZalQalQalQbHJbHKbxrbxrbHLbGjbxrbxrbxrbxrbEWbwlbHMbGnbHNbBcbEYbEZaaabFabHObHPbHQbDIbDIbHRbDIbHSbHTbHUbHVbBdbHWbHXbHYbHZbIabIbbIbbIbbIbbIbbIcbIbbIdbIebIfbIgbIhbIibIjbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbIkbmSbmSbmSbmSbmSbIlbImbhjbAwbAwbAwbAwbAwbAwbzibgibBMbInbIobIpbIqbIrbIsbInbItbHhbHibHjbIubIvbIwbIxbIybuwbIzbDdbIAbIAbIBbICbIDbIEbEDbEDbIFbDnbIGbIHbIIbDdbIJbIKbIKbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObILbIMbIMbIMbINbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZbEPbEQbEPajZbERbERbERbwlbESbxrbETbEUbEVbEWbwlbBcbEXbBcbBcbEYbEZaaabFabFbbFcbFdbDIbDIbFebDIbFfbFgbFhbDIbBdbDLbFibFjbBhbFkbFlbFmbFnbFobCvbFpbBjbzibFqbFrbFsbFrbFtbFubtXbFvbCIbFwbCIbFxbtSbFybCJbFAbtXbFCbCCbCCbCCbCCbGNbmSbPIbFEbFFbFGbBEbFHbvlbFIbBKbBKbFJbFKbFLbFMbFNbBMbCWbCWbCWbCWbCWbCWbCWbBMbFObFPbFQbFRbFSbFTbFUbFVbtbbFWbFXbEDbFYbEDbEDbEDbEDbEDbEDbEDbDnbFZbGabGbbGcbGdbGebGfbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbGgbENbEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZalQaHnalQaeZbERbGhbGibwlbGjbxrbGkbxrbxrbEWbwlbGlbGmbGnbBcbEYbEZaafbFabGobGpbGqbGrbGsbGrbGrbGtbGubGrbGrbGvbGwbGxbGybBhbGzbBhbBhbBhbBhbGAbGBbGCbGDbGEbGFbGGbGHbGIbGIbtXbGJbGKcltbGMbGQbtXbGObGPbGSbtXbGRbGTbGVbGUbIkbGWbmSbGXbGYbpFbGZbHabHbbHcbCRbHdbBKbBKbHebAwbzibgibBMbBMbHfbCWbCWbHgbHfbBMbBMbHhbHibHjbHkbHlbBNbHmbHnbtbbHobHpbHqbHqbHrbHsbHtbHqbHubHvbHwbHxbHybHzbHAbHBbHCbHDbHEbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObHGbHHbHIbEObHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZalQalQalQbHJbHKbxrbxrbHLbGjbxrbxrbxrbxrbEWbwlbHMbGnbHNbBcbEYbEZaaabFabHObHPbHQbDIbDIbHRbDIbHSbHTbHUbHVbBdbHWbHXbHYbHZbIabIbbIbbIbbIbbIbbIcbIbbIdbIebIfbIgbIhbIibIjbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbMNbMNbMNbMNbMNbMNbOnbOCbmSbmSbmSbmSbIlbImbhjbAwbAwbAwbAwbAwbAwbzibgibBMbInbIobIpbIqbIrbIsbInbItbHhbHibHjbIubIvbIwbIxbIybuwbIzbDdbIAbIAbIBbICbIDbIEbEDbEDbIFbDnbIGbIHbIIbDdbIJbIKbIKbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObILbIMbIMbIMbINbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZaHnaHnaHnaeZbERbIObIPbIQbIRbxrbxrbISbITbIUbwlbBcbBcbBcbBcbEYbDCaafbIVbDEbIWbDGbIXbDIbIYbDIbDIbDIbDIbDIbBdbDLbIZbJabJbbJcbJcbJcbJcbJcbJcbJdbJebJfbJgbJhbJibJjbJkbJlbJmbJnbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJobJpbmSbGXcqlbBDbJrbBEbJsbJtbJubJvbJvbJwbJxbJgbJybJzbBMbJAbJBbJCbJDbJEbJFbJGbItbItbItbItbItbItbJHbJIbJJbJKbJLbDdbDnbDnbDnbDnbDnbDnbJMbEDbEDbDnbjobEHbgxbDdbJNbJObJPbJQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJRbJSbJRbIMbJTbIMbJUbJVbENaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZamIbJWbJXajZbERbERbERbwlbwlbERbERbERbwlbwlbwlaaaaaaaaabJYbJZbEZaaaaaaaafaaabBdbKabKbbKcbDIbKdbKebKfbKgbKhbKibKjbKkbKlbKmbKnbKobKpbKqbKmbKmbKmbKmbKmbKrbKsbKmbKmbKtbKmbKubKmbKmbKmbKmbKmbyebyebyebyebyebyebyebyebKvbKwbmSbKxbKybKzbKAbKBbKCbKDbKEbKFbKFbKGbKFbKFbKHbKIbBMbKJbKKbKLbKKbKMbKKbKNbKObKPbKQbKRbKSbKTbKUbyqbHnbqibKVaafbKWbKXbKYbKZbLabKZbLbbLcbLdbDnbLebtnbLfbDdbDdbDdbDdbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObLgbIMbIMbIMbLhbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanTaekbLiaekafOaaaaaaaaaaafaaIaafaaaaafaaIaafaaaaaaaaaaafbJYbEYbEZaafaafaafaafbBdbBdbBdbBdbBdbBdbBdbBdbBdbBdbLjbLkbLlbLmbKmbKnbKobKpbKqbLnbLnbLobLpbLqbLrbLsbLtbLubLvbLwbLxbLybLzbLAbLBbLCbLDbLDbLDbLDbLDbLDbLEbyebKvbLFbLGbLGbLGbLGbLGbLHbLIbLJbLGbLGbLGbLGbLGbLGbLFbLKbLLbLMbLNbLObLNbLPbLQbLRbLSbLSbLSbLSbLSbLSbLTbLUbLVbqibKVaafbKWbLWbLWbLXbLYbLZbMabMbbMcbDnbMdbtnbkFbjobMebMfbjoaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObMgbMhbMibMjbHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaIaafaaaaafaaIaafaaaaaaaaaaaabJYbEYbEZaaaaaaaaaaafbMkbMlbMlbMmbMnbMobMobMpbMpbMkbDLbMqbKkbMrbKmbMsbMtbMtbMubMvbLnbMwbMxbMybMzbMAbMBbMCbMDbMEbMFbMGbMFbMHbMIbMJaafbMKbMKbMKbMKbMKbMLbyebKvbMMbMNbMObMPbMQbLGbMRbMSbMTbLGbMUbMVbMWbMVbMUbLFbMXbBMbKKbKKbKKbMYbKKbKKbMZbNabNbbNbbNcbNbbNbbNdbNebNfbNgbKVaafbKWbLWbNhbKZbNibKZbNjbNkbNlbDnbsebtnbkFbjobsebsebjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbNmbENbMjaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBcbBcbJYbJYbJYbBcbBcaaaaaaaaaaaabJYbEYbEZaaaaaaaaaaafbMkbNnbMmbMmbMmbMmbMobYnbNpbNqbNrbKjbNsbNtbNubNvbNwbNxbNybNzbNAbNwbNwbNwbNybNBbNCbNDbNEbNFbLBbNGbNHbNIbNJbNKbLDbNLbNMbNNbNObMKbMLbNPbKvbLFbNQbMUbMUbMUbLGbNRbNSbNTbLGbMVbNUbMVbNVbNWbNXbNYbBMbNZbOabObbOcbOdbOebOfbOgbOhbOibOjbOkbOlbItbOmbZlbOobOpbOpbDnbDnbDnbDnbDnbDnbDdbDdbDdbDnbsebtnbOqbsebsebOrbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObENaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaIaafaaaaafaaIaafaaaaaaaaaaaabJYbEYbEZaaaaaaaaaaafbMkbMlbMlbMmbMnbMobMobMpbMpbMkbDLbMqbKkbMrbKmbMsbMtbMtbMubMvbLnbMwbMxbMybMzbMAbMBbMCbMDbMEbMFbMGbMFbMHbMIbMJaafbMKbMKbMKbMKbMKbMLbyebKvbMMcqzbMObMPbMQbLGbMRbMSbMTbLGbMUbMVbMWbMVbMUbLFbMXbBMbKKbKKbKKbMYbKKbKKbMZbNabNbbNbbNcbNbbNbbNdbNebNfbNgbKVaafbKWbLWbNhbKZbNibKZbNjbNkbNlbDnbsebtnbkFbjobsebsebjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbNmbENbMjaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBcbBcbJYbJYbJYbBcbBcaaaaaaaaaaaabJYbEYbEZaaaaaaaaaaafbMkbNnbMmbMmbMmbMmbMobYnbNpbNqbNrbKjbNsbNtbNubNvbNwbNxbNybNzbNAbNwbNwbNwbNybNBbNCbNDbNEbNFbLBbNGbNHbNIbNJbNKbLDbNLbNMbNNbNObMKbMLbNPbKvbLFbNQbMUbMUcrqbLGbNRbNSbNTbLGbMVbNUbMVbNVbNWbNXbNYbBMbNZbOabObbOcbOdbOebOfbOgbOhbOibOjbOkbOlbItbOmbZlbOobOpbOpbDnbDnbDnbDnbDnbDnbDdbDdbDdbDnbsebtnbOqbsebsebOrbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObENaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcbOsbGnbOtbGnbOubBcaaaaaaaaaaaabJYbJZbEZaaaaafbJYbJYbMkbMmbMmbOwbOvbMmbOxbMobMobOzbDLbMqbOAbOBbZmbODbOEbOFbOGbOHbOIbOFbOJbOFbOKbOLbOMbLubONbOObOPbOQbORbOSbOTbOUaafbOVbOWbNObOXbMKbMLbNPbKvbLFbOYbOZbMUbPabLGbPbbPcbPdbLGbMUbPebPfbMUbMUbLFbKvbBMbItbItbItbItbJHbPgbPhbPibJHbItbItbItbItbItbPjbPkbPlbPmbPnbPobPpbPqbPpbPrbOpbPsbPtbPubPvbPwbtnbkFbjobjobjobjoabtaafaafaafaagaagaagaagaagaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbBcbPxbGnbGnbGnbPybBcaaaaaaaaaaaabJYbEYbEZaaaaafbJYbPzbPAbPBbMmbMmcbdbPDbPDbPDbPEbPFcbebMqbOAbPHccdbPJbPKbMFbPLbPMbPNbPObPPbPQbPRbPSbPSbPTbPUbLBbPVbPWbPXbPYbPZbQabQbbNLbQcbNObNObMKbMLbNPbKvbLFbQdbMUbQebLHbLGbLGbQfbLGbLGbQgbQhbQibQgbQgbLFbKvbBMbQjbQkbQkbQlbQmbKKbQnbQobQpbQqbCWbCWbCWbItbQrbQsbQtbQubQvbPobQwbQxbQybQzbOmbPtbQAbPtbPvbBRbQBbQCbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaabBcbPxbGnbGnbQDbQEbBcaaaaafaaaaaabJYbEYbDCbBcbBcbBcbQFbMkbQGbMmbMmcqmbQHbQIbQJbQKbMkcqnbMqbOAbPHcqobQLbQMbMFbMFbQNbLnbQObQPbQQbQRbMFbMFbLubQSbQTbQUbQVbQWbQXbQWbQYaafbMKbMKbMKbMKbMKbMLbyebKvbLFbQZbRabRabRbbRcbRdbRebRfbRgbMUbPebMUbMUcqpbLFbKvbBMbCWbCWbCWbRhbRibKKbRjbKKbRkbRlbCWbCWbCWbItbRmbRnbRobRpbRqbRrbRsbRtbRrbRubOpbRvbPtbRwbPvbjobRxbRybjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 7a948f66377..38b22179c38 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -16,117 +16,113 @@ throw_range = 7 var/empty = 0 - -/obj/item/weapon/storage/firstaid/fire - name = "fire first-aid kit" - desc = "It's an emergency medical kit for when the toxins lab -spontaneously- burns down." - icon_state = "ointment" - item_state = "firstaid-ointment" - -/obj/item/weapon/storage/firstaid/fire/New() - ..() - if (empty) return - - icon_state = pick("ointment","firefirstaid") - - new /obj/item/stack/medical/ointment(src) - new /obj/item/stack/medical/ointment(src) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) - new /obj/item/weapon/reagent_containers/hypospray/medipen(src) - new /obj/item/weapon/reagent_containers/pill/salicyclic(src) - new /obj/item/device/healthanalyzer(src) - return - - /obj/item/weapon/storage/firstaid/regular icon_state = "firstaid" + desc = "A first aid kit with the ability to heal common types of injuries." /obj/item/weapon/storage/firstaid/regular/New() ..() - if (empty) return + if(empty) return new /obj/item/stack/medical/gauze(src) new /obj/item/stack/medical/bruise_pack(src) new /obj/item/stack/medical/bruise_pack(src) new /obj/item/stack/medical/ointment(src) new /obj/item/stack/medical/ointment(src) - new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) + new /obj/item/weapon/reagent_containers/hypospray/medipen(src) + new /obj/item/device/healthanalyzer(src) + return + +/obj/item/weapon/storage/firstaid/fire + name = "burn treatment kit" + desc = "A specialized medical kit for when the toxins lab -spontaneously- burns down." + icon_state = "ointment" + item_state = "firstaid-ointment" + +/obj/item/weapon/storage/firstaid/fire/New() + ..() + if(empty) return + icon_state = pick("ointment","firefirstaid") + new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) + new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) + new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) + new /obj/item/weapon/reagent_containers/pill/salicyclic(src) + new /obj/item/weapon/reagent_containers/pill/salicyclic(src) + new /obj/item/weapon/reagent_containers/hypospray/medipen(src) new /obj/item/device/healthanalyzer(src) return /obj/item/weapon/storage/firstaid/toxin - name = "toxin first aid" - desc = "Used to treat when you have a high amoutn of toxins in your body." + name = "toxin treatment kit" + desc = "Used to treat toxic blood content and radiation poisoning." icon_state = "antitoxin" item_state = "firstaid-toxin" /obj/item/weapon/storage/firstaid/toxin/New() ..() - if (empty) return - + if(empty) return icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3") - - new /obj/item/weapon/reagent_containers/syringe/charcoal( src ) - new /obj/item/weapon/reagent_containers/syringe/charcoal( src ) - new /obj/item/weapon/reagent_containers/syringe/charcoal( src ) - new /obj/item/weapon/reagent_containers/pill/charcoal( src ) - new /obj/item/weapon/reagent_containers/pill/charcoal( src ) - new /obj/item/weapon/reagent_containers/pill/charcoal( src ) - new /obj/item/device/healthanalyzer( src ) + new /obj/item/weapon/reagent_containers/syringe/charcoal(src) + new /obj/item/weapon/reagent_containers/syringe/charcoal(src) + new /obj/item/weapon/reagent_containers/syringe/charcoal(src) + new /obj/item/weapon/reagent_containers/pill/charcoal(src) + new /obj/item/weapon/reagent_containers/pill/charcoal(src) + new /obj/item/weapon/reagent_containers/pill/charcoal(src) + new /obj/item/device/healthanalyzer(src) return /obj/item/weapon/storage/firstaid/o2 - name = "oxygen deprivation first aid" + name = "oxygen deprivation treatment kit" desc = "A box full of oxygen goodies." icon_state = "o2" item_state = "firstaid-o2" /obj/item/weapon/storage/firstaid/o2/New() ..() - if (empty) return + if(empty) return new /obj/item/weapon/reagent_containers/pill/salbutamol(src) new /obj/item/weapon/reagent_containers/pill/salbutamol(src) new /obj/item/weapon/reagent_containers/pill/salbutamol(src) new /obj/item/weapon/reagent_containers/pill/salbutamol(src) new /obj/item/weapon/reagent_containers/hypospray/medipen(src) new /obj/item/weapon/reagent_containers/hypospray/medipen(src) - new /obj/item/device/healthanalyzer( src ) + new /obj/item/device/healthanalyzer(src) return /obj/item/weapon/storage/firstaid/brute - name = "brute first aid" + name = "brute trauma treatment kit" desc = "A first aid kit for when you get toolboxed." icon_state = "brute" item_state = "firstaid-brute" /obj/item/weapon/storage/firstaid/brute/New() ..() - if (empty) return - new /obj/item/stack/medical/gauze(src) - new /obj/item/stack/medical/gauze(src) + if(empty) return new /obj/item/weapon/reagent_containers/pill/patch/styptic(src) new /obj/item/weapon/reagent_containers/pill/patch/styptic(src) - new /obj/item/device/healthanalyzer( src ) + new /obj/item/weapon/reagent_containers/pill/patch/styptic(src) + new /obj/item/weapon/reagent_containers/pill/patch/styptic(src) + new /obj/item/stack/medical/gauze(src) + new /obj/item/stack/medical/gauze(src) new /obj/item/weapon/reagent_containers/hypospray/medipen(src) - new /obj/item/stack/medical/bruise_pack(src) + new /obj/item/device/healthanalyzer(src) return /obj/item/weapon/storage/firstaid/tactical - name = "first-aid kit" - icon_state = "bezerk" + name = "combat medical kit" desc = "I hope you've got insurance." + icon_state = "bezerk" max_w_class = 3 /obj/item/weapon/storage/firstaid/tactical/New() ..() - if (empty) return - new /obj/item/stack/medical/gauze( src ) - new /obj/item/stack/medical/gauze( src ) - new /obj/item/weapon/reagent_containers/hypospray/combat( src ) - new /obj/item/weapon/reagent_containers/pill/patch/styptic( src ) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src ) - new /obj/item/weapon/reagent_containers/syringe/lethal/choral( src ) - new /obj/item/clothing/glasses/hud/health/night( src ) + if(empty) return + new /obj/item/stack/medical/gauze(src) + new /obj/item/stack/medical/gauze(src) + new /obj/item/weapon/reagent_containers/hypospray/combat(src) + new /obj/item/weapon/reagent_containers/pill/patch/styptic(src) + new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) + new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src) + new /obj/item/clothing/glasses/hud/health/night(src) return @@ -146,11 +142,11 @@ /obj/item/weapon/storage/pill_bottle/MouseDrop(obj/over_object as obj) //Quick pillbottle fix. -Agouri - if (ishuman(usr) || ismonkey(usr)) //Can monkeys even place items in the pocket slots? Leaving this in just in case~ + if(ishuman(usr) || ismonkey(usr)) //Can monkeys even place items in the pocket slots? Leaving this in just in case~ var/mob/M = usr - if (!istype(over_object, /obj/screen) || !Adjacent(M)) + if(!istype(over_object, /obj/screen) || !Adjacent(M)) return ..() - if ((!( M.restrained() ) && !( M.stat ) /*&& M.pocket == src*/)) + if((!( M.restrained() ) && !( M.stat ) /*&& M.pocket == src*/)) switch(over_object.name) if("r_hand") M.unEquip(src) @@ -161,7 +157,7 @@ src.add_fingerprint(usr) return if(over_object == usr && in_range(src, usr) || usr.contents.Find(src)) - if (usr.s_active) + if(usr.s_active) usr.s_active.close(usr) src.show_to(usr) return @@ -173,13 +169,13 @@ /obj/item/weapon/storage/box/silver_sulf/New() ..() - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src ) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src ) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src ) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src ) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src ) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src ) - new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src ) + new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) + new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) + new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) + new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) + new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) + new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) + new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src) /obj/item/weapon/storage/pill_bottle/charcoal @@ -188,13 +184,13 @@ /obj/item/weapon/storage/pill_bottle/charcoal/New() ..() - new /obj/item/weapon/reagent_containers/pill/charcoal( src ) - new /obj/item/weapon/reagent_containers/pill/charcoal( src ) - new /obj/item/weapon/reagent_containers/pill/charcoal( src ) - new /obj/item/weapon/reagent_containers/pill/charcoal( src ) - new /obj/item/weapon/reagent_containers/pill/charcoal( src ) - new /obj/item/weapon/reagent_containers/pill/charcoal( src ) - new /obj/item/weapon/reagent_containers/pill/charcoal( src ) + new /obj/item/weapon/reagent_containers/pill/charcoal(src) + new /obj/item/weapon/reagent_containers/pill/charcoal(src) + new /obj/item/weapon/reagent_containers/pill/charcoal(src) + new /obj/item/weapon/reagent_containers/pill/charcoal(src) + new /obj/item/weapon/reagent_containers/pill/charcoal(src) + new /obj/item/weapon/reagent_containers/pill/charcoal(src) + new /obj/item/weapon/reagent_containers/pill/charcoal(src) /obj/item/weapon/storage/pill_bottle/epinephrine name = "bottle of epinephrine pills" @@ -202,13 +198,13 @@ /obj/item/weapon/storage/pill_bottle/epinephrine/New() ..() - new /obj/item/weapon/reagent_containers/pill/epinephrine( src ) - new /obj/item/weapon/reagent_containers/pill/epinephrine( src ) - new /obj/item/weapon/reagent_containers/pill/epinephrine( src ) - new /obj/item/weapon/reagent_containers/pill/epinephrine( src ) - new /obj/item/weapon/reagent_containers/pill/epinephrine( src ) - new /obj/item/weapon/reagent_containers/pill/epinephrine( src ) - new /obj/item/weapon/reagent_containers/pill/epinephrine( src ) + new /obj/item/weapon/reagent_containers/pill/epinephrine(src) + new /obj/item/weapon/reagent_containers/pill/epinephrine(src) + new /obj/item/weapon/reagent_containers/pill/epinephrine(src) + new /obj/item/weapon/reagent_containers/pill/epinephrine(src) + new /obj/item/weapon/reagent_containers/pill/epinephrine(src) + new /obj/item/weapon/reagent_containers/pill/epinephrine(src) + new /obj/item/weapon/reagent_containers/pill/epinephrine(src) /obj/item/weapon/storage/pill_bottle/mutadone name = "bottle of mutadone pills" @@ -244,11 +240,11 @@ /obj/item/weapon/storage/pill_bottle/stimulant/New() ..() - new /obj/item/weapon/reagent_containers/pill/stimulant( src ) - new /obj/item/weapon/reagent_containers/pill/stimulant( src ) - new /obj/item/weapon/reagent_containers/pill/stimulant( src ) - new /obj/item/weapon/reagent_containers/pill/stimulant( src ) - new /obj/item/weapon/reagent_containers/pill/stimulant( src ) + new /obj/item/weapon/reagent_containers/pill/stimulant(src) + new /obj/item/weapon/reagent_containers/pill/stimulant(src) + new /obj/item/weapon/reagent_containers/pill/stimulant(src) + new /obj/item/weapon/reagent_containers/pill/stimulant(src) + new /obj/item/weapon/reagent_containers/pill/stimulant(src) /obj/item/weapon/storage/pill_bottle/dice name = "bag of dice" @@ -258,11 +254,11 @@ /obj/item/weapon/storage/pill_bottle/dice/New() ..() - new /obj/item/weapon/dice/d4( src ) - new /obj/item/weapon/dice( src ) - new /obj/item/weapon/dice/d8( src ) - new /obj/item/weapon/dice/d10( src ) - new /obj/item/weapon/dice/d00( src ) - new /obj/item/weapon/dice/d12( src ) - new /obj/item/weapon/dice/d20( src ) + new /obj/item/weapon/dice/d4(src) + new /obj/item/weapon/dice(src) + new /obj/item/weapon/dice/d8(src) + new /obj/item/weapon/dice/d10(src) + new /obj/item/weapon/dice/d00(src) + new /obj/item/weapon/dice/d12(src) + new /obj/item/weapon/dice/d20(src) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 93f53a19cc1..2196a552aa4 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -24,6 +24,9 @@ if(10 to 50) icon_state = "half" if(51 to INFINITY) icon_state = "full" +/obj/item/weapon/reagent_containers/blood/random/New() + blood_type = pick("A+", "A-", "B+", "B-", "O+", "O-") + /obj/item/weapon/reagent_containers/blood/APlus blood_type = "A+" diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 9aeac380ca24b0ef3f93f81a410fa6e71dfb3d14..25760c88d18d70c308bbedcdc04d40a3d5b3b54f 100644 GIT binary patch delta 4435 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 Z{|D?}x)pgJpEv*j002ovPDHLkV1f&M)+PV| delta 4401 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 From 47615635713ac7067a38d47e3659614c1f7c767e Mon Sep 17 00:00:00 2001 From: paprka Date: Sat, 31 Jan 2015 23:18:21 -0800 Subject: [PATCH 19/22] removes carp and blood checks from holodeck --- code/game/machinery/computer/HolodeckControl.dm | 9 --------- 1 file changed, 9 deletions(-) diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 61e409d9cd4..601bde71545 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -227,15 +227,6 @@ for(var/item in holographic_items) derez(item) - for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck) - qdel(B) - - for(var/obj/effect/decal/cleanable/blooddrip/D in linkedholodeck) - qdel(D) - - for(var/mob/living/simple_animal/hostile/carp/C in linkedholodeck) - qdel(C) - holographic_items = A.copy_contents_to(linkedholodeck , 1) if(emagged) From ce65ad8c6269d96dc60f21480e191519d395e07c Mon Sep 17 00:00:00 2001 From: paprka Date: Sat, 31 Jan 2015 23:27:23 -0800 Subject: [PATCH 20/22] fixes some gauze inconsistencies --- code/game/objects/items/stacks/medical.dm | 31 +++++++++++++---------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 36285ba439b..b43cd46e735 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -14,49 +14,55 @@ /obj/item/stack/medical/attack(mob/living/carbon/M as mob, mob/user as mob) - if (M.stat == 2) + if(M.stat == 2) var/t_him = "it" - if (M.gender == MALE) + if(M.gender == MALE) t_him = "him" - else if (M.gender == FEMALE) + else if(M.gender == FEMALE) t_him = "her" user << "\The [M] is dead, you cannot help [t_him]!" return - if (!istype(M)) - user << "\The [src] cannot be applied to [M]!" + if(!istype(M)) + user << "You don't know how to apply \the [src] to [M]..." return 1 if(!user.IsAdvancedToolUser()) user << "You don't have the dexterity to do this!" return 1 + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(stop_bleeding) + if(H.bleedsuppress) + user << "[H]'s bleeding is already bandaged." + if(!H.blood_max) + user << "[H] isn't bleeding." + if(isliving(M)) if(!M.can_inject(user, 1)) return if(user) - if (M != user) + if(M != user) user.visible_message("[user] applies [src] on [M].", "You apply [src] on [M].") else var/t_himself = "itself" - if (user.gender == MALE) + if(user.gender == MALE) t_himself = "himself" - else if (user.gender == FEMALE) + else if(user.gender == FEMALE) t_himself = "herself" user.visible_message("[user] starts to apply [src] on [t_himself]...", "You begin applying [src] on yourself...") if(!do_mob(user, M, self_delay)) return user.visible_message("[user] applies [src] on [t_himself].", "You apply [src] on yourself.") - if(istype(M, /mob/living/carbon/human)) + if(ishuman(M)) var/mob/living/carbon/human/H = M var/obj/item/organ/limb/affecting = H.get_organ(check_zone(user.zone_sel.selecting)) - if(stop_bleeding) if(!H.bleedsuppress) //so you can't stack bleed suppression H.suppress_bloodloss(stop_bleeding) - if(affecting.status == ORGAN_ORGANIC) //Limb must be organic to be healed - RR if(affecting.heal_damage(src.heal_brute, src.heal_burn, 0)) H.update_damage_overlays(0) @@ -75,11 +81,10 @@ /obj/item/stack/medical/bruise_pack name = "bruise pack" singular_name = "bruise pack" - desc = "A gel pack and bandages designed to treat blunt-force trauma." + desc = "A theraputic gel pack and bandages designed to treat blunt-force trauma." icon_state = "brutepack" heal_brute = 40 origin_tech = "biotech=1" - stop_bleeding = 20 /obj/item/stack/medical/gauze name = "medical gauze" From 0b64a233100a2e11e339f6f257f1c89f46dbd5dc Mon Sep 17 00:00:00 2001 From: paprka Date: Sat, 31 Jan 2015 23:40:27 -0800 Subject: [PATCH 21/22] fixes blood drips --- code/game/machinery/bots/cleanbot.dm | 2 +- code/game/objects/effects/decals/Cleanable/humans.dm | 9 ++------- code/modules/mob/living/carbon/human/blood.dm | 6 +++--- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm index 63d7a2e8b14..17051973fc4 100644 --- a/code/game/machinery/bots/cleanbot.dm +++ b/code/game/machinery/bots/cleanbot.dm @@ -222,7 +222,7 @@ text("[on ? "On" : "Off"]")) target_types += /obj/effect/decal/cleanable/xenoblood/xgibs target_types += /obj/effect/decal/cleanable/blood/ target_types += /obj/effect/decal/cleanable/blood/gibs/ - target_types += /obj/effect/decal/cleanable/blooddrip/ + target_types += /obj/effect/decal/cleanable/blood/drip/ target_types += /obj/effect/decal/cleanable/trail_holder /obj/machinery/bot/cleanbot/proc/clean(var/obj/effect/decal/cleanable/target) diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 914da240358..4e4c8dd0795 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -94,20 +94,15 @@ if (step_to(src, get_step(src, direction), 0)) break -/obj/effect/decal/cleanable/blooddrip +/obj/effect/decal/cleanable/blood/drip name = "drip of blood" desc = "It's red." icon = 'icons/effects/drip.dmi' icon_state = "1" random_icon_states = list("1","2","3","4","5") - density = 0 - anchored = 1 - layer = 2 - blood_DNA = list() - var/list/viruses = list() var/list/drips = list() -/obj/effect/decal/cleanable/blooddrip/New() +/obj/effect/decal/cleanable/blood/drip/New() ..() spawn(1) drips |= icon_state \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm index 19245222cf4..a7ecd5c76a0 100644 --- a/code/modules/mob/living/carbon/human/blood.dm +++ b/code/modules/mob/living/carbon/human/blood.dm @@ -275,18 +275,18 @@ proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large) // 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/blooddrip/drop in T) + for(var/obj/effect/decal/cleanable/blood/drip/drop in T) drips |= drop.drips del(drop) if(!large && drips.len < 3) - decal_type = /obj/effect/decal/cleanable/blooddrip + decal_type = /obj/effect/decal/cleanable/blood/drip // Find a blood decal or create a new one. B = locate(decal_type) in T if(!B) B = new decal_type(T) - var/obj/effect/decal/cleanable/blooddrip/drop = B + var/obj/effect/decal/cleanable/blood/drip/drop = B if(istype(drop) && drips && drips.len && !large) drop.overlays |= drips drop.drips |= drips From d6dce069f4df50e94c99cdedae7cfe223bd56649 Mon Sep 17 00:00:00 2001 From: paprka Date: Sun, 1 Feb 2015 00:29:37 -0800 Subject: [PATCH 22/22] finally actually fixes the blood decals --- .../effects/decals/Cleanable/humans.dm | 20 +++++++++---------- code/modules/mob/living/carbon/human/blood.dm | 1 + 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 4e4c8dd0795..b50b02a3a46 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -18,13 +18,13 @@ /obj/effect/decal/cleanable/blood/New() ..() - remove_ex_blood() - -/obj/effect/decal/cleanable/blood/proc/remove_ex_blood() //removes existant blood on the turf - if(src.loc && isturf(src.loc)) - for(var/obj/effect/decal/cleanable/blood/B in src.loc) - if(B != src) - qdel(B) + 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(B != src) + if (B.blood_DNA) + blood_DNA |= B.blood_DNA.Copy() + qdel(B) /obj/effect/decal/cleanable/blood/splatter random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5") @@ -61,9 +61,6 @@ /obj/effect/decal/cleanable/blood/gibs/ex_act(severity, target) return -/obj/effect/decal/cleanable/blood/gibs/remove_ex_blood() - return - /obj/effect/decal/cleanable/blood/gibs/up random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1") @@ -95,8 +92,9 @@ break /obj/effect/decal/cleanable/blood/drip - name = "drip of blood" + name = "drips of blood" desc = "It's red." + gender = PLURAL icon = 'icons/effects/drip.dmi' icon_state = "1" random_icon_states = list("1","2","3","4","5") diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm index a7ecd5c76a0..37b4be1fef5 100644 --- a/code/modules/mob/living/carbon/human/blood.dm +++ b/code/modules/mob/living/carbon/human/blood.dm @@ -258,6 +258,7 @@ proc/blood_incompatible(donor,receiver,donor_species,receiver_species) return 0 proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large) + var/obj/effect/decal/cleanable/blood/B var/decal_type = /obj/effect/decal/cleanable/blood/splatter var/turf/T = get_turf(target)