diff --git a/baystation12.dme b/baystation12.dme
index a37d6f5b96..65dca1f8da 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -1300,6 +1300,7 @@
#include "code\modules\mob\living\carbon\human\species\outsider\shadow.dm"
#include "code\modules\mob\living\carbon\human\species\outsider\vox.dm"
#include "code\modules\mob\living\carbon\human\species\station\golem.dm"
+#include "code\modules\mob\living\carbon\human\species\station\human_subspecies.dm"
#include "code\modules\mob\living\carbon\human\species\station\monkey.dm"
#include "code\modules\mob\living\carbon\human\species\station\slime.dm"
#include "code\modules\mob\living\carbon\human\species\station\station.dm"
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index 5393de59cc..e6fb41193c 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -67,25 +67,22 @@
if (get_dist(src, O) > src.range)
continue
+ var/flash_time = strength
if (istype(O, /mob/living/carbon/human))
var/mob/living/carbon/human/H = O
if(!H.eyecheck() <= 0)
continue
-
- if (istype(O, /mob/living/carbon/alien))//So aliens don't get flashed (they have no external eyes)/N
- continue
-
- O.Weaken(strength)
- if (istype(O, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = O
+ flash_time *= H.species.flash_mod
var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
- if (E && (E.damage > E.min_bruised_damage && prob(E.damage + 50)))
+ if(!E)
+ return
+ if(E.is_bruised() && prob(E.damage + 50))
flick("e_flash", O:flash)
E.damage += rand(1, 5)
else
if(!O.blinded)
flick("flash", O:flash)
-
+ O.Weaken(flash_time)
/obj/machinery/flasher/emp_act(severity)
if(stat & (BROKEN|NOPOWER))
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index 18826ff806..cfbe33e5fd 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -64,30 +64,18 @@
var/flashfail = 0
if(iscarbon(M))
- var/safety = M:eyecheck()
- if(safety <= 0)
- M.Weaken(10)
- flick("e_flash", M.flash)
-
- if(ishuman(M) && ishuman(user) && M.stat!=DEAD)
- if(user.mind && user.mind in revs.current_antagonists)
- var/revsafe = 0
- for(var/obj/item/weapon/implant/loyalty/L in M)
- if(L && L.implanted)
- revsafe = 1
- break
- M.mind_initialize() //give them a mind datum if they don't have one.
- if(M.mind.has_been_rev)
- revsafe = 2
- if(!revsafe)
- M.mind.has_been_rev = 1
- revs.add_antagonist(M.mind)
- else if(revsafe == 1)
- user << "Something seems to be blocking the flash!"
- else
- user << "This mind seems resistant to the flash!"
- else
- flashfail = 1
+ if(M.stat!=DEAD)
+ var/safety = M:eyecheck()
+ if(safety <= 0)
+ var/flash_strength = 10
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ flash_strength *= H.species.flash_mod
+ if(flash_strength > 0)
+ M.Weaken(flash_strength)
+ flick("e_flash", M.flash)
+ else
+ flashfail = 1
else if(issilicon(M))
M.Weaken(rand(5,10))
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 575fa0c531..4155f0981e 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -85,9 +85,7 @@
/mob/living/carbon/human/adjustBruteLoss(var/amount)
- if(species && species.brute_mod)
- amount = amount*species.brute_mod
-
+ amount = amount*species.brute_mod
if(amount > 0)
take_overall_damage(amount, 0)
else
@@ -95,9 +93,7 @@
BITSET(hud_updateflag, HEALTH_HUD)
/mob/living/carbon/human/adjustFireLoss(var/amount)
- if(species && species.burn_mod)
- amount = amount*species.burn_mod
-
+ amount = amount*species.burn_mod
if(amount > 0)
take_overall_damage(0, amount)
else
@@ -105,9 +101,7 @@
BITSET(hud_updateflag, HEALTH_HUD)
/mob/living/carbon/human/proc/adjustBruteLossByPart(var/amount, var/organ_name, var/obj/damage_source = null)
- if(species && species.brute_mod)
- amount = amount*species.brute_mod
-
+ amount = amount*species.brute_mod
if (organ_name in organs_by_name)
var/obj/item/organ/external/O = get_organ(organ_name)
@@ -120,9 +114,7 @@
BITSET(hud_updateflag, HEALTH_HUD)
/mob/living/carbon/human/proc/adjustFireLossByPart(var/amount, var/organ_name, var/obj/damage_source = null)
- if(species && species.burn_mod)
- amount = amount*species.burn_mod
-
+ amount = amount*species.burn_mod
if (organ_name in organs_by_name)
var/obj/item/organ/external/O = get_organ(organ_name)
@@ -205,7 +197,8 @@
if(species.flags & NO_BREATHE)
oxyloss = 0
else
- ..()
+ amount = amount*species.oxy_mod
+ ..(amount)
/mob/living/carbon/human/setOxyLoss(var/amount)
if(species.flags & NO_BREATHE)
@@ -222,7 +215,8 @@
if(species.flags & NO_POISON)
toxloss = 0
else
- ..()
+ amount = amount*species.toxins_mod
+ ..(amount)
/mob/living/carbon/human/setToxLoss(var/amount)
if(species.flags & NO_POISON)
@@ -388,14 +382,12 @@ This function restores all organs.
switch(damagetype)
if(BRUTE)
damageoverlaytemp = 20
- if(species && species.brute_mod)
- damage = damage*species.brute_mod
+ damage = damage*species.brute_mod
if(organ.take_damage(damage, 0, sharp, edge, used_weapon))
UpdateDamageIcon()
if(BURN)
damageoverlaytemp = 20
- if(species && species.burn_mod)
- damage = damage*species.burn_mod
+ damage = damage*species.burn_mod
if(organ.take_damage(0, damage, sharp, edge, used_weapon))
UpdateDamageIcon()
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index bcf1100a08..f1cae922e6 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -280,7 +280,7 @@
Weaken(3)
if(!lying)
emote("collapse")
- if(prob(5) && prob(100 * RADIATION_SPEED_COEFFICIENT) && species.name == "Human") //apes go bald
+ if(prob(5) && prob(100 * RADIATION_SPEED_COEFFICIENT) && species.get_bodytype() == "Human") //apes go bald
if((h_style != "Bald" || f_style != "Shaved" ))
src << "Your hair falls out."
h_style = "Bald"
@@ -298,6 +298,7 @@
emote("gasp")
if(damage)
+ damage *= species.radiation_mod
adjustToxLoss(damage * RADIATION_SPEED_COEFFICIENT)
updatehealth()
if(organs.len)
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 54e358e96c..e47d7c1087 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -47,8 +47,12 @@
/datum/unarmed_attack/bite
)
var/list/unarmed_attacks = null // For empty hand harm-intent attack
- var/brute_mod = 1 // Physical damage multiplier.
- var/burn_mod = 1 // Burn damage multiplier.
+ var/brute_mod = 1 // Physical damage multiplier.
+ var/burn_mod = 1 // Burn damage multiplier.
+ var/oxy_mod = 1 // Oxyloss modifier
+ var/toxins_mod = 1 // Toxloss modifier
+ var/radiation_mod = 1 // Radiation modifier
+ var/flash_mod = 1 // Stun from blindness modifier.
var/vision_flags = SEE_SELF // Same flags as glasses.
// Death vars.
diff --git a/code/modules/mob/living/carbon/human/species/station/human_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/human_subspecies.dm
new file mode 100644
index 0000000000..b33d4e8ef7
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/station/human_subspecies.dm
@@ -0,0 +1,57 @@
+/datum/species/human/gravworlder
+ name = "grav-adapted Human"
+ name_plural = "grav-adapted Humans"
+ blurb = "Heavier and stronger than a baseline human, gravity-adapted people have \
+ thick radiation-resistant skin with a high lead content, denser bones, and recessed \
+ eyes beneath a prominent brow in order to shield them from the glare of a dangerously \
+ bright, alien sun. This comes at the cost of mobility, flexibility, and increased \
+ oxygen requirements to support their robust metabolism."
+ icobase = 'icons/mob/human_races/subspecies/r_gravworlder.dmi'
+
+ flash_mod = 0.9
+ oxy_mod = 1.1
+ radiation_mod = 0.5
+ brute_mod = 0.85
+ slowdown = 1
+
+/datum/species/human/spacer
+ name = "space-adapted Human"
+ name_plural = "space-adapted Humans"
+ blurb = "Lithe and frail, these sickly folk were engineered for work in environments that \
+ lack both light and atmosphere. As such, they're quite resistant to asphyxiation as well as \
+ toxins, but they suffer from weakened bone structure and a marked vulnerability to bright lights."
+ icobase = 'icons/mob/human_races/subspecies/r_spacer.dmi'
+
+ oxy_mod = 0.8
+ toxins_mod = 0.9
+ flash_mod = 1.2
+ brute_mod = 1.1
+ burn_mod = 1.1
+
+/datum/species/human/vatgrown
+ name = "vat-grown Human"
+ name_plural = "vat-grown Humans"
+ blurb = "With cloning on the forefront of human scientific advancement, cheap mass production \
+ of bodies is a very real and rather ethically grey industry. Vat-grown humans tend to be paler than \
+ baseline, with no appendix and fewer inherited genetic disabilities, but a weakened metabolism."
+ icobase = 'icons/mob/human_races/subspecies/r_vatgrown.dmi'
+
+ toxins_mod = 1.1
+ has_organ = list(
+ "heart" = /obj/item/organ/heart,
+ "lungs" = /obj/item/organ/lungs,
+ "liver" = /obj/item/organ/liver,
+ "kidneys" = /obj/item/organ/kidneys,
+ "brain" = /obj/item/organ/brain,
+ "eyes" = /obj/item/organ/eyes
+ )
+
+/*
+// These guys are going to need full resprites of all the suits/etc so I'm going to
+// define them and commit the sprites, but leave the clothing for another day.
+/datum/species/human/chimpanzee
+ name = "uplifted Chimpanzee"
+ name_plural = "uplifted Chimpanzees"
+ blurb = "Ook ook."
+ icobase = 'icons/mob/human_races/subspecies/r_upliftedchimp.dmi'
+*/
diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm
index 032cf51db9..c727a9599b 100644
--- a/code/modules/mob/living/carbon/human/species/station/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station.dm
@@ -14,6 +14,9 @@
spawn_flags = CAN_JOIN
appearance_flags = HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
+/datum/species/human/get_bodytype()
+ return "Human"
+
/datum/species/unathi
name = "Unathi"
name_plural = "Unathi"
diff --git a/icons/mob/human_races/subspecies/r_gravworlder.dmi b/icons/mob/human_races/subspecies/r_gravworlder.dmi
new file mode 100644
index 0000000000..d63cc5526c
Binary files /dev/null and b/icons/mob/human_races/subspecies/r_gravworlder.dmi differ
diff --git a/icons/mob/human_races/subspecies/r_spacer.dmi b/icons/mob/human_races/subspecies/r_spacer.dmi
new file mode 100644
index 0000000000..ceb27d2904
Binary files /dev/null and b/icons/mob/human_races/subspecies/r_spacer.dmi differ
diff --git a/icons/mob/human_races/subspecies/r_upliftedchimp.dmi b/icons/mob/human_races/subspecies/r_upliftedchimp.dmi
new file mode 100644
index 0000000000..eb26c817cc
Binary files /dev/null and b/icons/mob/human_races/subspecies/r_upliftedchimp.dmi differ
diff --git a/icons/mob/human_races/subspecies/r_vatgrown.dmi b/icons/mob/human_races/subspecies/r_vatgrown.dmi
new file mode 100644
index 0000000000..8cb165b127
Binary files /dev/null and b/icons/mob/human_races/subspecies/r_vatgrown.dmi differ