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