diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 31ba83fc444..03789291cad 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -397,6 +397,11 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M var/obj/item/organ/external/S = H.bodyparts_by_name[user.zone_sel.selecting] + + if(H.bleed_rate > 1 && H.isSynthetic()) + if(get_fuel() >= 1) + H.bleed_rate = 0 + user.visible_message("\The [user] welds a leak on \the [M] with \the [src].") if(!S) return @@ -417,6 +422,7 @@ playsound(src.loc, usesound, 50, 1) S.heal_damage(15,0,0,1) user.visible_message("\The [user] patches some dents on \the [M]'s [S.name] with \the [src].") + else if(S.open != 2) to_chat(user, "Need more welding fuel!") return 1 diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index d970b696ca4..f0ad4855d50 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -324,16 +324,17 @@ else msg += "[t_He] [t_is] quite chubby.\n" - if(blood_volume < BLOOD_VOLUME_SAFE) + if(!isSynthetic() && blood_volume < BLOOD_VOLUME_SAFE) msg += "[t_He] [t_has] pale skin.\n" if(bleedsuppress) msg += "[t_He] [t_is] bandaged with something.\n" else if(bleed_rate) + var/bleed_message = !isSynthetic() ? "bleeding" : "leaking" if(reagents.has_reagent("heparin")) - msg += "[t_He] [t_is] bleeding uncontrollably!\n" + msg += "[t_He] [t_is] [bleed_message] uncontrollably!\n" else - msg += "[t_He] [t_is] bleeding!\n" + msg += "[t_He] [t_is] [bleed_message]!\n" if(reagents.has_reagent("teslium")) msg += "[t_He] is emitting a gentle blue glow!\n" diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index ccddc56ca16..8e8c1a18ae8 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -248,7 +248,7 @@ if(!L || L && (L.status & ORGAN_DEAD)) if(health >= config.health_threshold_crit) adjustOxyLoss(HUMAN_MAX_OXYLOSS + 1) - else + else if(!(NOCRITDAMAGE in species.species_traits)) adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS) failed_last_breath = TRUE diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index d8c80c8b3fe..bc9f58be6d2 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -304,6 +304,10 @@ H.setOxyLoss(0) H.SetLoseBreath(0) + var/takes_crit_damage = (!(NOCRITDAMAGE in species_traits)) + if((H.health <= config.health_threshold_crit) && takes_crit_damage) + H.adjustBruteLoss(1) + /datum/species/proc/handle_dna(var/mob/living/carbon/C, var/remove) //Handles DNA mutations, as that doesn't work at init. Make sure you call genemutcheck on any blocks changed here return diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 6bf8ceeb859..63479b98366 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -935,20 +935,21 @@ remains_type = /obj/effect/decal/remains/robot eyes = "blank_eyes" - brute_mod = 2.5 // 100% * 2.5 * 0.6 (robolimbs) ~= 150% - burn_mod = 2.5 // So they take 50% extra damage from brute/burn overall. + brute_mod = 2.28 // 100% * 2.28 * 0.6 (robolimbs) ~= 150% + burn_mod = 2.28 // So they take 50% extra damage from brute/burn overall. tox_mod = 0 clone_mod = 0 oxy_mod = 0 death_message = "gives one shrill beep before falling limp, their monitor flashing blue before completely shutting off..." - species_traits = list(IS_WHITELISTED, NO_BREATHE, NO_SCAN, NO_BLOOD, NO_PAIN, NO_DNA, RADIMMUNE, VIRUSIMMUNE, NOTRANSSTING) + species_traits = list(IS_WHITELISTED, NO_BREATHE, NO_SCAN, NO_INTORGANS, NO_PAIN, NO_DNA, RADIMMUNE, VIRUSIMMUNE, NOTRANSSTING) clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_SKIN_COLOR | HAS_HEAD_MARKINGS | HAS_HEAD_ACCESSORY | ALL_RPARTS dietflags = 0 //IPCs can't eat, so no diet taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE - blood_color = "#030303" + blood_color = "#3C3C3C" + exotic_blood = "oil" blood_damage_type = BURN //Default styles for created mobs. diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm index a67fcd0f751..586b197945d 100644 --- a/code/modules/reagents/chemistry/reagents/misc.dm +++ b/code/modules/reagents/chemistry/reagents/misc.dm @@ -194,6 +194,11 @@ reagent_state = LIQUID color = "#3C3C3C" taste_message = "motor oil" + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/oil/reaction_turf(turf/T, volume) + if(volume >= 3 && !isspaceturf(T) && !locate(/obj/effect/decal/cleanable/blood/oil) in T) + new /obj/effect/decal/cleanable/blood/oil(T) /datum/reagent/iodine name = "Iodine" diff --git a/code/modules/surgery/organs/blood.dm b/code/modules/surgery/organs/blood.dm index 88e8341d37c..f2e2c8d83a5 100644 --- a/code/modules/surgery/organs/blood.dm +++ b/code/modules/surgery/organs/blood.dm @@ -1,4 +1,4 @@ -/**************************************************** +F/**************************************************** BLOOD SYSTEM ****************************************************/ @@ -64,7 +64,7 @@ var/obj/item/organ/external/BP = X var/brutedamage = BP.brute_dam - if(BP.status & ORGAN_ROBOT) + if((BP.status & ORGAN_ROBOT) && !isSynthetic()) continue //We want an accurate reading of .len diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 39c79865b62..ed70de522f1 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -83,7 +83,7 @@ if(!breath || (breath.total_moles() == 0)) if(H.health >= config.health_threshold_crit) H.adjustOxyLoss(HUMAN_MAX_OXYLOSS) - else + else if(!(NOCRITDAMAGE in H.species.species_traits)) H.adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS) H.failed_last_breath = TRUE diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 53219ed8a14..da99e3620e0 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -205,6 +205,9 @@ if(!affected) return -1 + if(target.bleed_rate > 1)//heal bleeding if it exists while we are here. + target.bleed_rate = 0 + if(implement_type in implements_heal_burn) current_type = "burn" var/obj/item/stack/cable_coil/C = tool