diff --git a/beestation.dme b/beestation.dme index e0ceebbffefd6..09de9e7ffac6c 100644 --- a/beestation.dme +++ b/beestation.dme @@ -1229,6 +1229,7 @@ #include "code\game\objects\effects\step_triggers.dm" #include "code\game\objects\effects\wanted_poster.dm" #include "code\game\objects\effects\anomalies\_anomalies.dm" +#include "code\game\objects\effects\anomalies\anomaly_bleed.dm" #include "code\game\objects\effects\anomalies\anomaly_bluespace.dm" #include "code\game\objects\effects\anomalies\anomaly_delimber.dm" #include "code\game\objects\effects\anomalies\anomaly_flux.dm" @@ -2542,6 +2543,7 @@ #include "code\modules\events\alien_infestation.dm" #include "code\modules\events\anomaly.dm" #include "code\modules\events\anomaly_bioscrambler.dm" +#include "code\modules\events\anomaly_blood.dm" #include "code\modules\events\anomaly_bluespace.dm" #include "code\modules\events\anomaly_flux.dm" #include "code\modules\events\anomaly_grav.dm" @@ -3960,6 +3962,7 @@ #include "code\modules\surgery\anesthetic_machine.dm" #include "code\modules\surgery\blood_filter.dm" #include "code\modules\surgery\brain_recalibration.dm" +#include "code\modules\surgery\cauterize.dm" #include "code\modules\surgery\cavity_implant.dm" #include "code\modules\surgery\core_removal.dm" #include "code\modules\surgery\coronary_bypass.dm" diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index dabb8ba8f6337..115a2cf52f294 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -42,6 +42,8 @@ #define MELEE "melee" /// Involves magic. #define MAGIC "magic" +/// Bleed prevention +#define BLEED "bleed" /* /// Involved in checking the likelihood of applying a wound to a mob. diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_living.dm index b9c1e57d83d5a..6cf54105127f3 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_living.dm @@ -25,6 +25,8 @@ #define COMSIG_LIVING_DEATH "living_death" /// from base of mob/living/updatehealth(): () #define COMSIG_LIVING_UPDATE_HEALTH "living_update_health" +/// Called when a living mob has its resting updated: (resting_state) +#define COMSIG_LIVING_RESTING_UPDATED "resting_updated" /// from /datum/component/singularity/proc/can_move(), as well as /obj/anomaly/energy_ball/proc/can_move() /// if a callback returns `SINGULARITY_TRY_MOVE_BLOCK`, then the singularity will not move to that turf diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 651d5cbf9e3b7..d76313c7d350f 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -17,6 +17,23 @@ #define MOVE_INTENT_WALK "walk" #define MOVE_INTENT_RUN "run" +// Bleed rates +// See blood.dm for calculations +#define BLEED_RATE_MINOR 2.4 /// Point at which bleeding is considered minor and will eventually self-heal +#define BLEED_HEAL_RATE_MINOR 0.02 /// How quickly minor bleeds will stop bleeding (0.05/sec) +#define MAX_BLEED_RATE 3 /// Mobs can get more bleed than this, but won't actually bleed faster than this value + +// Bleed damage values +#define BLEED_TINY 0.1 +#define BLEED_SCRATCH 0.8 +#define BLEED_SURFACE 1.5 // 560 > 506 blood in 75 seconds +#define BLEED_CUT 2.3 // 560 > 442 blood ni 115 seconds +#define BLEED_DEEP_WOUND 2.4 // Crit in 285 seconds, Death in 356 seconds +#define BLEED_CRITICAL 3.6 // Crit in 190 seconds, Death in 238 seconds + +#define BLEED_RATE_MULTIPLIER 1 /// How quickly do we bleed out? A value of 1 means that if we have a bleed rate of 10, then we lose 5 blood per second. +#define BLEED_RATE_MULTIPLIER_NO_HEART 0.4 /// If we have no heart, then we will bleed slower. This multiplies by our bleeding rate if that is the case. + //Blood levels #define BLOOD_VOLUME_MAXIMUM 2000 #define BLOOD_VOLUME_SLIME_SPLIT 1120 @@ -26,6 +43,8 @@ #define BLOOD_VOLUME_BAD 224 #define BLOOD_VOLUME_SURVIVE 122 +#define AMOUNT_TO_BLEED_INTENSITY(x) ((x) ** 0.3333) + //Sizes of mobs, used by mob/living/var/mob_size #define MOB_SIZE_TINY 0 #define MOB_SIZE_SMALL 1 diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index e56e7c03f3a19..192faf6690af2 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -9,6 +9,8 @@ #define STATUS_EFFECT_REPLACE 2 /// if it only allows one, and new instances just instead refresh the timer #define STATUS_EFFECT_REFRESH 3 +/// call a merge proc to combine 2 status effects +#define STATUS_EFFECT_MERGE 4 //-------// // BUFFS // @@ -117,6 +119,7 @@ #define STATUS_EFFECT_LING_TRANSFORMATION /datum/status_effect/ling_transformation // transform stung by a changeling +#define STATUS_EFFECT_BLEED /datum/status_effect/bleeding //---------// // NEUTRAL // diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 013482e9d1af6..6e994b1668858 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -272,6 +272,10 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_HYPERSPACED "hyperspaced" // Sanity trait to keep track of when we're in hyperspace and add the appropriate element if we werent #define TRAIT_FREE_HYPERSPACE_MOVEMENT "free_hyperspace_movement" // Gives the movable free hyperspace movement without being pulled during shuttle transit #define TRAIT_FAST_CUFF_REMOVAL "fast_cuff_removal" // Faster cuff removal +#define TRAIT_BLEED_HELD "bleed_held" // For when a mob is holding their wounds, preventing them from bleeding further +#define TRAIT_NO_BLOOD "no_blood" // Bleeding heals itself and bleeding is impossible +#define TRAIT_NO_BLEEDING "no_bleed" // The user can acquire the bleeding status effect, but will no lose blood +#define TRAIT_BLOOD_COOLANT "blood_coolant" // Replaces blood with coolant, meaning we overheat instead of losing air // You can stare into the abyss, but it does not stare back. // You're immune to the hallucination effect of the supermatter, either @@ -396,6 +400,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define CURSE_TRAIT "eldritch" #define STATION_TRAIT "station-trait" #define TRAIT_RUSTY "rust_trait" +#define ACTION_TRAIT "action_trait" #define TURF_TRAIT "turf" // unique trait sources, still defines @@ -464,6 +469,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_PRESERVE_UI_WITHOUT_CLIENT "preserve_ui_without_client" //this mob should never close ui even if it doesn't have a client #define EXPERIMENTAL_SURGERY_TRAIT "experimental_surgery" #define NINJA_KIDNAPPED_TRAIT "ninja_kidnapped" +#define TABLE_TRAIT "table_trait" ///Traits given by station traits #define STATION_TRAIT_BANANIUM_SHIPMENTS "station_trait_bananium_shipments" diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 2412b865008fe..cd7b82c039e5a 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -154,10 +154,6 @@ return TRUE return FALSE -/* - Aliens - Defaults to same as monkey in most places -*/ /mob/living/carbon/alien/UnarmedAttack(atom/A) if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) return diff --git a/code/datums/armor.dm b/code/datums/armor.dm index 3a11186a292e9..218c8d1cdefec 100644 --- a/code/datums/armor.dm +++ b/code/datums/armor.dm @@ -1,9 +1,9 @@ -#define ARMORID "armor-[melee]-[bullet]-[laser]-[energy]-[bomb]-[bio]-[rad]-[fire]-[acid]-[magic]-[stamina]-[consume]" +#define ARMORID "armor-[melee]-[bullet]-[laser]-[energy]-[bomb]-[bio]-[rad]-[fire]-[acid]-[magic]-[stamina]-[consume]-[bleed]" -/proc/getArmor(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0, stamina = 0, consume = 0) +/proc/getArmor(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0, stamina = 0, consume = 0, bleed = 0) . = locate(ARMORID) if (!.) - . = new /datum/armor(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic, stamina, consume) + . = new /datum/armor(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic, stamina, consume, bleed) /datum/armor datum_flags = DF_USE_TAG @@ -19,8 +19,9 @@ var/magic var/stamina var/consume + var/bleed -/datum/armor/New(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0, stamina = 0, consume = 0) +/datum/armor/New(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0, stamina = 0, consume = 0, bleed = 0) src.melee = melee src.bullet = bullet src.laser = laser @@ -33,15 +34,16 @@ src.magic = magic src.stamina = stamina src.consume = consume + src.bleed = bleed tag = ARMORID -/datum/armor/proc/modifyRating(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0, stamina = 0, consume = 0) - return getArmor(src.melee+melee, src.bullet+bullet, src.laser+laser, src.energy+energy, src.bomb+bomb, src.bio+bio, src.rad+rad, src.fire+fire, src.acid+acid, src.magic+magic, src.stamina+stamina, src.consume+consume) +/datum/armor/proc/modifyRating(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0, stamina = 0, consume = 0, bleed = 0) + return getArmor(src.melee+melee, src.bullet+bullet, src.laser+laser, src.energy+energy, src.bomb+bomb, src.bio+bio, src.rad+rad, src.fire+fire, src.acid+acid, src.magic+magic, src.stamina+stamina, src.consume+consume, src.bleed+bleed) /datum/armor/proc/modifyAllRatings(modifier = 0) - return getArmor(melee+modifier, bullet+modifier, laser+modifier, energy+modifier, bomb+modifier, bio+modifier, rad+modifier, fire+modifier, acid+modifier, magic+modifier, stamina+modifier, consume+modifier) + return getArmor(melee+modifier, bullet+modifier, laser+modifier, energy+modifier, bomb+modifier, bio+modifier, rad+modifier, fire+modifier, acid+modifier, magic+modifier, stamina+modifier, consume+modifier, bleed+modifier) -/datum/armor/proc/setRating(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic, consume) +/datum/armor/proc/setRating(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic, consume, bleed) return getArmor((isnull(melee) ? src.melee : melee),\ (isnull(bullet) ? src.bullet : bullet),\ (isnull(laser) ? src.laser : laser),\ @@ -53,19 +55,20 @@ (isnull(acid) ? src.acid : acid),\ (isnull(magic) ? src.magic : magic),\ (isnull(stamina) ? src.stamina : stamina),\ - (isnull(consume) ? src.consume : consume)) + (isnull(consume) ? src.consume : consume),\ + (isnull(bleed) ? src.bleed : bleed)) /datum/armor/proc/getRating(rating) return vars[rating] /datum/armor/proc/getList() - return list(MELEE = melee, BULLET = bullet, LASER = laser, ENERGY = energy, BOMB = bomb, BIO = bio, RAD = rad, FIRE = fire, ACID = acid, MAGIC = magic, STAMINA = stamina, CONSUME = consume) + return list(MELEE = melee, BULLET = bullet, LASER = laser, ENERGY = energy, BOMB = bomb, BIO = bio, RAD = rad, FIRE = fire, ACID = acid, MAGIC = magic, STAMINA = stamina, CONSUME = consume, BLEED = bleed) /datum/armor/proc/attachArmor(datum/armor/AA) - return getArmor(melee+AA.melee, bullet+AA.bullet, laser+AA.laser, energy+AA.energy, bomb+AA.bomb, bio+AA.bio, rad+AA.rad, fire+AA.fire, acid+AA.acid, magic+AA.magic, stamina+AA.stamina, consume+AA.consume) + return getArmor(melee+AA.melee, bullet+AA.bullet, laser+AA.laser, energy+AA.energy, bomb+AA.bomb, bio+AA.bio, rad+AA.rad, fire+AA.fire, acid+AA.acid, magic+AA.magic, stamina+AA.stamina, consume+AA.consume, bleed+AA.bleed) /datum/armor/proc/detachArmor(datum/armor/AA) - return getArmor(melee-AA.melee, bullet-AA.bullet, laser-AA.laser, energy-AA.energy, bomb-AA.bomb, bio-AA.bio, rad-AA.rad, fire-AA.fire, acid-AA.acid, magic-AA.magic, stamina-AA.stamina, consume+AA.consume) + return getArmor(melee-AA.melee, bullet-AA.bullet, laser-AA.laser, energy-AA.energy, bomb-AA.bomb, bio-AA.bio, rad-AA.rad, fire-AA.fire, acid-AA.acid, magic-AA.magic, stamina-AA.stamina, consume+AA.consume, bleed+AA.bleed) /datum/armor/vv_edit_var(var_name, var_value) if (var_name == NAMEOF(src, tag)) diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm index d281865081aa4..d11800a38565a 100644 --- a/code/datums/components/butchering.dm +++ b/code/datums/components/butchering.dm @@ -71,7 +71,7 @@ H.visible_message("[user] slits [H]'s throat!", \ "[user] slits your throat...") H.apply_damage(item_force, BRUTE, BODY_ZONE_HEAD) - H.bleed_rate = clamp(H.bleed_rate + 20, 0, 30) + H.add_bleeding(BLEED_CRITICAL) H.apply_status_effect(/datum/status_effect/neck_slice) /datum/component/butchering/proc/Butcher(mob/living/butcher, mob/living/meat) diff --git a/code/datums/components/caltrop.dm b/code/datums/components/caltrop.dm index ade35521ebe6f..107fe33b95dc7 100644 --- a/code/datums/components/caltrop.dm +++ b/code/datums/components/caltrop.dm @@ -63,6 +63,7 @@ damage *= 0.5 H.apply_damage(damage, BRUTE, picked_def_zone) + H.add_bleeding(BLEED_SCRATCH) if(COOLDOWN_FINISHED(src, caltrop_cooldown)) COOLDOWN_START(src, caltrop_cooldown, 1 SECONDS) //cooldown to avoid message spam. diff --git a/code/datums/components/cult_ritual_item.dm b/code/datums/components/cult_ritual_item.dm index ad06c2d3c98a4..8b785485c6f11 100644 --- a/code/datums/components/cult_ritual_item.dm +++ b/code/datums/components/cult_ritual_item.dm @@ -304,6 +304,9 @@ if(cultist.blood_volume) cultist.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) // *cuts arm* *bone explodes* ever have one of those days? + if (iscarbon(cultist)) + var/mob/living/carbon/carbon_cultist = cultist + carbon_cultist.add_bleeding(BLEED_TINY) var/scribe_mod = initial(rune_to_scribe.scribe_delay) if(!initial(rune_to_scribe.no_scribe_boost) && (our_turf.type in turfs_that_boost_us)) diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm index 1141a23ba11c2..e06ec64192601 100644 --- a/code/datums/components/pellet_cloud.dm +++ b/code/datums/components/pellet_cloud.dm @@ -46,9 +46,6 @@ /datum/component/pellet_cloud/Initialize(projectile_type=/obj/item/shrapnel, magnitude=5) - if(!isammocasing(parent) && !isgrenade(parent) && !islandmine(parent)) - return COMPONENT_INCOMPATIBLE - if(magnitude < 1) stack_trace("Invalid magnitude [magnitude] < 1 on pellet_cloud, parent: [parent]") magnitude = 1 @@ -59,6 +56,9 @@ num_pellets = magnitude else if(isgrenade(parent) || islandmine(parent)) radius = magnitude + else + radius = magnitude + create_blast_pellets(null, null) /datum/component/pellet_cloud/Destroy(force, silent) pellets = null diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm index 04ee7e3682a62..373244c56fbbc 100644 --- a/code/datums/components/twohanded.dm +++ b/code/datums/components/twohanded.dm @@ -390,7 +390,7 @@ name = "offhand" icon_state = "offhand" w_class = WEIGHT_CLASS_HUGE - item_flags = ABSTRACT | DROPDEL + item_flags = ABSTRACT | DROPDEL | NOBLUDGEON resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /// Off Hand tracking of wielded status var/wielded = FALSE diff --git a/code/datums/diseases/advance/symptoms/flesh_eating.dm b/code/datums/diseases/advance/symptoms/flesh_eating.dm index 0d181e1228976..cad4fdcf192cc 100644 --- a/code/datums/diseases/advance/symptoms/flesh_eating.dm +++ b/code/datums/diseases/advance/symptoms/flesh_eating.dm @@ -63,8 +63,7 @@ Bonus if(!ishuman(M)) return var/mob/living/carbon/human/H = M - H.bleed_rate += 2 * power //bleeding is quite strong. this is more than enough - H.bleed(max(10*power, H.bleed_rate))//having power actually up the bleed rate on this puts it into a pretty dangerous territory. this should be more managable + H.add_bleeding(BLEED_SURFACE) H.add_splatter_floor(H.loc) if(bleed) // this is really, really messy var/geysers = rand(2, 6) diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm index d3081a124e5a9..99a6eac4d65e6 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -671,9 +671,9 @@ im not even gonna bother with these for the following symptoms. typed em out, co if(bloodpoints > 0) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.bleed_rate >= 2 && bruteheal && bloodpoints) + if(bruteheal && bloodpoints) bloodpoints -= 1 - H.bleed_rate = max(0, (H.bleed_rate - 2)) + H.cauterise_wounds(0.1) if(M.blood_volume < BLOOD_VOLUME_NORMAL && M.get_blood_id() == /datum/reagent/blood) //bloodloss is prioritized over healing brute bloodpoints -= 1 M.blood_volume = max((M.blood_volume + 3 * power), BLOOD_VOLUME_NORMAL) //bloodpoints are valued at 4 units of blood volume per point, so this is diminished @@ -704,14 +704,14 @@ im not even gonna bother with these for the following symptoms. typed em out, co var/possibledist = power + 1 if(M.get_blood_id() != /datum/reagent/blood) possibledist = 1 - if(!(NOBLOOD in H.dna.species.species_traits)) //if you dont have blood, well... sucks to be you + if(!((NOBLOOD in H.dna.species.species_traits) || HAS_TRAIT(H, TRAIT_NO_BLOOD))) //if you dont have blood, well... sucks to be you H.setOxyLoss(0,0) //this is so a crit person still revives if suffocated if(bloodpoints >= 200 && H.health > 0 && H.blood_volume >= BLOOD_VOLUME_NORMAL) //note that you need to actually need to heal, so a maxed out virus won't be bringing you back instantly in most cases. *even so*, if this needs to be nerfed ill do it in a heartbeat H.revive(0) H.visible_message("[H.name]'s skin takes on a rosy hue as they begin moving. They live again!", "As your body fills with fresh blood, you feel your limbs once more, accompanied by an insatiable thirst for blood.") bloodpoints = 0 return 0 - else if(bloodbag && bloodbag.blood_volume && (bloodbag.stat || bloodbag.bleed_rate)) + else if(bloodbag && bloodbag.blood_volume && (bloodbag.stat || bloodbag.is_bleeding())) if(get_dist(bloodbag, H) <= 1 && bloodbag.z == H.z) var/amt = ((bloodbag.stat * 2) + 2) * power var/excess = max(((min(amt, bloodbag.blood_volume) - (BLOOD_VOLUME_NORMAL - H.blood_volume)) / 2), 0) @@ -753,7 +753,7 @@ im not even gonna bother with these for the following symptoms. typed em out, co else var/list/candidates = list() for(var/mob/living/carbon/human/C in ohearers(min(bloodpoints/4, possibledist), H)) - if(NOBLOOD in C.dna.species.species_traits) + if((NOBLOOD in C.dna.species.species_traits) || HAS_TRAIT(C, TRAIT_NO_BLOOD)) continue if(C.stat && C.blood_volume && C.get_blood_id() == H.get_blood_id()) candidates += C @@ -772,10 +772,10 @@ im not even gonna bother with these for the following symptoms. typed em out, co var/mob/living/carbon/human/H = M if(H.pulling && ishuman(H.pulling)) //grabbing is handled with the disease instead of the component, so the component doesn't have to be processed var/mob/living/carbon/human/C = H.pulling - if(!C.bleed_rate && vampire && C.can_inject() && H.grab_state && C.get_blood_id() == H.get_blood_id() && !(NOBLOOD in C.dna.species.species_traits))//aggressive grab as a "vampire" starts the target bleeding - C.bleed_rate += 1 + if(!C.is_bleeding() && vampire && C.can_inject() && H.grab_state && C.get_blood_id() == H.get_blood_id() && !((NOBLOOD in C.dna.species.species_traits)|| HAS_TRAIT(C, TRAIT_NO_BLOOD)))//aggressive grab as a "vampire" starts the target bleeding + C.add_bleeding(BLEED_SURFACE) C.visible_message("Wounds open on [C.name]'s skin as [H.name] grips them tightly!", "You begin bleeding at [H.name]'s touch!") - if(C.blood_volume && C.can_inject() &&(C.bleed_rate && (!C.bleedsuppress || vampire )) && C.get_blood_id() == H.get_blood_id() && !(NOBLOOD in C.dna.species.species_traits)) + if(C.blood_volume && C.can_inject() && (C.is_bleeding() && vampire) && C.get_blood_id() == H.get_blood_id() && !((NOBLOOD in C.dna.species.species_traits)|| HAS_TRAIT(C, TRAIT_NO_BLOOD))) var/amt = (H.grab_state + C.stat + 2) * power if(C.blood_volume) var/excess = max(((min(amt, C.blood_volume) - (BLOOD_VOLUME_NORMAL - H.blood_volume)) / 4), 0) @@ -819,9 +819,9 @@ im not even gonna bother with these for the following symptoms. typed em out, co if(ishuman(M) && aggression)//finally, attack mobs touching the host. var/mob/living/carbon/human/H = M for(var/mob/living/carbon/human/C in ohearers(1, H)) - if(NOBLOOD in C.dna.species.species_traits) + if((NOBLOOD in C.dna.species.species_traits) || HAS_TRAIT(C, TRAIT_NO_BLOOD)) continue - if((C.pulling && C.pulling == H) || (C.loc == H.loc) && C.bleed_rate && C.get_blood_id() == H.get_blood_id()) + if((C.pulling && C.pulling == H) || (C.loc == H.loc) && C.is_bleeding() && C.get_blood_id() == H.get_blood_id()) var/amt = (2 * power) if(C.blood_volume) var/excess = max(((min(amt, C.blood_volume) - (BLOOD_VOLUME_NORMAL - H.blood_volume)) / 4 * power), 0) diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index aa6c48d419eeb..44c73d4263386 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -17,6 +17,7 @@ /obj/effect/mob_spawn, /obj/effect/warp_cube, /obj/effect/extraction_holder, + /obj/effect/anomaly, )) if(delete_atoms[teleatom.type]) qdel(teleatom) diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index e0f7f1e98f298..56aa658965cdd 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -214,4 +214,4 @@ siemens_coefficient = 0 permeability_coefficient = 0.05 strip_delay = 80 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50, STAMINA = 0, BLEED = 0) diff --git a/code/datums/martial/tribal_claw.dm b/code/datums/martial/tribal_claw.dm index 1517a9948bcd5..f802024292e66 100644 --- a/code/datums/martial/tribal_claw.dm +++ b/code/datums/martial/tribal_claw.dm @@ -61,7 +61,7 @@ Deals 15 brute to head(reduced by armor) and causes a rapid bleeding effect simi D.visible_message("[A] cuts [D]'s jugular vein with their claws!", \ "[A] cuts your jugular vein!") D.apply_damage(15, BRUTE, BODY_ZONE_HEAD, def_check) - D.bleed_rate = clamp(D.bleed_rate + 20, 0, 30) + D.add_bleeding(BLEED_SURFACE) D.apply_status_effect(/datum/status_effect/neck_slice) A.do_attack_animation(D, ATTACK_EFFECT_CLAW) playsound(get_turf(D), 'sound/weapons/slash.ogg', 50, 1, -1) diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index da1ff04864ba2..c80ea67bd707d 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -498,7 +498,7 @@ /datum/status_effect/neck_slice/tick() var/mob/living/carbon/human/H = owner - if(H.stat == DEAD || H.bleed_rate <= 8) + if(H.stat == DEAD || H.get_bleed_rate() < BLEED_CUT) H.remove_status_effect(/datum/status_effect/neck_slice) if(prob(10)) H.emote(pick("gasp", "gag", "choke")) @@ -924,7 +924,7 @@ if(!ishuman(owner)) return var/mob/living/carbon/human/H = owner - H.bleed_rate += 5 + H.add_bleeding(BLEED_CUT) return ..() /datum/status_effect/heretic_mark/ash diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm index 22d77d15c0a3a..6bc5aa13a18e8 100644 --- a/code/datums/status_effects/status_effect.dm +++ b/code/datums/status_effects/status_effect.dm @@ -74,6 +74,10 @@ return duration = world.time + original_duration +/// Merge this status effect by applying new arguments +/datum/status_effect/proc/merge(...) + return + /datum/status_effect/proc/get_examine_text() //Called when the owner is examined return examine_text @@ -112,6 +116,9 @@ else if(S.status_type == STATUS_EFFECT_REFRESH) S.refresh() return + else if (S.status_type == STATUS_EFFECT_MERGE) + S.merge(arglist(args.Copy(2))) + return else return var/list/arguments = args.Copy() diff --git a/code/datums/traits/negative_quirk.dm b/code/datums/traits/negative_quirk.dm index 6bd895eefc40f..c723a21729c04 100644 --- a/code/datums/traits/negative_quirk.dm +++ b/code/datums/traits/negative_quirk.dm @@ -29,7 +29,7 @@ /datum/quirk/blooddeficiency/on_process(delta_time) var/mob/living/carbon/human/H = quirk_target - if(NOBLOOD in H.dna.species.species_traits) //can't lose blood if your species doesn't have any + if((NOBLOOD in H.dna.species.species_traits) || HAS_TRAIT(H, TRAIT_NO_BLOOD)) //can't lose blood if your species doesn't have any return else if(H.blood_volume > (BLOOD_VOLUME_SAFE - 25)) // just barely survivable without treatment H.blood_volume -= 0.275 * delta_time diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm index 02a878b9cd6b4..72526066bef41 100644 --- a/code/game/gamemodes/clown_ops/clown_weapons.dm +++ b/code/game/gamemodes/clown_ops/clown_weapons.dm @@ -17,7 +17,7 @@ desc = "advanced clown shoes that protect the wearer and render them nearly immune to slipping on their own peels. They also squeak at 100% capacity." clothing_flags = NOSLIP slowdown = SHOES_SLOWDOWN - armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 10, RAD = 0, FIRE = 70, ACID = 50, STAMINA = 25) + armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 10, RAD = 0, FIRE = 70, ACID = 50, STAMINA = 25, BLEED = 40) strip_delay = 70 resistance_flags = NONE permeability_coefficient = 0.05 @@ -32,7 +32,7 @@ name = "mk-honk combat shoes" desc = "The culmination of years of clown combat research, these shoes leave a trail of chaos in their wake. They will slowly recharge themselves over time, or can be manually charged with bananium." slowdown = SHOES_SLOWDOWN - armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 10, RAD = 0, FIRE = 70, ACID = 50, STAMINA = 25) + armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 10, RAD = 0, FIRE = 70, ACID = 50, STAMINA = 25, BLEED = 40) strip_delay = 70 resistance_flags = NONE permeability_coefficient = 0.05 @@ -292,7 +292,7 @@ base_icon_state = "darkhonker" max_integrity = 300 deflect_chance = 15 - armor = list(MELEE = 40, BULLET = 40, LASER = 50, ENERGY = 35, BOMB = 20, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 40, BULLET = 40, LASER = 50, ENERGY = 35, BOMB = 20, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) max_temperature = 35000 operation_req_access = list(ACCESS_SYNDICATE) internals_req_access = list(ACCESS_SYNDICATE) diff --git a/code/game/gamemodes/gangs/dominator.dm b/code/game/gamemodes/gangs/dominator.dm index 11d3ecbc1bf80..4af2519204b88 100644 --- a/code/game/gamemodes/gangs/dominator.dm +++ b/code/game/gamemodes/gangs/dominator.dm @@ -13,7 +13,7 @@ max_integrity = 300 integrity_failure = 0.33 move_resist = INFINITY - armor = list(MELEE = 20, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, RAD = 100, FIRE = 10, ACID = 70, STAMINA = 0) + armor = list(MELEE = 20, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, RAD = 100, FIRE = 10, ACID = 70, STAMINA = 0, BLEED = 0) var/datum/team/gang/gang var/operating = FALSE //false=standby or broken, true=takeover var/warned = FALSE //if this device has set off the warning at <3 minutes yet diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index ca03a01466159..2efbe213726c1 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -147,7 +147,7 @@ Class Procs: /obj/machinery/Initialize(mapload) if(!armor) - armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70, STAMINA = 0) + armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70, STAMINA = 0, BLEED = 0) . = ..() GLOB.machines += src diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index 90d6646286f16..5de006e590189 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -6,7 +6,7 @@ layer = PROJECTILE_HIT_THRESHOLD_LAYER plane = FLOOR_PLANE max_integrity = 200 - armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30, STAMINA = 0, BLEED = 0) var/uses = 20 var/cooldown = 0 diff --git a/code/game/machinery/airlock_cycle_control.dm b/code/game/machinery/airlock_cycle_control.dm index 133e90b2e88ef..ecb65e728e377 100644 --- a/code/game/machinery/airlock_cycle_control.dm +++ b/code/game/machinery/airlock_cycle_control.dm @@ -53,7 +53,7 @@ req_access = list(ACCESS_ATMOSPHERICS) max_integrity = 250 integrity_failure = 0.2 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF layer = ABOVE_WINDOW_LAYER diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index b59c2aa8780c5..66c13f7bc1af5 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -11,7 +11,7 @@ var/device_type = null var/id = null var/initialized_button = 0 - armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, RAD = 100, FIRE = 90, ACID = 70, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, RAD = 100, FIRE = 90, ACID = 70, STAMINA = 0, BLEED = 0) use_power = IDLE_POWER_USE idle_power_usage = 2 resistance_flags = LAVA_PROOF | FIRE_PROOF diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 10ae07254eea1..9cc634419721f 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -13,7 +13,7 @@ layer = WALL_OBJ_LAYER resistance_flags = FIRE_PROOF - armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 50, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 50, STAMINA = 0, BLEED = 0) max_integrity = 100 integrity_failure = 0.5 var/default_camera_icon = "camera" //the camera's base icon used by update_icon - icon_state is primarily used for mapping display purposes. diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm index 2d35dad4b2ce2..ebaa93ed3ada6 100644 --- a/code/game/machinery/computer/_computer.dm +++ b/code/game/machinery/computer/_computer.dm @@ -12,7 +12,7 @@ active_power_usage = 300 max_integrity = 200 integrity_failure = 0.5 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 40, ACID = 20, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 40, ACID = 20, STAMINA = 0, BLEED = 0) clicksound = "keyboard" light_system = STATIC_LIGHT light_range = 1 diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 2d4620a826758..b19a591943781 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -304,7 +304,7 @@ anim_parts = "left=-13,0;right=13,0" normal_integrity = 150 damage_deflection = 5 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0) /obj/machinery/door/airlock/bronze/seethru assemblytype = /obj/structure/door_assembly/door_assembly_bronze/seethru @@ -582,7 +582,7 @@ desc = "An airlock hastily corrupted by blood magic, it is unusually brittle in this state." normal_integrity = 150 damage_deflection = 5 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0) ////////////////////////////////// /* diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index ff5e6d0cc7792..624edd84c1168 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -12,7 +12,7 @@ pass_flags_self = PASSDOORS z_flags = Z_BLOCK_IN_DOWN | Z_BLOCK_IN_UP max_integrity = 350 - armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 100, FIRE = 80, ACID = 70, STAMINA = 0) + armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 100, FIRE = 80, ACID = 70, STAMINA = 0, BLEED = 0) CanAtmosPass = ATMOS_PASS_DENSITY flags_1 = PREVENT_CLICK_UNDER_1 ricochet_chance_mod = 0.8 diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index edf14ba9f4a3c..792ccd29664c5 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -24,7 +24,7 @@ layer = BELOW_OPEN_DOOR_LAYER closingLayer = CLOSED_FIREDOOR_LAYER assemblytype = /obj/structure/firelock_frame - armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 100, FIRE = 95, ACID = 70, STAMINA = 0) + armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 100, FIRE = 95, ACID = 70, STAMINA = 0, BLEED = 0) interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN air_tight = TRUE open_speed = 2 diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 0ca6d2b091573..f19e832377097 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -11,7 +11,7 @@ heat_proof = TRUE safe = FALSE max_integrity = 600 - armor = list(MELEE = 50, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 70, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 70, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF damage_deflection = 70 var/datum/crafting_recipe/recipe_type = /datum/crafting_recipe/blast_doors diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 0e6c49eb31d23..c531f9d1fe7e6 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -9,7 +9,7 @@ var/base_state = "left" max_integrity = 150 //If you change this, consider changing ../door/window/brigdoor/ max_integrity at the bottom of this .dm file integrity_failure = 0 - armor = list(MELEE = 20, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, RAD = 100, FIRE = 70, ACID = 100, STAMINA = 0) + armor = list(MELEE = 20, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, RAD = 100, FIRE = 70, ACID = 100, STAMINA = 0, BLEED = 0) visible = FALSE flags_1 = ON_BORDER_1 opacity = FALSE @@ -437,7 +437,7 @@ shards = 0 rods = 0 max_integrity = 50 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 100, RAD = 100, FIRE = 70, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 100, RAD = 100, FIRE = 70, ACID = 100, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF | ACID_PROOF operationdelay = 10 var/made_glow = FALSE diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index eb720b05a6439..736a18dc9371b 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -19,7 +19,7 @@ icon_state = "fire0" max_integrity = 250 integrity_failure = 0.4 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30, STAMINA = 0, BLEED = 0) use_power = IDLE_POWER_USE idle_power_usage = 2 active_power_usage = 6 diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 1816e51b1d651..2dbe5da051b91 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -37,7 +37,7 @@ Possible to do for anyone motivated enough: idle_power_usage = 5 active_power_usage = 100 max_integrity = 300 - armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0, STAMINA = 0, BLEED = 0) circuit = /obj/item/circuitboard/machine/holopad var/list/masters //List of living mobs that use the holopad var/list/holorays //Holoray-mob link. diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 0a36e83f6e813..363fa5d0a1aba 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -10,7 +10,7 @@ active_power_usage = 4 max_integrity = 300 circuit = /obj/item/circuitboard/machine/igniter - armor = list(MELEE = 50, BULLET = 30, LASER = 70, ENERGY = 50, BOMB = 20, BIO = 0, RAD = 0, FIRE = 100, ACID = 70, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 30, LASER = 70, ENERGY = 50, BOMB = 20, BIO = 0, RAD = 0, FIRE = 100, ACID = 70, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF var/id = null var/on = FALSE diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index f20855fb0103a..35e77322e7adc 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -9,7 +9,7 @@ desc = "A radio beacon used for bot navigation." layer = UNDER_CATWALK max_integrity = 500 - armor = list(MELEE = 70, BULLET = 70, LASER = 70, ENERGY = 70, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, STAMINA = 0) + armor = list(MELEE = 70, BULLET = 70, LASER = 70, ENERGY = 70, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, STAMINA = 0, BLEED = 0) var/open = FALSE // true if cover is open var/locked = TRUE // true if controls are locked diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 25a6cb501a561..668435ea077ed 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -39,7 +39,7 @@ //the turret's health max_integrity = 160 integrity_failure = 0.5 - armor = list(MELEE = 50, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 0, FIRE = 90, ACID = 90, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 0, FIRE = 90, ACID = 90, STAMINA = 0, BLEED = 0) //if the turret's behaviour control access is locked var/locked = TRUE @@ -762,7 +762,7 @@ DEFINE_BUFFER_HANDLER(/obj/machinery/porta_turret) lethal_projectile = /obj/projectile/bullet/p50/penetrator/shuttle lethal_projectile_sound = 'sound/weapons/gunshot_smg.ogg' stun_projectile_sound = 'sound/weapons/gunshot_smg.ogg' - armor = list(MELEE = 50, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 80, BIO = 0, RAD = 0, FIRE = 90, ACID = 90, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 80, BIO = 0, RAD = 0, FIRE = 90, ACID = 90, STAMINA = 0, BLEED = 0) /obj/machinery/porta_turret/syndicate/shuttle/target(atom/movable/target) if(target) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 2b323f3dcaf75..829a1d883f27b 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -70,7 +70,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) var/receive_ore_updates = FALSE //If ore redemption machines will send an update when it receives new ores. var/auth_id = "Unknown" //Will contain the name and and job of the person who verified it max_integrity = 300 - armor = list(MELEE = 70, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 90, STAMINA = 0) + armor = list(MELEE = 70, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 90, STAMINA = 0, BLEED = 0) /obj/machinery/requests_console/update_appearance(updates=ALL) . = ..() diff --git a/code/game/machinery/shuttle/shuttle_heater.dm b/code/game/machinery/shuttle/shuttle_heater.dm index 1420165f4e4d7..1c1a9330a5d21 100644 --- a/code/game/machinery/shuttle/shuttle_heater.dm +++ b/code/game/machinery/shuttle/shuttle_heater.dm @@ -23,7 +23,7 @@ density = TRUE z_flags = Z_BLOCK_IN_DOWN | Z_BLOCK_IN_UP max_integrity = 400 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 100, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 100, ACID = 30, STAMINA = 0, BLEED = 0) layer = OBJ_LAYER showpipe = TRUE diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 8a3e6229a0300..3ccb52f832fff 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -13,7 +13,7 @@ name = "space heater" desc = "Made by Space Amish using traditional space techniques, this heater/cooler is guaranteed not to set the station on fire. Warranty void if used in engines." max_integrity = 250 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 100, FIRE = 80, ACID = 10, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 100, FIRE = 80, ACID = 10, STAMINA = 0, BLEED = 0) circuit = /obj/item/circuitboard/machine/space_heater //We don't use area power, we always use the cell use_power = NO_POWER_USE diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm index 5f7003e346d4d..3f093e9ab9b60 100644 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -14,7 +14,7 @@ use_power = IDLE_POWER_USE idle_power_usage = 10 active_power_usage = 100 - armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70, STAMINA = 0) + armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70, STAMINA = 0, BLEED = 0) var/obj/item/stored investigate_flags = ADMIN_INVESTIGATE_TARGET diff --git a/code/game/objects/effects/anomalies/anomaly_bleed.dm b/code/game/objects/effects/anomalies/anomaly_bleed.dm new file mode 100644 index 0000000000000..81cab90bc4972 --- /dev/null +++ b/code/game/objects/effects/anomalies/anomaly_bleed.dm @@ -0,0 +1,61 @@ +/obj/effect/anomaly/blood + name = "blood anomaly" + icon_state = "blood_anomaly" + density = TRUE + aSignal = /obj/item/assembly/signaler/anomaly/blood + var/sucking = FALSE + +/obj/effect/anomaly/blood/anomalyEffect(delta_time) + if (sucking) + return + ..() + if (DT_PROB(20, delta_time)) + AddComponent(/datum/component/pellet_cloud, projectile_type=/obj/projectile/bullet/shrapnel/bleed, magnitude=3) + playsound(src, 'sound/weapons/shrapnel.ogg', 70, TRUE) + if (DT_PROB(10, delta_time)) + for (var/mob/living/carbon/bleed_target in view(6, src)) + if (!bleed_target.resting) + continue + if (do_teleport(src, get_turf(bleed_target), channel = TELEPORT_CHANNEL_BLUESPACE)) + bleed_target.Stun(3 SECONDS) + INVOKE_ASYNC(src, PROC_REF(suck_blood)) + break + +/obj/effect/anomaly/blood/detonate() + // Stop processing here since we don't want to keep moving while doing the detonation action + STOP_PROCESSING(SSobj, src) + // Needs to sleep since this gets instantly deleted as soon as the proc ends + for (var/mob/living/carbon/human/player in shuffle(GLOB.player_list)) + if (!is_station_level(player.z)) + continue + var/turf/player_loc = get_turf(player) + var/list/nearby_turfs = RANGE_TURFS(4, player_loc) + shuffle_inplace(nearby_turfs) + var/turf/target = locate(/turf/open) in nearby_turfs + if (!target) + continue + // Blocked by the bluespace anchor + if (!do_teleport(src, target, channel = TELEPORT_CHANNEL_BLUESPACE)) + return + sleep(40) + if (QDELETED(src)) + return + AddComponent(/datum/component/pellet_cloud, projectile_type=/obj/projectile/bullet/shrapnel/bleed, magnitude=3) + playsound(src, 'sound/weapons/shrapnel.ogg', 70, TRUE) + sleep(20) + if (QDELETED(src)) + return + +/obj/effect/anomaly/blood/proc/suck_blood() + sucking = FALSE + for (var/mob/living/carbon/bleed_target in loc) + bleed_target.add_bleeding(BLEED_SURFACE) + bleed_target.emote("scream") + sucking = TRUE + if (sucking) + new /obj/effect/temp_visual/cult/sparks(loc) + addtimer(CALLBACK(src, PROC_REF(suck_blood)), 0.5 SECONDS) + +/obj/projectile/bullet/shrapnel/bleed + damage = 4 + bleed_force = BLEED_DEEP_WOUND diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index 06be746ccd785..5cdb3cc27e75a 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -24,7 +24,7 @@ RLD w_class = WEIGHT_CLASS_LARGE custom_materials = list(/datum/material/iron=100000) req_access_txt = "11" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF var/datum/effect_system/spark_spread/spark_system var/matter = 0 diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm index b701a0509ba5d..96be0b40ffc06 100644 --- a/code/game/objects/items/RPD.dm +++ b/code/game/objects/items/RPD.dm @@ -213,7 +213,7 @@ GLOBAL_LIST_INIT(fluid_duct_recipes, list( w_class = WEIGHT_CLASS_LARGE slot_flags = ITEM_SLOT_BELT custom_materials = list(/datum/material/iron=75000, /datum/material/glass=37500) - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF var/datum/effect_system/spark_spread/spark_system var/working = 0 diff --git a/code/game/objects/items/RSF.dm b/code/game/objects/items/RSF.dm index 3f676294af26c..b29a67d9a7b2b 100644 --- a/code/game/objects/items/RSF.dm +++ b/code/game/objects/items/RSF.dm @@ -14,7 +14,7 @@ RSF density = FALSE anchored = FALSE item_flags = NOBLUDGEON - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0) var/matter = 0 var/mode = 1 w_class = WEIGHT_CLASS_NORMAL diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 87115edd19379..a743677e5141e 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -164,7 +164,7 @@ lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' slot_flags = ITEM_SLOT_ID - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF | ACID_PROOF var/list/access = list() var/registered_name// The name registered_name on the card @@ -849,7 +849,7 @@ update_label("John Doe", "Clowny") name = "paper nametag" desc = "Some spare papers taped into a vague card shape, with a name scribbled on it. Seems trustworthy." icon_state = "paper" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 50, STAMINA = 0, BLEED = 0) resistance_flags = null // removes all resistance because its a piece of paper access = list() assignment = "Unknown" diff --git a/code/game/objects/items/chainsaw.dm b/code/game/objects/items/chainsaw.dm index 913e7337f6889..5d84cdcfcccb6 100644 --- a/code/game/objects/items/chainsaw.dm +++ b/code/game/objects/items/chainsaw.dm @@ -20,6 +20,7 @@ attack_verb = list("sawed", "tore", "cut", "chopped", "diced") hitsound = "swing_hit" sharpness = IS_SHARP + bleed_force = BLEED_DEEP_WOUND actions_types = list(/datum/action/item_action/startchainsaw) var/on = FALSE tool_behaviour = TOOL_SAW diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm index 69d133edb6a44..d53776dd14bd3 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -265,15 +265,6 @@ user.visible_message("[user] is slitting [user.p_their()] own throat with [src]! It looks like [user.p_theyre()] trying to commit suicide!") return BRUTELOSS -/obj/item/razor/attack(mob/M, mob/user) - . = ..() - if(ishuman(M) && extended == 1 && (user.a_intent == INTENT_HARM)) - var/mob/living/carbon/human/H = M - var/def_check = H.getarmor(MELEE) - H.bleed_rate += ((force * 10) - def_check)/30 //sharp blade causes a shitload of blood loss if on harm intent - if(H.bleed_rate >= 10) - to_chat(M, "You're losing blood fast!") - /obj/item/razor/straightrazor/attack_self(mob/user) extended = !extended playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1) @@ -285,6 +276,7 @@ attack_verb = list("slashed", "stabbed", "sliced", "slit", "shaved", "diced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP + bleed_force = BLEED_SURFACE tool_behaviour = TOOL_SCALPEL else force = initial(force) @@ -294,6 +286,7 @@ attack_verb = list("stubbed", "poked") hitsound = 'sound/weapons/genhit.ogg' sharpness = IS_BLUNT + bleed_force = 0 tool_behaviour = null /obj/item/handmirror diff --git a/code/game/objects/items/crab17.dm b/code/game/objects/items/crab17.dm index 659b808765829..5b4b0946fea3e 100644 --- a/code/game/objects/items/crab17.dm +++ b/code/game/objects/items/crab17.dm @@ -33,7 +33,7 @@ icon = 'icons/obj/money_machine.dmi' icon_state = "bogdanoff" layer = TABLE_LAYER //So that the crate inside doesn't appear underneath - armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 100, BIO = 0, RAD = 0, FIRE = 100, ACID = 80, STAMINA = 0) + armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 100, BIO = 0, RAD = 0, FIRE = 100, ACID = 80, STAMINA = 0, BLEED = 0) density = TRUE pixel_z = -8 layer = LARGE_MOB_LAYER diff --git a/code/game/objects/items/debug_items.dm b/code/game/objects/items/debug_items.dm index 14032b526c10b..97377bd2b1a87 100644 --- a/code/game/objects/items/debug_items.dm +++ b/code/game/objects/items/debug_items.dm @@ -235,7 +235,7 @@ item_state = "holdingpack" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF item_flags = NO_MAT_REDEMPTION - armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) /obj/item/storage/backpack/debug/ComponentInitialize() . = ..() diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 4675d451aa906..ad4d2dccb00e1 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -14,7 +14,7 @@ throwforce = 6 w_class = WEIGHT_CLASS_BULKY actions_types = list(/datum/action/item_action/toggle_paddles) - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 0, BLEED = 0) var/obj/item/shockpaddles/paddle_type = /obj/item/shockpaddles var/on = FALSE //if the paddles are equipped (1) or on the defib (0) diff --git a/code/game/objects/items/deployable/barricade.dm b/code/game/objects/items/deployable/barricade.dm index ee8c46727a671..38688c4cc8eed 100644 --- a/code/game/objects/items/deployable/barricade.dm +++ b/code/game/objects/items/deployable/barricade.dm @@ -194,7 +194,7 @@ icon_state = "barrier1" max_integrity = 180 proj_pass_rate = 20 - armor = list(MELEE = 10, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, RAD = 100, FIRE = 10, ACID = 0, STAMINA = 0) + armor = list(MELEE = 10, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, RAD = 100, FIRE = 10, ACID = 0, STAMINA = 0, BLEED = 0) req_access = list(ACCESS_SECURITY) pickup_damaged = FALSE locked_down = TRUE diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm index 68a47eb19db09..7c6d8c1798069 100644 --- a/code/game/objects/items/devices/forcefieldprojector.dm +++ b/code/game/objects/items/devices/forcefieldprojector.dm @@ -87,7 +87,7 @@ mouse_opacity = MOUSE_OPACITY_OPAQUE resistance_flags = INDESTRUCTIBLE CanAtmosPass = ATMOS_PASS_DENSITY - armor = list(MELEE = 0, BULLET = 25, LASER = 50, ENERGY = 50, BOMB = 25, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 25, LASER = 50, ENERGY = 50, BOMB = 25, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) var/obj/item/forcefield_projector/generator /obj/structure/projected_forcefield/Initialize(mapload, obj/item/forcefield_projector/origin) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 2178dcf5be457..11358743e677e 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -456,8 +456,10 @@ GENE SCANNER if(blood_id) if(ishuman(C)) var/mob/living/carbon/human/H = C - if(H.bleed_rate) - message += "Subject is bleeding!" + if(H.is_bleeding()) + message += "Subject is bleeding at a rate of [round(H.get_bleed_rate(), 0.1)]/s!" + else if (H.is_bandaged()) + message += "Subject is bleeding (Bandaged)!" var/blood_percent = round((C.blood_volume / BLOOD_VOLUME_NORMAL)*100) var/blood_type = C.dna.blood_type if(blood_id != /datum/reagent/blood)//special blood substance @@ -466,12 +468,13 @@ GENE SCANNER blood_type = R.name else blood_type = blood_id + var/blood_info = "[blood_type] (Compatible: [jointext(get_safe_blood(blood_type), ", ")])" if(C.blood_volume <= BLOOD_VOLUME_SAFE && C.blood_volume > BLOOD_VOLUME_OKAY) - message += "Blood level: LOW [blood_percent] %, [C.blood_volume] cl, type: [blood_type]" + message += "Blood level: LOW [blood_percent] %, [C.blood_volume] cl, type: [blood_info]" else if(C.blood_volume <= BLOOD_VOLUME_OKAY) - message += "Blood level: CRITICAL [blood_percent] %, [C.blood_volume] cl, type: [blood_type]" + message += "Blood level: CRITICAL [blood_percent] %, [C.blood_volume] cl, type: [blood_info]" else - message += "Blood level: [blood_percent] %, [C.blood_volume] cl, type: [blood_type]" + message += "Blood level: [blood_percent] %, [C.blood_volume] cl, type: [blood_info]" var/list/cyberimp_detect = list() for(var/obj/item/organ/cyberimp/CI in C.internal_organs) diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm index 56f62fb6feb75..6b575424b02c8 100644 --- a/code/game/objects/items/dualsaber.dm +++ b/code/game/objects/items/dualsaber.dm @@ -26,7 +26,7 @@ block_sound = 'sound/weapons/egloves.ogg' block_flags = BLOCKING_ACTIVE | BLOCKING_NASTY | BLOCKING_PROJECTILE max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 70, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 70, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF light_system = MOVABLE_LIGHT light_range = 6 @@ -71,6 +71,7 @@ to_chat(user, "You lack the grace to wield this!") return COMPONENT_TWOHANDED_BLOCK_WIELD sharpness = IS_SHARP + bleed_force = BLEED_DEEP_WOUND w_class = w_class_on hitsound = 'sound/weapons/blade1.ogg' START_PROCESSING(SSobj, src) @@ -83,6 +84,7 @@ sharpness = initial(sharpness) w_class = initial(w_class) + bleed_force = initial(bleed_force) hitsound = "swing_hit" STOP_PROCESSING(SSobj, src) set_light_on(FALSE) diff --git a/code/game/objects/items/fireaxe.dm b/code/game/objects/items/fireaxe.dm index 2023b63f773f3..d5e4186e02a14 100644 --- a/code/game/objects/items/fireaxe.dm +++ b/code/game/objects/items/fireaxe.dm @@ -15,8 +15,9 @@ attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP + bleed_force = BLEED_CUT max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF item_flags = ISWEAPON var/icon_prefix = "fireaxe" diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 521194548b7d3..0c5249ca9aa32 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -39,7 +39,7 @@ throw_range = 5 custom_materials = list(/datum/material/iron=500) breakouttime = 1 MINUTES - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 0, BLEED = 0) var/cuffsound = 'sound/weapons/handcuffs.ogg' var/trashtype = null //for disposable cuffs diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index 01b6d227c4b43..201f7bb1d21ef 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -329,6 +329,7 @@ block_level = 1 block_power = 30 sharpness = IS_SHARP + bleed_force = BLEED_CUT hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "slashed", "stabbed", "sliced", "tore", "ripped", "diced", "cut") @@ -448,6 +449,7 @@ block_flags = BLOCKING_ACTIVE | BLOCKING_NASTY slot_flags = ITEM_SLOT_BACK sharpness = IS_SHARP + bleed_force = BLEED_CUT attack_verb = list("chopped", "sliced", "cut", "reaped") /obj/item/nullrod/scythe/Initialize(mapload) @@ -565,6 +567,7 @@ w_class = WEIGHT_CLASS_HUGE item_flags = ABSTRACT | ISWEAPON sharpness = IS_SHARP + bleed_force = BLEED_CUT attack_verb = list("sawed", "tore", "cut", "chopped", "diced") hitsound = 'sound/weapons/chainsawhit.ogg' tool_behaviour = TOOL_SAW @@ -589,6 +592,7 @@ worn_icon_state = "render" hitsound = 'sound/items/bikehorn.ogg' sharpness = IS_SHARP + bleed_force = BLEED_CUT attack_verb = list("attacked", "slashed", "stabbed", "sliced", "tore", "ripped", "diced", "cut") /obj/item/nullrod/pride_hammer @@ -639,6 +643,7 @@ throw_range = 7 throwforce = 30 sharpness = IS_SHARP + bleed_force = BLEED_CUT attack_verb = list("enlightened", "redpilled") /obj/item/nullrod/armblade @@ -653,6 +658,7 @@ item_flags = ABSTRACT | ISWEAPON w_class = WEIGHT_CLASS_HUGE sharpness = IS_SHARP + bleed_force = BLEED_CUT /obj/item/nullrod/armblade/Initialize(mapload) . = ..() @@ -712,6 +718,7 @@ righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' w_class = WEIGHT_CLASS_HUGE sharpness = IS_SHARP + bleed_force = BLEED_CUT slot_flags = null hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "slashed", "stabbed", "sliced", "tore", "ripped", "diced", "cut") @@ -745,6 +752,7 @@ attack_verb = list("poked", "impaled", "pierced", "jabbed") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP + bleed_force = BLEED_CUT /obj/item/nullrod/egyptian name = "egyptian staff" @@ -785,6 +793,7 @@ slot_flags = ITEM_SLOT_BELT armour_penetration = 10 sharpness = IS_SHARP_ACCURATE + bleed_force = BLEED_CUT w_class = WEIGHT_CLASS_BULKY attack_verb = list("stabbed", "poked", "slashed", "clocked") hitsound = 'sound/weapons/bladeslice.ogg' diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index 55047742d7d46..04bcfbc2fee83 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -28,7 +28,7 @@ flags_1 = CONDUCT_1 attack_verb = list("attacked", "stabbed", "poked") hitsound = 'sound/weapons/bladeslice.ogg' - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30, STAMINA = 0, BLEED = 0) var/datum/reagent/forkload //used to eat omelette /obj/item/kitchen/fork/suicide_act(mob/living/carbon/user) diff --git a/code/game/objects/items/knives.dm b/code/game/objects/items/knives.dm index 7b67055fce7b9..c5ddeed82da17 100644 --- a/code/game/objects/items/knives.dm +++ b/code/game/objects/items/knives.dm @@ -19,6 +19,7 @@ attack_verb = list("slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts") //attack_verb_simple = list("slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") sharpness = IS_SHARP_ACCURATE + bleed_force = BLEED_CUT armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) var/bayonet = FALSE //Can this be attached to a gun? //wound_bonus = 5 @@ -156,7 +157,7 @@ throwforce = 12//fuck git custom_materials = list() attack_verb = list("shanked", "shivved") - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0) // Shank - Makeshift weapon that can embed on throw /obj/item/knife/shank diff --git a/code/game/objects/items/manuals.dm b/code/game/objects/items/manuals.dm index e101af436b401..db47e9aa38ca2 100644 --- a/code/game/objects/items/manuals.dm +++ b/code/game/objects/items/manuals.dm @@ -464,7 +464,7 @@ if(prob(50)) step(W, pick(GLOB.alldirs)) ADD_TRAIT(H, TRAIT_DISFIGURED, TRAIT_GENERIC) - H.bleed_rate = 5 + H.add_bleeding(BLEED_CRITICAL) H.gib_animation() sleep(3) H.adjustBruteLoss(1000) //to make the body super-bloody diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 5a3ab991f2a87..4dbf1a193df9b 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -3,7 +3,7 @@ hitsound_on = 'sound/weapons/blade1.ogg' heat = 3500 max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF light_system = MOVABLE_LIGHT light_range = 3 @@ -102,6 +102,7 @@ throw_speed = 3 throw_range = 5 sharpness = IS_SHARP + bleed_force_on = BLEED_DEEP_WOUND embedding = list("embed_chance" = 200, "armour_block" = 60, "max_pain_mult" = 15) armour_penetration = 35 block_level = 1 @@ -134,6 +135,7 @@ sword_color = null //stops icon from breaking when turned on. w_class = WEIGHT_CLASS_NORMAL sharpness = IS_SHARP + bleed_force_on = BLEED_DEEP_WOUND light_color = "#40ceff" tool_behaviour = TOOL_SAW toolspeed = 0.7 //faster as a saw @@ -164,6 +166,7 @@ hitcost = 75 //Costs more than a standard cyborg esword w_class = WEIGHT_CLASS_NORMAL sharpness = IS_SHARP + bleed_force_on = BLEED_DEEP_WOUND light_color = "#40ceff" tool_behaviour = TOOL_SAW toolspeed = 0.7 //faster as a saw @@ -261,6 +264,7 @@ w_class = WEIGHT_CLASS_BULKY//So you can't hide it in your pocket or some such. var/datum/effect_system/spark_spread/spark_system sharpness = IS_SHARP + bleed_force_on = BLEED_DEEP_WOUND //Most of the other special functions are handled in their own files. aka special snowflake code so kewl /obj/item/melee/transforming/energy/blade/Initialize(mapload) diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 7ffedc07349a7..b0e6ea72f9f53 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -45,6 +45,7 @@ hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "slashed", "stabbed", "sliced", "tore", "ripped", "diced", "cut") sharpness = IS_SHARP + bleed_force = BLEED_CUT /obj/item/melee/synthetic_arm_blade/Initialize(mapload) . = ..() @@ -68,6 +69,7 @@ w_class = WEIGHT_CLASS_BULKY armour_penetration = 75 sharpness = IS_SHARP + bleed_force = BLEED_CUT attack_verb = list("slashed", "cut") hitsound = 'sound/weapons/rapierhit.ogg' custom_materials = list(/datum/material/iron = 1000) diff --git a/code/game/objects/items/melee/transforming.dm b/code/game/objects/items/melee/transforming.dm index 8d0b3c587120e..be7012a8694ee 100644 --- a/code/game/objects/items/melee/transforming.dm +++ b/code/game/objects/items/melee/transforming.dm @@ -1,9 +1,11 @@ /obj/item/melee/transforming sharpness = IS_SHARP + bleed_force = 0 var/active = FALSE var/force_on = 30 //force when active var/faction_bonus_force = 0 //Bonus force dealt against certain factions var/throwforce_on = 20 + var/bleed_force_on = BLEED_CUT var/icon_state_on = "axe1" var/hitsound_on = 'sound/weapons/blade1.ogg' var/list/attack_verb_on = list("attacked", "slashed", "stabbed", "sliced", "tore", "ripped", "diced", "cut") @@ -61,6 +63,7 @@ attack_verb = attack_verb_on icon_state = icon_state_on w_class = w_class_on + bleed_force = bleed_force_on if(embedding) updateEmbedding() else @@ -72,6 +75,7 @@ attack_verb = attack_verb_off icon_state = initial(icon_state) w_class = initial(w_class) + bleed_force = initial(bleed_force) if(embedding) disableEmbedding() if(is_sharp()) diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm index 1156b9c8c5485..99035dc38fca4 100644 --- a/code/game/objects/items/mop.dm +++ b/code/game/objects/items/mop.dm @@ -124,4 +124,5 @@ throw_speed = 4 attack_verb = list("mopped", "stabbed", "shanked", "jousted") sharpness = IS_SHARP + bleed_force = BLEED_SURFACE embedding = list("armour_block" = 40) diff --git a/code/game/objects/items/pitchfork.dm b/code/game/objects/items/pitchfork.dm index 41f97943791cb..4bf6ed8cda10e 100644 --- a/code/game/objects/items/pitchfork.dm +++ b/code/game/objects/items/pitchfork.dm @@ -13,8 +13,9 @@ attack_verb = list("attacked", "impaled", "pierced") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP + bleed_force = BLEED_CUT max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF /obj/item/pitchfork/ComponentInitialize() diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index bf8a8eb6691ac..62301d1d3afc3 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -14,7 +14,7 @@ item_state = "bulldog" lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 60, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 60, ACID = 50, STAMINA = 0, BLEED = 0) var/maxWeightClass = 20 //The max weight of items that can fit into the cannon var/loadedWeightClass = 0 //The weight of items currently in the cannon var/obj/item/tank/internals/tank = null //The gas tank that is drawn from to fire things diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm index 7d4ef3e5fd4b6..c730ba8171fdf 100644 --- a/code/game/objects/items/powerfist.dm +++ b/code/game/objects/items/powerfist.dm @@ -13,7 +13,7 @@ throw_range = 7 w_class = WEIGHT_CLASS_NORMAL item_flags = ISWEAPON - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 40, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 40, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF var/click_delay = 1.5 var/fisto_setting = 1 diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm index 64fbbf3a7676f..1f30d22dd2618 100644 --- a/code/game/objects/items/religion.dm +++ b/code/game/objects/items/religion.dm @@ -246,47 +246,6 @@ desc = "It's a backpack with lots of extra room. A blue banner is attached, that can't be removed." icon_state = "bannerpack-blue" -//this is all part of one item set - - -/obj/item/clothing/head/helmet/plate/crusader - name = "Crusader's Hood" - desc = "A brownish hood." - icon = 'icons/obj/clothing/head/chaplain.dmi' - worn_icon = 'icons/mob/clothing/head/chaplain.dmi' - icon_state = "crusader" - w_class = WEIGHT_CLASS_NORMAL - flags_inv = HIDEHAIR|HIDEEARS|HIDEFACE - armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 40, BOMB = 60, BIO = 0, RAD = 0, FIRE = 60, ACID = 60, STAMINA = 50) - -/obj/item/clothing/head/helmet/plate/crusader/blue - icon_state = "crusader-blue" - item_state = null - -/obj/item/clothing/head/helmet/plate/crusader/red - icon_state = "crusader-red" - item_state = null - -//Prophet helmet -/obj/item/clothing/head/helmet/plate/crusader/prophet - name = "Prophet's Hat" - desc = "A religious-looking hat." - icon_state = null - worn_icon = 'icons/mob/large-worn-icons/64x64/head.dmi' - item_state = null - flags_1 = 0 - armor = list(MELEE = 60, BULLET = 60, LASER = 60, ENERGY = 50, BOMB = 70, BIO = 50, RAD = 50, FIRE = 60, ACID = 60, STAMINA = 60) //religion protects you from disease and radiation, honk. - worn_x_dimension = 64 - worn_y_dimension = 64 - -/obj/item/clothing/head/helmet/plate/crusader/prophet/red - icon_state = "prophet-red" - item_state = null - -/obj/item/clothing/head/helmet/plate/crusader/prophet/blue - icon_state = "prophet-blue" - item_state = null - //Structure conversion staff /obj/item/godstaff name = "godstaff" @@ -338,7 +297,7 @@ desc = "Metal boots, they look heavy." icon_state = "crusader" w_class = WEIGHT_CLASS_NORMAL - armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 40, BOMB = 60, BIO = 0, RAD = 0, FIRE = 60, ACID = 60, STAMINA = 30) //does this even do anything on boots? + armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 40, BOMB = 60, BIO = 0, RAD = 0, FIRE = 60, ACID = 60, STAMINA = 30, BLEED = 60) //does this even do anything on boots? clothing_flags = NOSLIP cold_protection = FEET min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 66765f90657db..97be530b0e914 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -592,6 +592,7 @@ icon_state = "gumball" ammo_type = /obj/item/food/gumball/cyborg nodamage = TRUE + bleed_force = 0 /obj/projectile/bullet/reusable/gumball/handle_drop() if(!dropped) @@ -612,6 +613,7 @@ ammo_type = /obj/item/food/lollipop/cyborg var/color2 = rgb(0, 0, 0) nodamage = TRUE + bleed_force = 0 /obj/projectile/bullet/reusable/lollipop/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/sharpener.dm b/code/game/objects/items/sharpener.dm index daed28fd27ce5..d8df3e69ec8c4 100644 --- a/code/game/objects/items/sharpener.dm +++ b/code/game/objects/items/sharpener.dm @@ -40,6 +40,7 @@ user.visible_message("[user] sharpens [I] with [src]!", "You sharpen [I], making it much more deadly than before.") playsound(src, 'sound/items/unsheath.ogg', 25, 1) I.sharpness = IS_SHARP_ACCURATE + I.bleed_force *= 1.1 I.throwforce = clamp(I.throwforce + increment, 0, max) I.name = "[prefix] [I.name]" name = "worn out [name]" diff --git a/code/game/objects/items/shrapnel.dm b/code/game/objects/items/shrapnel.dm index 5ef59060bd9a1..103e8d676ea32 100644 --- a/code/game/objects/items/shrapnel.dm +++ b/code/game/objects/items/shrapnel.dm @@ -51,6 +51,7 @@ shrapnel_type = /obj/item/shrapnel ricochet_incidence_leeway = 60 hit_stunned_targets = TRUE + bleed_force = BLEED_SURFACE /obj/projectile/bullet/shrapnel/mega name = "flying shrapnel hunk" @@ -59,6 +60,7 @@ ricochets_max = 4 ricochet_chance = 90 ricochet_decay_chance = 0.9 + bleed_force = BLEED_CUT /obj/projectile/bullet/pellet/stingball name = "stingball pellet" diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm index e3a1f9f6a95cc..ad2ae95a1219a 100644 --- a/code/game/objects/items/singularityhammer.dm +++ b/code/game/objects/items/singularityhammer.dm @@ -14,7 +14,7 @@ throw_range = 1 w_class = WEIGHT_CLASS_HUGE item_flags = ISWEAPON - armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 50, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 50, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF | ACID_PROOF force_string = "LORD SINGULOTH HIMSELF" var/charged = 5 diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm index fbf1bb14eea94..fbf2f8b1ee2b5 100644 --- a/code/game/objects/items/spear.dm +++ b/code/game/objects/items/spear.dm @@ -18,8 +18,9 @@ hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") sharpness = IS_SHARP + bleed_force = BLEED_CUT max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30, STAMINA = 0, BLEED = 0) var/war_cry = "AAAAARGH!!!" var/icon_prefix = "spearglass" @@ -191,6 +192,7 @@ hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "poked", "jabbed", "tore", "gored") sharpness = IS_SHARP + bleed_force = BLEED_CUT /obj/item/spear/bamboospear/ComponentInitialize() . = ..() diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 08ad341ece0bd..91fd05087eeda 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -19,6 +19,8 @@ ///What reagent does it apply? var/list/reagent ///Is this for bruises? + var/heal_creatures = FALSE + ///Is this for bruises? var/heal_brute = FALSE ///Is this for burns? var/heal_burn = FALSE @@ -56,7 +58,7 @@ if(critter.health == critter.maxHealth) to_chat(user, "[M] is at full health.") return - if(!heal_brute) //simplemobs can only take brute damage, and can only benefit from items intended to heal it + if(!heal_creatures) //simplemobs can only take brute damage, and can only benefit from items intended to heal it to_chat(user, "[src] won't help [M] at all.") return M.heal_bodypart_damage(REAGENT_AMOUNT_PER_ITEM) @@ -72,15 +74,19 @@ return if (!user.can_interact_with(M, TRUE)) to_chat(user, "You cannot reach [M]!") + M.balloon_alert(user, "You cannot reach that.") return if (!user.can_interact_with(src, TRUE)) to_chat(user, "You cannot reach [src]!") + M.balloon_alert(user, "You cannot reach that.") return if(M.stat == DEAD && !stop_bleeding) to_chat(user, "\The [M] is dead, you cannot help [M.p_them()]!") + M.balloon_alert(user, "[M] is dead.") return if(!iscarbon(M)) to_chat(user, "You don't know how to apply \the [src] to [M]!") + M.balloon_alert(user, "You cannot use that.") return var/obj/item/bodypart/affecting var/mob/living/carbon/C = M @@ -91,29 +97,38 @@ if(!affecting) //Missing limb? to_chat(user, "[C] doesn't have \a [parse_zone(zone_selected)]!") + C.balloon_alert(user, "[C] has no [parse_zone(zone_selected)]!") return - if(ishuman(C)) //apparently only humans bleed? funky. - var/mob/living/carbon/human/H = C - if(stop_bleeding) - if(!H.bleed_rate) - to_chat(user, "[H] isn't bleeding!") - return - if(H.bleedsuppress) //so you can't stack bleed suppression - to_chat(user, "[H]'s bleeding is already bandaged!") - return - H.suppress_bloodloss(stop_bleeding) + var/valid = FALSE + var/message = null + + if(stop_bleeding) + if (C.is_bleeding()) + valid = TRUE + else if (C.is_bandaged()) + message = "[C]'s bleeding is already bandaged!" + else + message = "[C] isn't bleeding!" if(!IS_ORGANIC_LIMB(affecting)) to_chat(user, "Medicine won't work on a robotic limb!") + C.balloon_alert(user, "Cannot use on robotic limb!") return if(!(affecting.brute_dam || affecting.burn_dam)) - to_chat(user, "[M]'s [parse_zone(zone_selected)] isn't hurt!") - return + message = "[M]'s [parse_zone(zone_selected)] isn't hurt!" + else + valid = TRUE if((affecting.brute_dam && !affecting.burn_dam && !heal_brute) || (affecting.burn_dam && !affecting.brute_dam && !heal_burn)) //suffer - to_chat(user, "This type of medicine isn't appropriate for this type of wound.") + message = "This type of medicine isn't appropriate for this type of wound." + else + valid = TRUE + + if (!valid) + to_chat("[message]") + C.balloon_alert(user, message) return if(C == user) @@ -123,9 +138,19 @@ //After the do_mob to ensure metabolites have had time to process at least one tick. if(reagent && (C.reagents.get_reagent_amount(/datum/reagent/metabolite/medicine/styptic_powder) || C.reagents.get_reagent_amount(/datum/reagent/metabolite/medicine/silver_sulfadiazine))) to_chat(user, "That stuff really hurt! You'll need to wait for the pain to go away before you can apply [src] to your wounds again, maybe someone else can help put it on for you.") + C.balloon_alert(user, "You fail to apply [src] to yourself!") return - user.visible_message("[user] applies [src] on [M].", "You apply [src] on [M].") + if(stop_bleeding) + C.suppress_bloodloss(stop_bleeding) + if (C.is_bleeding()) + C.balloon_alert(user, "You reduce [M == user ? "your" : M.p_their()] bleeding to [C.get_bleed_rate_string()]") + else + C.balloon_alert(user, "You stop [M == user ? "your" : M.p_their()] bleeding!") + else + C.balloon_alert(user, "You apply [src] to [M == user ? "yourself" : M].") + + user.visible_message("[user] applies [src] to [M].", "You apply [src] to [M].") if(reagent) reagents.reaction(M, PATCH, affecting = affecting) M.reagents.add_reagent_list(reagent) //Stack size is reduced by one instead of actually removing reagents from the stack. @@ -144,6 +169,7 @@ lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' heal_brute = TRUE + heal_creatures = TRUE reagent = list(/datum/reagent/medicine/styptic_powder = REAGENT_AMOUNT_PER_ITEM) grind_results = list(/datum/reagent/medicine/styptic_powder = REAGENT_AMOUNT_PER_ITEM) merge_type = /obj/item/stack/medical/bruise_pack @@ -177,8 +203,8 @@ name = "medical gauze" desc = "A roll of elastic cloth that is extremely effective at stopping bleeding, heals minor bruising." icon_state = "gauze" - stop_bleeding = 1800 - heal_brute = TRUE //Enables gauze to be used on simplemobs for healing + stop_bleeding = BLEED_CRITICAL + heal_creatures = TRUE //Enables gauze to be used on simplemobs for healing max_amount = 12 merge_type = /obj/item/stack/medical/gauze @@ -203,8 +229,8 @@ 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 = 900 - heal_brute = 0 + stop_bleeding = BLEED_SURFACE + heal_creatures = FALSE merge_type = /obj/item/stack/medical/gauze/improvised /obj/item/stack/medical/gauze/adv diff --git a/code/game/objects/items/stacks/sheets/mineral/glass.dm b/code/game/objects/items/stacks/sheets/mineral/glass.dm index 5050f94b7aa0f..ac138bab86486 100644 --- a/code/game/objects/items/stacks/sheets/mineral/glass.dm +++ b/code/game/objects/items/stacks/sheets/mineral/glass.dm @@ -17,7 +17,7 @@ icon_state = "sheet-glass" item_state = "sheet-glass" mats_per_unit = list(/datum/material/glass=MINERAL_MATERIAL_AMOUNT) - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 100, STAMINA = 0, BLEED = 0) resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/glass grind_results = list(/datum/reagent/silicon = 20) @@ -70,7 +70,7 @@ icon_state = "sheet-rglass" item_state = "sheet-rglass" custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT) - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 100, STAMINA = 0, BLEED = 0) resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/rglass grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/iron = 10) @@ -115,7 +115,7 @@ item_state = "sheet-pglass" mats_per_unit = list(/datum/material/alloy/plasmaglass=MINERAL_MATERIAL_AMOUNT) material_type = /datum/material/alloy/plasmaglass - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 75, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 75, ACID = 100, STAMINA = 0, BLEED = 0) resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/plasmaglass grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10) @@ -152,7 +152,7 @@ icon_state = "sheet-prglass" item_state = "sheet-prglass" mats_per_unit = list(/datum/material/alloy/plasmaglass=MINERAL_MATERIAL_AMOUNT, /datum/material/iron = MINERAL_MATERIAL_AMOUNT * 0.5) - armor = list(MELEE = 20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100, STAMINA = 0) + armor = list(MELEE = 20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100, STAMINA = 0, BLEED = 0) resistance_flags = ACID_PROOF material_flags = NONE merge_type = /obj/item/stack/sheet/plasmarglass @@ -173,7 +173,7 @@ item_state = "sheet-titaniumglass" mats_per_unit = list(/datum/material/alloy/titaniumglass=MINERAL_MATERIAL_AMOUNT) material_type = /datum/material/alloy/titaniumglass - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100, STAMINA = 0, BLEED = 0) resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/titaniumglass @@ -189,7 +189,7 @@ icon_state = "sheet-plastitaniumglass" item_state = "sheet-plastitaniumglass" mats_per_unit = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/plasma=MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass=MINERAL_MATERIAL_AMOUNT) - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100, STAMINA = 0, BLEED = 0) resistance_flags = ACID_PROOF material_flags = NONE merge_type = /obj/item/stack/sheet/plastitaniumglass @@ -214,9 +214,10 @@ attack_verb = list("stabbed", "slashed", "sliced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' resistance_flags = ACID_PROOF - armor = list(MELEE = 100, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 100, STAMINA = 0) + armor = list(MELEE = 100, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 100, STAMINA = 0, BLEED = 0) max_integrity = 40 sharpness = IS_SHARP + bleed_force = BLEED_SURFACE var/icon_prefix embedding = list("embed_chance" = 65) diff --git a/code/game/objects/items/stacks/sheets/mineral/metals.dm b/code/game/objects/items/stacks/sheets/mineral/metals.dm index 5ae56ed1f8d4f..cdcb2c53bd51d 100644 --- a/code/game/objects/items/stacks/sheets/mineral/metals.dm +++ b/code/game/objects/items/stacks/sheets/mineral/metals.dm @@ -60,7 +60,7 @@ Metals Sheets material_type = /datum/material/alloy/plasteel throwforce = 10 flags_1 = CONDUCT_1 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 80, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 80, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF merge_type = /obj/item/stack/sheet/plasteel grind_results = list(/datum/reagent/iron = 20, /datum/reagent/toxin/plasma = 20) diff --git a/code/game/objects/items/stacks/sheets/organic/wood.dm b/code/game/objects/items/stacks/sheets/organic/wood.dm index 4f214afd20bc5..9219242ab69fe 100644 --- a/code/game/objects/items/stacks/sheets/organic/wood.dm +++ b/code/game/objects/items/stacks/sheets/organic/wood.dm @@ -18,7 +18,7 @@ Woods Sheets icon = 'icons/obj/stacks/organic.dmi' mats_per_unit = list(/datum/material/wood=MINERAL_MATERIAL_AMOUNT) sheettype = "wood" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0, STAMINA = 0, BLEED = 0) resistance_flags = FLAMMABLE merge_type = /obj/item/stack/sheet/wood material_type = /datum/material/wood @@ -39,7 +39,7 @@ Woods Sheets icon = 'icons/obj/stacks/organic.dmi' force = 10 throwforce = 10 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0, STAMINA = 0, BLEED = 0) resistance_flags = FLAMMABLE merge_type = /obj/item/stack/sheet/bamboo grind_results = list("carbon" = 5) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index add2689859b82..413f29af2861d 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -45,7 +45,7 @@ item_state = "holdingpack" resistance_flags = FIRE_PROOF item_flags = NO_MAT_REDEMPTION - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 60, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 60, ACID = 50, STAMINA = 0, BLEED = 0) component_type = /datum/component/storage/concrete/bluespace/bag_of_holding /obj/item/storage/backpack/holding/clown @@ -81,7 +81,7 @@ worn_icon_state = "baguette" resistance_flags = FIRE_PROOF item_flags = NO_MAT_REDEMPTION - armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) component_type = /datum/component/storage/concrete/bluespace/bag_of_holding /obj/item/storage/backpack/hammerspace/ComponentInitialize() diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index fa6fe4e7cdfe7..c4a190de8e587 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -12,7 +12,7 @@ w_class = WEIGHT_CLASS_LARGE item_flags = ISWEAPON attack_verb = list("enforced the law upon") - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, STAMINA = 0, BLEED = 0) var/stunforce = 40 var/turned_on = FALSE diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index b4413a5206869..6405e4b22a110 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -17,7 +17,7 @@ throw_range = 4 custom_materials = list(/datum/material/iron = 500) actions_types = list(/datum/action/item_action/set_internals) - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 80, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 80, ACID = 30, STAMINA = 0, BLEED = 0) var/datum/gas_mixture/air_contents = null var/distribute_pressure = ONE_ATMOSPHERE var/integrity = 3 @@ -139,7 +139,7 @@ if(prob(50)) step(W, pick(GLOB.alldirs)) ADD_TRAIT(human_user, TRAIT_DISFIGURED, TRAIT_GENERIC) - human_user.bleed_rate = 5 + human_user.add_bleeding(BLEED_CRITICAL) human_user.gib_animation() sleep(3) human_user.adjustBruteLoss(1000) //to make the body super-bloody diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index a54c962fba487..7c7c944d047eb 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -12,7 +12,7 @@ slowdown = 1 actions_types = list(/datum/action/item_action/toggle_mister) max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF var/obj/item/noz diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm index d62d696dd7bcb..17d16df206f1e 100644 --- a/code/game/objects/items/teleportation.dm +++ b/code/game/objects/items/teleportation.dm @@ -110,7 +110,7 @@ throw_speed = 3 throw_range = 5 custom_materials = list(/datum/material/iron=10000) - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/list/active_portal_pairs var/max_portal_pairs = 3 diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index 63a6938164573..98e0ecc407fe4 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -16,7 +16,7 @@ attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") tool_behaviour = TOOL_CROWBAR toolspeed = 1 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30, STAMINA = 0, BLEED = 0) drop_sound = 'sound/items/handling/crowbar_drop.ogg' pickup_sound = 'sound/items/handling/crowbar_pickup.ogg' diff --git a/code/game/objects/items/tools/powertools.dm b/code/game/objects/items/tools/powertools.dm index 0b39452a64aae..935a5e82cc887 100644 --- a/code/game/objects/items/tools/powertools.dm +++ b/code/game/objects/items/tools/powertools.dm @@ -6,7 +6,7 @@ righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' w_class = WEIGHT_CLASS_SMALL custom_materials = list(/datum/material/iron=150,/datum/material/silver=50,/datum/material/titanium=25) //done for balance reasons, making them high value for research, but harder to get - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30, STAMINA = 0, BLEED = 0) flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BELT toolspeed = 0.7 diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index 98d2e689b0a74..3db95599ce19f 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -25,7 +25,7 @@ greyscale_config_inhand_left = /datum/greyscale_config/screwdriver_inhand_left greyscale_config_inhand_right = /datum/greyscale_config/screwdriver_inhand_right greyscale_config_belt = /datum/greyscale_config/screwdriver_belt - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30, STAMINA = 0, BLEED = 0) drop_sound = 'sound/items/handling/screwdriver_drop.ogg' pickup_sound = 'sound/items/handling/screwdriver_pickup.ogg' /// If the item should be assigned a random color diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 3e2df866fd0fd..5f78cff0474f6 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -26,7 +26,7 @@ throw_speed = 3 throw_range = 5 w_class = WEIGHT_CLASS_SMALL - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF custom_materials = list(/datum/material/iron=70, /datum/material/glass=30) diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index 0478da413700c..076d2ae251d9e 100644 --- a/code/game/objects/items/tools/wirecutters.dm +++ b/code/game/objects/items/tools/wirecutters.dm @@ -21,7 +21,7 @@ pickup_sound = 'sound/items/handling/wirecutter_pickup.ogg' tool_behaviour = TOOL_WIRECUTTER toolspeed = 1 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30, STAMINA = 0, BLEED = 0) var/random_color = TRUE var/static/list/wirecutter_colors = list( "blue" = "#1861d5", diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm index 77c846b1fcb0c..2008a03831b1c 100644 --- a/code/game/objects/items/tools/wrench.dm +++ b/code/game/objects/items/tools/wrench.dm @@ -19,7 +19,7 @@ attack_verb = list("bashed", "battered", "bludgeoned", "whacked") tool_behaviour = TOOL_WRENCH toolspeed = 1 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30, STAMINA = 0, BLEED = 0) /obj/item/wrench/suicide_act(mob/living/user) user.visible_message("[user] is beating [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!") diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 82734d742cf5c..3639f4e3314ce 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -419,6 +419,11 @@ block_level = 0 item_flags = ISWEAPON +/obj/item/dualsaber/toy/on_wield(obj/item/source, mob/living/carbon/user) + . = ..() + sharpness = IS_BLUNT + bleed_force = 0 + /obj/item/dualsaber/toy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) return 0 @@ -447,6 +452,8 @@ hitsound = 'sound/weapons/bladeslice.ogg' block_flags = BLOCKING_ACTIVE | BLOCKING_PROJECTILE //if it some how gets block level, katanas block projectiles for the meme item_flags = ISWEAPON + sharpness = IS_SHARP + bleed_force = BLEED_SURFACE /* * Snap pops @@ -1060,6 +1067,7 @@ card_throw_speed = 6 embedding = list("pain_mult" = 1, "embed_chance" = 80, "max_damage_mult" = 8, "fall_chance" = 0, "embed_chance_turf_mod" = 15, "armour_block" = 60) //less painful than throwing stars card_sharpness = IS_SHARP + bleed_force = BLEED_SURFACE card_throw_range = 7 card_attack_verb = list("attacked", "sliced", "diced", "slashed", "cut") resistance_flags = NONE diff --git a/code/game/objects/items/vending_items.dm b/code/game/objects/items/vending_items.dm index 28e2eef2001fd..a740e0baad725 100644 --- a/code/game/objects/items/vending_items.dm +++ b/code/game/objects/items/vending_items.dm @@ -17,7 +17,7 @@ throw_speed = 1 throw_range = 7 w_class = WEIGHT_CLASS_BULKY - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 30, STAMINA = 0, BLEED = 0) // Built automatically from the corresponding vending machine. // If null, considered to be full. Otherwise, is list(/typepath = amount). diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 0fdc07a4bc782..195c3adacb1c4 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -12,7 +12,7 @@ throw_range = 7 attack_verb = list("banned") max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 70, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 70, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF /obj/item/banhammer/suicide_act(mob/living/user) @@ -82,8 +82,9 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 block_level = 1 block_flags = BLOCKING_ACTIVE | BLOCKING_NASTY sharpness = IS_SHARP + bleed_force = BLEED_DEEP_WOUND max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF /obj/item/claymore/Initialize(mapload) @@ -121,7 +122,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 if(ishuman(loc)) var/mob/living/carbon/human/H = loc loc.layer = LARGE_MOB_LAYER //NO HIDING BEHIND PLANTS FOR YOU, DICKWEED (HA GET IT, BECAUSE WEEDS ARE PLANTS) - H.bleedsuppress = TRUE //AND WE WON'T BLEED OUT LIKE COWARDS + H.cauterise_wounds(0.1) else if(!(flags_1 & ADMIN_SPAWNED_1)) qdel(src) @@ -236,7 +237,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 attack_verb = list("attacked", "slashed", "stabbed", "sliced", "tore", "ripped", "diced", "cut") block_level = 0 block_power = 30 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0, BLEED = 0) /obj/item/katana name = "katana" @@ -259,8 +260,9 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 block_upgrade_walk = 1 block_flags = BLOCKING_ACTIVE | BLOCKING_NASTY | BLOCKING_PROJECTILE sharpness = IS_SHARP + bleed_force = BLEED_DEEP_WOUND max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF /obj/item/katana/cursed @@ -329,6 +331,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 item_flags = ISWEAPON hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP + bleed_force = BLEED_CUT custom_materials = list(/datum/material/iron=500, /datum/material/glass=500) resistance_flags = FIRE_PROOF @@ -392,6 +395,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 attack_verb = list("slashed", "stabbed", "sliced", "tore", "ripped", "diced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP + bleed_force = BLEED_CUT else force = initial(force) w_class = WEIGHT_CLASS_SMALL @@ -400,6 +404,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 attack_verb = list("stubbed", "poked") hitsound = 'sound/weapons/genhit.ogg' sharpness = IS_BLUNT + bleed_force = 0 /obj/item/switchblade/suicide_act(mob/living/user) user.visible_message("[user] is slitting [user.p_their()] own throat with [src]! It looks like [user.p_theyre()] trying to commit suicide!") @@ -536,6 +541,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 throw_range = 0 throw_speed = 0 sharpness = IS_SHARP + bleed_force = BLEED_DEEP_WOUND attack_verb = list("sawed", "tore", "cut", "chopped", "diced") hitsound = 'sound/weapons/chainsawhit.ogg' tool_behaviour = TOOL_SAW @@ -980,6 +986,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 block_upgrade_walk = 1 block_flags = BLOCKING_ACTIVE | BLOCKING_NASTY sharpness = IS_SHARP + bleed_force = BLEED_CUT attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' @@ -999,6 +1006,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 throwforce = 20 throw_speed = 4 sharpness = IS_SHARP + bleed_force = BLEED_CUT attack_verb = list("cut", "sliced", "diced") w_class = WEIGHT_CLASS_BULKY item_flags = ISWEAPON diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 0aad652574df6..11785b80c298d 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -8,6 +8,8 @@ var/damtype = BRUTE var/force = 0 + /// How much bleeding damage do we cause, see __DEFINES/mobs.dm + var/bleed_force = 0 var/datum/armor/armor /// The integrity the object starts at. Defaults to max_integrity. diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 529696e591274..3f97e790cae44 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -11,7 +11,7 @@ /obj/structure/Initialize(mapload) if (!armor) - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 0, BLEED = 0) . = ..() if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) QUEUE_SMOOTH(src) diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm index 84842d31570c8..66f5a204c1ffc 100644 --- a/code/game/objects/structures/barsigns.dm +++ b/code/game/objects/structures/barsigns.dm @@ -6,7 +6,7 @@ req_access = list(ACCESS_BAR) max_integrity = 500 integrity_failure = 0.5 - armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 0) + armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 0, BLEED = 0) buildable_sign = 0 var/panel_open = FALSE diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 55fb4fdb4881d..948c0ae1062b3 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -7,10 +7,9 @@ drag_slowdown = 1.5 // Same as a prone mob max_integrity = 200 integrity_failure = 0.25 - armor = list(MELEE = 20, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 70, ACID = 60, STAMINA = 0) + armor = list(MELEE = 20, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 70, ACID = 60, STAMINA = 0, BLEED = 0) blocks_emissive = EMISSIVE_BLOCK_GENERIC pass_flags_self = LETPASSCLICKS | PASSSTRUCTURE - var/contents_initialised = FALSE var/enable_door_overlay = TRUE var/has_opened_overlay = TRUE diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 93e5011c30fe5..f459dda04fb4a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -4,7 +4,7 @@ locked = TRUE icon_state = "secure" max_integrity = 250 - armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, STAMINA = 0) + armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, STAMINA = 0, BLEED = 0) secure = TRUE /obj/structure/closet/secure_closet/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) diff --git a/code/game/objects/structures/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm index 0d173dcd57002..a3b28f10edaf0 100644 --- a/code/game/objects/structures/crates_lockers/crates/secure.dm +++ b/code/game/objects/structures/crates_lockers/crates/secure.dm @@ -5,7 +5,7 @@ secure = TRUE locked = TRUE max_integrity = 500 - armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, STAMINA = 0) + armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, STAMINA = 0, BLEED = 0) var/tamperproof = 0 icon_door = "crate" diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 7c39e33e92dce..bcad7aebed77f 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -6,7 +6,7 @@ density = TRUE anchored = TRUE resistance_flags = ACID_PROOF - armor = list(MELEE = 30, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 70, ACID = 100, STAMINA = 0) + armor = list(MELEE = 30, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 70, ACID = 100, STAMINA = 0, BLEED = 0) max_integrity = 200 integrity_failure = 0.25 var/obj/item/showpiece = null diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index a70c4e34d14ba..3c7b9073508b4 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -5,7 +5,7 @@ icon_state = "fireaxe" anchored = TRUE density = FALSE - armor = list(MELEE = 50, BULLET = 20, LASER = 0, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 90, ACID = 50, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 20, LASER = 0, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 90, ACID = 50, STAMINA = 0, BLEED = 0) max_integrity = 150 integrity_failure = 0.33 layer = ABOVE_WINDOW_LAYER diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index c0d495519e7f5..269dd4b96ba77 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -10,7 +10,7 @@ z_flags = Z_BLOCK_IN_DOWN | Z_BLOCK_IN_UP pressure_resistance = 5*ONE_ATMOSPHERE layer = BELOW_OBJ_LAYER - armor = list(MELEE = 50, BULLET = 70, LASER = 70, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 70, LASER = 70, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0) max_integrity = 50 integrity_failure = 0.4 var/rods_type = /obj/item/stack/rods diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm index d5639986f9dd6..e4704b0e9e266 100644 --- a/code/game/objects/structures/holosign.dm +++ b/code/game/objects/structures/holosign.dm @@ -6,7 +6,7 @@ icon = 'icons/effects/effects.dmi' anchored = TRUE max_integrity = 1 - armor = list(MELEE = 0, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 0, BIO = 0, RAD = 0, FIRE = 20, ACID = 20, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 0, BIO = 0, RAD = 0, FIRE = 20, ACID = 20, STAMINA = 0, BLEED = 0) layer = BELOW_OBJ_LAYER var/obj/item/holosign_creator/projector diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 4f2ece534f413..8efc68e382e4f 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -9,7 +9,7 @@ canSmoothWith = list(SMOOTH_GROUP_OPEN_FLOOR, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_LATTICE) density = FALSE anchored = TRUE - armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50, STAMINA = 0, BLEED = 0) max_integrity = 50 layer = LATTICE_LAYER //under pipes plane = FLOOR_PLANE diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 4f07ad17c9067..4a9790843926e 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -11,7 +11,7 @@ icon = 'icons/obj/doors/mineral_doors.dmi' icon_state = "metal" max_integrity = 200 - armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 50, ACID = 50, STAMINA = 0) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 50, ACID = 50, STAMINA = 0, BLEED = 0) CanAtmosPass = ATMOS_PASS_DENSITY rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE rad_insulation = RAD_MEDIUM_INSULATION diff --git a/code/game/objects/structures/petrified_statue.dm b/code/game/objects/structures/petrified_statue.dm index b54adca7ecda7..a2a5becf77e27 100644 --- a/code/game/objects/structures/petrified_statue.dm +++ b/code/game/objects/structures/petrified_statue.dm @@ -19,6 +19,7 @@ L.visible_message("[L]'s skin rapidly turns to marble!", "Your body freezes up! Can't... move... can't... think...") L.forceMove(src) ADD_TRAIT(L, TRAIT_MUTE, STATUE_MUTE) + ADD_TRAIT(L, TRAIT_NO_BLOOD, STATUE_MUTE) L.faction += "mimic" //Stops mimics from instaqdeling people in statues L.status_flags |= GODMODE obj_integrity = L.health + 100 //stoning damaged mobs will result in easier to shatter statues @@ -60,6 +61,7 @@ petrified_mob.status_flags &= ~GODMODE petrified_mob.forceMove(loc) REMOVE_TRAIT(petrified_mob, TRAIT_MUTE, STATUE_MUTE) + REMOVE_TRAIT(petrified_mob, TRAIT_NO_BLOOD, STATUE_MUTE) petrified_mob.take_overall_damage((petrified_mob.health - obj_integrity + 100)) //any new damage the statue incurred is transfered to the mob petrified_mob.faction -= "mimic" petrified_mob = null @@ -81,7 +83,6 @@ return 0 var/obj/structure/statue/petrified/S = new(loc, src, statue_timer) S.name = "statue of [name]" - bleedsuppress = 1 S.copy_overlays(src) var/newcolor = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) S.add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index 899b0ea8597fc..664d98167aaa2 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -3,7 +3,7 @@ desc = "Heavy duty, airtight, plastic flaps. Definitely can't get past those. No way." icon = 'icons/obj/stationobjs.dmi' icon_state = "plasticflaps" - armor = list(MELEE = 100, BULLET = 80, LASER = 80, ENERGY = 100, BOMB = 50, BIO = 100, RAD = 100, FIRE = 50, ACID = 50, STAMINA = 0) + armor = list(MELEE = 100, BULLET = 80, LASER = 80, ENERGY = 100, BOMB = 50, BIO = 100, RAD = 100, FIRE = 50, ACID = 50, STAMINA = 0, BLEED = 0) density = FALSE anchored = TRUE layer = BELOW_OBJ_LAYER diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm index 5c126938a2691..64077859247e6 100644 --- a/code/game/objects/structures/signs/_signs.dm +++ b/code/game/objects/structures/signs/_signs.dm @@ -5,7 +5,7 @@ density = FALSE layer = SIGN_LAYER max_integrity = 100 - armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 0, BLEED = 0) var/buildable_sign = 1 //unwrenchable and modifiable rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index bd9d2f65d4918..59ba933331159 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -287,7 +287,7 @@ canSmoothWith = null max_integrity = 70 resistance_flags = ACID_PROOF - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100, STAMINA = 0, BLEED = 0) var/list/debris = list() /obj/structure/table/glass/Initialize(mapload) @@ -476,7 +476,7 @@ buildstack = /obj/item/stack/sheet/plasteel max_integrity = 200 integrity_failure = 0.25 - armor = list(MELEE = 10, BULLET = 30, LASER = 30, ENERGY = 100, BOMB = 20, BIO = 0, RAD = 0, FIRE = 80, ACID = 70, STAMINA = 0) + armor = list(MELEE = 10, BULLET = 30, LASER = 30, ENERGY = 100, BOMB = 20, BIO = 0, RAD = 0, FIRE = 80, ACID = 70, STAMINA = 0, BLEED = 0) /obj/structure/table/reinforced/deconstruction_hints(mob/user) if(deconstruction_ready) @@ -570,6 +570,18 @@ . = ..() initial_link() +/obj/structure/table/optable/ComponentInitialize() + . = ..() + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(table_entered), + ) + AddElement(/datum/element/connect_loc, loc_connections) + +/obj/structure/table/optable/Destroy() + . = ..() + if(computer?.table == src) + computer.table = null + /obj/structure/table/optable/examine(mob/user) . = ..() if(computer) @@ -591,12 +603,6 @@ computer = found_computer break - -/obj/structure/table/optable/Destroy() - . = ..() - if(computer?.table == src) - computer.table = null - /obj/structure/table/optable/tablepush(mob/living/user, mob/living/pushed_mob) pushed_mob.forceMove(loc) if(!isanimal(pushed_mob) || iscat(pushed_mob)) @@ -604,20 +610,36 @@ visible_message("[user] has laid [pushed_mob] on [src].") get_patient() +/obj/structure/table/optable/proc/table_entered() + SIGNAL_HANDLER + get_patient() + /obj/structure/table/optable/proc/get_patient() var/mob/living/carbon/M = locate(/mob/living/carbon) in loc if(M) - if(M.resting) - set_patient(M) + set_patient(M) else set_patient(null) /obj/structure/table/optable/proc/set_patient(new_patient) if(patient) UnregisterSignal(patient, COMSIG_PARENT_QDELETING) + UnregisterSignal(patient, COMSIG_LIVING_RESTING_UPDATED) + REMOVE_TRAIT(patient, TRAIT_NO_BLEEDING, TABLE_TRAIT) patient = new_patient if(patient) RegisterSignal(patient, COMSIG_PARENT_QDELETING, PROC_REF(patient_deleted)) + RegisterSignal(patient, COMSIG_LIVING_RESTING_UPDATED, PROC_REF(check_bleed_trait)) + check_bleed_trait() + +/obj/structure/table/optable/proc/check_bleed_trait() + SIGNAL_HANDLER + if (!patient) + return + if (patient.resting) + ADD_TRAIT(patient, TRAIT_NO_BLEEDING, TABLE_TRAIT) + else + REMOVE_TRAIT(patient, TRAIT_NO_BLEEDING, TABLE_TRAIT) /obj/structure/table/optable/proc/patient_deleted(datum/source) SIGNAL_HANDLER @@ -627,6 +649,8 @@ get_patient() if(!patient) return FALSE + if (!patient.resting) + return FALSE if(ishuman(patient) || ismonkey(patient)) return TRUE return FALSE diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 61f81c584cc39..d4e0708538617 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -10,7 +10,7 @@ max_integrity = 50 can_be_unanchored = TRUE resistance_flags = ACID_PROOF - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100, STAMINA = 0, BLEED = 0) CanAtmosPass = ATMOS_PASS_PROC rad_insulation = RAD_VERY_LIGHT_INSULATION rad_flags = RAD_PROTECT_CONTENTS @@ -399,7 +399,7 @@ icon_state = "rwindow" reinf = TRUE heat_resistance = 1600 - armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 100, RAD = 100, FIRE = 80, ACID = 100, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 100, RAD = 100, FIRE = 80, ACID = 100, STAMINA = 0, BLEED = 0) max_integrity = 100 explosion_block = 1 glass_type = /obj/item/stack/sheet/rglass @@ -424,7 +424,7 @@ icon_state = "plasmawindow" reinf = FALSE heat_resistance = 25000 - armor = list(MELEE = 75, BULLET = 5, LASER = 0, ENERGY = 0, BOMB = 45, BIO = 100, RAD = 100, FIRE = 99, ACID = 100, STAMINA = 0) + armor = list(MELEE = 75, BULLET = 5, LASER = 0, ENERGY = 0, BOMB = 45, BIO = 100, RAD = 100, FIRE = 99, ACID = 100, STAMINA = 0, BLEED = 0) max_integrity = 300 glass_type = /obj/item/stack/sheet/plasmaglass rad_insulation = RAD_NO_INSULATION @@ -456,7 +456,7 @@ icon_state = "plasmarwindow" reinf = TRUE heat_resistance = 50000 - armor = list(MELEE = 85, BULLET = 20, LASER = 0, ENERGY = 0, BOMB = 60, BIO = 100, RAD = 100, FIRE = 99, ACID = 100, STAMINA = 0) + armor = list(MELEE = 85, BULLET = 20, LASER = 0, ENERGY = 0, BOMB = 60, BIO = 100, RAD = 100, FIRE = 99, ACID = 100, STAMINA = 0, BLEED = 0) max_integrity = 500 explosion_block = 2 glass_type = /obj/item/stack/sheet/plasmarglass @@ -487,7 +487,7 @@ icon_state = "duwindow" reinf = TRUE heat_resistance = 50000 - armor = list(MELEE = 45, BULLET = 20, LASER = 0, ENERGY = 0, BOMB = 60, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 45, BULLET = 20, LASER = 0, ENERGY = 0, BOMB = 60, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) max_integrity = 500 explosion_block = 2 glass_type = /obj/item/stack/sheet/mineral/uranium @@ -619,7 +619,7 @@ flags_1 = PREVENT_CLICK_UNDER_1 reinf = TRUE heat_resistance = 1600 - armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 100, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 100, STAMINA = 0, BLEED = 0) explosion_block = 3 glass_type = /obj/item/stack/sheet/titaniumglass glass_amount = 2 @@ -649,7 +649,7 @@ flags_1 = PREVENT_CLICK_UNDER_1 reinf = TRUE heat_resistance = 1600 - armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 100, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 100, STAMINA = 0, BLEED = 0) explosion_block = 3 glass_type = /obj/item/stack/sheet/plastitaniumglass glass_amount = 2 @@ -676,7 +676,7 @@ decon_speed = 10 CanAtmosPass = ATMOS_PASS_YES resistance_flags = FLAMMABLE - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0) breaksound = 'sound/items/poster_ripped.ogg' hitsound = 'sound/weapons/slashmiss.ogg' var/static/mutable_appearance/torn = mutable_appearance('icons/obj/smooth_structures/windows/paperframes.dmi',icon_state = "torn", layer = ABOVE_OBJ_LAYER - 0.1) diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm index 7fc2d2d0b5eba..3e75c43a45649 100644 --- a/code/game/shuttle_engines.dm +++ b/code/game/shuttle_engines.dm @@ -8,7 +8,7 @@ icon = 'icons/turf/shuttle.dmi' resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF max_integrity = 500 - armor = list(MELEE = 100, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70, STAMINA = 0) //default + ignores melee + armor = list(MELEE = 100, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70, STAMINA = 0, BLEED = 0) //default + ignores melee /obj/structure/shuttle/engine name = "engine" diff --git a/code/game/turfs/closed/wall/reinf_walls.dm b/code/game/turfs/closed/wall/reinf_walls.dm index aab143bcf0564..6369006e63474 100644 --- a/code/game/turfs/closed/wall/reinf_walls.dm +++ b/code/game/turfs/closed/wall/reinf_walls.dm @@ -22,7 +22,7 @@ ) /turf/closed/wall/r_wall/get_armour_list() - return list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 100, FIRE = 80, ACID = 70, STAMINA = 0) + return list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 100, FIRE = 80, ACID = 70, STAMINA = 0, BLEED = 0) /turf/closed/wall/r_wall/deconstruction_hints(mob/user) switch(d_state) diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index ef500c0332626..7705511521ae9 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -13,7 +13,7 @@ icon_state = "vest_stealth" item_state = "armor" blood_overlay_type = "armor" - armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 15, BIO = 15, RAD = 15, FIRE = 70, ACID = 70, STAMINA = 30) + armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 15, BIO = 15, RAD = 15, FIRE = 70, ACID = 70, STAMINA = 30, BLEED = 40) actions_types = list(/datum/action/item_action/hands_free/activate) allowed = list( /obj/item/abductor, @@ -28,8 +28,8 @@ /// Cooldown in seconds var/combat_cooldown = 20 var/datum/icon_snapshot/disguise - var/stealth_armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 15, BIO = 15, RAD = 15, FIRE = 70, ACID = 70, STAMINA = 30) - var/combat_armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 50, RAD = 50, FIRE = 90, ACID = 90, STAMINA = 60) + var/stealth_armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 15, BIO = 15, RAD = 15, FIRE = 70, ACID = 70, STAMINA = 30, BLEED = 40) + var/combat_armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 50, RAD = 50, FIRE = 90, ACID = 90, STAMINA = 60, BLEED = 80) /obj/item/clothing/suit/armor/abductor/vest/Initialize(mapload) . = ..() @@ -876,5 +876,5 @@ Congratulations! You are now trained for invasive xenobiology research!"} icon_state = "abductor-suit" item_state = "bl_suit" worn_icon = 'icons/mob/clothing/under/syndicate.dmi' - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0) can_adjust = FALSE diff --git a/code/modules/antagonists/abductor/machinery/experiment.dm b/code/modules/antagonists/abductor/machinery/experiment.dm index 42ca6bea048be..0da1bab7e2a6a 100644 --- a/code/modules/antagonists/abductor/machinery/experiment.dm +++ b/code/modules/antagonists/abductor/machinery/experiment.dm @@ -177,6 +177,7 @@ /obj/machinery/abductor/experiment/proc/send_back(mob/living/carbon/human/H) H.Sleeping(160) H.uncuff() + H.cauterise_wounds() if(console && console.pad && console.pad.teleport_target) do_teleport(H, console.pad.teleport_target, channel = TELEPORT_CHANNEL_BLINK, no_effects = TRUE, teleport_mode = TELEPORT_MODE_ABDUCTORS) return diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm index 3c84ee7235c92..b08aa5276472d 100644 --- a/code/modules/antagonists/blob/structures/_blob.dm +++ b/code/modules/antagonists/blob/structures/_blob.dm @@ -12,7 +12,7 @@ CanAtmosPass = ATMOS_PASS_PROC var/point_return = 0 //How many points the blob gets back when it removes a blob of that type. If less than 0, blob cannot be removed. max_integrity = 30 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 70, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 70, STAMINA = 0, BLEED = 0) var/health_regen = 2 //how much health this blob regens when pulsed var/pulse_timestamp = 0 //we got pulsed when? var/heal_timestamp = 0 //we got healed when? diff --git a/code/modules/antagonists/blob/structures/core.dm b/code/modules/antagonists/blob/structures/core.dm index a586d5d877d0d..1840b272ed2c7 100644 --- a/code/modules/antagonists/blob/structures/core.dm +++ b/code/modules/antagonists/blob/structures/core.dm @@ -4,7 +4,7 @@ icon_state = "blank_blob" desc = "A huge, pulsating yellow mass." max_integrity = 400 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 75, ACID = 90, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 75, ACID = 90, STAMINA = 0, BLEED = 0) explosion_block = 6 point_return = -1 health_regen = 0 //we regen in Life() instead of when pulsed diff --git a/code/modules/antagonists/blob/structures/node.dm b/code/modules/antagonists/blob/structures/node.dm index dae14efb9ba47..7657d896696e4 100644 --- a/code/modules/antagonists/blob/structures/node.dm +++ b/code/modules/antagonists/blob/structures/node.dm @@ -4,7 +4,7 @@ icon_state = "blank_blob" desc = "A large, pulsating yellow mass." max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 65, ACID = 90, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 65, ACID = 90, STAMINA = 0, BLEED = 0) health_regen = 3 point_return = 25 resistance_flags = LAVA_PROOF diff --git a/code/modules/antagonists/blob/structures/shield.dm b/code/modules/antagonists/blob/structures/shield.dm index 1d809d4fe104c..f39f8613c25e7 100644 --- a/code/modules/antagonists/blob/structures/shield.dm +++ b/code/modules/antagonists/blob/structures/shield.dm @@ -9,7 +9,7 @@ explosion_block = 3 point_return = 4 atmosblock = TRUE - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 90, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 90, STAMINA = 0, BLEED = 0) /obj/structure/blob/shield/scannerreport() if(atmosblock) diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index bb06f2f7fd0a5..34353516d251a 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -160,6 +160,7 @@ hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "slashed", "stabbed", "sliced", "tore", "ripped", "diced", "cut") sharpness = IS_SHARP + bleed_force = BLEED_CUT var/can_drop = FALSE var/fake = FALSE @@ -401,7 +402,7 @@ item_flags = DROPDEL clothing_flags = STOPSPRESSUREDAMAGE | HEADINTERNALS //Not THICKMATERIAL because it's organic tissue, so if somebody tries to inject something into it, it still ends up in your blood. (also balance but muh fluff) allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/oxygen) - armor = list(MELEE = 35, BULLET = 25, LASER = 25, ENERGY = 30, BOMB = 30, BIO = 20, RAD = 20, FIRE = 90, ACID = 90, STAMINA = 10)//Bit less armoured than the Syndicate space suit + armor = list(MELEE = 35, BULLET = 25, LASER = 25, ENERGY = 30, BOMB = 30, BIO = 20, RAD = 20, FIRE = 90, ACID = 90, STAMINA = 10, BLEED = 80)//Bit less armoured than the Syndicate space suit slowdown = 0.2 var/datum/reagent/salbutamol = /datum/reagent/medicine/salbutamol @@ -426,7 +427,7 @@ desc = "A covering of armored pressure and temperature-resistant organic tissue with a glass-like chitin front." item_flags = DROPDEL clothing_flags = STOPSPRESSUREDAMAGE - armor = list(MELEE = 35, BULLET = 25, LASER = 25, ENERGY = 30, BOMB = 30, BIO = 20, RAD = 20, FIRE = 90, ACID = 90, STAMINA = 10) + armor = list(MELEE = 35, BULLET = 25, LASER = 25, ENERGY = 30, BOMB = 30, BIO = 20, RAD = 20, FIRE = 90, ACID = 90, STAMINA = 10, BLEED = 80) flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH /obj/item/clothing/head/helmet/space/changeling/Initialize(mapload) @@ -459,7 +460,7 @@ item_state = null item_flags = DROPDEL body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list(MELEE = 40, BULLET = 40, LASER = 50, ENERGY = 50, BOMB = 25, BIO = 0, RAD = 0, FIRE = 25, ACID = 25, STAMINA = 30) + armor = list(MELEE = 40, BULLET = 40, LASER = 50, ENERGY = 50, BOMB = 25, BIO = 0, RAD = 0, FIRE = 25, ACID = 25, STAMINA = 30, BLEED = 90) flags_inv = HIDEJUMPSUIT cold_protection = 0 heat_protection = 0 @@ -478,7 +479,7 @@ icon_state = "lingarmorhelmet" item_state = null item_flags = DROPDEL - armor = list(MELEE = 40, BULLET = 40, LASER = 50, ENERGY = 50, BOMB = 25, BIO = 0, RAD = 0, FIRE = 25, ACID = 25, STAMINA = 30) + armor = list(MELEE = 40, BULLET = 40, LASER = 50, ENERGY = 50, BOMB = 25, BIO = 0, RAD = 0, FIRE = 25, ACID = 25, STAMINA = 30, BLEED = 90) flags_inv = HIDEEARS|HIDEHAIR|HIDEEYES|HIDEFACIALHAIR|HIDEFACE|HIDESNOUT /obj/item/clothing/head/helmet/changeling/Initialize(mapload) diff --git a/code/modules/antagonists/clock_cult/clockwork_turfs.dm b/code/modules/antagonists/clock_cult/clockwork_turfs.dm index 5c84fd4915323..ad2d939e21422 100644 --- a/code/modules/antagonists/clock_cult/clockwork_turfs.dm +++ b/code/modules/antagonists/clock_cult/clockwork_turfs.dm @@ -519,7 +519,7 @@ icon_state = "clockwork_window_single" resistance_flags = FIRE_PROOF | ACID_PROOF max_integrity = 80 - armor = list(MELEE = 40, BULLET = -20, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 100, RAD = 100, FIRE = 80, ACID = 100, STAMINA = 0) + armor = list(MELEE = 40, BULLET = -20, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 100, RAD = 100, FIRE = 80, ACID = 100, STAMINA = 0, BLEED = 0) explosion_block = 2 //fancy AND hard to destroy. the most useful combination. decon_speed = 40 glass_type = /obj/item/stack/sheet/brass diff --git a/code/modules/antagonists/clock_cult/items/brass_clothing.dm b/code/modules/antagonists/clock_cult/items/brass_clothing.dm index 7da92890c6589..28ef84e13a5ca 100644 --- a/code/modules/antagonists/clock_cult/items/brass_clothing.dm +++ b/code/modules/antagonists/clock_cult/items/brass_clothing.dm @@ -5,7 +5,7 @@ icon_state = "clockwork_cuirass" worn_icon = 'icons/mob/clothing/suits/armor.dmi' worn_icon_state = "clockwork_cuirass" - armor = list(MELEE = 50, BULLET = 60, LASER = 30, ENERGY = 80, BOMB = 80, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 60) + armor = list(MELEE = 50, BULLET = 60, LASER = 30, ENERGY = 80, BOMB = 80, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 60, BLEED = 60) slowdown = 0.6 resistance_flags = FIRE_PROOF | ACID_PROOF w_class = WEIGHT_CLASS_BULKY @@ -39,14 +39,14 @@ worn_icon_state = "clockwork_cuirass_speed" slowdown = -0.3 resistance_flags = FIRE_PROOF | ACID_PROOF - armor = list(MELEE = 40, BULLET = 40, LASER = 10, ENERGY = -20, BOMB = 60, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 30) + armor = list(MELEE = 40, BULLET = 40, LASER = 10, ENERGY = -20, BOMB = 60, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 30, BLEED = 40) /obj/item/clothing/suit/clockwork/cloak name = "shrouding cloak" desc = "A faltering cloak that bends light around it, distorting the user's appearance, making it hard to see them with the naked eye. However, it provides very little protection." icon_state = "clockwork_cloak" worn_icon_state = "clockwork_cloak" - armor = list(MELEE = 10, BULLET = 60, LASER = 40, ENERGY = 20, BOMB = 40, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 20) + armor = list(MELEE = 10, BULLET = 60, LASER = 40, ENERGY = 20, BOMB = 40, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 20, BLEED = 20) slowdown = 0.4 resistance_flags = FIRE_PROOF | ACID_PROOF var/shroud_active = FALSE @@ -143,7 +143,7 @@ desc = "A strong, brass helmet worn by the soldiers of the Ratvarian armies. Includes an integrated light-dimmer for flash protection, as well as occult-grade muffling for factory based environments." icon = 'icons/obj/clothing/clockwork_garb.dmi' icon_state = "clockwork_helmet" - armor = list(MELEE = 50, BULLET = 60, LASER = 30, ENERGY = 80, BOMB = 80, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 60) + armor = list(MELEE = 50, BULLET = 60, LASER = 30, ENERGY = 80, BOMB = 80, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 60, BLEED = 60) resistance_flags = FIRE_PROOF | ACID_PROOF w_class = WEIGHT_CLASS_BULKY flash_protect = 1 @@ -168,4 +168,4 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50, STAMINA = 0, BLEED = 0, BLEED = 20) diff --git a/code/modules/antagonists/clock_cult/items/clockwork_weapon.dm b/code/modules/antagonists/clock_cult/items/clockwork_weapon.dm index 0e145c143a17f..85d88b5dc51ca 100644 --- a/code/modules/antagonists/clock_cult/items/clockwork_weapon.dm +++ b/code/modules/antagonists/clock_cult/items/clockwork_weapon.dm @@ -19,6 +19,7 @@ hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") sharpness = IS_SHARP_ACCURATE + bleed_force = BLEED_CUT max_integrity = 200 var/clockwork_hint = "" var/obj/effect/proc_holder/spell/targeted/summon_spear/SS diff --git a/code/modules/antagonists/clock_cult/scriptures/abstraction_crystal.dm b/code/modules/antagonists/clock_cult/scriptures/abstraction_crystal.dm index 3ca85d0b900ad..9879bc03fa191 100644 --- a/code/modules/antagonists/clock_cult/scriptures/abstraction_crystal.dm +++ b/code/modules/antagonists/clock_cult/scriptures/abstraction_crystal.dm @@ -61,7 +61,7 @@ GLOBAL_LIST_INIT(abstraction_crystals, list()) . = ..() ADD_TRAIT(src, TRAIT_IGNOREDAMAGESLOWDOWN, ABSTRACTION_HOLOGRAM_TRAIT) ADD_TRAIT(src, TRAIT_NODISMEMBER, ABSTRACTION_HOLOGRAM_TRAIT) - dna.species.species_traits |= NOBLOOD + ADD_TRAIT(src, TRAIT_NO_BLOOD, ABSTRACTION_HOLOGRAM_TRAIT) /mob/living/carbon/human/abstraction_hologram/death(gibbed) //Put the person back in their body diff --git a/code/modules/antagonists/clock_cult/scriptures/ocular_warden.dm b/code/modules/antagonists/clock_cult/scriptures/ocular_warden.dm index 9494d3a34d3a9..9197614fe896b 100644 --- a/code/modules/antagonists/clock_cult/scriptures/ocular_warden.dm +++ b/code/modules/antagonists/clock_cult/scriptures/ocular_warden.dm @@ -32,7 +32,7 @@ break_message = "A black ooze leaks from the ocular warden as it slowly sinks to the ground." icon_state = "ocular_warden" max_integrity = 60 - armor = list(MELEE = -80, BULLET = -50, LASER = 40, ENERGY = 40, BOMB = 20, BIO = 0, RAD = 0, STAMINA = 0) + armor = list(MELEE = -80, BULLET = -50, LASER = 40, ENERGY = 40, BOMB = 20, BIO = 0, RAD = 0, STAMINA = 0, BLEED = 0) var/cooldown /obj/structure/destructible/clockwork/ocular_warden/process(delta_time) diff --git a/code/modules/antagonists/clock_cult/traps/receivers/skewer.dm b/code/modules/antagonists/clock_cult/traps/receivers/skewer.dm index 377d63f93a9c5..4f331d7abd43d 100644 --- a/code/modules/antagonists/clock_cult/traps/receivers/skewer.dm +++ b/code/modules/antagonists/clock_cult/traps/receivers/skewer.dm @@ -37,8 +37,9 @@ M.apply_damage(5, BRUTE, BODY_ZONE_CHEST) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(!H.bleed_rate) - H.bleed(30) + var/armour_block = H.run_armor_check(BODY_ZONE_CHEST, BLEED) + var/hit_amount = (100 - armour_block) / 100 + H.add_bleeding(BLEED_CRITICAL * hit_amount) if(target_stabbed) if(!stab_overlay) stab_overlay = mutable_appearance('icons/obj/clockwork_objects.dmi', "brass_skewer_pokeybit", layer=ABOVE_MOB_LAYER) diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index c28d4f4d26fae..11024cdb515d4 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -356,6 +356,7 @@ var/uses = 1 var/health_cost = 0 //The amount of health taken from the user when invoking the spell var/datum/action/innate/cult/blood_spell/source + /obj/item/melee/blood_magic/Initialize(mapload, var/spell) . = ..() if(!istype(spell, /datum/action/innate/cult/blood_spell)) @@ -690,7 +691,7 @@ if(proximity) if(ishuman(target)) var/mob/living/carbon/human/H = target - if(NOBLOOD in H.dna.species.species_traits) + if((NOBLOOD in H.dna.species.species_traits) || HAS_TRAIT(H, TRAIT_NO_BLOOD)) to_chat(user,"Blood rites do not work on species with no blood!") return if(iscultist(H)) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 800a3a2d1a02b..7547343839ea3 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -48,6 +48,7 @@ Striking a noncultist, however, will tear their flesh."} righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' flags_1 = CONDUCT_1 sharpness = IS_SHARP + bleed_force = BLEED_CUT w_class = WEIGHT_CLASS_BULKY block_level = 1 block_upgrade_walk = 1 @@ -138,7 +139,7 @@ Striking a noncultist, however, will tear their flesh."} desc = "A torn, dust-caked hood. Strange letters line the inside." flags_inv = HIDEFACE|HIDEHAIR|HIDEEARS flags_cover = HEADCOVERSEYES - armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 25, BIO = 10, RAD = 0, FIRE = 10, ACID = 10, STAMINA = 40) + armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 25, BIO = 10, RAD = 0, FIRE = 10, ACID = 10, STAMINA = 40, BLEED = 20) cold_protection = HEAD min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT heat_protection = HEAD @@ -153,7 +154,7 @@ Striking a noncultist, however, will tear their flesh."} item_state = "cultrobes" body_parts_covered = CHEST|GROIN|LEGS|ARMS allowed = list(/obj/item/tome, /obj/item/melee/cultblade) - armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 25, BIO = 10, RAD = 0, FIRE = 10, ACID = 10, STAMINA = 40) + armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 25, BIO = 10, RAD = 0, FIRE = 10, ACID = 10, STAMINA = 40, BLEED = 20) flags_inv = HIDEJUMPSUIT cold_protection = CHEST|GROIN|LEGS|ARMS min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT @@ -187,7 +188,7 @@ Striking a noncultist, however, will tear their flesh."} item_state = null desc = "A helm worn by the followers of Nar'Sie." flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDEEARS|HIDEEYES|HIDESNOUT - armor = list(MELEE = 50, BULLET = 30, LASER = 50, ENERGY = 20, BOMB = 25, BIO = 10, RAD = 0, FIRE = 10, ACID = 10, STAMINA = 50) + armor = list(MELEE = 50, BULLET = 30, LASER = 50, ENERGY = 20, BOMB = 25, BIO = 10, RAD = 0, FIRE = 10, ACID = 10, STAMINA = 50, BLEED = 50) flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH /obj/item/clothing/suit/magusred @@ -199,7 +200,7 @@ Striking a noncultist, however, will tear their flesh."} item_state = null body_parts_covered = CHEST|GROIN|LEGS|ARMS allowed = list(/obj/item/tome, /obj/item/melee/cultblade) - armor = list(MELEE = 50, BULLET = 30, LASER = 50, ENERGY = 20, BOMB = 25, BIO = 10, RAD = 0, FIRE = 10, ACID = 10, STAMINA = 50) + armor = list(MELEE = 50, BULLET = 30, LASER = 50, ENERGY = 20, BOMB = 25, BIO = 10, RAD = 0, FIRE = 10, ACID = 10, STAMINA = 50, BLEED = 20) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT /obj/item/sharpener/cult @@ -220,7 +221,7 @@ Striking a noncultist, however, will tear their flesh."} icon_state = "cult_armor" item_state = null w_class = WEIGHT_CLASS_BULKY - armor = list(MELEE = 40, BULLET = 30, LASER = 40, ENERGY = 30, BOMB = 50, BIO = 30, RAD = 30, FIRE = 50, ACID = 60, STAMINA = 40) + armor = list(MELEE = 40, BULLET = 30, LASER = 40, ENERGY = 30, BOMB = 50, BIO = 30, RAD = 30, FIRE = 50, ACID = 60, STAMINA = 40, BLEED = 20) hoodtype = /obj/item/clothing/head/hooded/cult_hoodie /// if anyone can equip this. used by the prefs menu var/allow_any = FALSE @@ -244,7 +245,7 @@ Striking a noncultist, however, will tear their flesh."} name = "empowered cultist helmet" desc = "Empowered helmet which creates a powerful shield around the user." icon_state = "cult_hoodalt" - armor = list(MELEE = 40, BULLET = 30, LASER = 40, ENERGY = 30, BOMB = 50, BIO = 30, RAD = 30, FIRE = 50, ACID = 60, STAMINA = 40) + armor = list(MELEE = 40, BULLET = 30, LASER = 40, ENERGY = 30, BOMB = 50, BIO = 30, RAD = 30, FIRE = 50, ACID = 60, STAMINA = 40, BLEED = 20) /obj/item/clothing/suit/hooded/cultrobes/cult_shield/equipped(mob/living/user, slot) ..() @@ -259,14 +260,14 @@ Striking a noncultist, however, will tear their flesh."} name = "flagellant's robes" desc = "Blood-soaked robes infused with dark magic; allows the user to move at inhuman speeds, but at the cost of reduced protection." allowed = list(/obj/item/tome, /obj/item/melee/cultblade) - armor = list(MELEE = 10, BULLET = 20, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 40) + armor = list(MELEE = 10, BULLET = 20, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 40, BLEED = 20) slowdown = -0.4 hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/berserkerhood /obj/item/clothing/head/hooded/cult_hoodie/berserkerhood name = "flagellant's hood" desc = "Blood-soaked hood infused with dark magic." - armor = list(MELEE = 10, BULLET = 20, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 40) + armor = list(MELEE = 10, BULLET = 20, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 40, BLEED = 20) /obj/item/clothing/suit/hooded/cultrobes/berserker/equipped(mob/living/user, slot) ..() @@ -479,6 +480,7 @@ Striking a noncultist, however, will tear their flesh."} block_upgrade_walk = 1 attack_verb = list("attacked", "impaled", "stabbed", "tore", "gored") sharpness = IS_SHARP + bleed_force = BLEED_CUT hitsound = 'sound/weapons/bladeslice.ogg' var/datum/action/innate/cult/spear/spear_act diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index e2e4d257e83ea..33a8af9597a99 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -188,11 +188,13 @@ continue new /obj/effect/temp_visual/heal(get_turf(src), "#960000") if(ishuman(L)) + var/mob/living/carbon/C = L L.adjustBruteLoss(-5*delta_time, 0) L.adjustFireLoss(-5*delta_time, 0) L.updatehealth() if(L.blood_volume < BLOOD_VOLUME_NORMAL) - L.blood_volume += 1.0 + L.blood_volume += 20 + C.cauterise_wounds(1.4) else if(isshade(L) || isconstruct(L)) var/mob/living/simple_animal/M = L M.adjustHealth(-15*delta_time) diff --git a/code/modules/antagonists/heretic/items/heretic_armor.dm b/code/modules/antagonists/heretic/items/heretic_armor.dm index 717e474a3e934..35815ff66ae45 100644 --- a/code/modules/antagonists/heretic/items/heretic_armor.dm +++ b/code/modules/antagonists/heretic/items/heretic_armor.dm @@ -31,7 +31,7 @@ allowed = list(/obj/item/melee/sickly_blade) hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/eldritch // Slightly better than normal cult robes - armor = list(MELEE = 50, BULLET = 50, LASER = 50,ENERGY = 50, BOMB = 35, BIO = 20, RAD = 20, FIRE = 20, ACID = 20, STAMINA = 50) + armor = list(MELEE = 50, BULLET = 50, LASER = 50,ENERGY = 50, BOMB = 35, BIO = 20, RAD = 20, FIRE = 20, ACID = 20, STAMINA = 50, BLEED = 40) /obj/item/clothing/suit/hooded/cultrobes/eldritch/examine(mob/user) . = ..() @@ -51,7 +51,7 @@ flags_cover = NONE desc = "Black like tar and doesn't reflect any light. Runic symbols line the outside, with each flash you lose comprehension of what you are seeing." item_flags = EXAMINE_SKIP - armor = list(MELEE = 30, BULLET = 30, LASER = 30,ENERGY = 30, BOMB = 15, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 30) + armor = list(MELEE = 30, BULLET = 30, LASER = 30,ENERGY = 30, BOMB = 15, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 30, BLEED = 40) /obj/item/clothing/head/hooded/cult_hoodie/void/Initialize(mapload) . = ..() @@ -66,7 +66,7 @@ hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/void flags_inv = NONE // slightly worse than normal cult robes - armor = list(MELEE = 30, BULLET = 30, LASER = 30,ENERGY = 30, BOMB = 15, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 30) + armor = list(MELEE = 30, BULLET = 30, LASER = 30,ENERGY = 30, BOMB = 15, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 30, BLEED = 40) body_parts_covered = CHEST|GROIN|ARMS pocket_storage_component_path = /datum/component/storage/concrete/pockets/void_cloak qdel_hood = TRUE diff --git a/code/modules/antagonists/heretic/items/heretic_blades.dm b/code/modules/antagonists/heretic/items/heretic_blades.dm index 660da9582d9b3..0c908df48b41b 100644 --- a/code/modules/antagonists/heretic/items/heretic_blades.dm +++ b/code/modules/antagonists/heretic/items/heretic_blades.dm @@ -10,6 +10,7 @@ inhand_y_dimension = 64 flags_1 = CONDUCT_1 sharpness = IS_SHARP + bleed_force = BLEED_CUT w_class = WEIGHT_CLASS_LARGE force = 24 throwforce = 10 diff --git a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm index e9f0fd6eb0255..32c5ebb716b1a 100644 --- a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm @@ -306,7 +306,7 @@ return var/mob/living/carbon/human/human_target = target - human_target.bleed_rate += 5 + human_target.add_bleeding(BLEED_DEEP_WOUND) /datum/heretic_knowledge/summon/stalker name = "Lonely Ritual" diff --git a/code/modules/antagonists/heretic/magic/blood_cleave.dm b/code/modules/antagonists/heretic/magic/blood_cleave.dm index 5d2550fe21f9f..c9597c5841c05 100644 --- a/code/modules/antagonists/heretic/magic/blood_cleave.dm +++ b/code/modules/antagonists/heretic/magic/blood_cleave.dm @@ -41,7 +41,7 @@ "Your veins burst from within and unholy flame erupts from your blood!" ) - victim.bleed_rate += 5 + victim.add_bleeding(BLEED_DEEP_WOUND) victim.adjustFireLoss(20) new /obj/effect/temp_visual/cleave(victim.drop_location()) diff --git a/code/modules/antagonists/heretic/structures/carving_knife.dm b/code/modules/antagonists/heretic/structures/carving_knife.dm index e22f2d34eee68..070b1370df972 100644 --- a/code/modules/antagonists/heretic/structures/carving_knife.dm +++ b/code/modules/antagonists/heretic/structures/carving_knife.dm @@ -7,6 +7,7 @@ icon_state = "rune_carver" flags_1 = CONDUCT_1 sharpness = IS_SHARP + bleed_force = BLEED_CUT w_class = WEIGHT_CLASS_SMALL force = 10 throwforce = 20 diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm index 9f79aaf5d78c7..4f65c750f2b65 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm @@ -654,7 +654,7 @@ This is here to make the tiles around the station mininuke change when it's arme icon_state = "nucleardisk" persistence_replacement = /obj/item/disk/nuclear/fake max_integrity = 250 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/fake = FALSE var/turf/lastlocation diff --git a/code/modules/antagonists/space_dragon/carp_rift.dm b/code/modules/antagonists/space_dragon/carp_rift.dm index 2b661ae86a07a..c16d71bd6d90f 100644 --- a/code/modules/antagonists/space_dragon/carp_rift.dm +++ b/code/modules/antagonists/space_dragon/carp_rift.dm @@ -60,7 +60,7 @@ /obj/structure/carp_rift name = "carp rift" desc = "A rift akin to the ones space carp use to travel long distances." - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) max_integrity = 300 icon = 'icons/obj/carp_rift.dmi' icon_state = "carp_rift_carpspawn" diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 4471fbe27ba25..ceb6c37234717 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -252,6 +252,12 @@ icon_state = "hallucination_core" anomaly_type = /obj/effect/anomaly/hallucination +/obj/item/assembly/signaler/anomaly/blood + name = "\improper blood anomaly core" + desc = "The neutralized core of a blood anomaly. You feel your blood running through your veins when you are around it. It'd probably be valuable for research." + icon_state = "hallucination_core" + anomaly_type = /obj/effect/anomaly/blood + /obj/item/assembly/signaler/anomaly/attack_self() return diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index c72272eea7584..6939927dbc918 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -69,7 +69,7 @@ req_access = list(ACCESS_ATMOSPHERICS) max_integrity = 250 integrity_failure = 0.33 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF clicksound = 'sound/machines/terminal_select.ogg' layer = ABOVE_WINDOW_LAYER diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index cd78254e10bc8..4078955b94e27 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -57,7 +57,7 @@ normalize_cardinal_directions() nodes = new(device_type) if (!armor) - armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 100, ACID = 70, STAMINA = 0) + armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 100, ACID = 70, STAMINA = 0, BLEED = 0) ..() if(process) SSair.start_processing_machine(src) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 5c20e4d4fe45a..4728101cdb604 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -8,7 +8,7 @@ icon_state = "pod-off" density = TRUE max_integrity = 350 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 30, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 30, ACID = 30, STAMINA = 0, BLEED = 0) layer = ABOVE_WINDOW_LAYER state_open = FALSE circuit = /obj/item/circuitboard/machine/cryo_tube diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 41e2ce70afe5e..e7e7c4650972b 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -7,7 +7,7 @@ density = TRUE max_integrity = 300 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 80, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 80, ACID = 30, STAMINA = 0, BLEED = 0) layer = OBJ_LAYER circuit = /obj/item/circuitboard/machine/thermomachine diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index 9781ad4a96a64..24d3e44239728 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -9,7 +9,7 @@ idle_power_usage = 2 active_power_usage = 4 max_integrity = 150 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 40, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 40, ACID = 0, STAMINA = 0, BLEED = 0) var/frequency = 0 var/atom/target var/target_layer = PIPING_LAYER_DEFAULT diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 463ef5df40d75..d828301a6a128 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -9,7 +9,7 @@ greyscale_colors = "#ffff00#000000" density = TRUE volume = 1000 - armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 80, ACID = 50, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 80, ACID = 50, STAMINA = 0, BLEED = 0) max_integrity = 250 integrity_failure = 0.4 pressure_resistance = 7 * ONE_ATMOSPHERE diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 0e9d101d8b382..36f8f066a4066 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/atmos.dmi' use_power = NO_POWER_USE max_integrity = 250 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 60, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 60, ACID = 30, STAMINA = 0, BLEED = 0) anchored = FALSE interacts_with_air = TRUE diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index df8eade196a78..065eb1c286158 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -545,7 +545,7 @@ /obj/item/clothing/under/syndicate/coldres name = "insulated tactical turtleneck" desc = "A nondescript and slightly suspicious-looking turtleneck with digital camouflage cargo pants. The interior has been padded with special insulation for both warmth and protection." - armor = list(MELEE = 20, BULLET = 10, LASER = 0, ENERGY = 5, BOMB = 0, BIO = 0, RAD = 0, FIRE = 25, ACID = 25, STAMINA = 30) + armor = list(MELEE = 20, BULLET = 10, LASER = 0, ENERGY = 5, BOMB = 0, BIO = 0, RAD = 0, FIRE = 25, ACID = 25, STAMINA = 30, BLEED = 10) cold_protection = CHEST|GROIN|ARMS|LEGS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm index afed380c46ad8..c18f42cd9b678 100644 --- a/code/modules/cargo/supplypod.dm +++ b/code/modules/cargo/supplypod.dm @@ -11,7 +11,7 @@ allow_dense = TRUE delivery_icon = null can_weld_shut = FALSE - armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 100, BIO = 0, RAD = 0, FIRE = 100, ACID = 80, STAMINA = 0) + armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 100, BIO = 0, RAD = 0, FIRE = 100, ACID = 80, STAMINA = 0, BLEED = 0) anchored = TRUE //So it cant slide around after landing anchorable = FALSE flags_1 = PREVENT_CONTENTS_EXPLOSION_1 diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index fa1e9ccd02f85..90bec770bbb80 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -356,7 +356,7 @@ random_sensor = FALSE resistance_flags = NONE can_adjust = FALSE - armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10, BLEED = 10) var/datum/action/item_action/chameleon/change/chameleon_action @@ -433,7 +433,7 @@ item_state = "armor" blood_overlay_type = "armor" resistance_flags = NONE - armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10, BLEED = 10) var/datum/action/item_action/chameleon/change/chameleon_action @@ -477,7 +477,7 @@ icon_state = "meson" item_state = "meson" resistance_flags = NONE - armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10, BLEED = 10) var/datum/action/item_action/chameleon/change/chameleon_action @@ -530,7 +530,7 @@ worn_icon_state = "ygloves" resistance_flags = NONE - armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10, BLEED = 10) var/datum/action/item_action/chameleon/change/chameleon_action @@ -581,7 +581,7 @@ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10, BLEED = 10) /obj/item/clothing/head/chameleon name = "grey cap" @@ -591,7 +591,7 @@ clothing_flags = SNUG_FIT icon_state = "greysoft" resistance_flags = NONE - armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10) + armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10, BLEED = 10) var/datum/action/item_action/chameleon/change/chameleon_action @@ -655,7 +655,7 @@ // The camohat, I mean, holographic hat projection, is part of the // drone itself. clothing_flags = SNUG_FIT - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0) // which means it offers no protection, it's just air and light /obj/item/clothing/head/chameleon/drone/Initialize(mapload) @@ -709,7 +709,7 @@ icon_state = "gas_alt" item_state = "gas_alt" resistance_flags = NONE - armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10) + armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10, BLEED = 10) clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR|HIDESNOUT gas_transfer_coefficient = 0.01 @@ -778,7 +778,7 @@ /obj/item/clothing/mask/chameleon/drone //Same as the drone chameleon hat, undroppable and no protection - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0, BLEED = 10) // Can drones use the voice changer part? Let's not find out. voice_change = FALSE @@ -803,7 +803,7 @@ desc = "A pair of black shoes." permeability_coefficient = 0.05 resistance_flags = NONE - armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10, BLEED = 10) pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes var/datum/action/item_action/chameleon/change/chameleon_action @@ -1043,7 +1043,7 @@ desc = "A neosilk clip-on tie." icon_state = "blacktie" resistance_flags = NONE - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 0, BLEED = 0) /obj/item/clothing/neck/chameleon var/datum/action/item_action/chameleon/change/chameleon_action diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 47a218632d5c8..44d399d74d434 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -218,7 +218,7 @@ compare_to = thing break var/list/readout = list("PROTECTION CLASSES") - if(armor.bio || armor.bomb || armor.bullet || armor.energy || armor.laser || armor.magic || armor.melee || armor.rad || armor.stamina) + if(armor.bio || armor.bomb || armor.bullet || armor.energy || armor.laser || armor.magic || armor.melee || armor.rad || armor.stamina || armor.bleed) readout += "
ARMOR (I-X)" if(armor.bio || compare_to?.armor?.bio) readout += "
TOXIN [armor_to_protection_class(armor.bio, compare_to?.armor?.bio)]" @@ -238,6 +238,8 @@ readout += "
RADIATION [armor_to_protection_class(armor.rad, compare_to?.armor?.rad)]" if(armor.stamina || compare_to?.armor?.stamina) readout += "
STAMINA [armor_to_protection_class(armor.stamina, compare_to?.armor?.stamina)]" + if(armor.bleed || compare_to?.armor?.bleed) + readout += "
BLEEDING [armor_to_protection_class(armor.bleed, compare_to?.armor?.bleed)]" if(armor.fire || armor.acid) readout += "
DURABILITY (I-X)" if(armor.fire || compare_to?.armor?.fire) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 3deaa56984fc7..2b2d663dc7bcb 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -123,6 +123,7 @@ attack_verb = list("sliced") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP + bleed_force = BLEED_SURFACE /obj/item/clothing/glasses/meson/prescription name = "prescription meson scanner" @@ -142,7 +143,7 @@ actions_types = list(/datum/action/item_action/toggle_research_scanner) glass_colour_type = /datum/client_colour/glass_colour/purple resistance_flags = ACID_PROOF - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100, STAMINA = 0, BLEED = 0) /obj/item/clothing/glasses/science/item_action_slot_check(slot) if(slot == ITEM_SLOT_EYES) @@ -154,7 +155,7 @@ icon_state = "prescscihud" emissive_state = "prehud_emissive" resistance_flags = NONE - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 20, ACID = 40, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 20, ACID = 40, STAMINA = 0, BLEED = 0) vision_correction = 1 /obj/item/clothing/glasses/science/sciencesun @@ -223,6 +224,7 @@ attack_verb = list("sliced") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP + bleed_force = BLEED_SURFACE glass_colour_type = /datum/client_colour/glass_colour/lightgreen /obj/item/clothing/glasses/regular @@ -306,6 +308,7 @@ attack_verb = list("sliced") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP + bleed_force = BLEED_SURFACE /obj/item/clothing/glasses/sunglasses/advanced/garb/supergarb name = "black giga gar glasses" @@ -326,6 +329,7 @@ attack_verb = list("sliced") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP + bleed_force = BLEED_SURFACE glass_colour_type = /datum/client_colour/glass_colour/orange /obj/item/clothing/glasses/sunglasses/advanced/gar/supergar diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index fc8fde641339d..7750907ad3cdb 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -292,6 +292,7 @@ attack_verb = list("sliced") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP + bleed_force = BLEED_SURFACE /obj/item/clothing/glasses/hud/security/sunglasses/gars/supergars name = "giga HUD gar glasses" diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 7043a304d7cfd..7b6e4a9108017 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -178,7 +178,7 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT strip_delay = 60 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 50, STAMINA = 0, BLEED = 0) /obj/item/clothing/gloves/color/latex name = "latex gloves" diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index acd01cd5bb2fe..e993df33d96ca 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -25,7 +25,7 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 30, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 30, STAMINA = 0, BLEED = 0) /obj/item/clothing/gloves/combat name = "combat gloves" @@ -41,7 +41,7 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50, STAMINA = 20) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50, STAMINA = 20, BLEED = 10) /obj/item/clothing/gloves/bracer name = "bone bracers" @@ -57,7 +57,7 @@ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE - armor = list(MELEE = 15, BULLET = 35, LASER = 35, ENERGY = 20, BOMB = 35, BIO = 35, RAD = 35, FIRE = 0, ACID = 0, STAMINA = 20) + armor = list(MELEE = 15, BULLET = 35, LASER = 35, ENERGY = 20, BOMB = 35, BIO = 35, RAD = 35, FIRE = 0, ACID = 0, STAMINA = 20, BLEED = 20) /obj/item/clothing/gloves/rapid name = "Gloves of the North Star" diff --git a/code/modules/clothing/head/beanie.dm b/code/modules/clothing/head/beanie.dm index 3317d4f3a1fba..5e2360d757310 100644 --- a/code/modules/clothing/head/beanie.dm +++ b/code/modules/clothing/head/beanie.dm @@ -89,7 +89,7 @@ name = "durathread beanie" desc = "A beanie made from durathread, its resilient fibres provide some protection to the wearer." icon_state = "beaniedurathread" - armor = list(MELEE = 15, BULLET = 25, LASER = 15, ENERGY = 5, BOMB = 10, BIO = 0, RAD = 0, FIRE = 30, ACID = 5, STAMINA = 20) + armor = list(MELEE = 15, BULLET = 25, LASER = 15, ENERGY = 5, BOMB = 10, BIO = 0, RAD = 0, FIRE = 30, ACID = 5, STAMINA = 20, BLEED = 40) /obj/item/clothing/head/beanie/waldo name = "red striped bobble hat" diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index aac6425962fac..3d56556c11896 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -7,7 +7,7 @@ desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight." icon_state = "hardhat0_yellow" item_state = null - armor = list(MELEE = 15, BULLET = 5, LASER = 20, ENERGY = 10, BOMB = 20, BIO = 10, RAD = 20, FIRE = 100, ACID = 50, STAMINA = 20) + armor = list(MELEE = 15, BULLET = 5, LASER = 20, ENERGY = 10, BOMB = 20, BIO = 10, RAD = 20, FIRE = 100, ACID = 50, STAMINA = 20, BLEED = 60) flags_inv = NONE actions_types = list(/datum/action/item_action/toggle_helmet_light) resistance_flags = FIRE_PROOF diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 549653969a5f6..457e800ba29f6 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -5,7 +5,7 @@ worn_icon = 'icons/mob/clothing/head/helmet.dmi' icon_state = "helmet" item_state = "helmet" - armor = list(MELEE = 35, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 30) + armor = list(MELEE = 35, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 30, BLEED = 50) flags_inv = HIDEEARS cold_protection = HEAD heat_protection = HEAD @@ -57,7 +57,7 @@ desc = "A bulletproof combat helmet that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent." icon_state = "helmetalt" item_state = "helmetalt" - armor = list(MELEE = 15, BULLET = 60, LASER = 10, ENERGY = 15, BOMB = 40, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 30) + armor = list(MELEE = 15, BULLET = 60, LASER = 10, ENERGY = 15, BOMB = 40, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 30, BLEED = 50) /obj/item/clothing/head/helmet/alt/Initialize(mapload) . = ..() @@ -116,7 +116,7 @@ item_state = "helmet" toggle_message = "You pull the visor down on" alt_toggle_message = "You push the visor up on" - armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, STAMINA = 50) + armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, STAMINA = 50, BLEED = 70) flags_inv = HIDEEARS|HIDEFACE|HIDESNOUT strip_delay = 80 actions_types = list(/datum/action/item_action/toggle) @@ -172,7 +172,7 @@ desc = "An extremely robust, space-worthy helmet in a nefarious red and black stripe pattern." icon_state = "swatsyndie" item_state = "swatsyndie" - armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 50, BIO = 90, RAD = 20, FIRE = 50, ACID = 50, STAMINA = 50) + armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 50, BIO = 90, RAD = 20, FIRE = 50, ACID = 50, STAMINA = 50, BLEED = 70) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD @@ -198,7 +198,7 @@ flags_inv = HIDEEARS|HIDEHAIR icon_state = "thunderdome" item_state = "thunderdome" - armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 90, ACID = 90, STAMINA = 0) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 90, ACID = 90, STAMINA = 0, BLEED = 0) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD @@ -208,14 +208,14 @@ /obj/item/clothing/head/helmet/thunderdome/holosuit cold_protection = null heat_protection = null - armor = list(MELEE = 10, BULLET = 10, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 10, BULLET = 10, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0) /obj/item/clothing/head/helmet/roman name = "\improper Roman helmet" desc = "An ancient helmet made of bronze and leather." flags_inv = HIDEEARS|HIDEHAIR flags_cover = HEADCOVERSEYES - armor = list(MELEE = 25, BULLET = 0, LASER = 25, ENERGY = 30, BOMB = 10, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 40) + armor = list(MELEE = 25, BULLET = 0, LASER = 25, ENERGY = 30, BOMB = 10, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 40, BLEED = 50) resistance_flags = FIRE_PROOF icon_state = "roman" item_state = "roman" @@ -223,7 +223,7 @@ /obj/item/clothing/head/helmet/roman/fake desc = "An ancient helmet made of plastic and leather." - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0, BLEED = 10) /obj/item/clothing/head/helmet/roman/legionnaire name = "\improper Roman legionnaire helmet" @@ -233,7 +233,7 @@ /obj/item/clothing/head/helmet/roman/legionnaire/fake desc = "An ancient helmet made of plastic and leather. Has a red crest on top of it." - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0, BLEED = 10) /obj/item/clothing/head/helmet/gladiator name = "gladiator helmet" @@ -249,7 +249,7 @@ icon_state = "redtaghelm" flags_cover = HEADCOVERSEYES item_state = "redtaghelm" - armor = list(MELEE = 15, BULLET = 10, LASER = 20, ENERGY = 30, BOMB = 20, BIO = 0, RAD = 0, FIRE = 0, ACID = 50, STAMINA = 10) + armor = list(MELEE = 15, BULLET = 10, LASER = 20, ENERGY = 30, BOMB = 20, BIO = 0, RAD = 0, FIRE = 0, ACID = 50, STAMINA = 10, BLEED = 10) /obj/item/clothing/head/helmet/bluetaghelm name = "blue laser tag helmet" @@ -257,14 +257,14 @@ icon_state = "bluetaghelm" flags_cover = HEADCOVERSEYES item_state = "bluetaghelm" - armor = list(MELEE = 15, BULLET = 10, LASER = 20, ENERGY = 30, BOMB = 20, BIO = 0, RAD = 0, FIRE = 0, ACID = 50, STAMINA = 10) + armor = list(MELEE = 15, BULLET = 10, LASER = 20, ENERGY = 30, BOMB = 20, BIO = 0, RAD = 0, FIRE = 0, ACID = 50, STAMINA = 10, BLEED = 10) /obj/item/clothing/head/helmet/knight name = "medieval helmet" desc = "A classic metal helmet." icon_state = "knight_green" item_state = "knight_green" - armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, STAMINA = 50) + armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, STAMINA = 50, BLEED = 10) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH strip_delay = 80 @@ -287,7 +287,7 @@ desc = "An intimidating tribal helmet, it doesn't look very comfortable." flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDESNOUT flags_cover = HEADCOVERSEYES - armor = list(MELEE = 35, BULLET = 25, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 20) + armor = list(MELEE = 35, BULLET = 25, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 20, BLEED = 40) icon_state = "skull" item_state = "skull" strip_delay = 100 @@ -298,7 +298,7 @@ icon_state = "durathread" item_state = "durathread" resistance_flags = FLAMMABLE - armor = list(MELEE = 20, BULLET = 40, LASER = 30, ENERGY = 5, BOMB = 15, BIO = 0, RAD = 0, FIRE = 40, ACID = 50, STAMINA = 30) + armor = list(MELEE = 20, BULLET = 40, LASER = 30, ENERGY = 5, BOMB = 15, BIO = 0, RAD = 0, FIRE = 40, ACID = 50, STAMINA = 30, BLEED = 60) strip_delay = 60 /obj/item/clothing/head/helmet/rus_helmet @@ -306,7 +306,7 @@ desc = "It can hold a bottle of vodka." icon_state = "rus_helmet" item_state = "rus_helmet" - armor = list(MELEE = 25, BULLET = 30, LASER = 0, ENERGY = 15, BOMB = 10, BIO = 0, RAD = 20, FIRE = 20, ACID = 50, STAMINA = 20) + armor = list(MELEE = 25, BULLET = 30, LASER = 0, ENERGY = 15, BOMB = 10, BIO = 0, RAD = 20, FIRE = 20, ACID = 50, STAMINA = 20, BLEED = 15) pocket_storage_component_path = /datum/component/storage/concrete/pockets/helmet /obj/item/clothing/head/helmet/rus_ushanka @@ -317,7 +317,7 @@ body_parts_covered = HEAD cold_protection = HEAD min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT - armor = list(MELEE = 25, BULLET = 20, LASER = 20, ENERGY = 10, BOMB = 20, BIO = 50, RAD = 20, FIRE = -10, ACID = 50, STAMINA = 20) + armor = list(MELEE = 25, BULLET = 20, LASER = 20, ENERGY = 10, BOMB = 20, BIO = 50, RAD = 20, FIRE = -10, ACID = 50, STAMINA = 20, BLEED = 15) /obj/item/clothing/head/helmet/outlaw name = "outlaw's hat" @@ -328,4 +328,4 @@ item_state = "cowboy" worn_icon_state = "cowboy_outlaw" body_parts_covered = HEAD - armor = list(MELEE = 25, BULLET = 25, LASER = 20, ENERGY = 10, BOMB = 30, BIO = 30, RAD = 20, FIRE = 0, ACID = 40, STAMINA = 25) + armor = list(MELEE = 25, BULLET = 25, LASER = 20, ENERGY = 10, BOMB = 30, BIO = 30, RAD = 20, FIRE = 0, ACID = 40, STAMINA = 25, BLEED = 15) diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 68f6e149d4418..debc8f0c7bc1d 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -32,7 +32,7 @@ icon_state = "captain" item_state = "that" flags_inv = 0 - armor = list(MELEE = 25, BULLET = 15, LASER = 25, ENERGY = 30, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 30) + armor = list(MELEE = 25, BULLET = 15, LASER = 25, ENERGY = 30, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 30, BLEED = 30) strip_delay = 60 dog_fashion = /datum/dog_fashion/head/captain dying_key = DYE_REGISTRY_CAP @@ -50,7 +50,7 @@ name = "head of personnel's cap" icon_state = "hopcap" desc = "The symbol of true bureaucratic micromanagement." - armor = list(MELEE = 25, BULLET = 15, LASER = 25, ENERGY = 30, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 30) + armor = list(MELEE = 25, BULLET = 15, LASER = 25, ENERGY = 30, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 30, BLEED = 15) dog_fashion = /datum/dog_fashion/head/hop dying_key = DYE_REGISTRY_CAP @@ -74,7 +74,7 @@ /obj/item/clothing/head/fedora/det_hat name = "detective's fedora" desc = "There's only one man who can sniff out the dirty stench of crime, and he's likely wearing this hat." - armor = list(MELEE = 25, BULLET = 5, LASER = 25, ENERGY = 30, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 50, STAMINA = 25) + armor = list(MELEE = 25, BULLET = 5, LASER = 25, ENERGY = 30, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 50, STAMINA = 25, BLEED = 20) icon_state = "detective" item_state = "det_hat" var/candy_cooldown = 0 @@ -171,7 +171,7 @@ name = "durathread beret" desc = "A beret made from durathread, its resilient fibres provide some protection to the wearer." icon_state = "beretdurathread" - armor = list(MELEE = 15, BULLET = 25, LASER = 15, ENERGY = 20, BOMB = 10, BIO = 0, RAD = 0, FIRE = 30, ACID = 5, STAMINA = 20) + armor = list(MELEE = 15, BULLET = 25, LASER = 15, ENERGY = 20, BOMB = 10, BIO = 0, RAD = 0, FIRE = 30, ACID = 5, STAMINA = 20, BLEED = 45) //Security @@ -179,7 +179,7 @@ name = "head of security cap" desc = "The robust standard-issue cap of the Head of Security. For showing the officers who's in charge." icon_state = "hoscap" - armor = list(MELEE = 40, BULLET = 30, LASER = 25, ENERGY = 30, BOMB = 25, BIO = 10, RAD = 0, FIRE = 50, ACID = 60, STAMINA = 30) + armor = list(MELEE = 40, BULLET = 30, LASER = 25, ENERGY = 30, BOMB = 25, BIO = 10, RAD = 0, FIRE = 50, ACID = 60, STAMINA = 30, BLEED = 30) strip_delay = 80 dynamic_hair_suffix = "" dying_key = DYE_REGISTRY_CAP @@ -205,7 +205,7 @@ name = "warden's police hat" desc = "It's a special armored hat issued to the Warden of a security force. Protects the head from impacts." icon_state = "policehelm" - armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 25, BIO = 0, RAD = 0, FIRE = 30, ACID = 60, STAMINA = 30) + armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 25, BIO = 0, RAD = 0, FIRE = 30, ACID = 60, STAMINA = 30, BLEED = 25) strip_delay = 60 dog_fashion = /datum/dog_fashion/head/warden @@ -282,14 +282,14 @@ name = "corporate warden beret" desc = "A special black beret with the Warden's insignia in the middle. This one is commonly worn by wardens of the corporation." icon_state = "beret_corporate_warden" - armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 25, BIO = 0, RAD = 0, FIRE = 30, ACID = 60, STAMINA = 30) + armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 25, BIO = 0, RAD = 0, FIRE = 30, ACID = 60, STAMINA = 30, BLEED = 25) strip_delay = 60 /obj/item/clothing/head/beret/sec name = "security beret" desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection." icon_state = "beret_badge" - armor = list(MELEE = 35, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 30) + armor = list(MELEE = 35, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 30, BLEED = 25) strip_delay = 60 dog_fashion = null @@ -297,14 +297,14 @@ name = "corporate security beret" desc = "A special black beret for the mundane life of a corporate security officer." icon_state = "beret_corporate_officer" - armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 25, BIO = 0, RAD = 0, FIRE = 20, ACID = 50, STAMINA = 30) + armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 25, BIO = 0, RAD = 0, FIRE = 20, ACID = 50, STAMINA = 30, BLEED = 25) strip_delay = 60 /obj/item/clothing/head/beret/spacepol name = "spacepol officer beret" desc = "A special black beret for the mundane life of a SpacePol officer." icon_state = "beret_corporate_officer" - armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 25, BIO = 0, RAD = 0, FIRE = 20, ACID = 50, STAMINA = 30) + armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 25, BIO = 0, RAD = 0, FIRE = 20, ACID = 50, STAMINA = 30, BLEED = 25) strip_delay = 60 /obj/item/clothing/head/beret/sec/navyhos @@ -316,7 +316,7 @@ name = "warden's beret" desc = "A special beret with the Warden's insignia emblazoned on it. For wardens with class." icon_state = "wardenberet" - armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 30, ACID = 50, STAMINA = 30) + armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 30, ACID = 50, STAMINA = 30, BLEED = 25) strip_delay = 60 /obj/item/clothing/head/beret/sec/navyofficer @@ -333,35 +333,35 @@ name = "engineering beret" desc = "A beret with the engineering insignia emblazoned on it. For engineers that are more inclined towards style than safety." icon_state = "beret_engineering" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 10, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 10, ACID = 0, STAMINA = 0, BLEED = 0) strip_delay = 60 /obj/item/clothing/head/beret/atmos name = "atmospherics beret" desc = "A beret for those who have shown immaculate proficienty in piping. Or plumbing." icon_state = "beret_atmospherics" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 10, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 10, ACID = 0, STAMINA = 0, BLEED = 0) strip_delay = 60 /obj/item/clothing/head/beret/ce name = "chief engineer beret" desc = "A white beret with the engineering insignia emblazoned on it. Its owner knows what they're doing. Probably." icon_state = "beret_ce" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 20, FIRE = 30, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 20, FIRE = 30, ACID = 0, STAMINA = 0, BLEED = 0) strip_delay = 60 /obj/item/clothing/head/beret/sci name = "science beret" desc = "A purple beret with the science insignia emblazoned on it. It has that authentic burning plasma smell." icon_state = "beret_sci" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 5, BIO = 5, RAD = 0, FIRE = 5, ACID = 10, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 5, BIO = 5, RAD = 0, FIRE = 5, ACID = 10, STAMINA = 0, BLEED = 0) strip_delay = 60 /obj/item/clothing/head/beret/supply name = "supply beret" desc = "A brown beret with the supply insignia emblazoned on it. You can't help but wonder how much it'd sell for." icon_state = "beret_supply" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 10, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 10, ACID = 0, STAMINA = 0, BLEED = 0) strip_delay = 60 //Medical @@ -369,14 +369,14 @@ name = "medical beret" desc = "A white beret with a blue cross finely threaded into it. It has that sterile smell about it." icon_state = "beret_med" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 20, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 20, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0) strip_delay = 60 /obj/item/clothing/head/beret/cmo name = "chief medical officer beret" desc = "A baby blue beret with the insignia of Medistan. It smells very sterile." icon_state = "beret_cmo" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 30, RAD = 10, FIRE = 0, ACID = 20, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 30, RAD = 10, FIRE = 0, ACID = 20, STAMINA = 0, BLEED = 0) strip_delay = 60 //CentCom @@ -384,21 +384,21 @@ name = "central command captain beret" desc = "A pure white beret with a Captain insignia of Central Command." icon_state = "beret_centcom_captain" - armor = list(melee = 80, bullet = 80, laser = 80, energy = 80, bomb = 80, bio = 80, rad = 80, fire = 80, acid = 80, stamina = 80) + armor = list(melee = 80, bullet = 80, laser = 80, energy = 80, bomb = 80, bio = 80, rad = 80, fire = 80, acid = 80, stamina = 80, BLEED = 80) strip_delay = 120 /obj/item/clothing/head/beret/ccofficer name = "central command officer beret" desc = "A black Central Command Officer beret with matching insignia." icon_state = "beret_centcom_officer" - armor = list(melee = 80, bullet = 80, laser = 80, energy = 80, bomb = 80, bio = 80, rad = 80, fire = 80, acid = 80, stamina = 80) + armor = list(melee = 80, bullet = 80, laser = 80, energy = 80, bomb = 80, bio = 80, rad = 80, fire = 80, acid = 80, stamina = 80, BLEED = 80) strip_delay = 120 /obj/item/clothing/head/beret/ccofficernavy name = "central command naval officer beret" desc = "A Navy beret commonly worn by Central Command Naval Officers." icon_state = "beret_centcom_officer_navy" - armor = list(melee = 80, bullet = 80, laser = 80, energy = 80, bomb = 80, bio = 80, rad = 80, fire = 80, acid = 80, stamina = 80) + armor = list(melee = 80, bullet = 80, laser = 80, energy = 80, bomb = 80, bio = 80, rad = 80, fire = 80, acid = 80, stamina = 80, BLEED = 80) strip_delay = 120 //For blueshields, but those aren't in so I renamed them to centcom guards @@ -406,28 +406,28 @@ name = "officer beret" desc = "A black CentCom guard's beret." icon_state = "beret_centcom_officer" - armor = list(melee = 40, bullet = 20, laser = 10, energy = 10, bomb = 10, bio = 5, rad = 5, fire = 5, acid = 30, stamina = 30) + armor = list(melee = 40, bullet = 20, laser = 10, energy = 10, bomb = 10, bio = 5, rad = 5, fire = 5, acid = 30, stamina = 30, BLEED = 20) strip_delay = 60 /obj/item/clothing/head/beret/ccguardnavy name = "navy officer beret" desc = "A navy CentCom guard's beret." icon_state = "beret_centcom_officer_navy" - armor = list(melee = 40, bullet = 20, laser = 10, energy = 10, bomb = 10, bio = 5, rad = 5, fire = 5, acid = 30, stamina = 30) + armor = list(melee = 40, bullet = 20, laser = 10, energy = 10, bomb = 10, bio = 5, rad = 5, fire = 5, acid = 30, stamina = 30, BLEED = 20) strip_delay = 60 /obj/item/clothing/head/beret/sergeant name = "spacepol sergeant beret" desc = "A navy SpacePol sergeant's beret." icon_state = "beret_centcom_officer_navy" - armor = list(melee = 40, bullet = 20, laser = 10, energy = 10, bomb = 10, bio = 5, rad = 5, fire = 5, acid = 30, stamina = 30) + armor = list(melee = 40, bullet = 20, laser = 10, energy = 10, bomb = 10, bio = 5, rad = 5, fire = 5, acid = 30, stamina = 30, BLEED = 20) strip_delay = 60 /obj/item/clothing/head/beret/captain name = "captain beret" desc = "A lovely blue Captain beret with a gold and white insignia." icon_state = "beret_captain" - armor = list(melee = 50, bullet = 30, laser = 20, energy = 30, bomb = 15, bio = 10, rad = 10, fire = 10, acid = 60, stamina = 40) + armor = list(melee = 50, bullet = 30, laser = 20, energy = 30, bomb = 15, bio = 10, rad = 10, fire = 10, acid = 60, stamina = 40, BLEED = 20) strip_delay = 90 diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 626be7660e166..ffeb296e16c42 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -100,7 +100,7 @@ desc = "It's a robust baseball hat in tasteful red colour." icon_state = "secsoft" soft_color = "sec" - armor = list(MELEE = 30, BULLET = 25, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 20, ACID = 50, STAMINA = 30) + armor = list(MELEE = 30, BULLET = 25, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 20, ACID = 50, STAMINA = 30, BLEED = 10) strip_delay = 60 /obj/item/clothing/head/soft/sec/brig_physician diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 078794d068270..0b11d95207a2c 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -28,7 +28,7 @@ custom_materials = list(/datum/material/iron=4000, /datum/material/glass=2000) flash_protect = 2 tint = 2 - armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 55, STAMINA = 15) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 55, STAMINA = 15, BLEED = 5) actions_types = list(/datum/action/item_action/toggle) flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDESNOUT flags_cover = MASKCOVERSEYES @@ -53,7 +53,7 @@ desc = "A modernised version of the classic design, this mask will not only filter out toxins but it can also be connected to an air supply." icon_state = "plaguedoctor" item_state = "gas_mask" - armor = list(MELEE = 0, BULLET = 0, LASER = 2, ENERGY = 2, BOMB = 0, BIO = 75, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 2, ENERGY = 2, BOMB = 0, BIO = 75, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0) /obj/item/clothing/mask/gas/syndicate name = "syndicate mask" diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm index e57031859a5ec..7dd01b5036195 100644 --- a/code/modules/clothing/masks/hailer.dm +++ b/code/modules/clothing/masks/hailer.dm @@ -33,7 +33,7 @@ aggressiveness = 3 flags_inv = HIDEFACIALHAIR | HIDEFACE | HIDEEYES | HIDEEARS | HIDEHAIR | HIDESNOUT visor_flags_inv = 0 - armor = list(MELEE = 10, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 0, BIO = 50, RAD = 0, FIRE = 20, ACID = 40, STAMINA = 30) + armor = list(MELEE = 10, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 0, BIO = 50, RAD = 0, FIRE = 20, ACID = 40, STAMINA = 30, BLEED = 30) /obj/item/clothing/mask/gas/sechailer/swat/spacepol name = "spacepol mask" diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 820e797ab04ad..36de595d0c701 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -28,7 +28,7 @@ visor_flags_cover = MASKCOVERSMOUTH gas_transfer_coefficient = 0.9 permeability_coefficient = 0.01 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 25, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 25, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0) actions_types = list(/datum/action/item_action/adjust) /obj/item/clothing/mask/surgical/attack_self(mob/user) diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index f8866bb182728..2b67cb1555e3f 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -65,7 +65,7 @@ icon_state = "advmag0" magboot_state = "advmag" slowdown_active = SHOES_SLOWDOWN - armor = list(MELEE = 40, BULLET = 30, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 30, RAD = 30, FIRE = 90, ACID = 50, STAMINA = 30) + armor = list(MELEE = 40, BULLET = 30, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 30, RAD = 30, FIRE = 90, ACID = 50, STAMINA = 30, BLEED = 40) clothing_flags = NOSLIP /obj/item/clothing/shoes/magboots/commando/attack_self(mob/user) //Code for the passive no-slip of the commando magboots to always apply, kind of a shit code solution though. diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 68eb7b389753b..5264e741c872e 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -6,7 +6,7 @@ item_state = "jackboots" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 10, RAD = 0, FIRE = 70, ACID = 50, STAMINA = 30) + armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 10, RAD = 0, FIRE = 70, ACID = 50, STAMINA = 30, BLEED = 20) strip_delay = 40 resistance_flags = NONE permeability_coefficient = 0.05 //Thick soles, and covers the ankle @@ -17,7 +17,7 @@ desc = "High speed, no drag combat boots." permeability_coefficient = 0.01 clothing_flags = NOSLIP - armor = list(MELEE = 40, BULLET = 30, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 30, RAD = 30, FIRE = 90, ACID = 50, STAMINA = 30) + armor = list(MELEE = 40, BULLET = 30, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 30, RAD = 30, FIRE = 90, ACID = 50, STAMINA = 30, BLEED = 20) /obj/item/clothing/shoes/sandal desc = "A pair of rather plain wooden sandals." @@ -44,7 +44,7 @@ strip_delay = 30 equip_delay_other = 50 resistance_flags = NONE - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 40, ACID = 75, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 40, ACID = 75, STAMINA = 0, BLEED = 0) can_be_bloody = FALSE custom_price = 100 diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index 890e117ce4d66..5ea087070c7c4 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -9,7 +9,7 @@ desc = "A special helmet with solar UV shielding to protect your eyes from harmful rays." clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT | HEADINTERNALS permeability_coefficient = 0.01 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 50, FIRE = 80, ACID = 70, STAMINA = 10) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 50, FIRE = 80, ACID = 70, STAMINA = 10, BLEED = 50) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT dynamic_hair_suffix = "" dynamic_fhair_suffix = "" @@ -38,7 +38,7 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/flashlight, /obj/item/tank/internals) slowdown = 1 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 50, FIRE = 80, ACID = 70, STAMINA = 10) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 50, FIRE = 80, ACID = 70, STAMINA = 10, BLEED = 50) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index 1d2a6df1be4db..e15ddf4ad1a74 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -4,7 +4,7 @@ icon_state = "chronohelmet" item_state = "chronohelmet" slowdown = 1 - armor = list(MELEE = 60, BULLET = 60, LASER = 60, ENERGY = 60, BOMB = 30, BIO = 90, RAD = 90, FIRE = 100, ACID = 100, STAMINA = 70) + armor = list(MELEE = 60, BULLET = 60, LASER = 60, ENERGY = 60, BOMB = 30, BIO = 90, RAD = 90, FIRE = 100, ACID = 100, STAMINA = 70, BLEED = 80) resistance_flags = FIRE_PROOF | ACID_PROOF var/obj/item/clothing/suit/space/chronos/suit @@ -24,7 +24,7 @@ icon_state = "chronosuit" item_state = "chronosuit" actions_types = list(/datum/action/item_action/toggle) - armor = list(MELEE = 60, BULLET = 60, LASER = 60, ENERGY = 60, BOMB = 30, BIO = 90, RAD = 90, FIRE = 100, ACID = 1000, STAMINA = 70) + armor = list(MELEE = 60, BULLET = 60, LASER = 60, ENERGY = 60, BOMB = 30, BIO = 90, RAD = 90, FIRE = 100, ACID = 1000, STAMINA = 70, BLEED = 80) resistance_flags = FIRE_PROOF | ACID_PROOF var/list/chronosafe_items = list(/obj/item/chrono_eraser, /obj/item/gun/energy/chrono_gun) var/obj/item/clothing/head/helmet/space/chronos/helmet diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 100f5a28e4450..0b5843e948e0b 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -7,7 +7,7 @@ icon_state = "hardsuit0-engineering" item_state = "eng_helm" max_integrity = 300 - armor = list(MELEE = 10, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 10, BIO = 100, RAD = 75, FIRE = 50, ACID = 75, STAMINA = 20) + armor = list(MELEE = 10, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 10, BIO = 100, RAD = 75, FIRE = 50, ACID = 75, STAMINA = 20, BLEED = 70) light_system = MOVABLE_LIGHT light_range = 4 light_power = 1 @@ -133,7 +133,7 @@ icon_state = "hardsuit-engineering" item_state = "eng_hardsuit" max_integrity = 300 - armor = list(MELEE = 10, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 10, BIO = 100, RAD = 75, FIRE = 50, ACID = 75, STAMINA = 20) + armor = list(MELEE = 10, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 10, BIO = 100, RAD = 75, FIRE = 50, ACID = 75, STAMINA = 20, BLEED = 70) allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser) siemens_coefficient = 0 var/obj/item/clothing/head/helmet/space/hardsuit/helmet @@ -242,7 +242,7 @@ desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding." icon_state = "hardsuit0-engineering" item_state = "eng_helm" - armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 12, BOMB = 10, BIO = 100, RAD = 75, FIRE = 100, ACID = 75, STAMINA = 20) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 12, BOMB = 10, BIO = 100, RAD = 75, FIRE = 100, ACID = 75, STAMINA = 20, BLEED = 70) hardsuit_type = "engineering" resistance_flags = FIRE_PROOF @@ -251,7 +251,7 @@ desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding." icon_state = "hardsuit-engineering" item_state = "eng_hardsuit" - armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 10, BIO = 100, RAD = 75, FIRE = 100, ACID = 75, STAMINA = 20) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 10, BIO = 100, RAD = 75, FIRE = 100, ACID = 75, STAMINA = 20, BLEED = 70) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine resistance_flags = FIRE_PROOF @@ -262,7 +262,7 @@ icon_state = "hardsuit0-atmospherics" item_state = "atmo_helm" hardsuit_type = "atmospherics" - armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 10, BIO = 100, RAD = 25, FIRE = 100, ACID = 75, STAMINA = 20) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 10, BIO = 100, RAD = 25, FIRE = 100, ACID = 75, STAMINA = 20, BLEED = 70) heat_protection = HEAD //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT @@ -271,7 +271,7 @@ desc = "A special suit that protects against hazardous, low pressure environments. Has thermal shielding." icon_state = "hardsuit-atmospherics" item_state = "atmo_hardsuit" - armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 10, BIO = 100, RAD = 25, FIRE = 100, ACID = 75, STAMINA = 20) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 10, BIO = 100, RAD = 25, FIRE = 100, ACID = 75, STAMINA = 20, BLEED = 70) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/atmos @@ -284,7 +284,7 @@ icon_state = "hardsuit0-white" item_state = "ce_helm" hardsuit_type = "white" - armor = list(MELEE = 40, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 90, STAMINA = 30) + armor = list(MELEE = 40, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 90, STAMINA = 30, BLEED = 70) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT @@ -293,7 +293,7 @@ name = "advanced hardsuit" desc = "An advanced suit that protects against hazardous, low pressure environments. Shines with a high polish." item_state = "ce_hardsuit" - armor = list(MELEE = 40, BULLET = 5, LASER = 10, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 90, STAMINA = 30) + armor = list(MELEE = 40, BULLET = 5, LASER = 10, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 90, STAMINA = 30, BLEED = 70) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/elite @@ -309,7 +309,7 @@ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF heat_protection = HEAD - armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 75, STAMINA = 40) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 75, STAMINA = 40, BLEED = 70) light_range = 7 allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator) high_pressure_multiplier = 0.6 @@ -326,7 +326,7 @@ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF supports_variations = DIGITIGRADE_VARIATION - armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 75, STAMINA = 40) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 75, STAMINA = 40, BLEED = 70) allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -344,7 +344,7 @@ item_state = "death_commando_mask" hardsuit_type = "exploration" heat_protection = HEAD - armor = list(MELEE = 35, BULLET = 15, LASER = 20, ENERGY = 10, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 75, STAMINA = 20) + armor = list(MELEE = 35, BULLET = 15, LASER = 20, ENERGY = 10, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 75, STAMINA = 20, BLEED = 70) light_range = 6 allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator) actions_types = list( @@ -369,7 +369,7 @@ desc = "An advanced space-proof hardsuit designed to protect against off-station threats. Despite looking remarkably similar to the mining hardsuit \ Nanotrasen officials note that it is unique in every way and the design has not been copied in any way." item_state = "exploration_hardsuit" - armor = list(MELEE = 35, BULLET = 15, LASER = 20, ENERGY = 10, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 75, STAMINA = 20) + armor = list(MELEE = 35, BULLET = 15, LASER = 20, ENERGY = 10, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 75, STAMINA = 20, BLEED = 70) allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/exploration heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -386,7 +386,7 @@ icon_state = "hardsuit0-cybersun" item_state = "death_commando_mask" hardsuit_type = "cybersun" - armor = list(MELEE = 30, BULLET = 35, LASER = 15, ENERGY = 15, BOMB = 60, BIO = 100, RAD = 55, FIRE = 30, ACID = 60, STAMINA = 15) + armor = list(MELEE = 30, BULLET = 35, LASER = 15, ENERGY = 15, BOMB = 60, BIO = 100, RAD = 55, FIRE = 30, ACID = 60, STAMINA = 15, BLEED = 70) strip_delay = 600 /obj/item/clothing/suit/space/hardsuit/cybersun @@ -395,7 +395,7 @@ desc = "A bulky, protective suit designed to protect against the perils facing Cybersun Employed Engineers, Researchers, and more as they head from the safety of \ more stable employment to the dangers of Nanotrasen Controlled Deep Space. Designed to get the job done despite on-site hazards in derelicts, laser armor was \ sacrificed in favor of more effective blunt armor plates and radiation shielding." - armor = list(MELEE = 30, BULLET = 35, LASER = 15, ENERGY = 15, BOMB = 60, BIO = 100, RAD = 55, FIRE = 30, ACID = 60, STAMINA = 15) + armor = list(MELEE = 30, BULLET = 35, LASER = 15, ENERGY = 15, BOMB = 60, BIO = 100, RAD = 55, FIRE = 30, ACID = 60, STAMINA = 15, BLEED = 70) hardsuit_type = "cybersun" item_state = "death_commando_mask" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/cybersun @@ -409,7 +409,7 @@ icon_state = "hardsuit1-syndi" item_state = "syndie_helm" hardsuit_type = "syndi" - armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 55, BOMB = 35, BIO = 100, RAD = 50, FIRE = 50, ACID = 90, STAMINA = 60) + armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 55, BOMB = 35, BIO = 100, RAD = 50, FIRE = 50, ACID = 90, STAMINA = 60, BLEED = 70) on = TRUE var/obj/item/clothing/suit/space/hardsuit/syndi/linkedsuit = null actions_types = list(/datum/action/item_action/toggle_helmet_mode,\ @@ -498,7 +498,7 @@ hardsuit_type = "syndi" w_class = WEIGHT_CLASS_NORMAL supports_variations = DIGITIGRADE_VARIATION - armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 55, BOMB = 35, BIO = 100, RAD = 50, FIRE = 50, ACID = 90, STAMINA = 60) + armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 55, BOMB = 35, BIO = 100, RAD = 50, FIRE = 50, ACID = 90, STAMINA = 60, BLEED = 70) allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi jetpack = /obj/item/tank/jetpack/suit @@ -562,7 +562,7 @@ alt_desc = "An elite version of the syndicate helmet, with improved armour and fireproofing. It is in combat mode. Property of Gorlex Marauders." icon_state = "hardsuit0-syndielite" hardsuit_type = "syndielite" - armor = list(MELEE = 60, BULLET = 60, LASER = 50, ENERGY = 80, BOMB = 55, BIO = 100, RAD = 70, FIRE = 100, ACID = 100, STAMINA = 80) + armor = list(MELEE = 60, BULLET = 60, LASER = 50, ENERGY = 80, BOMB = 55, BIO = 100, RAD = 70, FIRE = 100, ACID = 100, STAMINA = 80, BLEED = 70) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -574,7 +574,7 @@ icon_state = "hardsuit0-syndielite" hardsuit_type = "syndielite" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite - armor = list(MELEE = 60, BULLET = 60, LASER = 50, ENERGY = 80, BOMB = 55, BIO = 100, RAD = 70, FIRE = 100, ACID = 100, STAMINA = 80) + armor = list(MELEE = 60, BULLET = 60, LASER = 50, ENERGY = 80, BOMB = 55, BIO = 100, RAD = 70, FIRE = 100, ACID = 100, STAMINA = 80, BLEED = 70) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -609,7 +609,7 @@ item_state = "wiz_helm" hardsuit_type = "wiz" resistance_flags = FIRE_PROOF | ACID_PROOF //No longer shall our kind be foiled by lone chemists with spray bottles! - armor = list(MELEE = 40, BULLET = 40, LASER = 40, ENERGY = 50, BOMB = 35, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 70) + armor = list(MELEE = 40, BULLET = 40, LASER = 40, ENERGY = 50, BOMB = 35, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 70, BLEED = 70) heat_protection = HEAD //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT @@ -620,7 +620,7 @@ item_state = "wiz_hardsuit" w_class = WEIGHT_CLASS_NORMAL resistance_flags = FIRE_PROOF | ACID_PROOF - armor = list(MELEE = 40, BULLET = 40, LASER = 40, ENERGY = 50, BOMB = 35, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 70) + armor = list(MELEE = 40, BULLET = 40, LASER = 40, ENERGY = 50, BOMB = 35, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 70, BLEED = 70) allowed = list(/obj/item/teleportation_scroll, /obj/item/tank/internals) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT @@ -642,7 +642,7 @@ item_state = "medical_helm" hardsuit_type = "medical" flash_protect = 0 - armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 10, BIO = 100, RAD = 60, FIRE = 60, ACID = 75, STAMINA = 20) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 10, BIO = 100, RAD = 60, FIRE = 60, ACID = 75, STAMINA = 20, BLEED = 70) clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT | SCAN_REAGENTS | HEADINTERNALS /obj/item/clothing/suit/space/hardsuit/medical @@ -652,7 +652,7 @@ item_state = "medical_hardsuit" supports_variations = DIGITIGRADE_VARIATION allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/firstaid, /obj/item/healthanalyzer, /obj/item/stack/medical) - armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 10, BIO = 100, RAD = 60, FIRE = 60, ACID = 75, STAMINA = 20) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 10, BIO = 100, RAD = 60, FIRE = 60, ACID = 75, STAMINA = 20, BLEED = 70) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/medical slowdown = 0.5 @@ -673,7 +673,7 @@ hardsuit_type = "rd" resistance_flags = ACID_PROOF | FIRE_PROOF max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT - armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 100, BIO = 100, RAD = 60, FIRE = 60, ACID = 80, STAMINA = 30) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 100, BIO = 100, RAD = 60, FIRE = 60, ACID = 80, STAMINA = 30, BLEED = 70) var/obj/machinery/doppler_array/integrated/bomb_radar clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT | SCAN_REAGENTS | HEADINTERNALS actions_types = list(/datum/action/item_action/toggle_helmet_light, /datum/action/item_action/toggle_research_scanner) @@ -704,7 +704,7 @@ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT //Same as an emergency firesuit. Not ideal for extended exposure. allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/gun/energy/wormhole_projector, /obj/item/hand_tele, /obj/item/aicard) - armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 100, BIO = 100, RAD = 60, FIRE = 60, ACID = 80, STAMINA = 30) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 100, BIO = 100, RAD = 60, FIRE = 60, ACID = 80, STAMINA = 30, BLEED = 70) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/rd /obj/item/clothing/suit/space/hardsuit/research_director/ComponentInitialize() @@ -718,7 +718,7 @@ icon_state = "hardsuit0-sec" item_state = "sec_helm" hardsuit_type = "sec" - armor = list(MELEE = 35, BULLET = 35, LASER = 30, ENERGY = 50, BOMB = 40, BIO = 100, RAD = 50, FIRE = 75, ACID = 75, STAMINA = 50) + armor = list(MELEE = 35, BULLET = 35, LASER = 30, ENERGY = 50, BOMB = 40, BIO = 100, RAD = 50, FIRE = 75, ACID = 75, STAMINA = 50, BLEED = 70) /obj/item/clothing/suit/space/hardsuit/security @@ -727,7 +727,7 @@ desc = "A bulky, armored suit designed to protect security personnel in low pressure environments." item_state = "sec_hardsuit" supports_variations = DIGITIGRADE_VARIATION - armor = list(MELEE = 35, BULLET = 35, LASER = 30, ENERGY = 50, BOMB = 40, BIO = 100, RAD = 50, FIRE = 75, ACID = 75, STAMINA = 50) + armor = list(MELEE = 35, BULLET = 35, LASER = 30, ENERGY = 50, BOMB = 40, BIO = 100, RAD = 50, FIRE = 75, ACID = 75, STAMINA = 50, BLEED = 70) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security /obj/item/clothing/suit/space/hardsuit/security/Initialize(mapload) @@ -740,7 +740,7 @@ desc = "A bulky, armored helmet designed to protect security personnel in low pressure environments. This one has markings for the head of security." icon_state = "hardsuit0-hos" hardsuit_type = "hos" - armor = list(MELEE = 35, BULLET = 35, LASER = 30, ENERGY = 50, BOMB = 40, BIO = 100, RAD = 50, FIRE = 75, ACID = 75, STAMINA = 50) + armor = list(MELEE = 35, BULLET = 35, LASER = 30, ENERGY = 50, BOMB = 40, BIO = 100, RAD = 50, FIRE = 75, ACID = 75, STAMINA = 50, BLEED = 70) /obj/item/clothing/suit/space/hardsuit/security/head_of_security @@ -748,7 +748,7 @@ name = "head of security's hardsuit" supports_variations = DIGITIGRADE_VARIATION desc = "A bulky, armored suit designed to protect security personnel in low pressure environments. This one has markings for the head of security." - armor = list(MELEE = 35, BULLET = 35, LASER = 30, ENERGY = 50, BOMB = 40, BIO = 100, RAD = 50, FIRE = 75, ACID = 75, STAMINA = 50) + armor = list(MELEE = 35, BULLET = 35, LASER = 30, ENERGY = 50, BOMB = 40, BIO = 100, RAD = 50, FIRE = 75, ACID = 75, STAMINA = 50, BLEED = 70) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/hos jetpack = /obj/item/tank/jetpack/suit @@ -758,7 +758,7 @@ icon_state = "swat2helm" item_state = "swat2helm" desc = "A tactical SWAT helmet MK.II." - armor = list(MELEE = 40, BULLET = 50, LASER = 50, ENERGY = 60, BOMB = 50, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 60) + armor = list(MELEE = 40, BULLET = 50, LASER = 50, ENERGY = 60, BOMB = 50, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 60, BLEED = 70) resistance_flags = FIRE_PROOF | ACID_PROOF flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT heat_protection = HEAD @@ -772,7 +772,7 @@ desc = "A MK.II SWAT suit with streamlined joints and armor made out of superior materials, insulated against intense heat. The most advanced tactical armor available." icon_state = "swat2" item_state = "swat2" - armor = list(MELEE = 40, BULLET = 50, LASER = 50, ENERGY = 60, BOMB = 50, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 60) + armor = list(MELEE = 40, BULLET = 50, LASER = 50, ENERGY = 60, BOMB = 50, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 60, BLEED = 70) resistance_flags = FIRE_PROOF | ACID_PROOF heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT //this needed to be added a long fucking time ago @@ -802,7 +802,7 @@ desc = "A special helmet designed for work in a hazardous, low-humor environment. Has radiation shielding." icon_state = "hardsuit0-clown" item_state = "hardsuit0-clown" - armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 75, FIRE = 60, ACID = 30, STAMINA = 20) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 75, FIRE = 60, ACID = 30, STAMINA = 20, BLEED = 70) hardsuit_type = "clown" /obj/item/clothing/suit/space/hardsuit/clown @@ -810,7 +810,7 @@ desc = "A special suit that protects against hazardous, low humor environments. Has radiation shielding. Only a true clown can wear it." icon_state = "hardsuit-clown" item_state = "clown_hardsuit" - armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 75, FIRE = 60, ACID = 30, STAMINA = 20) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 75, FIRE = 60, ACID = 30, STAMINA = 20, BLEED = 70) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/clown /obj/item/clothing/suit/space/hardsuit/clown/mob_can_equip(mob/M, mob/living/equipper, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE) @@ -828,7 +828,7 @@ desc = "Early prototype RIG hardsuit helmet, designed to quickly shift over a user's head. Design constraints of the helmet mean it has no inbuilt cameras, thus it restricts the users visability." icon_state = "hardsuit0-ancient" item_state = "anc_helm" - armor = list(MELEE = 30, BULLET = 5, LASER = 5, ENERGY = 10, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 75, STAMINA = 30) + armor = list(MELEE = 30, BULLET = 5, LASER = 5, ENERGY = 10, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 75, STAMINA = 30, BLEED = 70) allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/gun/energy/plasmacutter, /obj/item/gun/energy/plasmacutter/adv, /obj/item/gun/energy/laser/retro, /obj/item/gun/energy/laser/retro/old, /obj/item/gun/energy/e_gun/old) hardsuit_type = "ancient" resistance_flags = FIRE_PROOF @@ -838,7 +838,7 @@ desc = "Prototype powered RIG hardsuit. Provides excellent protection from the elements of space while being comfortable to move around in, thanks to the powered locomotives. Remains very bulky however." icon_state = "hardsuit-ancient" item_state = "anc_hardsuit" - armor = list(MELEE = 30, BULLET = 5, LASER = 5, ENERGY = 10, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 75, STAMINA = 30) + armor = list(MELEE = 30, BULLET = 5, LASER = 5, ENERGY = 10, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 75, STAMINA = 30, BLEED = 70) allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/gun/energy/laser/retro, /obj/item/gun/energy/laser/retro/old, /obj/item/gun/energy/e_gun/old) slowdown = 3 helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ancient @@ -854,7 +854,7 @@ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/hos allowed = null supports_variations = DIGITIGRADE_VARIATION - armor = list(MELEE = 30, BULLET = 15, LASER = 30, ENERGY = 40, BOMB = 10, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 60) + armor = list(MELEE = 30, BULLET = 15, LASER = 30, ENERGY = 40, BOMB = 10, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 60, BLEED = 70) resistance_flags = FIRE_PROOF | ACID_PROOF /// How many charges total the shielding has var/max_charges = 3 @@ -887,7 +887,7 @@ hardsuit_type = "ert_medical" // Adding TRAIT_NODROP is done when the CTF spawner equips people helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf - armor = list(MELEE = 0, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 50, BIO = 100, RAD = 100, FIRE = 95, ACID = 95, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 50, BIO = 100, RAD = 100, FIRE = 95, ACID = 95, STAMINA = 0, BLEED = 0) slowdown = 0 max_charges = 5 @@ -914,7 +914,7 @@ icon_state = "hardsuit0-ert_medical" item_state = "hardsuit0-ert_medical" hardsuit_type = "ert_medical" - armor = list(MELEE = 0, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 50, BIO = 100, RAD = 100, FIRE = 95, ACID = 95, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 50, BIO = 100, RAD = 100, FIRE = 95, ACID = 95, STAMINA = 0, BLEED = 0) /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/red @@ -941,7 +941,7 @@ icon_state = "hardsuit1-syndi" item_state = "syndie_hardsuit" hardsuit_type = "syndi" - armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 40, BOMB = 35, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 60) + armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 40, BOMB = 35, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 60, BLEED = 70) allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi slowdown = 0 @@ -974,7 +974,7 @@ icon_state = "hardsuit1-syndi" item_state = "syndie_helm" hardsuit_type = "syndi" - armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 40, BOMB = 35, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 60) + armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 40, BOMB = 35, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 60, BLEED = 70) actions_types = list(/datum/action/item_action/toggle_helmet_light,\ /datum/action/item_action/toggle_beacon_hud) @@ -1004,7 +1004,7 @@ hardsuit_type = "syndi" max_charges = 4 recharge_delay = 1.5 SECONDS - armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY =60, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY =60, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100, BLEED = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT jetpack = /obj/item/tank/jetpack/suit @@ -1017,7 +1017,7 @@ icon_state = "deathsquad" item_state = "deathsquad" hardsuit_type = "syndi" - armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100, BLEED = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT actions_types = list() @@ -1046,7 +1046,7 @@ item_state = "doomguy" max_charges = 1 recharge_delay = 100 - armor = list(MELEE = 135, BULLET = 135, LASER = 135, ENERGY = 135, BOMB = 135, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100) + armor = list(MELEE = 135, BULLET = 135, LASER = 135, ENERGY = 135, BOMB = 135, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100, BLEED = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF | LAVA_PROOF @@ -1058,7 +1058,7 @@ desc = "A dusty old helmet, somehow capable of resisting the strongest of blows." icon_state = "doomguy" item_state = "doomguy" - armor = list(MELEE = 135, BULLET = 135, LASER = 135, ENERGY = 135, BOMB = 135, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100) + armor = list(MELEE = 135, BULLET = 135, LASER = 135, ENERGY = 135, BOMB = 135, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100, BLEED = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT actions_types = list() diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 5b0ff8e0f79cc..6d17f4c639af0 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -22,7 +22,7 @@ Contains: desc = "An advanced tactical space helmet." icon_state = "deathsquad" item_state = "deathsquad" - armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100, BLEED = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -37,7 +37,7 @@ Contains: icon_state = "deathsquad" item_state = "swat_suit" allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/knife/combat) - armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100, BLEED = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -55,7 +55,7 @@ Contains: dynamic_hair_suffix = "+generic" dynamic_fhair_suffix = "+generic" flags_inv = 0 - armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100, BLEED = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -74,7 +74,7 @@ Contains: flags_inv = 0 w_class = WEIGHT_CLASS_NORMAL allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100, BLEED = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -115,7 +115,7 @@ Contains: worn_icon = 'icons/mob/clothing/head/costume.dmi' icon_state = "pirate" item_state = "pirate" - armor = list(MELEE = 30, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75, STAMINA = 20) + armor = list(MELEE = 30, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75, STAMINA = 20, BLEED = 20) flags_inv = HIDEHAIR strip_delay = 40 equip_delay_other = 20 @@ -137,7 +137,7 @@ Contains: flags_inv = 0 allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/transforming/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/food/drinks/bottle/rum) slowdown = 0 - armor = list(MELEE = 30, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75, STAMINA = 20) + armor = list(MELEE = 30, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75, STAMINA = 20, BLEED = 20) strip_delay = 40 equip_delay_other = 20 @@ -147,7 +147,7 @@ Contains: desc = "The integrated helmet of an ERT hardsuit, this one has blue highlights." icon_state = "hardsuit0-ert_commander" item_state = "hardsuit0-ert_commander" - armor = list(MELEE = 65, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 80, STAMINA = 70) + armor = list(MELEE = 65, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 80, STAMINA = 70, BLEED = 70) strip_delay = 130 light_range = 7 resistance_flags = FIRE_PROOF @@ -185,7 +185,7 @@ Contains: item_state = "ert_command" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - armor = list(MELEE = 65, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 80, STAMINA = 70) + armor = list(MELEE = 65, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 80, STAMINA = 70, BLEED = 70) slowdown = 0 strip_delay = 130 resistance_flags = FIRE_PROOF @@ -279,7 +279,7 @@ Contains: icon_state = "space" item_state = "eva_suit" desc = "A lightweight space suit with the basic ability to protect the wearer from the vacuum of space during emergencies." - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 20, FIRE = 50, ACID = 65, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 20, FIRE = 50, ACID = 65, STAMINA = 0, BLEED = 0, BLEED = 30) /obj/item/clothing/head/helmet/space/eva name = "EVA helmet" @@ -287,7 +287,7 @@ Contains: item_state = "eva_helmet" desc = "A lightweight space helmet with the basic ability to protect the wearer from the vacuum of space during emergencies." flash_protect = 0 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 20, FIRE = 50, ACID = 65, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 20, FIRE = 50, ACID = 65, STAMINA = 0, BLEED = 0, BLEED = 30) /obj/item/clothing/head/helmet/space/freedom name = "eagle helmet" @@ -296,7 +296,7 @@ Contains: worn_icon = 'icons/mob/clothing/head/costume.dmi' icon_state = "griffinhat" item_state = null - armor = list(MELEE = 20, BULLET = 40, LASER = 30, ENERGY = 25, BOMB = 100, BIO = 100, RAD = 100, FIRE = 80, ACID = 80, STAMINA = 10) + armor = list(MELEE = 20, BULLET = 40, LASER = 30, ENERGY = 25, BOMB = 100, BIO = 100, RAD = 100, FIRE = 80, ACID = 80, STAMINA = 10, BLEED = 30) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = ACID_PROOF | FIRE_PROOF @@ -307,7 +307,7 @@ Contains: icon_state = "freedom" item_state = "freedom" allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - armor = list(MELEE = 20, BULLET = 40, LASER = 30, ENERGY = 25, BOMB = 100, BIO = 100, RAD = 100, FIRE = 80, ACID = 80, STAMINA = 10) + armor = list(MELEE = 20, BULLET = 40, LASER = 30, ENERGY = 25, BOMB = 100, BIO = 100, RAD = 100, FIRE = 80, ACID = 80, STAMINA = 10, BLEED = 30) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = ACID_PROOF | FIRE_PROOF @@ -388,7 +388,7 @@ Contains: desc = "A bulky, air-tight helmet meant to protect the user during emergency situations. It doesn't look very durable." icon_state = "syndicate-helm-orange" item_state = "syndicate-helm-orange" - armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 10, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 10, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 5) strip_delay = 65 flash_protect = 0 @@ -399,7 +399,7 @@ Contains: icon_state = "syndicate-orange" item_state = "syndicate-orange" slowdown = 2 - armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 10, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 10, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 5) strip_delay = 65 w_class = WEIGHT_CLASS_NORMAL @@ -419,7 +419,7 @@ Contains: icon_state = "hunter" item_state = "swat_suit" allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/knife/combat) - armor = list(melee = 60, bullet = 40, laser = 40, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100, stamina = 70) + armor = list(melee = 60, bullet = 40, laser = 40, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100, stamina = 70, BLEED = 70) strip_delay = 130 resistance_flags = FIRE_PROOF | ACID_PROOF @@ -432,7 +432,7 @@ Contains: max_integrity = 200 desc = "An airtight helmet meant to protect the wearer during emergency situations." permeability_coefficient = 0.01 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 20, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 20, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 10) min_cold_protection_temperature = EMERGENCY_HELM_MIN_TEMP_PROTECT heat_protection = NONE flash_protect = 0 @@ -461,7 +461,7 @@ Contains: species_restricted = null gas_transfer_coefficient = 0.5 permeability_coefficient = 0.5 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 10) allowed = list(/obj/item/flashlight, /obj/item/tank/internals) min_cold_protection_temperature = EMERGENCY_SUIT_MIN_TEMP_PROTECT heat_protection = NONE @@ -477,4 +477,4 @@ Contains: icon_state = "hunter" item_state = "hunter" resistance_flags = FIRE_PROOF | ACID_PROOF - armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 20) + armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 20, BLEED = 40) diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index f48881e11cde0..cbb70b6fb407a 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -5,7 +5,7 @@ name = "EVA plasma envirosuit" desc = "A special plasma containment suit designed to be space-worthy, as well as worn over other clothing. Like its smaller counterpart, it can automatically extinguish the wearer in a crisis, and holds twice as many charges." allowed = list(/obj/item/gun, /obj/item/ammo_casing, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword, /obj/item/restraints/handcuffs, /obj/item/tank) - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 100, ACID = 75, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 100, ACID = 75, STAMINA = 0, BLEED = 10) resistance_flags = FIRE_PROOF icon_state = "plasmaman_suit" item_state = "plasmaman_suit" @@ -51,7 +51,7 @@ strip_delay = 80 flash_protect = 2 tint = 2 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 100, ACID = 75, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 100, ACID = 75, STAMINA = 0, BLEED = 10) resistance_flags = FIRE_PROOF light_system = MOVABLE_LIGHT light_range = 4 @@ -244,7 +244,7 @@ name = "security envirosuit helmet" desc = "A plasmaman containment helmet designed for security officers, protecting them from burning alive, along-side other undesirables." greyscale_colors = "#9F2A2E#2D2D2D#7D282D" - armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 100, ACID = 75, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 100, ACID = 75, STAMINA = 10, BLEED = 10) /obj/item/clothing/head/helmet/space/plasmaman/security/warden name = "warden's envirosuit helmet" @@ -295,7 +295,7 @@ name = "engineering envirosuit helmet" desc = "A space-worthy helmet specially designed for engineer plasmamen, the usual purple stripes being replaced by engineering's orange." greyscale_colors = "#F0DE00#D75600#F0DE00" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 10, FIRE = 100, ACID = 75, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 10, FIRE = 100, ACID = 75, STAMINA = 0, BLEED = 10) max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT /obj/item/clothing/head/helmet/space/plasmaman/engineering/atmospherics @@ -461,7 +461,7 @@ name = "security Mk.II envirosuit helmet" desc = "A stylish new iteration upon the original plasmaman containment helmet design for security officers, retaining all the old protections for a new era of fragile law enforcement." greyscale_colors = "#9F2A2E#2D2D2D" - armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 100, ACID = 75, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 100, ACID = 75, STAMINA = 10, BLEED = 10) /obj/item/clothing/head/helmet/space/plasmaman/mark2/security/warden name = "warden's Mk.II envirosuit helmet" @@ -512,7 +512,7 @@ name = "engineering Mk.II envirosuit helmet" desc = "A new iteration upon the classic space-worthy design, painted in classic engineering pigments." greyscale_colors = "#E8D700#D75600" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 10, FIRE = 100, ACID = 75, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 10, FIRE = 100, ACID = 75, STAMINA = 0, BLEED = 10) max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT /obj/item/clothing/head/helmet/space/plasmaman/mark2/engineering/atmospherics @@ -713,7 +713,7 @@ name = "engineering protective envirosuit helmet" desc = "A safer looking re-imagining of the classic space-worthy design, painted in classic engineering pigments." greyscale_colors = "#E8D700#D75600" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 10, FIRE = 100, ACID = 75, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 10, FIRE = 100, ACID = 75, STAMINA = 0, BLEED = 10) max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT /obj/item/clothing/head/helmet/space/plasmaman/protective/engineering/atmospherics diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index 38f43419aaa22..4124a4c74e964 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -4,7 +4,7 @@ icon_state = "syndicate" item_state = "syndicate" desc = "Has a tag on it: Totally not property of an enemy corporation, honest!" - armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 80, ACID = 85, STAMINA = 50) + armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 80, ACID = 85, STAMINA = 50, BLEED = 40) /obj/item/clothing/suit/space/syndicate name = "red space suit" @@ -13,7 +13,7 @@ desc = "Has a tag on it: Totally not property of an enemy corporation, honest!" w_class = WEIGHT_CLASS_NORMAL allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 80, ACID = 85, STAMINA = 50) + armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 40, BOMB = 30, BIO = 30, RAD = 30, FIRE = 80, ACID = 85, STAMINA = 50, BLEED = 40) //Green syndicate space suit diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm index c5e44eed3df98..cedfcb6216b46 100644 --- a/code/modules/clothing/suits/_suits.dm +++ b/code/modules/clothing/suits/_suits.dm @@ -10,7 +10,7 @@ /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman ) - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 5) slot_flags = ITEM_SLOT_OCLOTHING var/blood_overlay_type = "suit" var/move_sound = null diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 6360f050b52ae..cd7a215162672 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -11,7 +11,7 @@ equip_delay_other = 40 max_integrity = 250 resistance_flags = NONE - armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 30) + armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 30, BLEED = 50) clothing_flags = THICKMATERIAL slowdown = 0.08 @@ -53,7 +53,7 @@ icon_state = "secjacket" item_state = "secjacket" body_parts_covered = CHEST|ARMS - armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 35, BOMB = 20, BIO = 0, RAD = 0, FIRE = 45, ACID = 45, STAMINA = 30) + armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 35, BOMB = 20, BIO = 0, RAD = 0, FIRE = 45, ACID = 45, STAMINA = 30, BLEED = 20) /obj/item/clothing/suit/armor/hos name = "armored greatcoat" @@ -61,7 +61,7 @@ icon_state = "hos" item_state = "greatcoat" body_parts_covered = CHEST|GROIN|ARMS|LEGS - armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 25, BIO = 0, RAD = 0, FIRE = 70, ACID = 90, STAMINA = 40) + armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 40, BOMB = 25, BIO = 0, RAD = 0, FIRE = 70, ACID = 90, STAMINA = 40, BLEED = 40) cold_protection = CHEST|GROIN|LEGS|ARMS heat_protection = CHEST|GROIN|LEGS|ARMS strip_delay = 80 @@ -112,7 +112,7 @@ icon_state = "capcarapace" item_state = "armor" body_parts_covered = CHEST|GROIN - armor = list(MELEE = 50, BULLET = 40, LASER = 50, ENERGY = 60, BOMB = 25, BIO = 0, RAD = 0, FIRE = 100, ACID = 90, STAMINA = 40) + armor = list(MELEE = 50, BULLET = 40, LASER = 50, ENERGY = 60, BOMB = 25, BIO = 0, RAD = 0, FIRE = 100, ACID = 90, STAMINA = 40, BLEED = 60) dog_fashion = null resistance_flags = FIRE_PROOF @@ -134,7 +134,7 @@ icon_state = "capjacket" item_state = null body_parts_covered = CHEST|ARMS - armor = list(MELEE = 40, BULLET = 30, LASER = 40, ENERGY = 50, BOMB = 55, BIO = 0, RAD = 0, FIRE = 90, ACID = 80, STAMINA = 40) + armor = list(MELEE = 40, BULLET = 30, LASER = 40, ENERGY = 50, BOMB = 55, BIO = 0, RAD = 0, FIRE = 90, ACID = 80, STAMINA = 40, BLEED = 30) /obj/item/clothing/suit/armor/riot name = "riot suit" @@ -144,7 +144,7 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, STAMINA = 50) + armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, STAMINA = 50, BLEED = 70) blocks_shove_knockdown = TRUE strip_delay = 80 equip_delay_other = 60 @@ -157,7 +157,7 @@ icon_state = "bonearmor" item_state = "bonearmor" blood_overlay_type = "armor" - armor = list(MELEE = 35, BULLET = 25, LASER = 25, ENERGY = 30, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 20) + armor = list(MELEE = 35, BULLET = 25, LASER = 25, ENERGY = 30, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 20, BLEED = 50) body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS slowdown = 0.1 @@ -167,7 +167,7 @@ icon_state = "bulletproof" item_state = "armor" blood_overlay_type = "armor" - armor = list(MELEE = 15, BULLET = 60, LASER = 10, ENERGY = 10, BOMB = 40, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 40) + armor = list(MELEE = 15, BULLET = 60, LASER = 10, ENERGY = 10, BOMB = 40, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 40, BLEED = 60) strip_delay = 70 equip_delay_other = 50 @@ -177,7 +177,7 @@ icon_state = "armor_reflec" item_state = "armor_reflec" blood_overlay_type = "armor" - armor = list(MELEE = 10, BULLET = 10, LASER = 60, ENERGY = 80, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 40) + armor = list(MELEE = 10, BULLET = 10, LASER = 60, ENERGY = 80, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 40, BLEED = 10) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/hit_reflect_chance = 40 @@ -199,7 +199,6 @@ allowed = GLOB.detective_vest_allowed //All of the armor below is mostly unused - /obj/item/clothing/suit/armor/heavy name = "heavy armor" desc = "A heavily armored suit that protects against moderate damage." @@ -210,7 +209,7 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS slowdown = 3 flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, RAD = 100, FIRE = 90, ACID = 90, STAMINA = 60) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, RAD = 100, FIRE = 90, ACID = 90, STAMINA = 60, BLEED = 70) move_sound = list('sound/effects/suitstep1.ogg', 'sound/effects/suitstep2.ogg') slowdown = 0.3 @@ -219,7 +218,7 @@ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, RAD = 100, FIRE = 90, ACID = 90, STAMINA = 0) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, RAD = 100, FIRE = 90, ACID = 90, STAMINA = 0, BLEED = 0) move_sound = list('sound/effects/suitstep1.ogg', 'sound/effects/suitstep2.ogg') /obj/item/clothing/suit/armor/tdome/red @@ -236,7 +235,7 @@ /obj/item/clothing/suit/armor/tdome/holosuit name = "thunderdome suit" - armor = list(MELEE = 10, BULLET = 10, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 10, BULLET = 10, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0) cold_protection = null heat_protection = null @@ -279,14 +278,14 @@ equip_delay_other = 40 max_integrity = 200 resistance_flags = FLAMMABLE - armor = list(MELEE = 20, BULLET = 40, LASER = 30, ENERGY = 40, BOMB = 15, BIO = 0, RAD = 0, FIRE = 40, ACID = 50, STAMINA = 30) + armor = list(MELEE = 20, BULLET = 40, LASER = 30, ENERGY = 40, BOMB = 15, BIO = 0, RAD = 0, FIRE = 40, ACID = 50, STAMINA = 30, BLEED = 60) /obj/item/clothing/suit/armor/vest/russian name = "russian vest" desc = "A bulletproof vest with forest camo. Good thing there's plenty of forests to hide in around here, right?" icon_state = "rus_armor" item_state = "rus_armor" - armor = list(MELEE = 25, BULLET = 30, LASER = 0, ENERGY = 15, BOMB = 10, BIO = 0, RAD = 20, FIRE = 20, ACID = 50, STAMINA = 25) + armor = list(MELEE = 25, BULLET = 30, LASER = 0, ENERGY = 15, BOMB = 10, BIO = 0, RAD = 20, FIRE = 20, ACID = 50, STAMINA = 25, BLEED = 20) slowdown = 0.05 /obj/item/clothing/suit/armor/vest/russian_coat @@ -297,7 +296,7 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT - armor = list(MELEE = 25, BULLET = 20, LASER = 20, ENERGY = 30, BOMB = 20, BIO = 50, RAD = 20, FIRE = -10, ACID = 50, STAMINA = 30) + armor = list(MELEE = 25, BULLET = 20, LASER = 20, ENERGY = 30, BOMB = 20, BIO = 50, RAD = 20, FIRE = -10, ACID = 50, STAMINA = 30, BLEED = 20) /obj/item/clothing/suit/armor/centcom_formal name = "\improper CentCom formal coat" @@ -305,7 +304,7 @@ icon_state = "centcom_formal" item_state = "centcom" body_parts_covered = CHEST|GROIN|ARMS - armor = list(MELEE = 35, BULLET = 40, LASER = 40, ENERGY = 50, BOMB = 35, BIO = 10, RAD = 10, FIRE = 10, ACID = 60, STAMINA = 40) + armor = list(MELEE = 35, BULLET = 40, LASER = 40, ENERGY = 50, BOMB = 35, BIO = 10, RAD = 10, FIRE = 10, ACID = 60, STAMINA = 40, BLEED = 20) /obj/item/clothing/suit/armor/centcom_formal/Initialize(mapload) . = ..() diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 3dde7ff43b8dc..3c54e15f9bdeb 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -8,7 +8,7 @@ item_state = "bio_hood" permeability_coefficient = 0.01 clothing_flags = THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | SNUG_FIT - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 80, FIRE = 30, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 80, FIRE = 30, ACID = 100, STAMINA = 0, BLEED = 5) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDEFACE|HIDESNOUT resistance_flags = ACID_PROOF flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH @@ -27,7 +27,7 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS slowdown = 1 allowed = list(/obj/item/tank/internals, /obj/item/pen, /obj/item/flashlight/pen, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray) - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 80, FIRE = 30, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 80, FIRE = 30, ACID = 100, STAMINA = 0, BLEED = 5) flags_inv = HIDEGLOVES|HIDEJUMPSUIT strip_delay = 70 equip_delay_other = 70 @@ -53,11 +53,11 @@ //Security biosuit, grey with red stripe across the chest /obj/item/clothing/head/bio_hood/security - armor = list(MELEE = 25, BULLET = 15, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 80, FIRE = 30, ACID = 100, STAMINA = 20) + armor = list(MELEE = 25, BULLET = 15, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 80, FIRE = 30, ACID = 100, STAMINA = 20, BLEED = 10) icon_state = "bio_security" /obj/item/clothing/suit/bio_suit/security - armor = list(MELEE = 25, BULLET = 15, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 80, FIRE = 30, ACID = 100, STAMINA = 20) + armor = list(MELEE = 25, BULLET = 15, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 80, FIRE = 30, ACID = 100, STAMINA = 20, BLEED = 10) icon_state = "bio_security" diff --git a/code/modules/clothing/suits/chaplainsuits.dm b/code/modules/clothing/suits/chaplainsuits.dm index de791187c41ac..5ba05f80d4d4f 100644 --- a/code/modules/clothing/suits/chaplainsuits.dm +++ b/code/modules/clothing/suits/chaplainsuits.dm @@ -130,6 +130,44 @@ slowdown = 0 move_sound = null +/obj/item/clothing/head/helmet/plate/crusader + name = "Crusader's Hood" + desc = "A brownish hood." + icon = 'icons/obj/clothing/head/chaplain.dmi' + worn_icon = 'icons/mob/clothing/head/chaplain.dmi' + icon_state = "crusader" + w_class = WEIGHT_CLASS_NORMAL + flags_inv = HIDEHAIR|HIDEEARS|HIDEFACE + armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 40, BOMB = 60, BIO = 0, RAD = 0, FIRE = 60, ACID = 60, STAMINA = 50, BLEED = 60) + +/obj/item/clothing/head/helmet/plate/crusader/blue + icon_state = "crusader-blue" + item_state = null + +/obj/item/clothing/head/helmet/plate/crusader/red + icon_state = "crusader-red" + item_state = null + +//Prophet helmet +/obj/item/clothing/head/helmet/plate/crusader/prophet + name = "Prophet's Hat" + desc = "A religious-looking hat." + icon_state = null + worn_icon = 'icons/mob/large-worn-icons/64x64/head.dmi' + item_state = null + flags_1 = 0 + armor = list(MELEE = 60, BULLET = 60, LASER = 60, ENERGY = 50, BOMB = 70, BIO = 50, RAD = 50, FIRE = 60, ACID = 60, STAMINA = 60, BLEED = 60) //religion protects you from disease and radiation, honk. + worn_x_dimension = 64 + worn_y_dimension = 64 + +/obj/item/clothing/head/helmet/plate/crusader/prophet/red + icon_state = "prophet-red" + item_state = null + +/obj/item/clothing/head/helmet/plate/crusader/prophet/blue + icon_state = "prophet-blue" + item_state = null + /obj/item/clothing/head/helmet/chaplain/cage name = "cage" desc = "A cage that restrains the will of the self, allowing one to see the profane world for what it is." diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index 4d17d97204bbe..2e2214d96b77f 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -63,7 +63,7 @@ icon_state = "goliath_cloak" desc = "A staunch, practical cape made out of numerous monster materials, it is coveted amongst exiles & hermits." allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/spear, /obj/item/spear/bonespear, /obj/item/organ/regenerative_core/legion, /obj/item/knife/combat/bone, /obj/item/knife/combat/survival) - armor = list(MELEE = 50, BULLET = 10, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 60, ACID = 60, STAMINA = 30) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot + armor = list(MELEE = 50, BULLET = 10, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 60, ACID = 60, STAMINA = 30, BLEED = 20) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath body_parts_covered = CHEST|GROIN|ARMS resistance_flags = FIRE_PROOF @@ -72,7 +72,7 @@ name = "goliath cloak hood" icon_state = "golhood" desc = "A protective & concealing hood." - armor = list(MELEE = 50, BULLET = 10, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 60, ACID = 60, STAMINA = 30) + armor = list(MELEE = 50, BULLET = 10, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 60, ACID = 60, STAMINA = 30, BLEED = 30) flags_inv = HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR transparent_protection = HIDEMASK resistance_flags = FIRE_PROOF @@ -82,7 +82,7 @@ icon_state = "dragon" desc = "A suit of armour fashioned from the remains of an ash drake." allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/spear) - armor = list(MELEE = 70, BULLET = 30, LASER = 50, ENERGY = 40, BOMB = 70, BIO = 60, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 30) + armor = list(MELEE = 70, BULLET = 30, LASER = 50, ENERGY = 40, BOMB = 70, BIO = 60, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 30, BLEED = 50) hoodtype = /obj/item/clothing/head/hooded/cloakhood/drake heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -95,7 +95,7 @@ name = "drake helm" icon_state = "dragon" desc = "The skull of a dragon." - armor = list(MELEE = 70, BULLET = 30, LASER = 50, ENERGY = 40, BOMB = 70, BIO = 60, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 30) + armor = list(MELEE = 70, BULLET = 30, LASER = 50, ENERGY = 40, BOMB = 70, BIO = 60, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 30, BLEED = 50) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -105,7 +105,7 @@ name = "Heavy bone armor" icon_state = "hbonearmor" desc = "A tribal armor plate, crafted from animal bone. A heavier variation of standard bone armor." - armor = list(MELEE = 40, BULLET = 25, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 20) + armor = list(MELEE = 40, BULLET = 25, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 20, BLEED = 70) hoodtype = /obj/item/clothing/head/hooded/cloakhood/bone heat_protection = CHEST|GROIN|LEGS|FEET|ARMS body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS @@ -117,7 +117,7 @@ name = "bone helmet" icon_state = "hskull" desc = "An intimidating tribal helmet, it doesn't look very comfortable." - armor = list(MELEE = 35, BULLET = 25, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 20) + armor = list(MELEE = 35, BULLET = 25, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 20, BLEED = 50) heat_protection = HEAD max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT resistance_flags = NONE diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 1c20f88f186f2..26a9f314d52eb 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -75,7 +75,7 @@ item_state = "det_suit" blood_overlay_type = "coat" body_parts_covered = CHEST|GROIN|ARMS - armor = list(MELEE = 25, BULLET = 10, LASER = 25, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 45, STAMINA = 40) + armor = list(MELEE = 25, BULLET = 10, LASER = 25, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 45, STAMINA = 40, BLEED = 30) cold_protection = CHEST|GROIN|ARMS heat_protection = CHEST|GROIN|ARMS supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON @@ -106,7 +106,7 @@ icon_state = "brig_phys_vest" item_state = "sec_helm"//looks kinda similar, I guess allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/storage/firstaid, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/police/telescopic, /obj/item/soap, /obj/item/sensor_device, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 30) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 30, BLEED = 20) //Engineering /obj/item/clothing/suit/hazardvest @@ -228,7 +228,7 @@ /obj/item/tank/internals, /obj/item/melee/curator_whip ) - armor = list(MELEE = 25, BULLET = 10, LASER = 25, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 45, STAMINA = 30) + armor = list(MELEE = 25, BULLET = 10, LASER = 25, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 45, STAMINA = 30, BLEED = 10) cold_protection = CHEST|ARMS heat_protection = CHEST|ARMS diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index d33ab50e1a761..38daa6ea23bad 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -28,7 +28,7 @@ /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman ) - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 50, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 50, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 0, BLEED = 5) species_exception = list(/datum/species/golem) /obj/item/clothing/suit/toggle/labcoat/cmo @@ -47,7 +47,7 @@ name = "security medic's labcoat" icon_state = "labcoat_sec" item_state = "labcoat_sec" - armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0, fire = 50, acid = 50, stamina = 30) + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0, fire = 50, acid = 50, stamina = 30, BLEED = 10) /obj/item/clothing/suit/toggle/labcoat/mad name = "\proper The Mad's labcoat" diff --git a/code/modules/clothing/suits/reactive_armour.dm b/code/modules/clothing/suits/reactive_armour.dm index e3c17fb717cd5..bfacbf6ee3390 100644 --- a/code/modules/clothing/suits/reactive_armour.dm +++ b/code/modules/clothing/suits/reactive_armour.dm @@ -12,7 +12,8 @@ /obj/effect/anomaly/bioscrambler = /obj/item/clothing/suit/armor/reactive/bioscrambling, /obj/effect/anomaly/flux = /obj/item/clothing/suit/armor/reactive/tesla, /obj/effect/anomaly/grav = /obj/item/clothing/suit/armor/reactive/repulse, - /obj/effect/anomaly/hallucination = /obj/item/clothing/suit/armor/reactive/hallucinating + /obj/effect/anomaly/hallucination = /obj/item/clothing/suit/armor/reactive/hallucinating, + /obj/effect/anomaly/blood = /obj/item/clothing/suit/armor/reactive/bleed ) if(istype(weapon, /obj/item/assembly/signaler/anomaly)) @@ -32,7 +33,7 @@ icon_state = "reactiveoff" item_state = "reactiveoff" blood_overlay_type = "armor" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 10) actions_types = list(/datum/action/item_action/toggle) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF hit_reaction_chance = 50 @@ -390,3 +391,32 @@ owner.visible_message("[src] blocks [attack_text], but pulls a massive charge of biohazard material into [owner] from the surrounding environment!") bioscrambler_pulse(owner, range, TRUE, TRUE) return TRUE + +//Bleeding + +/obj/item/clothing/suit/armor/reactive/bleed + name = "reactive bleed armor" + desc = "An experimental suit of armor with sensitive detectors hooked up to a biohazard release valve. It has some kind of blood boiling anomaly inside." + cooldown_message = "Your blood runs cold..." + emp_message = "Oh fuck..." + ///Range of the effect. + var/range = 4 + +/obj/item/clothing/suit/armor/reactive/bleed/cooldown_activation(mob/living/carbon/human/owner) + var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread + sparks.set_up(1, 1, src) + sparks.start() + return ..() + +/obj/item/clothing/suit/armor/reactive/bleed/reactive_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + owner.visible_message("[src] blocks [attack_text], the blood anomaly from within releasing a massive cloud of razors!") + owner.AddComponent(/datum/component/pellet_cloud, projectile_type=/obj/projectile/bullet/shrapnel/bleed, magnitude=3) + playsound(src, 'sound/weapons/shrapnel.ogg', 70, TRUE) + return TRUE + +/obj/item/clothing/suit/armor/reactive/bleed/emp_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + owner.visible_message("[src] blocks [attack_text], but pulls a massive charge of biohazard material into [owner] from the surrounding environment!") + owner.AddComponent(/datum/component/pellet_cloud, projectile_type=/obj/projectile/bullet/shrapnel/bleed, magnitude=5) + owner.add_bleeding(BLEED_CRITICAL) + playsound(src, 'sound/weapons/shrapnel.ogg', 70, TRUE) + return TRUE diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 60b2b511d325b..f89989b87caa1 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -32,7 +32,7 @@ /obj/item/powertool/jaws_of_life ) slowdown = 1 - armor = list(MELEE = 15, BULLET = 5, LASER = 20, ENERGY = 10, BOMB = 20, BIO = 10, RAD = 20, FIRE = 100, ACID = 50, STAMINA = 10) + armor = list(MELEE = 15, BULLET = 5, LASER = 20, ENERGY = 10, BOMB = 20, BIO = 10, RAD = 20, FIRE = 100, ACID = 50, STAMINA = 10, BLEED = 25) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -70,7 +70,7 @@ desc = "Use in case of bomb." icon_state = "bombsuit" clothing_flags = THICKMATERIAL | SNUG_FIT - armor = list(MELEE = 20, BULLET = 0, LASER = 20, ENERGY = 10, BOMB = 100, BIO = 0, RAD = 0, FIRE = 80, ACID = 50, STAMINA = 10) + armor = list(MELEE = 20, BULLET = 0, LASER = 20, ENERGY = 10, BOMB = 100, BIO = 0, RAD = 0, FIRE = 80, ACID = 50, STAMINA = 10, BLEED = 25) flags_inv = HIDEFACE|HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT dynamic_hair_suffix = "" dynamic_fhair_suffix = "" @@ -95,7 +95,7 @@ clothing_flags = THICKMATERIAL body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS slowdown = 2 - armor = list(MELEE = 20, BULLET = 0, LASER = 20, ENERGY = 10, BOMB = 100, BIO = 0, RAD = 0, FIRE = 80, ACID = 50, STAMINA = 10) + armor = list(MELEE = 20, BULLET = 0, LASER = 20, ENERGY = 10, BOMB = 100, BIO = 0, RAD = 0, FIRE = 80, ACID = 50, STAMINA = 10, BLEED = 25) flags_inv = HIDEJUMPSUIT heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT @@ -133,7 +133,7 @@ desc = "A hood with radiation protective properties. The label reads, 'Made with lead. Please do not consume insulation.'" clothing_flags = THICKMATERIAL | SNUG_FIT flags_inv = HIDEMASK|HIDEEARS|HIDEFACE|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 60, RAD = 100, FIRE = 30, ACID = 30, STAMINA = 10) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 60, RAD = 100, FIRE = 30, ACID = 30, STAMINA = 10, BLEED = 15) strip_delay = 60 equip_delay_other = 60 flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH @@ -151,7 +151,7 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/geiger_counter) slowdown = 1.5 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 60, RAD = 100, FIRE = 30, ACID = 30, STAMINA = 10) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 60, RAD = 100, FIRE = 30, ACID = 30, STAMINA = 10, BLEED = 15) strip_delay = 60 equip_delay_other = 60 flags_inv = HIDEJUMPSUIT diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index e7bca1b48511b..23405168631ed 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -7,7 +7,7 @@ item_state = "wizhat" gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE permeability_coefficient = 0.01 - armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 100, ACID = 100, STAMINA = 50) + armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 100, ACID = 100, STAMINA = 50, BLEED = 60) strip_delay = 50 equip_delay_other = 50 clothing_flags = SNUG_FIT | THICKMATERIAL @@ -38,7 +38,7 @@ icon_state = "wizard-fake" gas_transfer_coefficient = 1 permeability_coefficient = 1 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0, BLEED = 0) resistance_flags = FLAMMABLE dog_fashion = /datum/dog_fashion/head/blue_wizard clothing_flags = NONE @@ -74,7 +74,7 @@ gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 body_parts_covered = CHEST|GROIN|ARMS|LEGS - armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 100, ACID = 100, STAMINA = 50) + armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 100, ACID = 100, STAMINA = 50, BLEED = 60) allowed = list(/obj/item/teleportation_scroll) flags_inv = HIDEJUMPSUIT strip_delay = 50 @@ -143,7 +143,7 @@ item_state = "wizrobe" gas_transfer_coefficient = 1 permeability_coefficient = 1 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0, BLEED = 0) resistance_flags = FLAMMABLE clothing_flags = NONE @@ -153,7 +153,7 @@ icon_state = "marisa" gas_transfer_coefficient = 1 permeability_coefficient = 1 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0, BLEED = 0) resistance_flags = FLAMMABLE clothing_flags = NONE @@ -164,7 +164,7 @@ item_state = "marisarobe" gas_transfer_coefficient = 1 permeability_coefficient = 1 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0, BLEED = 0) resistance_flags = FLAMMABLE clothing_flags = NONE @@ -216,7 +216,7 @@ min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard - armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 100, ACID = 100, STAMINA = 70) + armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 100, ACID = 100, STAMINA = 70, BLEED = 70) slowdown = 0 resistance_flags = FIRE_PROOF | ACID_PROOF @@ -227,7 +227,7 @@ item_state = "battlemage" min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 100, ACID = 100, STAMINA = 70) + armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 100, ACID = 100, STAMINA = 70, BLEED = 70) actions_types = null //No inbuilt light resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 55a895f5f837d..2b1d78cfd6b5f 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -5,7 +5,7 @@ body_parts_covered = CHEST|GROIN|LEGS|ARMS permeability_coefficient = 0.9 slot_flags = ITEM_SLOT_ICLOTHING - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 10) drop_sound = 'sound/items/handling/cloth_drop.ogg' pickup_sound = 'sound/items/handling/cloth_pickup.ogg' var/fitted = FEMALE_UNIFORM_FULL // For use in alternate clothing styles for women diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 22b024c42f02b..e980c273da0fa 100755 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -228,7 +228,7 @@ desc = "An eccentric medal made of plasma." icon_state = "plasma" medaltype = "medal-plasma" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = -10, ACID = 0, STAMINA = 0) //It's made of plasma. Of course it's flammable. + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = -10, ACID = 0, STAMINA = 0, BLEED = 0) //It's made of plasma. Of course it's flammable. custom_materials = list(/datum/material/plasma=1000) /obj/item/clothing/accessory/medal/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) @@ -361,7 +361,7 @@ name = "bone talisman" desc = "A hunter's talisman, some say the old gods smile on those who wear it." icon_state = "talisman" - armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 20, BIO = 20, RAD = 5, FIRE = 0, ACID = 25, STAMINA = 10) + armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 20, BIO = 20, RAD = 5, FIRE = 0, ACID = 25, STAMINA = 10, BLEED = 10) attachment_slot = null /obj/item/clothing/accessory/skullcodpiece @@ -369,7 +369,7 @@ desc = "A skull shaped ornament, intended to protect the important things in life." icon_state = "skull" above_suit = TRUE - armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 20, BIO = 20, RAD = 5, FIRE = 0, ACID = 25, STAMINA = 10) + armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 20, BIO = 20, RAD = 5, FIRE = 0, ACID = 25, STAMINA = 10, BLEED = 10) attachment_slot = GROIN /obj/item/clothing/accessory/holster diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 1ee6779f7b248..255d85f5a182d 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -222,13 +222,13 @@ name = "durathread jumpsuit" desc = "A jumpsuit made from durathread, its resilient fibres provide some protection to the wearer." greyscale_colors = "#8291a1" - armor = list(MELEE = 10, BULLET = 15, LASER = 10, FIRE = 40, ACID = 10, BOMB = 5, ENERGY = 20, STAMINA = 20) + armor = list(MELEE = 10, BULLET = 15, LASER = 10, FIRE = 40, ACID = 10, BOMB = 5, ENERGY = 20, STAMINA = 20, BLEED = 30) /obj/item/clothing/under/color/jumpskirt/durathread name = "durathread jumpskirt" desc = "A jumpskirt made from durathread, its resilient fibres provide some protection to the wearer." greyscale_colors = "#8291a1" - armor = list(MELEE = 10, BULLET = 15, LASER = 10, FIRE = 40, ACID = 10, BOMB = 5, ENERGY = 20, STAMINA = 20) + armor = list(MELEE = 10, BULLET = 15, LASER = 10, FIRE = 40, ACID = 10, BOMB = 5, ENERGY = 20, STAMINA = 20, BLEED = 30) /obj/item/clothing/under/color/rainbow name = "rainbow jumpsuit" diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm index 318d98d308cfa..9b040935b088a 100644 --- a/code/modules/clothing/under/costume.dm +++ b/code/modules/clothing/under/costume.dm @@ -257,7 +257,7 @@ item_state = null worn_icon = 'icons/mob/clothing/under/security.dmi' alt_covers_chest = TRUE - armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, STAMINA = 10, BLEED = 15) strip_delay = 50 alt_covers_chest = TRUE sensor_mode = SENSOR_COORDS diff --git a/code/modules/clothing/under/jobs/Plasmaman/engineering.dm b/code/modules/clothing/under/jobs/Plasmaman/engineering.dm index 2b99630ba30e9..e50357a9e4749 100644 --- a/code/modules/clothing/under/jobs/Plasmaman/engineering.dm +++ b/code/modules/clothing/under/jobs/Plasmaman/engineering.dm @@ -3,7 +3,7 @@ desc = "An air-tight suit designed to be used by plasmamen exployed as engineers, the usual purple stripes being replaced by engineer's orange. It protects the user from fire and acid damage." icon_state = "engineer_envirosuit" item_state = "engineer_envirosuit" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 10, FIRE = 95, ACID = 95, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 10, FIRE = 95, ACID = 95, STAMINA = 0, BLEED = 10) /obj/item/clothing/under/plasmaman/engineering/atmospherics name = "atmospherics plasma envirosuit" diff --git a/code/modules/clothing/under/jobs/Plasmaman/security.dm b/code/modules/clothing/under/jobs/Plasmaman/security.dm index 8b737d2b16866..26282303438f1 100644 --- a/code/modules/clothing/under/jobs/Plasmaman/security.dm +++ b/code/modules/clothing/under/jobs/Plasmaman/security.dm @@ -3,7 +3,7 @@ desc = "A plasmaman containment suit designed for security officers, offering a limited amount of extra protection." icon_state = "security_envirosuit" item_state = "security_envirosuit" - armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 95, ACID = 95, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 95, ACID = 95, STAMINA = 10, BLEED = 10) sensor_mode = SENSOR_COORDS random_sensor = FALSE @@ -24,4 +24,4 @@ desc = "A plasmaman containment suit designed for brig physicians. It has a red cross emblasoned on the chest." icon_state = "secmed_envirosuit" item_state = "secmed_envirosuit" - armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 95, ACID = 95, STAMINA = 10) + armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 95, ACID = 95, STAMINA = 10, BLEED = 10) diff --git a/code/modules/clothing/under/jobs/civilian/civilian.dm b/code/modules/clothing/under/jobs/civilian/civilian.dm index 5b24c69e531bd..a3b979a75cef6 100644 --- a/code/modules/clothing/under/jobs/civilian/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian/civilian.dm @@ -126,7 +126,7 @@ desc = "It's the official uniform of the station's janitor. It has minor protection from biohazards." name = "janitor's jumpsuit" icon_state = "janitor" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 10) /obj/item/clothing/under/rank/civilian/janitor/skirt name = "janitor's jumpskirt" diff --git a/code/modules/clothing/under/jobs/command.dm b/code/modules/clothing/under/jobs/command.dm index d5029d8aa0a25..f915d5ea92f8b 100644 --- a/code/modules/clothing/under/jobs/command.dm +++ b/code/modules/clothing/under/jobs/command.dm @@ -3,7 +3,7 @@ name = "captain's jumpsuit" icon_state = "captain" item_state = "b_suit" - armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, STAMINA = 10, BLEED = 10) sensor_mode = SENSOR_COORDS random_sensor = FALSE icon = 'icons/obj/clothing/under/captain.dmi' diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm index d9876536acf8d..88d6289238255 100644 --- a/code/modules/clothing/under/jobs/engineering.dm +++ b/code/modules/clothing/under/jobs/engineering.dm @@ -12,7 +12,7 @@ icon_state = "chiefengineer" item_state = "gy_suit" //TODO replace it worn_icon_state = "chiefengineer" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 80, ACID = 40, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 80, ACID = 40, STAMINA = 0, BLEED = 10) resistance_flags = NONE /obj/item/clothing/under/rank/engineering/chief_engineer/skirt @@ -20,7 +20,7 @@ name = "chief engineer's jumpskirt" icon_state = "chiefengineer_skirt" item_state = "gy_suit" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 7, FIRE = 80, ACID = 40, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 7, FIRE = 80, ACID = 40, STAMINA = 0, BLEED = 10) body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -50,7 +50,7 @@ name = "engineer's jumpsuit" icon_state = "engine" item_state = "engi_suit" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 60, ACID = 20, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 60, ACID = 20, STAMINA = 0, BLEED = 10) resistance_flags = NONE /obj/item/clothing/under/rank/engineering/engineer/hazard diff --git a/code/modules/clothing/under/jobs/medical.dm b/code/modules/clothing/under/jobs/medical.dm index 051cfdbb4dff2..996ce9e21a1e1 100644 --- a/code/modules/clothing/under/jobs/medical.dm +++ b/code/modules/clothing/under/jobs/medical.dm @@ -9,7 +9,7 @@ icon_state = "cmo" item_state = "w_suit" permeability_coefficient = 0.5 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 10) /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt name = "chief medical officer's jumpskirt" @@ -28,7 +28,7 @@ icon_state = "genetics" item_state = "w_suit" permeability_coefficient = 0.5 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 10) /obj/item/clothing/under/rank/medical/geneticist/skirt name = "geneticist's jumpskirt" @@ -47,7 +47,7 @@ icon_state = "virology" item_state = "w_suit" permeability_coefficient = 0.5 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 10) /obj/item/clothing/under/rank/medical/virologist/skirt name = "virologist's jumpskirt" @@ -65,7 +65,7 @@ desc = "A standard jumpsuit used by paramedics onboard space stations. It's made of a special fiber that gives special protection against biohazards." icon_state = "paramedic" permeability_coefficient = 0.5 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 10) can_adjust = FALSE /obj/item/clothing/under/rank/medical/paramedic/skirt @@ -85,7 +85,7 @@ icon_state = "nursesuit" item_state = "w_suit" permeability_coefficient = 0.5 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 10) body_parts_covered = CHEST|GROIN|ARMS fitted = NO_FEMALE_UNIFORM can_adjust = FALSE @@ -96,7 +96,7 @@ icon_state = "medical" item_state = "w_suit" permeability_coefficient = 0.5 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 10) /obj/item/clothing/under/rank/medical/doctor/skirt name = "medical doctor's jumpskirt" @@ -133,7 +133,7 @@ icon_state = "chemistry" item_state = "w_suit" permeability_coefficient = 0.5 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 50, ACID = 65, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 50, ACID = 65, STAMINA = 0, BLEED = 10) /obj/item/clothing/under/rank/medical/chemist/skirt name = "chemist's jumpskirt" diff --git a/code/modules/clothing/under/jobs/rnd.dm b/code/modules/clothing/under/jobs/rnd.dm index f084ff1e700a7..7f17125c3112c 100644 --- a/code/modules/clothing/under/jobs/rnd.dm +++ b/code/modules/clothing/under/jobs/rnd.dm @@ -7,7 +7,7 @@ desc = "It's a jumpsuit worn by those with the know-how to achieve the position of \"Research Director\". Its fabric provides minor protection from biological contaminants." icon_state = "director" item_state = "w_suit" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 10, RAD = 0, FIRE = 0, ACID = 35, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 10, RAD = 0, FIRE = 0, ACID = 35, STAMINA = 0, BLEED = 10) can_adjust = TRUE alt_covers_chest = TRUE @@ -27,7 +27,7 @@ name = "research director's tan suit" icon_state = "rdwhimsy" item_state = "rdwhimsy" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 10) can_adjust = TRUE alt_covers_chest = TRUE @@ -47,7 +47,7 @@ name = "research director's turtleneck" icon_state = "rdturtle" item_state = "p_suit" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 10, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 10) can_adjust = TRUE alt_covers_chest = TRUE @@ -76,7 +76,7 @@ item_state = "w_suit" worn_icon_state = "toxinswhite" permeability_coefficient = 0.5 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 10) /obj/item/clothing/under/rank/rnd/scientist/skirt name = "scientist's jumpskirt" diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 96038f4ada795..6dd3db43fc331 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -22,7 +22,7 @@ desc = "A tactical security jumpsuit for officers complete with Nanotrasen belt buckle." icon_state = "rsecurity" item_state = "r_suit" - armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, STAMINA = 10, BLEED = 10) alt_covers_chest = TRUE /obj/item/clothing/under/rank/security/officer/white @@ -71,6 +71,7 @@ desc = "A formal security suit for officers complete with Nanotrasen belt buckle." icon_state = "rwarden" item_state = "r_suit" + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, STAMINA = 10, BLEED = 10) /obj/item/clothing/under/rank/security/warden/white name = "white security suit" @@ -104,7 +105,7 @@ desc = "Someone who wears this means business." icon_state = "detective" item_state = "det" - armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, STAMINA = 10, BLEED = 10) strip_delay = 50 alt_covers_chest = TRUE sensor_mode = SENSOR_COORDS @@ -147,7 +148,7 @@ desc = "A security jumpsuit decorated for those few with the dedication to achieve the position of Head of Security." icon_state = "rhos" item_state = "r_suit" - armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, STAMINA = 10, BLEED = 10) strip_delay = 60 alt_covers_chest = TRUE sensor_mode = SENSOR_COORDS diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 5ebf1fe341e22..fe03c6e7e234a 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -40,7 +40,7 @@ gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100) + armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100, BLEED = 100) cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index f6f319679be9a..a599447bca044 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -4,7 +4,7 @@ icon_state = "syndicate" item_state = "bl_suit" has_sensor = NO_SENSORS - armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 40, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 40, STAMINA = 10, BLEED = 25) alt_covers_chest = TRUE icon = 'icons/obj/clothing/under/syndicate.dmi' worn_icon = 'icons/mob/clothing/under/syndicate.dmi' @@ -14,7 +14,7 @@ desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-." icon_state = "tactifool" item_state = "bl_suit" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 40, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 40, STAMINA = 0, BLEED = 10) /obj/item/clothing/under/syndicate/sniper name = "Tactical turtleneck suit" @@ -35,7 +35,7 @@ desc = "Badly translated labels tell you to clean this in Vodka. Great for squatting in." icon_state = "trackpants" can_adjust = FALSE - armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 10, BLEED = 15) resistance_flags = NONE /obj/item/clothing/under/syndicate/combat @@ -49,5 +49,5 @@ desc = "Military grade tracksuits for frontline squatting." icon_state = "rus_under" can_adjust = FALSE - armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 10) + armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 10, BLEED = 15) resistance_flags = NONE diff --git a/code/modules/clothing/under/trek.dm b/code/modules/clothing/under/trek.dm index 88055c88644f0..3e89917cdc11f 100644 --- a/code/modules/clothing/under/trek.dm +++ b/code/modules/clothing/under/trek.dm @@ -18,7 +18,7 @@ desc = "The uniform worn by engineering/security officers." icon_state = "trek_engsec" item_state = "r_suit" - armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) //more sec than eng, but w/e. + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 10) //more sec than eng, but w/e. strip_delay = 50 /obj/item/clothing/under/trek/medsci diff --git a/code/modules/events/anomaly_blood.dm b/code/modules/events/anomaly_blood.dm new file mode 100644 index 0000000000000..59b914c3736a1 --- /dev/null +++ b/code/modules/events/anomaly_blood.dm @@ -0,0 +1,14 @@ +/datum/round_event_control/anomaly/blood + name = "Anomaly: Blood" + typepath = /datum/round_event/anomaly/blood + + min_players = 15 + max_occurrences = 2 + +/datum/round_event/anomaly/blood + startWhen = 3 + announceWhen = 10 + anomaly_path = /obj/effect/anomaly/blood + +/datum/round_event/anomaly/blood/announce(fake) + priority_announce("Blood anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert", SSstation.announcer.get_rand_alert_sound()) diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm index fc8a5e39b0215..8a956238270b7 100644 --- a/code/modules/events/holiday/xmas.dm +++ b/code/modules/events/holiday/xmas.dm @@ -38,14 +38,14 @@ icon_state = "xmashat" desc = "A crappy paper hat that you are REQUIRED to wear." flags_inv = 0 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0) /obj/item/clothing/head/costume/festive/Initialize(mapload) //Merry christmas if(CHRISTMAS in SSevents.holidays) - armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 30, RAD = 30, FIRE = 30, ACID = 30, STAMINA = 30) + armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 30, RAD = 30, FIRE = 30, ACID = 30, STAMINA = 30, BLEED = 30) else if(FESTIVE_SEASON in SSevents.holidays) - armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 20, ACID = 20, STAMINA = 20) + armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 20, ACID = 20, STAMINA = 20, BLEED = 20) return ..() /obj/effect/spawner/xmastree diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 6cd70bf1f8356..c169b897c6d70 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -134,6 +134,7 @@ hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("stabbed", "slashed", "attacked") sharpness = IS_SHARP + bleed_force = BLEED_SURFACE var/static/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken") /obj/item/broken_bottle/Initialize(mapload) diff --git a/code/modules/holoparasite/abilities/major/healing.dm b/code/modules/holoparasite/abilities/major/healing.dm index 76b55b1ab7582..7b770b8e0fcc1 100644 --- a/code/modules/holoparasite/abilities/major/healing.dm +++ b/code/modules/holoparasite/abilities/major/healing.dm @@ -139,7 +139,7 @@ carbon_target.blood_volume = min(carbon_target.blood_volume + actual_heal_amt, HOLOPARA_MAX_BLOOD_VOLUME_HEAL) if(ishuman(carbon_target)) var/mob/living/carbon/human/human_target = carbon_target - human_target.bleed_rate = max(human_target.bleed_rate - actual_heal_amt, 0) + human_target.cauterise_wounds(actual_heal_amt * 0.2) if(purge_toxins) var/list/reagents_purged = list() diff --git a/code/modules/holoparasite/abilities/weapon/stab.dm b/code/modules/holoparasite/abilities/weapon/stab.dm index e75c48086d210..a6cffc338f284 100644 --- a/code/modules/holoparasite/abilities/weapon/stab.dm +++ b/code/modules/holoparasite/abilities/weapon/stab.dm @@ -14,11 +14,9 @@ ) ) /** - * The (maximum) amount of bleed damage with each hit. - * This is premultiplied by 10, and then randomized between 50% and 100% of the value. - * We need to pre-multiply by 10, as BYOND's rand() doesn't support decimal ranges, so we just multiply the final random value by 0.1. + * Randomised between 50% and 100% */ - var/premultiplied_bleed_rate = 40 + var/bleed_level = BLEED_SURFACE /datum/holoparasite_ability/weapon/blade/apply() . = ..() @@ -29,7 +27,7 @@ owner.attack_sound = 'sound/weapons/bladeslice.ogg' owner.response_harm = "stabs" owner.attacktext = "stabs" - premultiplied_bleed_rate = master_stats.damage * 8 + bleed_level = (master_stats.damage / 5) * (BLEED_DEEP_WOUND - BLEED_SURFACE) + BLEED_SURFACE /datum/holoparasite_ability/weapon/blade/remove() . = ..() @@ -45,6 +43,4 @@ . = ..() if(successful && ishuman(target)) var/mob/living/carbon/human/human_target = target - if(human_target.bleed_rate < 15) - var/randomized_bleed_rate = rand(round(premultiplied_bleed_rate * 0.5), premultiplied_bleed_rate) * 0.1 - human_target.bleed_rate = clamp(human_target.bleed_rate + randomized_bleed_rate, 0, 15) + human_target.add_bleeding((rand(500, 1000) / 1000) * bleed_level) diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index a64befd731700..feb342f3196fc 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -86,6 +86,7 @@ attack_verb = list("chopped", "tore", "cut") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP + bleed_force = BLEED_CUT /obj/item/hatchet/Initialize(mapload) . = ..() diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 0f3568111afef..a583a00d3c955 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -24,7 +24,7 @@ opacity = FALSE resistance_flags = FLAMMABLE max_integrity = 200 - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0, STAMINA = 0, CONSUME = 0, BLEED = 0) var/state = BOOKCASE_UNANCHORED var/list/allowed_books = list(/obj/item/book, /obj/item/spellbook, /obj/item/storage/book, /obj/item/codex_cicatrix) //Things allowed in the bookcase /// When enabled, books_to_load number of random books will be generated for this bookcase when first interacted with. diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index 997dc58a9d470..5151bf289b803 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -12,7 +12,7 @@ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT heat_protection = CHEST|GROIN|LEGS|ARMS hoodtype = /obj/item/clothing/head/hooded/explorer - armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 50, STAMINA = 20) + armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 50, STAMINA = 20, BLEED = 30) allowed = list( /obj/item/flashlight, /obj/item/tank/internals, @@ -36,7 +36,7 @@ flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT - armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 50, STAMINA = 20) + armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 50, STAMINA = 20, BLEED = 30) resistance_flags = FIRE_PROOF high_pressure_multiplier = 0.4 @@ -58,7 +58,7 @@ visor_flags_inv = HIDEFACIALHAIR visor_flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH actions_types = list(/datum/action/item_action/adjust) - armor = list(MELEE = 10, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 0, BIO = 50, RAD = 0, FIRE = 20, ACID = 40, STAMINA = 10) + armor = list(MELEE = 10, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 0, BIO = 50, RAD = 0, FIRE = 20, ACID = 40, STAMINA = 10, BLEED = 10) resistance_flags = FIRE_PROOF /obj/item/clothing/mask/gas/explorer/attack_self(mob/user) @@ -83,7 +83,7 @@ max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | LAVA_PROOF slowdown = 0 - armor = list(MELEE = 70, BULLET = 40, LASER = 20, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 40) + armor = list(MELEE = 70, BULLET = 40, LASER = 20, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 40, BLEED = 50) allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe) high_pressure_multiplier = 0.6 @@ -115,7 +115,7 @@ w_class = WEIGHT_CLASS_NORMAL max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT clothing_flags = THICKMATERIAL // no space protection - armor = list(MELEE = 70, BULLET = 40, LASER = 20, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 40) + armor = list(MELEE = 70, BULLET = 40, LASER = 20, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 40, BLEED = 50) resistance_flags = FIRE_PROOF | LAVA_PROOF high_pressure_multiplier = 0.6 diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 58630fd6f4a77..bb1140c266ffe 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -18,6 +18,7 @@ hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("smashed", "crushed", "cleaved", "chopped", "pulped") sharpness = IS_SHARP + bleed_force = BLEED_CUT actions_types = list(/datum/action/item_action/toggle_light) light_system = MOVABLE_LIGHT light_range = 5 diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index fd33252851418..48285fc0e749e 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -74,7 +74,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, sort_list(list( icon = 'icons/obj/lighting.dmi' icon_state = "markerrandom" layer = BELOW_OPEN_DOOR_LAYER - armor = list(MELEE = 50, BULLET = 75, LASER = 75, ENERGY = 75, BOMB = 25, BIO = 100, RAD = 100, FIRE = 25, ACID = 0, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 75, LASER = 75, ENERGY = 75, BOMB = 25, BIO = 100, RAD = 100, FIRE = 25, ACID = 0, STAMINA = 0, BLEED = 0) max_integrity = 50 anchored = TRUE light_range = 2 diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 01519dca33abd..13db434039bf2 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -418,6 +418,7 @@ damage_type = BRUTE hitsound = 'sound/effects/splat.ogg' knockdown = 30 + bleed_force = BLEED_SURFACE var/chain /obj/projectile/hook/fire(setAngle) @@ -710,6 +711,7 @@ hitsound_on = 'sound/weapons/bladeslice.ogg' w_class = WEIGHT_CLASS_BULKY sharpness = IS_SHARP + bleed_force = BLEED_CUT faction_bonus_force = 45 nemesis_factions = list("mining", "boss") var/transform_cooldown @@ -803,6 +805,7 @@ righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' flags_1 = CONDUCT_1 sharpness = IS_SHARP + bleed_force = BLEED_CUT w_class = WEIGHT_CLASS_BULKY force = 1 throwforce = 1 diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index d36bda070f3da..6d45fead32160 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -2,20 +2,258 @@ /**************************************************** BLOOD SYSTEM + +https://www.desmos.com/calculator/vxrevmdvfx + +To calculate the blood loss rate, use the following formula: +n = starting amount of blood in your mob +b = bleed rate of your mob +h = Rate at which bleeding decreases over time (0.02 constant, 0.08 for non-human mobs) + +This function calculates the amount of blood left in your system at time x +q\left(x\right)=\left\{b<2.4:ne^{-\frac{1}{560}\left(bx-\frac{1}{2}x^{2}h\right)},ne^{-\frac{bx}{560}}\right\} + +Hide this function +d\left(x\right)=\max\left(0,120-\frac{\left(120\cdot\max\left(0,\min\left(1,\frac{x-122}{560-122}\right)\right)\right)^{0.3}}{\left(120\right)^{-0.7}}\right) + +This function calculates the amount of health that your mob has at time x +y=d\left(q\left(x\right)\right) + +**Notes for porting/search:** +bleedsuppress has been replaced for is_bandaged(). Note that is_bleeding() returns if you are not bleeding, even if you have active bandages. + ****************************************************/ -/mob/living/carbon/human/proc/suppress_bloodloss(amount) - if(bleedsuppress) +/datum/status_effect/bleeding + id = "bleeding" + status_type = STATUS_EFFECT_MERGE + alert_type = /atom/movable/screen/alert/status_effect/bleeding + tick_interval = 1 SECONDS + + var/bandaged_bleeding = 0 + var/bleed_rate = 0 + var/time_applied = 0 + var/bleed_heal_multiplier = 1 + +/datum/status_effect/bleeding/merge(bleed_level) + src.bleed_rate = src.bleed_rate + max(min(bleed_level * bleed_level, sqrt(bleed_level)) / max(src.bleed_rate, 1), bleed_level - src.bleed_rate) + update_icon() + +/datum/status_effect/bleeding/on_creation(mob/living/new_owner, bleed_rate) + . = ..() + if (.) + src.bleed_rate = bleed_rate + linked_alert.maptext = MAPTEXT(owner.get_bleed_rate_string()) + +/datum/status_effect/bleeding/tick() + if (HAS_TRAIT(owner, TRAIT_NO_BLOOD)) + qdel(src) return + time_applied += tick_interval + if (time_applied < 1 SECONDS) + if(bleed_rate >= BLEED_DEEP_WOUND) + owner.add_splatter_floor(owner.loc) + else + owner.add_splatter_floor(owner.loc, TRUE) + return + time_applied = 0 + // Non-humans stop bleeding a lot quicker, even if it is not a minor cut + if (!ishuman(owner)) + bleed_rate -= BLEED_HEAL_RATE_MINOR * 4 * bleed_heal_multiplier + // Make sure to update our icon + update_icon() + // Set the rate at which we process, so we bleed more on the ground when heavy bleeding + tick_interval = bleed_rate <= BLEED_RATE_MINOR ? 1 SECONDS : 0.2 SECONDS + // Reduce the actual rate of bleeding + if (ishuman(owner)) + if (bleed_rate > 0 && bleed_rate < BLEED_RATE_MINOR) + bleed_rate -= BLEED_HEAL_RATE_MINOR * bleed_heal_multiplier + else + bandaged_bleeding -= BLEED_HEAL_RATE_MINOR * bleed_heal_multiplier + // We have finished bleeding + if (bleed_rate <= 0 && bandaged_bleeding <= 0) + qdel(src) + return + // The actual rate of bleeding, can be reduced by holding wounds + var/final_bleed_rate = bleed_rate + if (HAS_TRAIT(owner, TRAIT_BLEED_HELD)) + final_bleed_rate = max(0, final_bleed_rate - BLEED_RATE_MINOR) + // We aren't actually bleeding + if (final_bleed_rate <= 0) + return + // Actually do the bleeding + owner.bleed(min(MAX_BLEED_RATE, final_bleed_rate)) + +/datum/status_effect/bleeding/proc/update_icon() + // The actual rate of bleeding, can be reduced by holding wounds + // Calculate the message to show to the user + if (HAS_TRAIT(owner, TRAIT_BLEED_HELD)) + linked_alert.name = "Bleeding (Held)" + if (bleed_rate > BLEED_RATE_MINOR) + linked_alert.desc = "You have serious wounds which are unlikely to heal themselves. You are applying pressure to them, slowing the rate of blood loss." + else + linked_alert.desc = "You are bleeding and are applying pressure to the wounds, preventing blood from pouring out." + linked_alert.icon_state = "bleed_held" + else if (bleed_rate == 0 && bandaged_bleeding > 0) + linked_alert.name = "Bleeding (Bandaged)" + linked_alert.desc = "You have bandages covering your wounds. They will heal slowly if they are not cauterized." + linked_alert.icon_state = "bleed_bandage" else - bleedsuppress = TRUE - addtimer(CALLBACK(src, PROC_REF(resume_bleeding)), amount) + if (bleed_rate < BLEED_RATE_MINOR) + linked_alert.name = "Bleeding (Light)" + linked_alert.desc = "You have some minor cuts that look like they will heal themselves if you don't run out of blood first.[ishuman(owner) ? " Click to apply pressure to the wounds." : ""]" + linked_alert.icon_state = "bleed" + else + linked_alert.name = "Bleeding (Heavy)" + linked_alert.desc = "Your wounds are bleeding heavily and are unlikely to heal themselves. Seek medical attention immediately![ishuman(owner) ? " Click to apply pressure to the wounds." : ""]" + linked_alert.icon_state = "bleed_heavy" + + if (HAS_TRAIT(owner, TRAIT_NO_BLEEDING) || IS_IN_STASIS(owner)) + linked_alert.maptext = MAPTEXT("[owner.get_bleed_rate_string()]") + else + linked_alert.maptext = MAPTEXT(owner.get_bleed_rate_string()) -/mob/living/carbon/human/proc/resume_bleeding() - bleedsuppress = 0 - if(stat != DEAD && bleed_rate) - to_chat(src, "The blood soaks through your bandage.") +/datum/status_effect/bleeding/on_remove() + var/mob/living/carbon/human/human = owner + if (!istype(human)) + return + // Not bleeding anymore, no need to hold wounds + human.stop_holding_wounds() +/atom/movable/screen/alert/status_effect/bleeding + name = "Bleeding" + desc = "You are bleeding, find something to bandage the wound or you will die." + icon_state = "bleed" + +/atom/movable/screen/alert/status_effect/bleeding/Click(location, control, params) + var/mob/living/carbon/human/human = usr + if (!istype(human)) + return + if (locate(/obj/item/offhand/bleeding_suppress) in human.held_items) + human.stop_holding_wounds() + else + human.hold_wounds() + +/mob/living/carbon/proc/is_bandaged() + if (HAS_TRAIT(src, TRAIT_NO_BLOOD)) + return FALSE + var/datum/status_effect/bleeding/bleed = has_status_effect(STATUS_EFFECT_BLEED) + if (!bleed) + return FALSE + return bleed.bandaged_bleeding > 0 + +/mob/living/carbon/proc/is_bleeding() + if (HAS_TRAIT(src, TRAIT_NO_BLOOD)) + return FALSE + var/datum/status_effect/bleeding/bleed = has_status_effect(STATUS_EFFECT_BLEED) + if (!bleed) + return FALSE + return bleed.bleed_rate > 0 + +/mob/living/carbon/proc/add_bleeding(bleed_level) + if (HAS_TRAIT(src, TRAIT_NO_BLOOD)) + return + playsound(src, 'sound/surgery/blood_wound.ogg', 80, vary = TRUE) + apply_status_effect(dna?.species?.bleed_effect || STATUS_EFFECT_BLEED, bleed_level) + if (bleed_level >= BLEED_DEEP_WOUND) + blur_eyes(1) + to_chat(src, "Blood starts rushing out of the open wound!") + if(bleed_level >= BLEED_CUT) + add_splatter_floor(src.loc) + else + add_splatter_floor(src.loc, 1) + +/mob/living/carbon/human/add_bleeding(bleed_level) + if (NOBLOOD in dna.species.species_traits) + return + ..() + +/mob/living/carbon/proc/get_bleed_intensity() + var/datum/status_effect/bleeding/bleed = has_status_effect(STATUS_EFFECT_BLEED) + if (!bleed) + return 0 + return 3 ** bleed.bleed_rate + +/mob/living/carbon/proc/get_bleed_rate() + var/datum/status_effect/bleeding/bleed = has_status_effect(STATUS_EFFECT_BLEED) + return bleed?.bleed_rate + +/// Can we heal bleeding using a welding tool? +/mob/living/carbon/proc/has_mechanical_bleeding() + var/obj/item/bodypart/chest = get_bodypart(BODY_ZONE_CHEST) + return chest.bodytype & BODYTYPE_ROBOTIC + +/mob/living/proc/get_bleed_rate_string() + return "0.0/s" + +/mob/living/carbon/get_bleed_rate_string() + var/datum/status_effect/bleeding/bleed = has_status_effect(STATUS_EFFECT_BLEED) + if (!bleed) + return "0.0/s" + var/final_bleed_rate = bleed.bleed_rate + if (HAS_TRAIT(src, TRAIT_BLEED_HELD)) + final_bleed_rate = max(0, final_bleed_rate - BLEED_RATE_MINOR) + + // Set the text to the final bleed rate + final_bleed_rate = round(final_bleed_rate, 0.1) + if ((final_bleed_rate * 10) % 10 == 0) + return "[final_bleed_rate].0/s" + return "[final_bleed_rate]/s" + +/mob/living/carbon/proc/cauterise_wounds(amount = INFINITY) + var/datum/status_effect/bleeding/bleed = has_status_effect(STATUS_EFFECT_BLEED) + if (!bleed) + return FALSE + bleed.bleed_rate -= amount + if (bleed.bleed_rate <= 0) + remove_status_effect(STATUS_EFFECT_BLEED) + return TRUE + +/mob/living/carbon/proc/hold_wounds() + if (stat >= UNCONSCIOUS) + return + if (!is_bleeding()) + if (is_bandaged()) + balloon_alert(src, "Wounds already bandaged!") + else + balloon_alert(src, "You are not wounded!") + return + if (locate(/obj/item/offhand/bleeding_suppress) in held_items) + balloon_alert(src, "Already applying pressure!") + return + if (has_active_hand() && get_active_held_item()) + balloon_alert(src, "Active hand is full!") + return + var/obj/item/offhand/bleeding_suppress/supressed_thing = new() + put_in_active_hand(supressed_thing) + balloon_alert(src, "You apply pressure to your wounds...") + var/datum/status_effect/bleeding/bleed = has_status_effect(STATUS_EFFECT_BLEED) + if (!bleed) + return + bleed.update_icon() + +/mob/living/carbon/proc/stop_holding_wounds() + var/located = FALSE + for (var/obj/item/offhand/bleeding_suppress/bleed_suppression in held_items) + qdel(bleed_suppression) + located = TRUE + if (located) + balloon_alert(src, "You stop applying pressure to your wounds...") + var/datum/status_effect/bleeding/bleed = has_status_effect(STATUS_EFFECT_BLEED) + if (!bleed) + return + bleed.update_icon() + +/mob/living/carbon/proc/suppress_bloodloss(amount) + var/datum/status_effect/bleeding/bleed = has_status_effect(STATUS_EFFECT_BLEED) + if (!bleed) + return + var/reduced_amount = min(bleed.bleed_rate, amount) + bleed.bleed_rate -= reduced_amount + bleed.bandaged_bleeding += reduced_amount + bleed.update_icon() + if (bleed.bleed_rate <= 0) + stop_holding_wounds() /mob/living/carbon/monkey/handle_blood() if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_HUSK))) //cryosleep or husked people do not pump the blood. @@ -28,14 +266,13 @@ // Takes care blood loss and regeneration /mob/living/carbon/human/handle_blood() - if(NOBLOOD in dna.species.species_traits) - bleed_rate = 0 + if((NOBLOOD in dna.species.species_traits) || HAS_TRAIT(src, TRAIT_NO_BLOOD)) + cauterise_wounds() return if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_HUSK))) //cryosleep or husked people do not pump the blood. - //Blood regeneration if there is some space - if(blood_volume < BLOOD_VOLUME_NORMAL && !HAS_TRAIT(src, TRAIT_NOHUNGER) && !HAS_TRAIT(src, TRAIT_POWERHUNGRY)) + if(!is_bleeding() && blood_volume < BLOOD_VOLUME_NORMAL && !HAS_TRAIT(src, TRAIT_NOHUNGER) && !HAS_TRAIT(src, TRAIT_POWERHUNGRY)) var/nutrition_ratio = 0 switch(nutrition) if(0 to NUTRITION_LEVEL_STARVING) @@ -55,69 +292,76 @@ //Effects of bloodloss var/word = pick("dizzy","woozy","faint") + + // How much oxyloss we want to be on + var/desired_damage = (getMaxHealth() * 1.2) * CLAMP01((blood_volume - BLOOD_VOLUME_SURVIVE) / (BLOOD_VOLUME_NORMAL - BLOOD_VOLUME_SURVIVE)) + // Make it so we only go unconcious at 25% blood remaining + desired_damage = max(0, (getMaxHealth() * 1.2) - ((desired_damage ** 0.3) / ((getMaxHealth() * 1.2) ** (-0.7)))) + if (desired_damage >= getMaxHealth() * 1.2) + desired_damage = getMaxHealth() * 2.0 + if (HAS_TRAIT(src, TRAIT_BLOOD_COOLANT)) + switch(blood_volume) + if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_SAFE) + if(prob(3)) + to_chat(src, "Your sensors indicate [pick("overheating", "thermal throttling", "coolant issues")].") + if(-INFINITY to BLOOD_VOLUME_SURVIVE) + desired_damage = getMaxHealth() * 2.0 + // Rapidly die with no saving you + adjustFireLoss(clamp(getMaxHealth() * 2.0 - getFireLoss(), 0, 10)) + var/health_difference = clamp(desired_damage - getFireLoss(), 0, 5) + adjustFireLoss(health_difference) + return switch(blood_volume) if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) if(prob(5)) to_chat(src, "You feel [word].") - adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.01, 1)) if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) - adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.02, 1)) if(prob(5)) blur_eyes(6) to_chat(src, "You feel very [word].") if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) - adjustOxyLoss(5) - if(prob(15)) - Unconscious(rand(20,60)) + if(prob(30)) + blur_eyes(6) + Unconscious(rand(3,6)) to_chat(src, "You feel extremely [word].") if(-INFINITY to BLOOD_VOLUME_SURVIVE) - if(!HAS_TRAIT(src, TRAIT_NODEATH)) - death() - - var/temp_bleed = 0 - //Bleeding out - for(var/X in bodyparts) - var/obj/item/bodypart/BP = X - var/brutedamage = BP.brute_dam - - //We want an accurate reading of .len - list_clear_nulls(BP.embedded_objects) - for(var/obj/item/embeddies in BP.embedded_objects) - if(!embeddies.isEmbedHarmless()) - temp_bleed += 0.5 + desired_damage = getMaxHealth() * 2.0 + // Rapidly die with no saving you + adjustOxyLoss(clamp(getMaxHealth() * 2.0 - getOxyLoss(), 0, 10)) + var/health_difference = clamp(desired_damage - getOxyLoss(), 0, 5) + adjustOxyLoss(health_difference) - if(brutedamage >= 20) - temp_bleed += (brutedamage * 0.013) - - bleed_rate = max(bleed_rate - 0.5, temp_bleed)//if no wounds, other bleed effects (heparin) naturally decreases - - if(bleed_rate && !bleedsuppress && !(HAS_TRAIT(src, TRAIT_FAKEDEATH))) - bleed(bleed_rate) +/mob/living/proc/bleed(amt) + add_splatter_floor(src.loc, 1) //Makes a blood drop, leaking amt units of blood from the mob -/mob/living/carbon/proc/bleed(amt) - if(blood_volume) - blood_volume = max(blood_volume - amt, 0) - if (prob(sqrt(amt)*BLOOD_DRIP_RATE_MOD)) - if(isturf(src.loc)) //Blood loss still happens in locker, floor stays clean - if(amt >= 10) - add_splatter_floor(src.loc) - else - add_splatter_floor(src.loc, 1) +/mob/living/carbon/bleed(amt) + if(blood_volume && !HAS_TRAIT(src, TRAIT_NO_BLOOD) && !HAS_TRAIT(src, TRAIT_NO_BLEEDING) && !IS_IN_STASIS(src)) + // As you get less bloodloss, you bleed slower + // See the top of this file for desmos lines + var/decrease_multiplier = BLEED_RATE_MULTIPLIER + var/obj/item/organ/heart/heart = getorganslot(ORGAN_SLOT_HEART) + if (!heart || !heart.beating) + decrease_multiplier = BLEED_RATE_MULTIPLIER_NO_HEART + var/blood_loss_amount = blood_volume - blood_volume * NUM_E ** (-(amt * decrease_multiplier)/BLOOD_VOLUME_NORMAL) + blood_volume = max(blood_volume - blood_loss_amount, 0) + if(isturf(src.loc) && prob(sqrt(blood_loss_amount)*BLOOD_DRIP_RATE_MOD)) //Blood loss still happens in locker, floor stays clean + if(blood_loss_amount >= 2) + add_splatter_floor(src.loc) + else + add_splatter_floor(src.loc, 1) /mob/living/carbon/human/bleed(amt) amt *= physiology.bleed_mod if(!(NOBLOOD in dna.species.species_traits)) ..() - - /mob/living/proc/restore_blood() blood_volume = initial(blood_volume) /mob/living/carbon/human/restore_blood() blood_volume = BLOOD_VOLUME_NORMAL - bleed_rate = 0 + cauterise_wounds() /**************************************************** BLOOD TRANSFERS @@ -246,6 +490,8 @@ //to add a splatter of blood or other mob liquid. /mob/living/proc/add_splatter_floor(turf/T, small_drip) + if (HAS_TRAIT(src, TRAIT_NO_BLOOD) || HAS_TRAIT(src, TRAIT_NO_BLEEDING) || IS_IN_STASIS(src)) + return if(get_blood_id() != /datum/reagent/blood) return if(!T) @@ -298,3 +544,21 @@ var/obj/effect/decal/cleanable/oil/B = locate() in T.contents if(!B) B = new(T) + +/** + * Item to represent the fact that we are covering a wound + */ +/obj/item/offhand/bleeding_suppress + name = "Applying pressure" + desc = "You are applying pressure to your wounds." + icon_state = "bleed_held" + +/obj/item/offhand/bleeding_suppress/equipped(mob/living/carbon/user, slot) + . = ..() + if (istype(user)) + ADD_TRAIT(user, TRAIT_BLEED_HELD, ACTION_TRAIT) + +/obj/item/offhand/bleeding_suppress/dropped(mob/living/carbon/user, silent) + if (istype(user)) + REMOVE_TRAIT(user, TRAIT_BLEED_HELD, ACTION_TRAIT) + return ..() diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index e24c1905591ef..5e5901766ed86 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -73,6 +73,10 @@ affecting = bodyparts[1] SEND_SIGNAL(I, COMSIG_ITEM_ATTACK_ZONE, src, user, affecting) send_item_attack_message(I, user, parse_zone(affecting.body_zone)) + if (I.bleed_force) + var/armour_block = run_armor_check(affecting, BLEED, armour_penetration = I.armour_penetration, silent = (I.force > 0)) + var/hit_amount = (100 - armour_block) / 100 + add_bleeding(I.bleed_force * hit_amount) if(I.force) var/armour_block = run_armor_check(affecting, MELEE, armour_penetration = I.armour_penetration) apply_damage(I.force, I.damtype, affecting, armour_block) @@ -93,6 +97,10 @@ if(head) head.add_mob_blood(src) update_inv_head() + else if (I.damtype == BURN && is_bleeding() && IS_ORGANIC_LIMB(affecting)) + cauterise_wounds(AMOUNT_TO_BLEED_INTENSITY(I.force / 3)) + to_chat(src, "The heat from [I] cauterizes your bleeding!") + playsound(src, 'sound/surgery/cautery2.ogg', 70) //dismemberment var/dismemberthreshold = (((affecting.max_damage * 2) / max(I.is_sharp(), 0.5)) - (affecting.get_damage() + ((I.w_class - 3) * 10) + ((I.attack_weight - 1) * 15))) @@ -491,3 +499,56 @@ ADD_TRAIT(src, TRAIT_KNOCKEDOUT, OXYLOSS_TRAIT) else if(getOxyLoss() <= 50) REMOVE_TRAIT(src, TRAIT_KNOCKEDOUT, OXYLOSS_TRAIT) + +/mob/living/carbon/bullet_act(obj/projectile/P, def_zone, piercing_hit) + var/obj/item/bodypart/affecting = get_bodypart(check_zone(def_zone)) + if(!affecting) //missing limb? we select the first bodypart (you can never have zero, because of chest) + affecting = bodyparts[1] + if (P.bleed_force) + var/armour_block = run_armor_check(affecting, BLEED, armour_penetration = P.armour_penetration, silent = TRUE) + var/hit_amount = (100 - armour_block) / 100 + add_bleeding(P.bleed_force * hit_amount) + if (P.damage_type == BURN && is_bleeding() && IS_ORGANIC_LIMB(affecting)) + cauterise_wounds(AMOUNT_TO_BLEED_INTENSITY(P.damage / 3)) + playsound(src, 'sound/surgery/cautery2.ogg', 70) + to_chat(src, "The heat from [P] cauterizes your bleeding!") + + return ..() + +/mob/living/carbon/attack_basic_mob(mob/living/basic/user) + . = ..() + if(!.) + return + var/affected_zone = pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + var/dam_zone = dismembering_strike(user, affected_zone) + if(!dam_zone) //Dismemberment successful + return TRUE + var/obj/item/bodypart/affecting = get_bodypart(affected_zone) + if(!affecting) + affecting = get_bodypart(BODY_ZONE_CHEST) + var/armor = run_armor_check(affecting, MELEE, armour_penetration = user.armour_penetration) + apply_damage(user.melee_damage, user.melee_damage_type, affecting, armor) + // Apply bleeding + if (user.melee_damage_type == BRUTE) + var/armour_block = run_armor_check(dam_zone, BLEED, armour_penetration = user.armour_penetration, silent = TRUE) + var/hit_amount = (100 - armour_block) / 100 + add_bleeding(user.melee_damage * 0.1 * hit_amount) + +/mob/living/carbon/attack_animal(mob/living/simple_animal/M) + . = ..() + if(!.) + return + var/affected_zone = pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + var/dam_zone = dismembering_strike(M, affected_zone) + if(!dam_zone) //Dismemberment successful + return TRUE + var/obj/item/bodypart/affecting = get_bodypart(affected_zone) + if(!affecting) + affecting = get_bodypart(BODY_ZONE_CHEST) + var/armor = run_armor_check(affecting, MELEE, armour_penetration = M.armour_penetration) + apply_damage(M.melee_damage, M.melee_damage_type, affecting, armor) + // Apply bleeding + if (M.melee_damage_type == BRUTE) + var/armour_block = run_armor_check(dam_zone, BLEED, armour_penetration = M.armour_penetration, silent = TRUE) + var/hit_amount = (100 - armour_block) / 100 + add_bleeding(M.melee_damage * 0.1 * hit_amount) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 1ea81a906fee0..15d16372a1a4d 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -189,6 +189,17 @@ burn_msg = burn_msg ? burn_msg : "burns" bleed_msg = bleed_msg ? bleed_msg : "bleeding" + if (is_bleeding()) + switch (get_bleed_rate()) + if (BLEED_DEEP_WOUND to INFINITY) + msg += "[src] is [bleed_msg] extremely quickly.\n" + if (BLEED_RATE_MINOR to BLEED_DEEP_WOUND) + msg += "[src] is [bleed_msg] at a significant rate.\n" + else + msg += "[src] has some minor [bleed_msg] which look like it will stop soon.\n" + else if (is_bandaged()) + msg += "[src] is [bleed_msg], but it is covered.\n" + if(!(user == src && src.hal_screwyhud == SCREWYHUD_HEALTHY)) //fake healthy if(temp) if(temp < 25) @@ -244,14 +255,6 @@ if(blood_volume < BLOOD_VOLUME_SAFE) msg += "[t_He] appear[p_s()] faint.\n" - if(bleedsuppress) - msg += "[t_He] [t_is] bandaged with something.\n" - else if(bleed_rate) - if(reagents.has_reagent(/datum/reagent/toxin/heparin, needs_metabolizing = TRUE)) - msg += "[t_He] [t_is] [bleed_msg] uncontrollably!\n" - else - msg += "[t_He] [t_is] [bleed_msg]!\n" - if(reagents.has_reagent(/datum/reagent/teslium, needs_metabolizing = TRUE)) msg += "[t_He] [t_is] emitting a gentle blue glow!\n" diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 0ee0cc06683ef..dea570726a922 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -297,37 +297,6 @@ var/armor_block = run_armor_check(affecting, MELEE) apply_damage(damage, BRUTE, affecting, armor_block) -/mob/living/carbon/human/attack_basic_mob(mob/living/basic/user) - . = ..() - if(!.) - return - if(check_shields(user, user.melee_damage, "the [user.name]", MELEE_ATTACK, user.armour_penetration)) - return FALSE - var/dam_zone = dismembering_strike(user, pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) - if(!dam_zone) //Dismemberment successful - return TRUE - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) - if(!affecting) - affecting = get_bodypart(BODY_ZONE_CHEST) - var/armor = run_armor_check(affecting, MELEE, armour_penetration = user.armour_penetration) - apply_damage(user.melee_damage, user.melee_damage_type, affecting, armor) - -/mob/living/carbon/human/attack_animal(mob/living/simple_animal/M) - . = ..() - if(.) - var/damage = M.melee_damage - if(check_shields(M, damage, "the [M.name]", MELEE_ATTACK, M.armour_penetration)) - return FALSE - var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) - if(!dam_zone) //Dismemberment successful - return TRUE - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) - if(!affecting) - affecting = get_bodypart(BODY_ZONE_CHEST) - var/armor = run_armor_check(affecting, MELEE, armour_penetration = M.armour_penetration) - apply_damage(damage, M.melee_damage_type, affecting, armor) - - /mob/living/carbon/human/attack_slime(mob/living/simple_animal/slime/M) if(..()) //successful slime attack var/damage = 20 @@ -726,8 +695,10 @@ for(var/t in missing) to_chat(src, "Your [parse_zone(t)] is missing!") - if(bleed_rate) + if(is_bleeding()) to_chat(src, "You are [bleed_msg]!") + else if (is_bandaged()) + to_chat(src, "Your [bleed_msg] is bandaged!") if(getStaminaLoss()) if(getStaminaLoss() > 30) to_chat(src, "You're completely exhausted.") @@ -874,3 +845,13 @@ ADD_TRAIT(src, TRAIT_NOBLOCK, type) stoplag(50) REMOVE_TRAIT(src, TRAIT_NOBLOCK, type) + +/mob/living/carbon/human/attack_basic_mob(mob/living/basic/user) + if(user.melee_damage != 0 && !HAS_TRAIT(user, TRAIT_PACIFISM) && check_shields(user, user.melee_damage, "the [user.name]", MELEE_ATTACK, user.armour_penetration)) + return FALSE + return ..() + +/mob/living/carbon/human/attack_animal(mob/living/simple_animal/M) + if(M.melee_damage != 0 && !HAS_TRAIT(M, TRAIT_PACIFISM) && check_shields(M, M.melee_damage, "the [M.name]", MELEE_ATTACK, M.armour_penetration)) + return FALSE + return ..() diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 83ec9ea390625..1cdff265fa1bb 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -47,7 +47,6 @@ var/special_voice = "" // For changing our voice. Used by a symptom. var/bleed_rate = 0 //how much are we bleeding - var/bleedsuppress = 0 //for stopping bloodloss, eventually this will be limb-based like bleeding /// How many "units of blood" we have on our hands var/blood_in_hands = 0 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 39862dd1f1284..ad43b7e53e83e 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -124,6 +124,9 @@ GLOBAL_LIST_EMPTY(features_by_species) ///List of possible heights var/list/species_height = SPECIES_HEIGHTS(BODY_SIZE_SHORT, BODY_SIZE_NORMAL, BODY_SIZE_TALL) + /// What bleed status effect should we apply? + var/bleed_effect = STATUS_EFFECT_BLEED + /////////// // PROCS // /////////// @@ -1494,6 +1497,10 @@ GLOBAL_LIST_EMPTY(features_by_species) to_chat(H, "Your hair starts to fall out in clumps.") addtimer(CALLBACK(src, PROC_REF(go_bald), H), 50) + +/datum/species/proc/handle_blood(mob/living/carbon/human/H) + return FALSE + /datum/species/proc/go_bald(mob/living/carbon/human/H) if(QDELETED(H)) //may be called from a timer return @@ -1709,44 +1716,16 @@ GLOBAL_LIST_EMPTY(features_by_species) var/weakness = H.check_weakness(I, user) apply_damage(I.force * weakness, I.damtype, def_zone, armor_block, H) - H.send_item_attack_message(I, user, hit_area) - - if(!I.force) - return 0 //item force is zero - - //dismemberment - var/dismemberthreshold = ((affecting.max_damage * 2) - affecting.get_damage()) //don't take the current hit into account. - var/attackforce = (((I.w_class - 3) * 5) + ((I.attack_weight - 1) * 14) + ((I.is_sharp()-1) * 20)) //all the variables that go into ripping off a limb in one handy package. Force is absent because it's already been taken into account by the limb being damaged - if(HAS_TRAIT(src, TRAIT_EASYDISMEMBER)) - dismemberthreshold -= 30 - if(I.is_sharp()) - attackforce = max(attackforce, I.force) - if(attackforce >= dismemberthreshold && I.force >= 10) - if(affecting.dismember(I.damtype)) - I.add_mob_blood(H) - playsound(get_turf(H), I.get_dismember_sound(), 80, 1) - - var/bloody = 0 - if((I.damtype == BRUTE) && (I.force >= max(10, armor_block) || I.is_sharp())) + if (I.bleed_force) + var/armour_block = user.run_armor_check(affecting, BLEED, armour_penetration = I.armour_penetration, silent = (I.force > 0)) + var/hit_amount = (100 - armour_block) / 100 + H.add_bleeding(I.bleed_force * hit_amount) if(IS_ORGANIC_LIMB(affecting)) I.add_mob_blood(H) //Make the weapon bloody, not the person. - if(prob(I.force * 2)) //blood spatter! - bloody = 1 - var/turf/location = H.loc - if(istype(location)) - H.add_splatter_floor(location) - if(get_dist(user, H) <= 1) //people with TK won't get smeared with blood - user.add_mob_blood(H) - - switch(hit_area) - if(BODY_ZONE_HEAD) - if(!I.is_sharp()) - if(H.mind && H.stat == CONSCIOUS && H != user && (H.health - (I.force * I.attack_weight)) <= 0) // rev deconversion through blunt trauma. - var/datum/antagonist/rev/rev = H.mind.has_antag_datum(/datum/antagonist/rev) - if(rev) - rev.remove_revolutionary(FALSE, user) - - if(bloody) //Apply blood + if(get_dist(user, H) <= 1) //people with TK won't get smeared with blood + user.add_mob_blood(H) + switch(hit_area) + if(BODY_ZONE_HEAD) if(H.wear_mask) H.wear_mask.add_mob_blood(H) H.update_inv_wear_mask() @@ -1757,8 +1736,7 @@ GLOBAL_LIST_EMPTY(features_by_species) H.glasses.add_mob_blood(H) H.update_inv_glasses() - if(BODY_ZONE_CHEST) - if(bloody) + if(BODY_ZONE_CHEST) if(H.wear_suit) H.wear_suit.add_mob_blood(H) H.update_inv_wear_suit() @@ -1766,8 +1744,34 @@ GLOBAL_LIST_EMPTY(features_by_species) H.w_uniform.add_mob_blood(H) H.update_inv_w_uniform() + H.send_item_attack_message(I, user, hit_area) + + if(!I.force) + return 0 //item force is zero + + //dismemberment + var/dismemberthreshold = ((affecting.max_damage * 2) - affecting.get_damage()) //don't take the current hit into account. + var/attackforce = (((I.w_class - 3) * 5) + ((I.attack_weight - 1) * 14) + ((I.is_sharp()-1) * 20)) //all the variables that go into ripping off a limb in one handy package. Force is absent because it's already been taken into account by the limb being damaged + if(HAS_TRAIT(src, TRAIT_EASYDISMEMBER)) + dismemberthreshold -= 30 + if(I.is_sharp()) + attackforce = max(attackforce, I.force) + if(attackforce >= dismemberthreshold && I.force >= 10) + if(affecting.dismember(I.damtype)) + I.add_mob_blood(H) + playsound(get_turf(H), I.get_dismember_sound(), 80, 1) + + if(I.damtype == BRUTE && (I.force >= max(10, armor_block) && hit_area == BODY_ZONE_HEAD)) + if(!I.is_sharp() && H.mind && H.stat == CONSCIOUS && H != user && (H.health - (I.force * I.attack_weight)) <= 0) // rev deconversion through blunt trauma. + var/datum/antagonist/rev/rev = H.mind.has_antag_datum(/datum/antagonist/rev) + if(rev) + rev.remove_revolutionary(FALSE, user) if(Iforce > 10 || Iforce >= 5 && prob(33)) H.force_say(user) + else if (I.damtype == BURN && H.is_bleeding()) + H.cauterise_wounds(AMOUNT_TO_BLEED_INTENSITY(I.force / 3)) + to_chat(user, "The heat from [I] cauterizes your bleeding!") + playsound(src, 'sound/surgery/cautery2.ogg', 70) return TRUE /datum/species/proc/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H, forced = FALSE) diff --git a/code/modules/mob/living/carbon/human/species_types/IPC.dm b/code/modules/mob/living/carbon/human/species_types/IPC.dm index 726367170abca..2473efcfe839a 100644 --- a/code/modules/mob/living/carbon/human/species_types/IPC.dm +++ b/code/modules/mob/living/carbon/human/species_types/IPC.dm @@ -5,7 +5,7 @@ bodyflag = FLAG_IPC sexes = FALSE species_traits = list(NOTRANSSTING,NOEYESPRITES,NO_DNA_COPY,NOZOMBIE,MUTCOLORS,REVIVESBYHEALING,NOHUSK,NOMOUTH, MUTCOLORS) - inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RADIMMUNE,TRAIT_LIMBATTACHMENT,TRAIT_EASYDISMEMBER,TRAIT_POWERHUNGRY,TRAIT_XENO_IMMUNE, TRAIT_TOXIMMUNE) + inherent_traits = list(TRAIT_BLOOD_COOLANT,TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RADIMMUNE,TRAIT_LIMBATTACHMENT,TRAIT_EASYDISMEMBER,TRAIT_POWERHUNGRY,TRAIT_XENO_IMMUNE, TRAIT_TOXIMMUNE) inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID) mutant_brain = /obj/item/organ/brain/positron mutanteyes = /obj/item/organ/eyes/robotic @@ -19,7 +19,6 @@ default_features = list("mcolor" = "#7D7D7D", "ipc_screen" = "Static", "ipc_antenna" = "None", "ipc_chassis" = "Morpheus Cyberkinetics (Custom)") meat = /obj/item/stack/sheet/plasteel{amount = 5} skinned_type = /obj/item/stack/sheet/iron{amount = 10} - exotic_blood = /datum/reagent/oil damage_overlay_type = "synth" mutant_bodyparts = list("ipc_screen", "ipc_antenna", "ipc_chassis") default_features = list("ipc_screen" = "BSOD", "ipc_antenna" = "None") @@ -29,7 +28,6 @@ clonemod = 0 staminamod = 0.8 siemens_coeff = 1.5 - blood_color = "#000000" reagent_tag = PROCESS_SYNTHETIC species_gibs = GIB_TYPE_ROBOTIC attack_sound = 'sound/items/trayhit1.ogg' @@ -46,6 +44,10 @@ species_l_leg = /obj/item/bodypart/l_leg/ipc species_r_leg = /obj/item/bodypart/r_leg/ipc + exotic_blood = /datum/reagent/oil + blood_color = "#000000" + bleed_effect = /datum/status_effect/bleeding/robotic + var/saved_screen //for saving the screen when they die var/datum/action/innate/change_screen/change_screen @@ -282,3 +284,37 @@ ) return to_add + +/datum/status_effect/bleeding/robotic + alert_type = /atom/movable/screen/alert/status_effect/bleeding/robotic + bleed_heal_multiplier = 0 + +/datum/status_effect/bleeding/robotic/tick() + // Since we don't have flesh, we will instantly repair any sealed wounds + bandaged_bleeding = 0 + ..() + +/datum/status_effect/bleeding/robotic/update_icon() + // The actual rate of bleeding, can be reduced by holding wounds + // Calculate the message to show to the user + if (HAS_TRAIT(owner, TRAIT_BLEED_HELD)) + linked_alert.name = "Leaking (Held)" + if (bleed_rate > BLEED_RATE_MINOR) + linked_alert.desc = "Critical leaks have been detected in your system and require welding. Leak rate slowed by applied pressure." + else + linked_alert.desc = "Minor leaks have been detected in your system and require welding. Leak rate slowed by applied pressure." + else + if (bleed_rate < BLEED_RATE_MINOR) + linked_alert.name = "Leaking (Light)" + linked_alert.desc = "Minor leaks have been detected in your system and require welding." + else + linked_alert.name = "Leaking (Heavy)" + linked_alert.desc = "Critical leaks have been detected in your system and require welding." + linked_alert.icon_state = "bleed_robo" + + linked_alert.maptext = MAPTEXT(owner.get_bleed_rate_string()) + +/atom/movable/screen/alert/status_effect/bleeding/robotic + name = "Leaking" + desc = "You are leaking, weld the leaks back together or you will die." + icon_state = "bleed_robo" diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 95d2a938d0dd5..21bcb156c3068 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -858,7 +858,7 @@ name = "pile of bandages" desc = "It emits a strange aura, as if there was still life within it..." max_integrity = 50 - armor = list(MELEE = 90, BULLET = 90, LASER = 25, ENERGY = 80, BOMB = 50, BIO = 100, FIRE = -50, ACID = -50, STAMINA = 0) + armor = list(MELEE = 90, BULLET = 90, LASER = 25, ENERGY = 80, BOMB = 50, BIO = 100, FIRE = -50, ACID = -50, STAMINA = 0, BLEED = 0) icon = 'icons/obj/items_and_weapons.dmi' icon_state = "pile_bandages" resistance_flags = FLAMMABLE diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 3ffbcfa97eabb..b2db5f2212a10 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -97,3 +97,9 @@ species_language_holder = /datum/language_holder/lizard/ash mutantlungs = /obj/item/organ/lungs/ashwalker digitigrade_customization = DIGITIGRADE_FORCED + +/datum/species/lizard/ashwalker/spec_life(mob/living/carbon/human/H) + . = ..() + H.cauterise_wounds(0.1) + if (H.blood_volume < BLOOD_VOLUME_NORMAL && !H.is_bleeding()) + H.blood_volume += 0.5 diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index 1cea3c8950bf2..110e753ccd9cb 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -225,6 +225,7 @@ item_flags = ABSTRACT | DROPDEL | ISWEAPON w_class = WEIGHT_CLASS_HUGE sharpness = IS_SHARP + bleed_force = BLEED_DEEP_WOUND /obj/item/light_eater/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/carbon/human/species_types/snail.dm b/code/modules/mob/living/carbon/human/species_types/snail.dm index 4cce83b6a141e..85d8ccb9cd4a3 100644 --- a/code/modules/mob/living/carbon/human/species_types/snail.dm +++ b/code/modules/mob/living/carbon/human/species_types/snail.dm @@ -60,7 +60,7 @@ item_state = "snailshell" lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi' - armor = list(MELEE = 20, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 20, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0) max_integrity = 200 resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 3567a0a6a0432..b5b61b73a2edc 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -514,6 +514,7 @@ /mob/living/proc/update_resting() update_rest_hud_icon() update_mobility() + SEND_SIGNAL(src, COMSIG_LIVING_RESTING_UPDATED, resting) //Recursive function to find everything a mob is holding. Really shitty proc tbh. @@ -761,7 +762,7 @@ TH.color = spec_color /mob/living/carbon/human/makeTrail(turf/T, turf/start, direction, spec_color) - if((NOBLOOD in dna.species.species_traits) || !bleed_rate || bleedsuppress) + if((NOBLOOD in dna.species.species_traits) || !is_bleeding()) return spec_color = dna.species.blood_color ..() diff --git a/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm b/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm index a8a5d7da1a4de..501549c9cd813 100644 --- a/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm +++ b/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm @@ -84,11 +84,11 @@ L.reagents.remove_reagent(/datum/reagent/toxin/chloralhydrate, 100) if(L.blood_volume <= 500) //bandage them up and give em some blood if they're bleeding L.blood_volume += 30 - L.suppress_bloodloss(1800) + L.suppress_bloodloss(BLEED_DEEP_WOUND) if(L.getBruteLoss() >= 50) var/healing = min(L.getBruteLoss(), 120) L.adjustBruteLoss(-healing) - L.suppress_bloodloss(1800)//bandage their ass + L.suppress_bloodloss(BLEED_DEEP_WOUND)//bandage their ass FindTarget() /mob/living/simple_animal/hostile/cat_butcherer/proc/newvictim(var/mob/living/carbon/human/L) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index 4766f9269d10b..92353fa8a5813 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -114,7 +114,7 @@ While using this makes the system rely on OnFire, it still gives options for tim /obj/structure/elite_tumor name = "pulsing tumor" desc = "An odd, pulsing tumor sticking out of the ground. You feel compelled to reach out and touch it..." - armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) resistance_flags = INDESTRUCTIBLE icon = 'icons/obj/lavaland/tumor.dmi' icon_state = "tumor" diff --git a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm index e59213910dd7b..9b73ac41a7d3c 100644 --- a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm @@ -27,7 +27,7 @@ health = 350 spacewalk = TRUE a_intent = INTENT_HARM - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0.5, OXY = 1) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) speed = 0 attacktext = "chomps" attack_sound = 'sound/magic/demon_attack1.ogg' diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index c542890c09a6a..82a8a22d0b334 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -453,11 +453,15 @@ dam = 1 else dam = 0 - if((brute_heal > 0 && affecting.brute_dam > 0) || (burn_heal > 0 && affecting.burn_dam > 0)) + if((brute_heal > 0 && (affecting.brute_dam > 0 || (H.is_bleeding() && H.has_mechanical_bleeding()))) || (burn_heal > 0 && affecting.burn_dam > 0)) if(affecting.heal_damage(brute_heal, burn_heal, 0, BODYTYPE_ROBOTIC)) H.update_damage_overlays() - user.visible_message("[user] has fixed some of the [dam ? "dents on" : "burnt wires in"] [H]'s [parse_zone(affecting.body_zone)].", \ - "You fix some of the [dam ? "dents on" : "burnt wires in"] [H == user ? "your" : "[H]'s"] [parse_zone(affecting.body_zone)].") + if (brute_heal > 0 && H.is_bleeding() && H.has_mechanical_bleeding()) + H.cauterise_wounds(0.4) + user.visible_message("[user] has fixed some of the dents on [H]'s [parse_zone(affecting.body_zone)], reducing [H.p_their()] leaking to [H.get_bleed_rate_string()].") + else + user.visible_message("[user] has fixed some of the [dam ? "dents on" : "burnt wires in"] [H]'s [parse_zone(affecting.body_zone)].", \ + "You fix some of the [dam ? "dents on" : "burnt wires in"] [H == user ? "your" : "[H]'s"] [parse_zone(affecting.body_zone)].") return TRUE //successful heal else to_chat(user, "[affecting] is already in good condition!") diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index b8613a74f5337..f5285829b4d6a 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -56,7 +56,7 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar integrity_failure = 0.5 max_integrity = 100 - armor = list(MELEE = 0, BULLET = 20, LASER = 20, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 0, ACID = 0, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 20, LASER = 20, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 0, ACID = 0, STAMINA = 0, BLEED = 0) /// List of "connection ports" in this computer and the components with which they are plugged var/list/all_components = list() diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm index 31859ccdf9523..dc0972777808a 100644 --- a/code/modules/ninja/energy_katana.dm +++ b/code/modules/ninja/energy_katana.dm @@ -18,6 +18,7 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "tore", "ripped", "diced", "cut") slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT sharpness = IS_SHARP + bleed_force = BLEED_DEEP_WOUND max_integrity = 200 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE var/datum/effect_system/spark_spread/spark_system diff --git a/code/modules/ninja/suit/head.dm b/code/modules/ninja/suit/head.dm index 448cfc7586f1d..b02d10df78048 100644 --- a/code/modules/ninja/suit/head.dm +++ b/code/modules/ninja/suit/head.dm @@ -3,7 +3,7 @@ name = "ninja hood" icon_state = "s-ninja" item_state = "s-ninja_mask" - armor = list(MELEE = 60, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 25, FIRE = 100, ACID = 100, STAMINA = 60) + armor = list(MELEE = 60, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 25, FIRE = 100, ACID = 100, STAMINA = 60, BLEED = 60) strip_delay = 12 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF blockTracking = TRUE//Roughly the only unique thing about this helmet. diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm index cd9536822a4cc..6a0b16e6667c3 100644 --- a/code/modules/ninja/suit/shoes.dm +++ b/code/modules/ninja/suit/shoes.dm @@ -7,7 +7,7 @@ permeability_coefficient = 0.01 clothing_flags = NOSLIP resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - armor = list(MELEE = 60, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 100, ACID = 100, STAMINA = 60) + armor = list(MELEE = 60, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 100, ACID = 100, STAMINA = 60, BLEED = 60) strip_delay = 120 cold_protection = FEET min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index 85a77b3c93a75..765eb824444f7 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -19,7 +19,7 @@ Contents: allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/stock_parts/cell) slowdown = 1 resistance_flags = LAVA_PROOF | ACID_PROOF - armor = list(MELEE = 60, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 100, ACID = 100, STAMINA = 60) + armor = list(MELEE = 60, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 100, ACID = 100, STAMINA = 60, BLEED = 60) strip_delay = 12 actions_types = list(/datum/action/item_action/initialize_ninja_suit, /datum/action/item_action/ninjasmoke, /datum/action/item_action/ninjaboost, /datum/action/item_action/ninjapulse, /datum/action/item_action/ninjastar, /datum/action/item_action/ninjanet, /datum/action/item_action/ninja_sword_recall, /datum/action/item_action/ninja_stealth, /datum/action/item_action/toggle_glove) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index f82d9debd47aa..14fa0b9507970 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -103,6 +103,7 @@ colour = "crimson" custom_materials = list(/datum/material/gold = 750) sharpness = IS_SHARP + bleed_force = BLEED_SURFACE resistance_flags = FIRE_PROOF unique_reskin_icon = list("Oak" = "pen-fountain-o", "Gold" = "pen-fountain-g", @@ -243,6 +244,7 @@ embedding = list(embed_chance = EMBED_CHANCE, armour_block = 30) throwforce = initial(throwforce) sharpness = initial(sharpness) + bleed_force = initial(bleed_force) playsound(user, 'sound/weapons/saberoff.ogg', 5, 1) to_chat(user, "[src] can now be concealed.") else @@ -255,6 +257,7 @@ embedding = list(embed_chance = 200, max_damage_mult = 15, armour_block = 40) //rule of cool throwforce = 35 sharpness = IS_SHARP + bleed_force = BLEED_CUT playsound(user, 'sound/weapons/saberon.ogg', 5, 1) to_chat(user, "[src] is now active.") updateEmbedding() diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index cada253c82ce5..ac8bc8f6871da 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -135,7 +135,7 @@ if (!req_access) req_access = list(ACCESS_ENGINE_EQUIP) if (!armor) - armor = list(MELEE = 20, BULLET = 20, LASER = 10, ENERGY = 100, BOMB = 30, BIO = 100, RAD = 100, FIRE = 90, ACID = 50, STAMINA = 0) + armor = list(MELEE = 20, BULLET = 20, LASER = 10, ENERGY = 100, BOMB = 30, BIO = 100, RAD = 100, FIRE = 90, ACID = 50, STAMINA = 0, BLEED = 0) ..() GLOB.apcs_list += src diff --git a/code/modules/power/lighting/light_construct.dm b/code/modules/power/lighting/light_construct.dm index 96c23c8e7aaf4..47584ee0d1fe6 100644 --- a/code/modules/power/lighting/light_construct.dm +++ b/code/modules/power/lighting/light_construct.dm @@ -6,7 +6,7 @@ anchored = TRUE layer = WALL_OBJ_LAYER max_integrity = 200 - armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50, STAMINA = 0, BLEED = 0) var/stage = 1 var/fixture_type = "tube" diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index f05ed4eedfe24..ec26aa3603883 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -33,7 +33,7 @@ field_generator power level display use_power = NO_POWER_USE max_integrity = 500 //100% immune to lasers and energy projectiles since it absorbs their energy. - armor = list(MELEE = 25, BULLET = 10, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70, STAMINA = 0) + armor = list(MELEE = 25, BULLET = 10, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70, STAMINA = 0, BLEED = 0) var/power_level = 0 var/active = FG_OFFLINE var/power = 20 // Current amount of power diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index d09f453d60054..24feb2fc3d024 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -27,7 +27,7 @@ anchored = FALSE density = TRUE max_integrity = 500 - armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 80, STAMINA = 0) + armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 80, STAMINA = 0, BLEED = 0) var/obj/machinery/particle_accelerator/control_box/master = null var/construction_state = PA_CONSTRUCTION_UNSECURED diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm index 5d6cd84719890..be44f0a4c10da 100644 --- a/code/modules/projectiles/guns/magic/staff.dm +++ b/code/modules/projectiles/guns/magic/staff.dm @@ -92,6 +92,7 @@ armour_penetration = 75 block_flags = BLOCKING_ACTIVE | BLOCKING_NASTY | BLOCKING_PROJECTILE sharpness = IS_SHARP + bleed_force = BLEED_DEEP_WOUND max_charges = 4 /obj/item/gun/magic/staff/spellblade/Initialize(mapload) diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 0f0f4d90dc35a..b1d8739124380 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -7,3 +7,4 @@ armor_flag = BULLET hitsound_wall = "ricochet" impact_effect_type = /obj/effect/temp_visual/impact_effect + bleed_force = BLEED_DEEP_WOUND diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm index 2220d599a334e..22538dff1cff9 100644 --- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm +++ b/code/modules/projectiles/projectile/bullets/dart_syringe.dm @@ -2,6 +2,7 @@ name = "dart" icon_state = "cbbolt" damage = 6 + bleed_force = BLEED_SURFACE var/piercing = FALSE var/obj/item/reagent_containers/syringe/syringe = null diff --git a/code/modules/projectiles/projectile/bullets/dnainjector.dm b/code/modules/projectiles/projectile/bullets/dnainjector.dm index 081e7f22edb25..3872527018119 100644 --- a/code/modules/projectiles/projectile/bullets/dnainjector.dm +++ b/code/modules/projectiles/projectile/bullets/dnainjector.dm @@ -1,6 +1,7 @@ /obj/projectile/bullet/dnainjector name = "\improper DNA injector" icon_state = "syringeproj" + bleed_force = BLEED_SURFACE var/obj/item/dnainjector/injector damage = 5 hitsound_wall = "shatter" diff --git a/code/modules/projectiles/projectile/bullets/grenade.dm b/code/modules/projectiles/projectile/bullets/grenade.dm index 254594eaaf99f..16fa4a12e46ee 100644 --- a/code/modules/projectiles/projectile/bullets/grenade.dm +++ b/code/modules/projectiles/projectile/bullets/grenade.dm @@ -5,6 +5,7 @@ desc = "USE A WEEL GUN" icon_state= "bolter" damage = 60 + bleed_force = 0 /obj/projectile/bullet/a40mm/on_hit(atom/target, blocked = FALSE) ..() diff --git a/code/modules/projectiles/projectile/bullets/revolver.dm b/code/modules/projectiles/projectile/bullets/revolver.dm index 270e760067d94..85ceca64e6a12 100644 --- a/code/modules/projectiles/projectile/bullets/revolver.dm +++ b/code/modules/projectiles/projectile/bullets/revolver.dm @@ -35,6 +35,7 @@ name = ".38 Bouncy Rubber bullet" damage = 7 stamina = 27 + bleed_force = BLEED_SCRATCH ricochets_max = 5 ricochet_incidence_leeway = 70 ricochet_chance = 130 @@ -109,6 +110,7 @@ damage = 0 nodamage = TRUE martial_arts_no_deflect = TRUE + bleed_force = 0 /obj/projectile/bullet/c38/mime/on_hit(atom/target, blocked = FALSE) if(isliving(target)) diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index 66d3b56da9f91..86a443b61519b 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -8,6 +8,7 @@ damage = 10 stamina = 50 armour_penetration = -20 + bleed_force = BLEED_TINY /obj/projectile/bullet/incendiary/shotgun name = "incendiary slug" @@ -62,6 +63,7 @@ ricochets_max = 1 ricochet_chance = 50 ricochet_decay_chance = 0.9 + bleed_force = BLEED_SCRATCH /obj/projectile/bullet/pellet/shotgun_buckshot name = "buckshot pellet" @@ -80,6 +82,7 @@ ricochet_incidence_leeway = 60 ricochet_decay_chance = 0.75 armour_penetration = -20 + bleed_force = BLEED_TINY /obj/projectile/bullet/pellet/shotgun_rubbershot/Range() if(damage <= 0 && tile_dropoff_s == 0) @@ -131,6 +134,7 @@ /obj/projectile/bullet/scattershot damage = 18 + bleed_force = BLEED_SURFACE //Breaching Ammo @@ -139,6 +143,7 @@ desc = "A breaching round designed to destroy airlocks and windows with only a few shots, but is ineffective against other targets." hitsound = 'sound/weapons/sonic_jackhammer.ogg' damage = 10 //does shit damage to everything except doors and windows + bleed_force = BLEED_SURFACE /obj/projectile/bullet/shotgun_breaching/on_hit(atom/target) if(istype(target, /obj/structure/window) || istype(target, /obj/structure/grille) || istype(target, /obj/machinery/door) || istype(target, /obj/structure/door_assembly)) diff --git a/code/modules/projectiles/projectile/bullets/smg.dm b/code/modules/projectiles/projectile/bullets/smg.dm index a307ee3d36c2d..71b244598c3a3 100644 --- a/code/modules/projectiles/projectile/bullets/smg.dm +++ b/code/modules/projectiles/projectile/bullets/smg.dm @@ -31,3 +31,4 @@ ricochet_decay_chance = 0.8 ricochet_decay_damage = 0.85 armour_penetration = -15 + bleed_force = BLEED_SCRATCH diff --git a/code/modules/projectiles/projectile/bullets/special.dm b/code/modules/projectiles/projectile/bullets/special.dm index dc89a8e566667..6da5eb1a233c1 100644 --- a/code/modules/projectiles/projectile/bullets/special.dm +++ b/code/modules/projectiles/projectile/bullets/special.dm @@ -3,6 +3,7 @@ /obj/projectile/bullet/honker name = "banana" damage = 0 + bleed_force = 0 paralyze = 60 movement_type = FLYING projectile_piercing = ALL @@ -11,6 +12,7 @@ icon = 'icons/obj/hydroponics/harvest.dmi' icon_state = "banana" range = 200 + bleed_force = 0 /obj/projectile/bullet/honker/Initialize(mapload) . = ..() diff --git a/code/modules/projectiles/projectile/reusable/foam_dart.dm b/code/modules/projectiles/projectile/reusable/foam_dart.dm index 40bda2bd608ef..2401e2a77405b 100644 --- a/code/modules/projectiles/projectile/reusable/foam_dart.dm +++ b/code/modules/projectiles/projectile/reusable/foam_dart.dm @@ -9,6 +9,7 @@ ammo_type = /obj/item/ammo_casing/caseless/foam_dart range = 10 martial_arts_no_deflect = TRUE + bleed_force = 0 var/modified = FALSE var/obj/item/pen/pen = null diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index c7ce0a2806bbc..d6bae0797ad6c 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -1386,6 +1386,8 @@ M.adjustToxLoss(-5*REM, 0) M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -15*REM) M.adjustCloneLoss(-3*REM, 0) + if (M.blood_volume < BLOOD_VOLUME_NORMAL) + M.blood_volume = max(M.blood_volume, min(M.blood_volume + 4, BLOOD_VOLUME_NORMAL)) ..() . = 1 @@ -1672,7 +1674,7 @@ /datum/reagent/medicine/polypyr //This is intended to be an ingredient in advanced chems. name = "Polypyrylium Oligomers" - description = "A purple mixture of short polyelectrolyte chains not easily synthesized in the laboratory. It is valued as an intermediate in the synthesis of the cutting edge pharmaceuticals." + description = "A purple mixture of short polyelectrolyte chains not easily synthesized in the laboratory. It is a powerful pharmaceutical drug which provides minor healing and prevents bloodloss, making it incredibly useful for the synthesis of other drugs." reagent_state = SOLID color = "#9423FF" chem_flags = CHEMICAL_RNG_GENERAL | CHEMICAL_RNG_FUN | CHEMICAL_RNG_BOTANY | CHEMICAL_GOAL_BOTANIST_HARVEST @@ -1683,10 +1685,9 @@ /datum/reagent/medicine/polypyr/on_mob_life(mob/living/carbon/M) //I wanted a collection of small positive effects, this is as hard to obtain as coniine after all. M.adjustOrganLoss(ORGAN_SLOT_LUNGS, -0.25) M.adjustBruteLoss(-0.35, 0) - if(prob(50)) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - H.bleed_rate = max(H.bleed_rate - 1, 0) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + H.cauterise_wounds(0.1) ..() . = 1 @@ -1705,7 +1706,7 @@ /datum/reagent/medicine/stabilizing_nanites name = "Stabilizing nanites" - description = "Rapidly heals a patient out of crit by regenerating damaged cells. Nanites distribution in the blood makes them ineffective against moderately healthy targets." + description = "Rapidly heals a patient out of crit by regenerating damaged cells and causing blood to clot, preventing bleeding. Nanites distribution in the blood makes them ineffective against moderately healthy targets." reagent_state = LIQUID color = "#000000" chem_flags = CHEMICAL_NOT_SYNTH | CHEMICAL_RNG_GENERAL | CHEMICAL_RNG_FUN | CHEMICAL_RNG_BOTANY @@ -1722,4 +1723,12 @@ if(prob(20)) M.Jitter(5) M.losebreath = 0 + if (M.blood_volume < BLOOD_VOLUME_SAFE) + M.blood_volume = max(M.blood_volume, min(M.blood_volume + 4, BLOOD_VOLUME_SAFE)) ..() + +/datum/reagent/medicine/stabilizing_nanites/on_mob_metabolize(mob/living/L) + ADD_TRAIT(L, TRAIT_NO_BLEEDING, type) + +/datum/reagent/medicine/stabilizing_nanites/on_mob_end_metabolize(mob/living/L) + REMOVE_TRAIT(L, TRAIT_NO_BLEEDING, type) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 0fdb0d7b1f881..100afadf44b2f 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -320,6 +320,12 @@ return return ..() +/datum/reagent/fuel/unholywater/on_mob_metabolize(mob/living/L) + ADD_TRAIT(L, TRAIT_NO_BLEEDING, type) + +/datum/reagent/fuel/unholywater/on_mob_end_metabolize(mob/living/L) + REMOVE_TRAIT(L, TRAIT_NO_BLEEDING, type) + /datum/reagent/fuel/unholywater/on_mob_life(mob/living/carbon/M) if(iscultist(M)) M.drowsyness = max(M.drowsyness-5, 0) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index bcd32f4924c55..9892217b880e5 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -736,7 +736,8 @@ /datum/reagent/toxin/heparin/on_mob_life(mob/living/carbon/M) if(ishuman(M)) var/mob/living/carbon/human/H = M - H.bleed_rate = min(H.bleed_rate + 2, 8) + if (!H.is_bleeding()) + H.add_bleeding(BLEED_SURFACE) H.adjustBruteLoss(1, 0) //Brute damage increases with the amount they're bleeding . = 1 return ..() || . diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index e284a050710c7..37cb861f31e3b 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -3,17 +3,17 @@ desc = "Contains blood used for transfusion. Must be attached to an IV drip." icon = 'icons/obj/bloodpack.dmi' icon_state = "bloodpack" - volume = 200 + volume = 400 var/blood_type = null var/unique_blood = null var/labelled = 0 reagent_flags = TRANSPARENT | ABSOLUTELY_GRINDABLE - fill_icon_thresholds = list(10, 20, 30, 40, 50, 60, 70, 80, 90, 100) + fill_icon_thresholds = list(10, 40, 60, 80, 100, 120, 140, 160, 180, 200) /obj/item/reagent_containers/blood/Initialize(mapload) . = ..() if(blood_type != null) - reagents.add_reagent(unique_blood ? unique_blood : /datum/reagent/blood, 200, list("viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) + reagents.add_reagent(unique_blood ? unique_blood : /datum/reagent/blood, 400, list("viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) update_icon() /obj/item/reagent_containers/blood/examine(mob/user) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index c4f06eec402b9..91eae09b1b5e3 100755 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -245,7 +245,7 @@ flags_inv = HIDEHAIR slot_flags = ITEM_SLOT_HEAD resistance_flags = NONE - armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 75, ACID = 50, STAMINA = 0) //Weak melee protection, because you can wear it on your head + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 75, ACID = 50, STAMINA = 0, BLEED = 0) //Weak melee protection, because you can wear it on your head slot_equipment_priority = list( \ ITEM_SLOT_BACK, ITEM_SLOT_ID,\ ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING,\ diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index f23d7a069cbff..3addaeb41f56b 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -5,7 +5,7 @@ /obj/machinery/disposal icon = 'icons/obj/atmospherics/pipes/disposal.dmi' density = TRUE - armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30, STAMINA = 0) + armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30, STAMINA = 0, BLEED = 0) max_integrity = 200 resistance_flags = FIRE_PROOF interaction_flags_machine = INTERACT_MACHINE_OPEN | INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm index d3bf772f83c36..79c16ade1c3c1 100644 --- a/code/modules/recycling/disposal/pipe.dm +++ b/code/modules/recycling/disposal/pipe.dm @@ -9,7 +9,7 @@ obj_flags = CAN_BE_HIT | ON_BLUEPRINTS dir = NONE // dir will contain dominant direction for junction pipes max_integrity = 200 - armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30, STAMINA = 0) + armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30, STAMINA = 0, BLEED = 0) layer = DISPOSAL_PIPE_LAYER // slightly lower than wires and other pipes rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE var/dpdir = NONE // bitmask of pipe directions diff --git a/code/modules/research/xenobiology/crossbreeding/_misc.dm b/code/modules/research/xenobiology/crossbreeding/_misc.dm index 758439b839a68..8fee94597f33f 100644 --- a/code/modules/research/xenobiology/crossbreeding/_misc.dm +++ b/code/modules/research/xenobiology/crossbreeding/_misc.dm @@ -147,7 +147,7 @@ Slimecrossing Items icon_state = "frozen" density = TRUE max_integrity = 100 - armor = list(MELEE = 30, BULLET = 50, LASER = -50, ENERGY = -50, BOMB = 0, BIO = 100, RAD = 100, FIRE = -80, ACID = 30, STAMINA = 0) + armor = list(MELEE = 30, BULLET = 50, LASER = -50, ENERGY = -50, BOMB = 0, BIO = 100, RAD = 100, FIRE = -80, ACID = 30, STAMINA = 0, BLEED = 0) /obj/structure/ice_stasis/Initialize(mapload) . = ..() diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index 377677262d579..d52370b12d505 100644 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm @@ -62,7 +62,7 @@ Slimecrossing Weapons icon_state = "adamshield" item_state = "adamshield" w_class = WEIGHT_CLASS_HUGE - armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 80, ACID = 70, STAMINA = 70) + armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 80, ACID = 70, STAMINA = 70, BLEED = 0) slot_flags = ITEM_SLOT_BACK attack_weight = 2 block_power = 75 diff --git a/code/modules/research/xenobiology/crossbreeding/warping.dm b/code/modules/research/xenobiology/crossbreeding/warping.dm index 1bb76532b3ce2..fd73b247afa8a 100644 --- a/code/modules/research/xenobiology/crossbreeding/warping.dm +++ b/code/modules/research/xenobiology/crossbreeding/warping.dm @@ -379,7 +379,7 @@ GLOBAL_DATUM(blue_storage, /obj/item/storage/backpack/holding/bluespace) /obj/item/storage/backpack/holding/bluespace name = "warped rune" anchored = TRUE - armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100) + armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100, BLEED = 0) invisibility = INVISIBILITY_ABSTRACT resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF diff --git a/code/modules/ruins/lavalandruin_code/puzzle.dm b/code/modules/ruins/lavalandruin_code/puzzle.dm index d2ad5f06fdf73..432c4b2ea9155 100644 --- a/code/modules/ruins/lavalandruin_code/puzzle.dm +++ b/code/modules/ruins/lavalandruin_code/puzzle.dm @@ -296,7 +296,7 @@ //Some armor so it's harder to kill someone by mistake. /obj/structure/puzzle_element/prison - armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 50, RAD = 50, FIRE = 50, ACID = 50, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 50, RAD = 50, FIRE = 50, ACID = 50, STAMINA = 0, BLEED = 0) /obj/structure/puzzle_element/prison/relaymove(mob/user) return diff --git a/code/modules/shuttle/shuttle_creation/shuttle_creator.dm b/code/modules/shuttle/shuttle_creation/shuttle_creator.dm index a0f0ff5387a65..ba123aba0cd44 100644 --- a/code/modules/shuttle/shuttle_creation/shuttle_creator.dm +++ b/code/modules/shuttle/shuttle_creation/shuttle_creator.dm @@ -27,7 +27,7 @@ GLOBAL_LIST_EMPTY(custom_shuttle_machines) //Machines that require updating (He throw_range = 5 w_class = WEIGHT_CLASS_TINY req_access_txt = "11" - armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF var/ready = TRUE //pre-designation diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index 62ba5d084f0d5..fbf0caf06ce78 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -28,5 +28,5 @@ if(surgery.operated_bodypart) var/obj/item/bodypart/target_limb = surgery.operated_bodypart target_limb.drop_limb() - + target.cauterise_wounds() return 1 diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 24a5a9bb6b150..630aa534ff260 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -27,9 +27,7 @@ drop_limb() C.update_equipment_speed_mods() // Update in case speed affecting item unequipped by dismemberment - var/turf/location = C.loc - if(istype(location)) - C.add_splatter_floor(location) + C.add_bleeding(BLEED_CRITICAL) if(QDELETED(src)) //Could have dropped into lava/explosion/chasm/whatever return TRUE @@ -61,7 +59,7 @@ return FALSE . = list() var/turf/T = get_turf(C) - C.add_splatter_floor(T) + C.add_bleeding(BLEED_CRITICAL) playsound(get_turf(C), 'sound/misc/splort.ogg', 80, 1) for(var/X in C.internal_organs) var/obj/item/organ/O = X diff --git a/code/modules/surgery/cauterize.dm b/code/modules/surgery/cauterize.dm new file mode 100644 index 0000000000000..b5ff8d7d3a854 --- /dev/null +++ b/code/modules/surgery/cauterize.dm @@ -0,0 +1,15 @@ +/datum/surgery/cauterize + steps = list(/datum/surgery_step/incise, + /datum/surgery_step/retract_skin, + /datum/surgery_step/close) + + target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) + possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD) + requires_bodypart_type = FALSE + replaced_by = /datum/surgery + ignore_clothes = TRUE + +/datum/surgery/cauterize/can_start(mob/user, mob/living/carbon/target, target_zone) + if (..()) + return TRUE + return target.is_bleeding() diff --git a/code/modules/surgery/coronary_bypass.dm b/code/modules/surgery/coronary_bypass.dm index 2e49b36ade5c5..67b55e9399594 100644 --- a/code/modules/surgery/coronary_bypass.dm +++ b/code/modules/surgery/coronary_bypass.dm @@ -30,11 +30,11 @@ /datum/surgery_step/incise_heart/success(mob/user, mob/living/carbon/target, obj/item/tool, datum/surgery/surgery) if(ishuman(target)) var/mob/living/carbon/human/H = target - if (!(NOBLOOD in H.dna.species.species_traits)) + if (!((NOBLOOD in H.dna.species.species_traits) || HAS_TRAIT(H, TRAIT_NO_BLOOD))) display_results(user, target, "Blood pools around the incision in [H]'s heart.", "Blood pools around the incision in [H]'s heart.", "") - H.bleed_rate += 10 + H.add_bleeding(BLEED_DEEP_WOUND) H.adjustBruteLoss(10) return TRUE @@ -44,7 +44,7 @@ display_results(user, target, "You screw up, cutting too deeply into the heart!", "[user] screws up, causing blood to spurt out of [H]'s chest!", "[user] screws up, causing blood to spurt out of [H]'s chest!") - H.bleed_rate += 20 + H.add_bleeding(BLEED_CRITICAL) H.adjustOrganLoss(ORGAN_SLOT_HEART, 10) H.adjustBruteLoss(10) @@ -76,5 +76,5 @@ "[user] screws up, causing blood to spurt out of [H]'s chest profusely!", "[user] screws up, causing blood to spurt out of [H]'s chest profusely!") H.adjustOrganLoss(ORGAN_SLOT_HEART, 20) - H.bleed_rate += 30 + H.add_bleeding(BLEED_CRITICAL) return FALSE diff --git a/code/modules/surgery/dental_implant.dm b/code/modules/surgery/dental_implant.dm index 7d6dfe54e1165..0b448fa3906cc 100644 --- a/code/modules/surgery/dental_implant.dm +++ b/code/modules/surgery/dental_implant.dm @@ -18,6 +18,7 @@ if(!istype(tool)) return 0 + target.cauterise_wounds() user.transferItemToLoc(tool, target, TRUE) var/datum/action/item_action/hands_free/activate_pill/P = new(tool) diff --git a/code/modules/surgery/mechanic_steps.dm b/code/modules/surgery/mechanic_steps.dm index 4d180a7014100..230353d9f3ca5 100644 --- a/code/modules/surgery/mechanic_steps.dm +++ b/code/modules/surgery/mechanic_steps.dm @@ -48,6 +48,10 @@ return TRUE +/datum/surgery_step/mechanic_close/success(mob/user, mob/living/carbon/target, obj/item/tool, datum/surgery/surgery, default_display_results) + target.cauterise_wounds() + return ..() + //prepare electronics /datum/surgery_step/prepare_electronics name = "prepare electronics" diff --git a/code/modules/surgery/organic_steps.dm b/code/modules/surgery/organic_steps.dm index 9243218101665..900f9b7d19605 100644 --- a/code/modules/surgery/organic_steps.dm +++ b/code/modules/surgery/organic_steps.dm @@ -22,11 +22,11 @@ /datum/surgery_step/incise/success(mob/user, mob/living/carbon/target, obj/item/tool, datum/surgery/surgery) if ishuman(target) var/mob/living/carbon/human/H = target - if (!(NOBLOOD in H.dna.species.species_traits)) + if (!((NOBLOOD in H.dna.species.species_traits) || HAS_TRAIT(H, TRAIT_NO_BLOOD))) display_results(user, target, "Blood pools around the incision in [H]'s [parse_zone(surgery.location)].", "Blood pools around the incision in [H]'s [parse_zone(surgery.location)].", "") - H.bleed_rate += 3 + H.add_bleeding(BLEED_CUT) return TRUE /datum/surgery_step/incise/nobleed //silly friendly! @@ -95,6 +95,7 @@ /datum/surgery_step/close/success(mob/user, mob/living/carbon/target, obj/item/tool, datum/surgery/surgery) if(locate(/datum/surgery_step/saw) in surgery.steps) target.heal_bodypart_damage(45,0) + target.cauterise_wounds() return ..() diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 516c027a3476a..53aa18210b69f 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -321,7 +321,7 @@ else if((findtext(message, bleed_words))) cooldown = COOLDOWN_DAMAGE for(var/mob/living/carbon/human/H in listeners) - H.bleed_rate += (5 * power_multiplier) + H.add_bleeding(BLEED_SURFACE) //FIRE else if((findtext(message, burn_words))) diff --git a/code/modules/surgery/prosthetic_replacement.dm b/code/modules/surgery/prosthetic_replacement.dm index f74a63eaeec9e..b6ba55fb11304 100644 --- a/code/modules/surgery/prosthetic_replacement.dm +++ b/code/modules/surgery/prosthetic_replacement.dm @@ -77,6 +77,7 @@ display_results(user, target, "You succeed in replacing [target]'s [parse_zone(surgery.location)].", "[user] successfully replaces [target]'s [parse_zone(surgery.location)] with [tool]!", "[user] successfully replaces [target]'s [parse_zone(surgery.location)]!") + target.cauterise_wounds() return 1 else var/obj/item/bodypart/L = target.newBodyPart(surgery.location, FALSE, FALSE) @@ -90,16 +91,20 @@ if(istype(tool, /obj/item/chainsaw/energy/doom)) var/obj/item/mounted_chainsaw/super/new_arm = new(target) surgery.location == BODY_ZONE_R_ARM ? target.put_in_r_hand(new_arm) : target.put_in_l_hand(new_arm) + target.cauterise_wounds() return 1 else if(istype(tool, /obj/item/chainsaw/energy)) var/obj/item/mounted_chainsaw/energy/new_arm = new(target) surgery.location == BODY_ZONE_R_ARM ? target.put_in_r_hand(new_arm) : target.put_in_l_hand(new_arm) + target.cauterise_wounds() return 1 else if(istype(tool, /obj/item/chainsaw)) var/obj/item/mounted_chainsaw/normal/new_arm = new(target) surgery.location == BODY_ZONE_R_ARM ? target.put_in_r_hand(new_arm) : target.put_in_l_hand(new_arm) + target.cauterise_wounds() return 1 else if(istype(tool, /obj/item/melee/synthetic_arm_blade)) var/obj/item/melee/arm_blade/new_arm = new(target,TRUE,TRUE) surgery.location == BODY_ZONE_R_ARM ? target.put_in_r_hand(new_arm) : target.put_in_l_hand(new_arm) + target.cauterise_wounds() return 1 diff --git a/code/modules/surgery/remove_embedded_object.dm b/code/modules/surgery/remove_embedded_object.dm index 858946b3e9d92..34ce7cd96dfa0 100644 --- a/code/modules/surgery/remove_embedded_object.dm +++ b/code/modules/surgery/remove_embedded_object.dm @@ -27,6 +27,7 @@ if(L) if(ishuman(target)) var/mob/living/carbon/human/H = target + H.cauterise_wounds() var/objects = 0 for(var/obj/item/I in L.embedded_objects) objects++ diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 3f0095d2d3970..aa65fb0d06b71 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -150,6 +150,7 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "tore", "ripped", "diced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP_ACCURATE + bleed_force = BLEED_CUT tool_behaviour = TOOL_SCALPEL toolspeed = 1 @@ -173,6 +174,7 @@ toolspeed = 0.5 hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP_ACCURATE + bleed_force = BLEED_CUT /obj/item/scalpel/suicide_act(mob/living/user) user.visible_message("[user] is slitting [user.p_their()] [pick("wrists", "throat", "stomach")] with [src]! It looks like [user.p_theyre()] trying to commit suicide!") @@ -196,6 +198,7 @@ custom_materials = list(/datum/material/iron=10000, /datum/material/glass=6000) attack_verb = list("attacked", "slashed", "sawed", "cut") sharpness = IS_SHARP + bleed_force = BLEED_DEEP_WOUND tool_behaviour = TOOL_SAW toolspeed = 1 @@ -220,6 +223,7 @@ toolspeed = 0.5 attack_verb = list("attacked", "slashed", "sawed", "cut") sharpness = IS_SHARP + bleed_force = BLEED_DEEP_WOUND /obj/item/hacksaw name = "hacksaw" @@ -342,7 +346,8 @@ light_range = 1 light_color = LIGHT_COLOR_GREEN sharpness = IS_SHARP_ACCURATE - + // It cauterises the wound it causes + bleed_force = 0 /obj/item/scalpel/advanced/attack_self(mob/user) playsound(get_turf(user), 'sound/machines/click.ogg', 50, TRUE) diff --git a/code/modules/vehicles/_vehicle.dm b/code/modules/vehicles/_vehicle.dm index bf3584f74e24d..868028da55a0b 100644 --- a/code/modules/vehicles/_vehicle.dm +++ b/code/modules/vehicles/_vehicle.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/vehicles.dmi' icon_state = "error" max_integrity = 300 - armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 60, ACID = 60, STAMINA = 0) + armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 60, ACID = 60, STAMINA = 0, BLEED = 0) density = TRUE anchored = FALSE COOLDOWN_DECLARE(cooldown_vehicle_move) diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm index 7f756ba6cc3f8..e6baa174d8dfa 100644 --- a/code/modules/vehicles/atv.dm +++ b/code/modules/vehicles/atv.dm @@ -4,7 +4,7 @@ desc = "An all-terrain vehicle built for traversing rough terrain with ease. One of the few old-Earth technologies that are still relevant on most planet-bound outposts." icon_state = "atv" max_integrity = 150 - armor = list(MELEE = 50, BULLET = 25, LASER = 20, ENERGY = 0, BOMB = 50, BIO = 0, RAD = 0, FIRE = 60, ACID = 60, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 25, LASER = 20, ENERGY = 0, BOMB = 50, BIO = 0, RAD = 0, FIRE = 60, ACID = 60, STAMINA = 0, BLEED = 0) key_type = /obj/item/key integrity_failure = 0.5 var/static/mutable_appearance/atvcover diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm index 2f48b6e31bc8a..464ea93ad551e 100644 --- a/code/modules/vehicles/cars/clowncar.dm +++ b/code/modules/vehicles/cars/clowncar.dm @@ -3,7 +3,7 @@ desc = "How someone could even fit in there is beyond me." icon_state = "clowncar" max_integrity = 150 - armor = list(MELEE = 70, BULLET = 40, LASER = 40, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, STAMINA = 0) + armor = list(MELEE = 70, BULLET = 40, LASER = 40, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 80, ACID = 80, STAMINA = 0, BLEED = 0) enter_delay = 20 max_occupants = 50 movedelay = 0.6 diff --git a/code/modules/vehicles/mecha/combat/combat.dm b/code/modules/vehicles/mecha/combat/combat.dm index 6a6636b4b45a6..af78cadb9b7df 100644 --- a/code/modules/vehicles/mecha/combat/combat.dm +++ b/code/modules/vehicles/mecha/combat/combat.dm @@ -2,7 +2,7 @@ force = 30 internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY) internal_damage_threshold = 50 - armor = list(MELEE = 30, BULLET = 30, LASER = 15, ENERGY = 20, BOMB = 20, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 30, BULLET = 30, LASER = 15, ENERGY = 20, BOMB = 20, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) mouse_pointer = 'icons/mecha/mecha_mouse.dmi' destruction_sleep_duration = 40 exit_delay = 40 diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm index fa04c84a77df6..090fa2553f4ee 100644 --- a/code/modules/vehicles/mecha/combat/durand.dm +++ b/code/modules/vehicles/mecha/combat/durand.dm @@ -7,7 +7,7 @@ dir_in = 1 //Facing North. max_integrity = 400 deflect_chance = 20 - armor = list(MELEE = 40, BULLET = 35, LASER = 15, ENERGY = 10, BOMB = 20, BIO = 0, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 40, BULLET = 35, LASER = 15, ENERGY = 10, BOMB = 20, BIO = 0, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) max_temperature = 30000 force = 40 wreckage = /obj/structure/mecha_wreckage/durand diff --git a/code/modules/vehicles/mecha/combat/gygax.dm b/code/modules/vehicles/mecha/combat/gygax.dm index 1ab526e29d6c7..9adf74ddd5470 100644 --- a/code/modules/vehicles/mecha/combat/gygax.dm +++ b/code/modules/vehicles/mecha/combat/gygax.dm @@ -7,7 +7,7 @@ dir_in = 1 //Facing North. max_integrity = 250 deflect_chance = 5 - armor = list(MELEE = 25, BULLET = 20, LASER = 30, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 25, BULLET = 20, LASER = 30, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) max_temperature = 25000 leg_overload_coeff = 80 force = 25 @@ -23,7 +23,7 @@ base_icon_state = "darkgygax" max_integrity = 300 deflect_chance = 15 - armor = list(MELEE = 40, BULLET = 40, LASER = 50, ENERGY = 35, BOMB = 20, BIO = 0, RAD = 20, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 40, BULLET = 40, LASER = 50, ENERGY = 35, BOMB = 20, BIO = 0, RAD = 20, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) max_temperature = 35000 leg_overload_coeff = 70 operation_req_access = list(ACCESS_SYNDICATE) diff --git a/code/modules/vehicles/mecha/combat/honker.dm b/code/modules/vehicles/mecha/combat/honker.dm index 7666b68d688b9..d9a8d0fe40fc5 100644 --- a/code/modules/vehicles/mecha/combat/honker.dm +++ b/code/modules/vehicles/mecha/combat/honker.dm @@ -7,7 +7,7 @@ max_integrity = 140 deflect_chance = 60 internal_damage_threshold = 60 - armor = list(MELEE = -20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = -20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) max_temperature = 25000 operation_req_access = list(ACCESS_THEATRE) internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_THEATRE) diff --git a/code/modules/vehicles/mecha/combat/marauder.dm b/code/modules/vehicles/mecha/combat/marauder.dm index 42d5cf7bb92ee..7a22dfdb54c44 100644 --- a/code/modules/vehicles/mecha/combat/marauder.dm +++ b/code/modules/vehicles/mecha/combat/marauder.dm @@ -6,7 +6,7 @@ movedelay = 5 max_integrity = 500 deflect_chance = 25 - armor = list(MELEE = 50, BULLET = 55, LASER = 40, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 60, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 50, BULLET = 55, LASER = 40, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 60, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) max_temperature = 60000 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF operation_req_access = list(ACCESS_CENT_SPECOPS) diff --git a/code/modules/vehicles/mecha/combat/phazon.dm b/code/modules/vehicles/mecha/combat/phazon.dm index d7d3f805ef7f0..af921d340fa0e 100644 --- a/code/modules/vehicles/mecha/combat/phazon.dm +++ b/code/modules/vehicles/mecha/combat/phazon.dm @@ -8,7 +8,7 @@ step_energy_drain = 3 max_integrity = 200 deflect_chance = 30 - armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) max_temperature = 25000 wreckage = /obj/structure/mecha_wreckage/phazon internal_damage_threshold = 25 diff --git a/code/modules/vehicles/mecha/combat/reticence.dm b/code/modules/vehicles/mecha/combat/reticence.dm index c177124e7943d..420133de3861a 100644 --- a/code/modules/vehicles/mecha/combat/reticence.dm +++ b/code/modules/vehicles/mecha/combat/reticence.dm @@ -7,7 +7,7 @@ dir_in = 1 //Facing North. max_integrity = 100 deflect_chance = 3 - armor = list(MELEE = 25, BULLET = 20, LASER = 30, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 25, BULLET = 20, LASER = 30, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) max_temperature = 15000 wreckage = /obj/structure/mecha_wreckage/reticence operation_req_access = list(ACCESS_THEATRE) diff --git a/code/modules/vehicles/mecha/working/ripley.dm b/code/modules/vehicles/mecha/working/ripley.dm index ebfbd769cff01..048577cd73994 100644 --- a/code/modules/vehicles/mecha/working/ripley.dm +++ b/code/modules/vehicles/mecha/working/ripley.dm @@ -13,7 +13,7 @@ max_integrity = 200 lights_power = 7 deflect_chance = 15 - armor = list(MELEE = 40, BULLET = 20, LASER = 10, ENERGY = 20, BOMB = 40, BIO = 0, RAD = 20, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 40, BULLET = 20, LASER = 10, ENERGY = 20, BOMB = 40, BIO = 0, RAD = 20, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) max_equip = 6 wreckage = /obj/structure/mecha_wreckage/ripley internals_req_access = list(ACCESS_MECH_ENGINE, ACCESS_MECH_SCIENCE, ACCESS_MECH_MINING) @@ -66,7 +66,7 @@ fast_pressure_step_in = 1.75 //step_in while in low pressure conditions slow_pressure_step_in = 3 //step_in while in normal pressure conditions movedelay = 4 - armor = list(MELEE = 40, BULLET = 20, LASER = 10, ENERGY = 20, BOMB = 40, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 40, BULLET = 20, LASER = 10, ENERGY = 20, BOMB = 40, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) wreckage = /obj/structure/mecha_wreckage/ripley/mk2 enclosed = TRUE enter_delay = 40 @@ -93,7 +93,7 @@ resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF rad_flags = RAD_PROTECT_CONTENTS lights_power = 7 - armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 60, BIO = 0, RAD = 70, FIRE = 100, ACID = 100, STAMINA = 0) + armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 60, BIO = 0, RAD = 70, FIRE = 100, ACID = 100, STAMINA = 0, BLEED = 0) max_equip = 5 // More armor, less tools wreckage = /obj/structure/mecha_wreckage/ripley/firefighter enclosed = TRUE diff --git a/code/modules/vehicles/secway.dm b/code/modules/vehicles/secway.dm index ba22f4666d8b9..4d2a4f5178421 100644 --- a/code/modules/vehicles/secway.dm +++ b/code/modules/vehicles/secway.dm @@ -4,7 +4,7 @@ desc = "A brave security cyborg gave its life to help you look like a complete tool." icon_state = "secway" max_integrity = 100 - armor = list(MELEE = 20, BULLET = 15, LASER = 10, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 60, ACID = 60, STAMINA = 0) + armor = list(MELEE = 20, BULLET = 15, LASER = 10, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 60, ACID = 60, STAMINA = 0, BLEED = 0) key_type = /obj/item/key/security integrity_failure = 0.5 diff --git a/code/modules/vehicles/wheelchair.dm b/code/modules/vehicles/wheelchair.dm index 76c70302ec73f..5ff32254a062a 100644 --- a/code/modules/vehicles/wheelchair.dm +++ b/code/modules/vehicles/wheelchair.dm @@ -5,7 +5,7 @@ icon_state = "wheelchair" layer = OBJ_LAYER max_integrity = 100 - armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 20, ACID = 30, STAMINA = 0) //Wheelchairs aren't super tough yo + armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 20, ACID = 30, STAMINA = 0, BLEED = 0) //Wheelchairs aren't super tough yo legs_required = 0 //You'll probably be using this if you don't have legs canmove = TRUE density = FALSE //Thought I couldn't fix this one easily, phew diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index df4b672a68252..ceaae3686798e 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -59,7 +59,7 @@ verb_exclaim = "beeps" max_integrity = 300 integrity_failure = 0.33 - armor = list(MELEE = 20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70, STAMINA = 0) + armor = list(MELEE = 20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70, STAMINA = 0, BLEED = 0) circuit = /obj/item/circuitboard/machine/vendor clicksound = 'sound/machines/pda_button1.ogg' dept_req_for_free = ACCOUNT_SRV_BITFLAG diff --git a/code/modules/vending/liberation.dm b/code/modules/vending/liberation.dm index 3023e2f45ab52..f217a7ead39c1 100644 --- a/code/modules/vending/liberation.dm +++ b/code/modules/vending/liberation.dm @@ -26,7 +26,7 @@ contraband = list(/obj/item/clothing/under/misc/patriotsuit = 3, /obj/item/bedsheet/patriot = 5, /obj/item/food/burger/superbite = 3) //U S A - armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0) + armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF default_price = 300 extra_price = 500 diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm index 86117c87a1c0a..09ffd5acef36b 100644 --- a/code/modules/vending/liberation_toy.dm +++ b/code/modules/vending/liberation_toy.dm @@ -22,7 +22,7 @@ /obj/item/toy/katana = 10, /obj/item/dualsaber/toy = 5, /obj/item/toy/cards/deck/syndicate = 10) //Gambling and it hurts, making it a +18 item - armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0) + armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/donksoft default_price = 75 diff --git a/code/modules/vending/magivend.dm b/code/modules/vending/magivend.dm index 6c0f75da728d2..a01f7615886a6 100644 --- a/code/modules/vending/magivend.dm +++ b/code/modules/vending/magivend.dm @@ -14,7 +14,7 @@ /obj/item/clothing/shoes/sandal/magic = 1, /obj/item/staff = 2) contraband = list(/obj/item/reagent_containers/glass/bottle/wizarditis = 1) //No one can get to the machine to hack it anyways; for the lulz - Microwave - armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0) + armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF default_price = 25 extra_price = 50 diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm index f0f745c5ff94f..09a84878e17c5 100644 --- a/code/modules/vending/medical.dm +++ b/code/modules/vending/medical.dm @@ -31,7 +31,7 @@ /obj/item/pinpointer/crew = 2, /obj/item/healthanalyzer = 2, /obj/item/wrench/medical = 1) - armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0) + armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/medical default_price = 25 diff --git a/code/modules/vending/medical_wall.dm b/code/modules/vending/medical_wall.dm index ef4518a8eca4b..cc87d55106ac1 100644 --- a/code/modules/vending/medical_wall.dm +++ b/code/modules/vending/medical_wall.dm @@ -13,7 +13,7 @@ /obj/item/reagent_containers/medspray/sterilizine = 3) contraband = list(/obj/item/reagent_containers/glass/bottle/toxin = 1, /obj/item/reagent_containers/glass/bottle/morphine = 1) - armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0) + armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/wallmed default_price = 25 diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm index 050e2f22cc8b9..e43d014bf1ea4 100644 --- a/code/modules/vending/toys.dm +++ b/code/modules/vending/toys.dm @@ -24,7 +24,7 @@ /obj/item/toy/katana = 10, /obj/item/dualsaber/toy = 5) - armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0) + armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/donksoft default_price = 75 diff --git a/code/modules/vending/youtool.dm b/code/modules/vending/youtool.dm index bf62164dd3a5c..93df6958ea3fc 100644 --- a/code/modules/vending/youtool.dm +++ b/code/modules/vending/youtool.dm @@ -23,7 +23,7 @@ /obj/item/clothing/head/utility/welding = 2, /obj/item/clothing/gloves/color/yellow = 1) refill_canister = /obj/item/vending_refill/tool - armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 70, STAMINA = 0) + armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 70, STAMINA = 0, BLEED = 0) resistance_flags = FIRE_PROOF default_price = 10 extra_price = 80 diff --git a/code/modules/xenoarchaeology/traits/xenoartifact_minors.dm b/code/modules/xenoarchaeology/traits/xenoartifact_minors.dm index cfc0474e6deec..4c556a919ea81 100644 --- a/code/modules/xenoarchaeology/traits/xenoartifact_minors.dm +++ b/code/modules/xenoarchaeology/traits/xenoartifact_minors.dm @@ -81,6 +81,7 @@ /datum/xenoartifact_trait/minor/sharp/on_init(obj/item/xenoartifact/X) X.sharpness = IS_SHARP_ACCURATE + X.bleed_force = BLEED_CUT X.force = X.charge_req*0.12 X.attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "tore", "ripped", "diced", "cut") X.attack_weight = 2 diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 34a22bf26e4c2..c6772756c8720 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index 4c71ed24455b1..904168687e79e 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi index 8610b3cf001c4..eb591381cd35a 100644 Binary files a/icons/obj/items_and_weapons.dmi and b/icons/obj/items_and_weapons.dmi differ diff --git a/sound/surgery/blood_wound.ogg b/sound/surgery/blood_wound.ogg new file mode 100644 index 0000000000000..e8f03caf63f8f Binary files /dev/null and b/sound/surgery/blood_wound.ogg differ diff --git a/sound/weapons/shrapnel.ogg b/sound/weapons/shrapnel.ogg new file mode 100644 index 0000000000000..8582538411359 Binary files /dev/null and b/sound/weapons/shrapnel.ogg differ