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