diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm
index 3c1be97566..4fbdebf6f1 100644
--- a/code/__defines/chemistry.dm
+++ b/code/__defines/chemistry.dm
@@ -1,4 +1,4 @@
-#define HUNGER_FACTOR 0.05 // Factor of how fast mob nutrition decreases
+#define DEFAULT_HUNGER_FACTOR 0.05 // Factor of how fast mob nutrition decreases
#define REM 0.2 // Means 'Reagent Effect Multiplier'. This is how many units of reagent are consumed per tick
@@ -23,6 +23,7 @@
#define IS_UNATHI 4
#define IS_TAJARA 5
#define IS_XENOS 6
+#define IS_TESHARI 7
#define CE_STABLE "stable" // Inaprovaline
#define CE_ANTIBIOTIC "antibiotic" // Spaceacilin
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index 55ac30cd5d..5aa321ca41 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -256,7 +256,7 @@
var/list/occupant_data = list(
"stationtime" = worldtime2text(),
"stat" = H.stat,
- "health" = H.health,
+ "health" = round(H.health/H.maxHealth)*100,
"virus_present" = H.virus2.len,
"bruteloss" = H.getBruteLoss(),
"fireloss" = H.getFireLoss(),
@@ -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" = H.vessel.get_reagent_amount("blood"),
+ "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(),
@@ -311,7 +311,7 @@
if(occ["borer_present"])
dat += "Large growth detected in frontal lobe, possibly cancerous. Surgical removal is recommended.
"
- dat += text("[]\tBlood Level %: [] ([] units)
", (""), occ["blood_amount"]*100 / 560, occ["blood_amount"])
+ dat += text("[]\tBlood Level %: [] ([] units)
", (""), occ["blood_amount"], occ["blood_amount"])
dat += text("Inaprovaline: [] units
", occ["inaprovaline_amount"])
dat += text("Soporific: [] units
", occ["stoxin_amount"])
diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm
index d694fd5d4c..d2fa5478cb 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 b50e1268c9..ef875940ad 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,13 +158,12 @@ 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 = blood_volume / 560
- var/blood_type = M.dna.b_type
- blood_percent *= 100
- if(blood_volume <= 500 && blood_volume > 336)
+ 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_volume <= 336)
+ else if(blood_percent <= BLOOD_VOLUME_BAD)
user.show_message("Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl. Type: [blood_type]")
else
user.show_message("Blood Level Normal: [blood_percent]% [blood_volume]cl. Type: [blood_type]")
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 5dea37ef51..68c774c91f 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -102,7 +102,7 @@
usr.visible_message("[user] starts climbing onto \the [src]!")
climbers |= user
- if(!do_after(user,50))
+ if(!do_after(user,(issmall(user) ? 30 : 50)))
climbers -= user
return
diff --git a/code/modules/economy/economy_misc.dm b/code/modules/economy/economy_misc.dm
index bb076d6bc7..7b82c1662c 100644
--- a/code/modules/economy/economy_misc.dm
+++ b/code/modules/economy/economy_misc.dm
@@ -50,6 +50,7 @@
/var/list/economic_species_modifier = list(
/datum/species/human = 10,
/datum/species/skrell = 12,
+ /datum/species/teshari = 9, // Skrell sponsored!
/datum/species/tajaran = 7,
/datum/species/unathi = 7,
/datum/species/vox = 1
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 1b09c1b1e1..6b9cbf0258 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()
@@ -36,9 +35,9 @@
. = ..()
if(.)
if(src.nutrition && src.stat != 2)
- src.nutrition -= HUNGER_FACTOR/10
+ src.nutrition -= DEFAULT_HUNGER_FACTOR/10
if(src.m_intent == "run")
- src.nutrition -= HUNGER_FACTOR/10
+ src.nutrition -= DEFAULT_HUNGER_FACTOR/10
if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360)
src.bodytemperature += 2
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index a0636f453f..94ee52c822 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 53d62dbea0..e0451046ae 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/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 02d4d9b5f5..ddf8e90e8b 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -893,7 +893,7 @@
// nutrition decrease
if (nutrition > 0 && stat != 2)
- nutrition = max (0, nutrition - HUNGER_FACTOR)
+ nutrition = max (0, nutrition - species.hunger_factor)
if (nutrition > 450)
if(overeatduration < 600) //capped so people don't take forever to unfat
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 47c6f3c304..a8222dc280 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -30,7 +30,9 @@
var/mob_size = MOB_MEDIUM
var/show_ssd = "fast asleep"
var/virus_immune
- var/short_sighted
+ var/short_sighted // Permanent weldervision.
+ var/blood_volume = 560 // Initial blood volume.
+ var/hunger_factor = 0.05 // Multiplier for hunger.
var/min_age = 17
var/max_age = 70
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 567da2d86f..1616326610 100644
--- a/code/modules/mob/living/carbon/human/species/station/seromi.dm
+++ b/code/modules/mob/living/carbon/human/species/station/seromi.dm
@@ -17,6 +17,7 @@
base_color = "#001144"
tail = "seromitail"
tail_hair = "feathers"
+ reagent_tag = IS_TESHARI
icobase = 'icons/mob/human_races/r_seromi.dmi'
deform = 'icons/mob/human_races/r_seromi.dmi'
@@ -32,6 +33,8 @@
holder_type = /obj/item/weapon/holder/human
short_sighted = 1
gluttonous = 1
+ blood_volume = 400
+ hunger_factor = 1.2
spawn_flags = CAN_JOIN | IS_WHITELISTED
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_EYE_COLOR
diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm
index 8fa5c1247a..b7a66b6842 100644
--- a/code/modules/mob/living/carbon/metroid/metroid.dm
+++ b/code/modules/mob/living/carbon/metroid/metroid.dm
@@ -385,4 +385,4 @@
/mob/living/carbon/slime/cannot_use_vents()
if(Victim)
return "You cannot ventcrawl while feeding."
- ..()
+ ..()
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 0d539d44fc..a95a22b948 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 798fbe52c1..1bae132aed 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -1,14 +1,14 @@
/****************************************************
BLOOD SYSTEM
****************************************************/
-//Blood levels
-var/const/BLOOD_VOLUME_SAFE = 501
-var/const/BLOOD_VOLUME_OKAY = 336
-var/const/BLOOD_VOLUME_BAD = 224
-var/const/BLOOD_VOLUME_SURVIVE = 122
+//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
+var/const/BLOOD_VOLUME_SURVIVE = 40
-/mob/living/carbon/human/var/datum/reagents/vessel //Container for blood and BLOOD ONLY. Do not transfer other chems here.
-/mob/living/carbon/human/var/var/pale = 0 //Should affect how mob sprite is drawn, but currently doesn't.
+/mob/living/carbon/human/var/datum/reagents/vessel // Container for blood and BLOOD ONLY. Do not transfer other chems here.
+/mob/living/carbon/human/var/var/pale = 0 // Should affect how mob sprite is drawn, but currently doesn't.
//Initializes blood vessels
/mob/living/carbon/human/proc/make_blood()
@@ -16,13 +16,13 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
if(vessel)
return
- vessel = new/datum/reagents(600)
+ vessel = new/datum/reagents(species.blood_volume)
vessel.my_atom = src
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",560)
+ vessel.add_reagent("blood",species.blood_volume)
spawn(1)
fixblood()
@@ -44,10 +44,11 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood.
- var/blood_volume = round(vessel.get_reagent_amount("blood"))
+ 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 < 560 && 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 = 122
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)
@@ -205,7 +205,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
var/list/chems = list()
chems = params2list(injected.data["trace_chem"])
for(var/C in chems)
- src.reagents.add_reagent(C, (text2num(chems[C]) / 560) * amount)//adds trace chemicals to owner's blood
+ src.reagents.add_reagent(C, (text2num(chems[C]) / species.blood_volume) * amount)//adds trace chemicals to owner's blood
reagents.update_total()
//Transfers blood from reagents to vessel, respecting blood types compatability.
diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm
index 27f30e0b8b..dd8cd4813c 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/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
index 8a84af11f3..20225508c6 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
@@ -34,9 +34,13 @@
B.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*"
/datum/reagent/blood/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
- if(dose > 5)
+
+ var/effective_dose = dose
+ if(issmall(M)) effective_dose *= 2
+
+ if(effective_dose > 5)
M.adjustToxLoss(removed)
- if(dose > 15)
+ if(effective_dose > 15)
M.adjustToxLoss(removed)
if(data && data["virus2"])
var/list/vlist = data["virus2"]
@@ -160,6 +164,7 @@
return
/datum/reagent/fuel/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(issmall(M)) removed *= 2
M.adjustToxLoss(2 * removed)
/datum/reagent/fuel/touch_mob(var/mob/living/L, var/amount)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
index ccdb834ef0..26b58eed31 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
@@ -75,12 +75,13 @@
L.adjust_fire_stacks(amount / 15)
/datum/reagent/ethanol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(issmall(M)) removed *= 2
M.adjustToxLoss(removed * 2 * toxicity)
return
/datum/reagent/ethanol/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ if(issmall(M)) removed *= 2
M.nutrition += nutriment_factor * removed
-
var/strength_mod = 1
if(alien == IS_SKRELL)
strength_mod *= 5
@@ -237,6 +238,7 @@
color = "#C7C7C7"
/datum/reagent/radium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(issmall(M)) removed *= 2
M.apply_effect(10 * removed, IRRADIATE, 0) // Radium may increase your chances to cure a disease
if(M.virus2.len)
for(var/ID in M.virus2)
@@ -272,6 +274,7 @@
var/meltdose = 10 // How much is needed to melt
/datum/reagent/acid/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(issmall(M)) removed *= 2
M.take_organ_damage(0, removed * power * 2)
/datum/reagent/acid/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) // This is the most interesting
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
index 4b5580fed5..498dcbed10 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
@@ -17,6 +17,7 @@
affect_ingest(M, alien, removed)
/datum/reagent/nutriment/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ if(issmall(M)) removed *= 2 // Small bodymass, more effect from lower volume.
M.heal_organ_damage(0.5 * removed, 0)
M.nutrition += nutriment_factor * removed // For hunger and fatness
M.add_chemical_effect(CE_BLOODRESTORE, 4 * removed)
@@ -27,9 +28,13 @@
color = "#440000"
/datum/reagent/nutriment/protein/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
- if(alien && alien == IS_SKRELL)
- M.adjustToxLoss(0.5 * removed)
- return
+ switch(alien)
+ if(IS_SKRELL)
+ M.adjustToxLoss(0.5 * removed)
+ return
+ if(IS_TESHARI)
+ ..(M, alien, removed*1.2) // Teshari get a bit more nutrition from meat.
+ return
..()
/datum/reagent/nutriment/protein/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
index d56183619e..112887fa5d 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
@@ -11,6 +11,7 @@
/datum/reagent/toxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(strength && alien != IS_DIONA)
+ if(issmall(M)) removed *= 2 // Small bodymass, more effect from lower volume.
M.adjustToxLoss(strength * removed)
/datum/reagent/toxin/plasticide
@@ -281,12 +282,17 @@
/datum/reagent/soporific/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
return
- if(dose < 1)
- if(dose == metabolism * 2 || prob(5))
+
+ var/effective_dose = dose
+ if(issmall(M))
+ effective_dose *= 2
+
+ if(effective_dose < 1)
+ if(effective_dose == metabolism * 2 || prob(5))
M.emote("yawn")
- else if(dose < 1.5)
+ else if(effective_dose < 1.5)
M.eye_blurry = max(M.eye_blurry, 10)
- else if(dose < 5)
+ else if(effective_dose < 5)
if(prob(50))
M.Weaken(2)
M.drowsyness = max(M.drowsyness, 20)
@@ -306,16 +312,21 @@
/datum/reagent/chloralhydrate/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
return
- if(dose == metabolism)
+
+ var/effective_dose = dose
+ if(issmall(M))
+ effective_dose *= 2
+
+ if(effective_dose == metabolism)
M.confused += 2
M.drowsyness += 2
- else if(dose < 2)
+ else if(effective_dose < 2)
M.Weaken(30)
M.eye_blurry = max(M.eye_blurry, 10)
else
M.sleeping = max(M.sleeping, 30)
- if(dose > 1)
+ if(effective_dose > 1)
M.adjustToxLoss(removed)
/datum/reagent/chloralhydrate/beer2 //disguised as normal beer for use by emagged brobots
@@ -426,12 +437,15 @@
if(alien == IS_DIONA)
return
M.druggy = max(M.druggy, 30)
- if(dose < 1)
+
+ var/effective_dose = dose
+ if(issmall(M)) effective_dose *= 2
+ if(effective_dose < 1)
M.apply_effect(3, STUTTER)
M.make_dizzy(5)
if(prob(5))
M.emote(pick("twitch", "giggle"))
- else if(dose < 2)
+ else if(effective_dose < 2)
M.apply_effect(3, STUTTER)
M.make_jittery(5)
M.make_dizzy(5)
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index 3972213048..f98d90b248 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -107,7 +107,7 @@
return
self_feed_message(user)
- reagents.trans_to_mob(user, amount_per_transfer_from_this, CHEM_INGEST)
+ reagents.trans_to_mob(user, issmall(user) ? ceil(amount_per_transfer_from_this/2) : amount_per_transfer_from_this, CHEM_INGEST)
feed_sound(user)
return 1
else
diff --git a/html/changelogs/Zuhayr-tesharireagents.yml b/html/changelogs/Zuhayr-tesharireagents.yml
new file mode 100644
index 0000000000..4997d3a131
--- /dev/null
+++ b/html/changelogs/Zuhayr-tesharireagents.yml
@@ -0,0 +1,9 @@
+author: Zuhayr
+delete-after: True
+changes:
+ - rscadd: "Small species now take smaller bites/gulps from food and drink."
+ - rscadd: "Small species are now effected by alchol and toxins twice as much."
+ - rscadd: "blood_volume is now a species-level var and Teshari have lowered blood volume."
+ - rscadd: "Hunger is a species var and Teshari get hungry faster."
+ - rscadd: "Small mobs have a reduced climb delay."
+ - rscadd: "Teshari gain more nutrition from meat."
diff --git a/icons/mob/species/seromi/head.dmi b/icons/mob/species/seromi/head.dmi
index a931fc2d1f..7305a6e216 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 ae60d147da..693565171c 100644
Binary files a/icons/mob/species/seromi/suit.dmi and b/icons/mob/species/seromi/suit.dmi differ