diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index db56d680a4b..5aa321ca415 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -273,7 +273,7 @@
"stoxin_amount" = H.reagents.get_reagent_amount("stoxin"),
"bicaridine_amount" = H.reagents.get_reagent_amount("bicaridine"),
"dermaline_amount" = H.reagents.get_reagent_amount("dermaline"),
- "blood_amount" = round(H.vessel.get_reagent_amount("blood") / H.species.blood_volume)*100,
+ "blood_amount" = round((H.vessel.get_reagent_amount("blood") / H.species.blood_volume)*100),
"disabilities" = H.sdisabilities,
"lung_ruptured" = H.is_lung_ruptured(),
"external_organs" = H.organs.Copy(),
diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm
index d694fd5d4ca..d2fa5478cbb 100644
--- a/code/game/machinery/iv_drip.dm
+++ b/code/game/machinery/iv_drip.dm
@@ -110,7 +110,7 @@
return
// If the human is losing too much blood, beep.
- if(T.vessel.get_reagent_amount("blood") < BLOOD_VOLUME_SAFE) if(prob(5))
+ if(((T.vessel.get_reagent_amount("blood")/T.species.blood_volume)*100) < BLOOD_VOLUME_SAFE)
visible_message("\The [src] beeps loudly.")
var/datum/reagent/B = T.take_blood(beaker,amount)
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 63df3158dc1..ef875940adc 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -61,7 +61,7 @@ REAGENT SCANNER
user.show_message("Analyzing Results for [M]:")
user.show_message("Overall Status: dead")
else
- user.show_message("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[M.health - M.halloss]% healthy"]")
+ user.show_message("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[round(M.health/M.maxHealth)*100]% healthy"]")
user.show_message(" Key: Suffocation/Toxin/Burns/Brute", 1)
user.show_message(" Damage Specifics: [OX] - [TX] - [BU] - [BR]")
user.show_message("Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1)
@@ -158,10 +158,10 @@ REAGENT SCANNER
user.show_message(text("Internal bleeding detected. Advanced scanner required for location."), 1)
break
if(M:vessel)
- var/blood_volume = round(M:vessel.get_reagent_amount("blood"))
- var/blood_percent = round(blood_volume / H.species.blood_volume)*100
- var/blood_type = M.dna.b_type
- if(blood_percent <= BLOOD_VOLUME_SAFE && blood_percent > BLOOD_VOLUME_BAD)
+ var/blood_volume = H.vessel.get_reagent_amount("blood")
+ var/blood_percent = round((blood_volume / H.species.blood_volume)*100)
+ var/blood_type = H.dna.b_type
+ if((blood_percent <= BLOOD_VOLUME_SAFE) && (blood_percent > BLOOD_VOLUME_BAD))
user.show_message("Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]")
else if(blood_percent <= BLOOD_VOLUME_BAD)
user.show_message("Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl. Type: [blood_type]")
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index c799eabf953..6b9cbf02589 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -4,7 +4,6 @@
ingested = new/datum/reagents/metabolism(1000, src, CHEM_INGEST)
touching = new/datum/reagents/metabolism(1000, src, CHEM_TOUCH)
reagents = bloodstr
-
..()
/mob/living/carbon/Life()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index a0636f453f4..94ee52c8221 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -895,7 +895,7 @@
/mob/living/carbon/human/revive()
if(should_have_organ(O_HEART))
- vessel.add_reagent("blood",560-vessel.total_volume)
+ vessel.add_reagent("blood",species.blood_volume-vessel.total_volume)
fixblood()
species.create_organs(src) // Reset our organs/limbs.
@@ -1113,7 +1113,10 @@
spawn(0)
regenerate_icons()
- vessel.add_reagent("blood",560-vessel.total_volume)
+ if(vessel.total_volume < species.blood_volume)
+ vessel.add_reagent("blood", species.blood_volume - vessel.total_volume)
+ else if(vessel.total_volume > species.blood_volume)
+ vessel.remove_reagent("blood", vessel.total_volume - species.blood_volume)
fixblood()
// Rebuild the HUD. If they aren't logged in then login() should reinstantiate it for them.
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 53d62dbea0e..e0451046ae5 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -318,10 +318,10 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t
This function restores the subjects blood to max.
*/
/mob/living/carbon/human/proc/restore_blood()
- if(should_have_organ(O_HEART))
- var/blood_volume = vessel.get_reagent_amount("blood")
- vessel.add_reagent("blood",560.0-blood_volume)
-
+ if(!should_have_organ(O_HEART))
+ return
+ if(vessel.total_volume < species.blood_volume)
+ vessel.add_reagent("blood", species.blood_volume - vessel.total_volume)
/*
This function restores all organs.
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 6451d847000..57eaf54a431 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -31,7 +31,7 @@
var/show_ssd = "fast asleep"
var/virus_immune
var/short_sighted // Permanent weldervision.
- var/blood_volume = 500 // Initial blood volume.
+ var/blood_volume = 560 // Initial blood volume.
var/hunger_factor = 0.05 // Multiplier for hunger.
// Language/culture vars.
diff --git a/code/modules/mob/living/carbon/human/species/station/seromi.dm b/code/modules/mob/living/carbon/human/species/station/seromi.dm
index 54a7f37f0f4..faa27d93617 100644
--- a/code/modules/mob/living/carbon/human/species/station/seromi.dm
+++ b/code/modules/mob/living/carbon/human/species/station/seromi.dm
@@ -30,7 +30,7 @@
holder_type = /obj/item/weapon/holder/human
short_sighted = 1
gluttonous = 1
- blood_volume = 300
+ blood_volume = 400
hunger_factor = 1.2
spawn_flags = CAN_JOIN | IS_WHITELISTED
diff --git a/code/modules/mob/living/simple_animal/borer/borer_powers.dm b/code/modules/mob/living/simple_animal/borer/borer_powers.dm
index 0d539d44fc5..a95a22b948a 100644
--- a/code/modules/mob/living/simple_animal/borer/borer_powers.dm
+++ b/code/modules/mob/living/simple_animal/borer/borer_powers.dm
@@ -350,6 +350,6 @@
visible_message("With a hideous, rattling moan, [src] shudders back to life!")
rejuvenate()
- vessel.add_reagent("blood",560-vessel.total_volume)
+ restore_blood()
fixblood()
update_canmove()
\ No newline at end of file
diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm
index 25831b24332..1bae132aed9 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -1,7 +1,7 @@
/****************************************************
BLOOD SYSTEM
****************************************************/
-//Blood levels
+//Blood levels. These are percentages based on the species blood_volume far.
var/const/BLOOD_VOLUME_SAFE = 85
var/const/BLOOD_VOLUME_OKAY = 75
var/const/BLOOD_VOLUME_BAD = 60
@@ -22,7 +22,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 40
if(!should_have_organ(O_HEART)) //We want the var for safety but we can do without the actual blood.
return
- vessel.add_reagent("blood",(species.blood_volume * 0.95))
+ vessel.add_reagent("blood",species.blood_volume)
spawn(1)
fixblood()
@@ -44,10 +44,11 @@ var/const/BLOOD_VOLUME_SURVIVE = 40
if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood.
- var/blood_volume = round(vessel.get_reagent_amount("blood")/species.blood_volume)*100 // Percentage.
+ var/blood_volume_raw = vessel.get_reagent_amount("blood")
+ var/blood_volume = round((blood_volume_raw/species.blood_volume)*100) // Percentage.
//Blood regeneration if there is some space
- if(blood_volume < species.blood_volume && blood_volume)
+ if(blood_volume_raw < species.blood_volume)
var/datum/reagent/blood/B = locate() in vessel.reagent_list //Grab some blood
if(B) // Make sure there's some blood at all
if(B.data["donor"] != src) //If it's not theirs, then we look for theirs
@@ -75,46 +76,45 @@ var/const/BLOOD_VOLUME_SURVIVE = 40
blood_volume *= 0.3
//Effects of bloodloss
- switch(blood_volume)
- if(BLOOD_VOLUME_SAFE to 10000)
- if(pale)
- pale = 0
- update_body()
- if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE)
- if(!pale)
- pale = 1
- update_body()
- var/word = pick("dizzy","woosey","faint")
- src << "\red You feel [word]"
- if(prob(1))
- var/word = pick("dizzy","woosey","faint")
- src << "\red You feel [word]"
- if(oxyloss < 20)
- oxyloss += 3
- if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY)
- if(!pale)
- pale = 1
- update_body()
- eye_blurry = max(eye_blurry,6)
- if(oxyloss < 50)
- oxyloss += 10
- oxyloss += 1
- if(prob(15))
- Paralyse(rand(1,3))
- var/word = pick("dizzy","woosey","faint")
- src << "\red You feel extremely [word]"
- if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD)
- oxyloss += 5
- toxloss += 3
- if(prob(15))
- var/word = pick("dizzy","woosey","faint")
- src << "\red You feel extremely [word]"
- if(0 to BLOOD_VOLUME_SURVIVE)
- // There currently is a strange bug here. If the mob is not below -100 health
- // when death() is called, apparently they will be just fine, and this way it'll
- // spam deathgasp. Adjusting toxloss ensures the mob will stay dead.
- toxloss += 300 // just to be safe!
- death()
+ if(blood_volume >= BLOOD_VOLUME_SAFE)
+ if(pale)
+ pale = 0
+ update_body()
+ else if(blood_volume >= BLOOD_VOLUME_OKAY)
+ if(!pale)
+ pale = 1
+ update_body()
+ var/word = pick("dizzy","woosey","faint")
+ src << "\red You feel [word]"
+ if(prob(1))
+ var/word = pick("dizzy","woosey","faint")
+ src << "\red You feel [word]"
+ if(oxyloss < 20)
+ oxyloss += 3
+ else if(blood_volume >= BLOOD_VOLUME_BAD)
+ if(!pale)
+ pale = 1
+ update_body()
+ eye_blurry = max(eye_blurry,6)
+ if(oxyloss < 50)
+ oxyloss += 10
+ oxyloss += 1
+ if(prob(15))
+ Paralyse(rand(1,3))
+ var/word = pick("dizzy","woosey","faint")
+ src << "\red You feel extremely [word]"
+ else if(blood_volume >= BLOOD_VOLUME_SURVIVE)
+ oxyloss += 5
+ toxloss += 3
+ if(prob(15))
+ var/word = pick("dizzy","woosey","faint")
+ src << "\red You feel extremely [word]"
+ else
+ // There currently is a strange bug here. If the mob is not below -100 health
+ // when death() is called, apparently they will be just fine, and this way it'll
+ // spam deathgasp. Adjusting toxloss ensures the mob will stay dead.
+ toxloss += 300 // just to be safe!
+ death()
// Without enough blood you slowly go hungry.
if(blood_volume < BLOOD_VOLUME_SAFE)
diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm
index 8b0f22445cf..27b4e74d406 100644
--- a/code/modules/organs/organ.dm
+++ b/code/modules/organs/organ.dm
@@ -117,7 +117,7 @@ var/list/organ_cache = list()
if(germ_level >= INFECTION_LEVEL_THREE)
die()
- else if(owner.bodytemperature >= 170) //cryo stops germs from moving and doing their bad stuffs
+ else if(owner && owner.bodytemperature >= 170) //cryo stops germs from moving and doing their bad stuffs
//** Handle antibiotics and curing infections
handle_antibiotics()
handle_rejection()
diff --git a/icons/mob/species/seromi/head.dmi b/icons/mob/species/seromi/head.dmi
index a931fc2d1f8..7305a6e216e 100644
Binary files a/icons/mob/species/seromi/head.dmi and b/icons/mob/species/seromi/head.dmi differ
diff --git a/icons/mob/species/seromi/suit.dmi b/icons/mob/species/seromi/suit.dmi
index ae60d147dad..693565171c6 100644
Binary files a/icons/mob/species/seromi/suit.dmi and b/icons/mob/species/seromi/suit.dmi differ