diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm
index 40eb2c5f53b..f6cb410791f 100644
--- a/code/datums/weather/weather_types/radiation_storm.dm
+++ b/code/datums/weather/weather_types/radiation_storm.dm
@@ -34,18 +34,25 @@
/datum/weather/rad_storm/weather_act(mob/living/L)
var/resist = L.getarmor(null, RAD)
- if(prob(40))
- if(ishuman(L))
- var/mob/living/carbon/human/H = L
- if(!HAS_TRAIT(H, TRAIT_RADIMMUNE))
- if(prob(max(0, 100 - resist)))
- randmuti(H) // Applies bad mutation
- if(prob(50))
- if(prob(90))
- randmutb(H)
- else
- randmutg(H)
- domutcheck(H, MUTCHK_FORCED)
+ if(!prob(60))
+ return
+
+ if(!ishuman(L))
+ return
+
+ var/mob/living/carbon/human/H = L
+ if(HAS_TRAIT(H, TRAIT_RADIMMUNE))
+ return
+
+ if(prob(max(0, 100 - resist)) && !HAS_TRAIT(H, TRAIT_GENELESS))
+ randmuti(H) // Applies bad mutation
+ if(prob(50))
+ if(prob(90))
+ randmutb(H)
+ else
+ randmutg(H)
+
+ domutcheck(H, MUTCHK_FORCED)
L.rad_act(20)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 491e3385866..e0b103c5b4c 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -603,8 +603,7 @@
return
if(getBrainLoss() >= 100) // braindeath
- AdjustLoseBreath(20 SECONDS, bound_lower = 0, bound_upper = 50 SECONDS)
- Weaken(60 SECONDS)
+ dna.species.handle_brain_death(src)
if(!check_death_method())
if(health <= HEALTH_THRESHOLD_DEAD)
diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm
index 86de892a51e..5af273cb488 100644
--- a/code/modules/mob/living/carbon/human/species/_species.dm
+++ b/code/modules/mob/living/carbon/human/species/_species.dm
@@ -1002,6 +1002,10 @@ It'll return null if the organ doesn't correspond, so include null checks when u
/datum/species/proc/spec_WakeUp(mob/living/carbon/human/H)
return FALSE
+/datum/species/proc/handle_brain_death(mob/living/carbon/human/H)
+ H.AdjustLoseBreath(20 SECONDS, bound_lower = 0, bound_upper = 50 SECONDS)
+ H.Weaken(60 SECONDS)
+
/**
* Species-specific runechat colour handler
*
diff --git a/code/modules/mob/living/carbon/human/species/diona.dm b/code/modules/mob/living/carbon/human/species/diona.dm
index 14a1a99172b..23dc2b3104d 100644
--- a/code/modules/mob/living/carbon/human/species/diona.dm
+++ b/code/modules/mob/living/carbon/human/species/diona.dm
@@ -8,8 +8,7 @@
unarmed_type = /datum/unarmed_attack/diona
remains_type = /obj/effect/decal/cleanable/ash
- burn_mod = 1.25
- heatmod = 1.5
+ heatmod = 3
var/pod = FALSE //did they come from a pod? If so, they're stronger than normal Diona.
blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
@@ -103,7 +102,6 @@
if(!pod && H.health <= 0)
return
H.adjustBruteLoss(-1)
- H.adjustFireLoss(-1)
H.adjustToxLoss(-1)
H.adjustOxyLoss(-1)
diff --git a/code/modules/mob/living/carbon/human/species/drask.dm b/code/modules/mob/living/carbon/human/species/drask.dm
index 5f91e9ad1bb..ff4a379b6cf 100644
--- a/code/modules/mob/living/carbon/human/species/drask.dm
+++ b/code/modules/mob/living/carbon/human/species/drask.dm
@@ -14,7 +14,7 @@
male_sneeze_sound = 'sound/voice/drasksneeze.ogg'
female_sneeze_sound = 'sound/voice/drasksneeze.ogg'
- burn_mod = 2
+ burn_mod = 1.5
//exotic_blood = "cryoxadone"
body_temperature = 273
@@ -45,7 +45,7 @@
heat_level_1 = 310 //Default 370 - Higher is better
heat_level_2 = 340 //Default 400
heat_level_3 = 400 //Default 460
- heatmod = 2
+ heatmod = 3 // 4.5 * more damage from body temp
flesh_color = "#a3d4eb"
reagent_tag = PROCESS_ORG
diff --git a/code/modules/mob/living/carbon/human/species/grey.dm b/code/modules/mob/living/carbon/human/species/grey.dm
index 46ba8bd8e34..07d1ce44fe1 100644
--- a/code/modules/mob/living/carbon/human/species/grey.dm
+++ b/code/modules/mob/living/carbon/human/species/grey.dm
@@ -16,8 +16,6 @@
"eyes" = /obj/item/organ/internal/eyes/grey //5 darksight.
)
- brute_mod = 1.25 //greys are fragile
-
species_traits = list(LIPS, IS_WHITELISTED, CAN_WINGDINGS, NO_HAIR)
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = HAS_BODY_MARKINGS | HAS_BODYACC_COLOR
@@ -40,14 +38,8 @@
. = ..()
if(method == REAGENT_TOUCH)
- if(H.wear_mask)
- to_chat(H, "Your [H.wear_mask] protects you from the acid!")
+ if((H.head?.flags & THICKMATERIAL) && (H.wear_suit?.flags & THICKMATERIAL)) // fully pierce proof clothing is also water proof!
return
-
- if(H.head)
- to_chat(H, "Your [H.wear_mask] protects you from the acid!")
- return
-
if(volume > 25)
if(prob(75))
H.take_organ_damage(5, 10)
diff --git a/code/modules/mob/living/carbon/human/species/machine.dm b/code/modules/mob/living/carbon/human/species/machine.dm
index efaf5f534e9..283b65d7cea 100644
--- a/code/modules/mob/living/carbon/human/species/machine.dm
+++ b/code/modules/mob/living/carbon/human/species/machine.dm
@@ -14,15 +14,15 @@
skinned_type = /obj/item/stack/sheet/metal // Let's grind up IPCs for station resources!
eyes = "blank_eyes"
- brute_mod = 2.28 // 100% * 2.28 * 0.66 (robolimbs) ~= 150%
- burn_mod = 2.28 // So they take 50% extra damage from brute/burn overall
+ brute_mod = 1 / 0.66 // 1 * 0.66 (robolimbs) * 1/0.66 = 1
+ burn_mod = 1 / 0.66 // so no damage mod overall.
tox_mod = 0
clone_mod = 0
death_message = "gives a short series of shrill beeps, their chassis shuddering before falling limp, nonfunctional."
death_sounds = list('sound/voice/borg_deathsound.ogg') //I've made this a list in the event we add more sounds for dead robots.
species_traits = list(IS_WHITELISTED, NO_BLOOD, NO_CLONESCAN, NO_INTORGANS)
- inherent_traits = list(TRAIT_VIRUSIMMUNE, TRAIT_NOBREATH, TRAIT_RADIMMUNE, TRAIT_NOGERMS, TRAIT_NODECAY, TRAIT_NOPAIN, TRAIT_GENELESS) //Computers that don't decay? What a lie!
+ inherent_traits = list(TRAIT_VIRUSIMMUNE, TRAIT_NOBREATH, TRAIT_NOGERMS, TRAIT_NODECAY, TRAIT_NOPAIN, TRAIT_GENELESS) //Computers that don't decay? What a lie!
inherent_biotypes = MOB_ROBOTIC | MOB_HUMANOID
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = HAS_SKIN_COLOR | HAS_HEAD_MARKINGS | HAS_HEAD_ACCESSORY | ALL_RPARTS
@@ -161,3 +161,35 @@
H.change_hair(new_style, 1) // The 1 is to enable custom sprites
if(new_color)
H.change_hair_color(new_color)
+
+/datum/species/machine/spec_electrocute_act(mob/living/carbon/human/H, shock_damage, source, siemens_coeff, flags)
+ H.adjustBrainLoss(shock_damage)
+ H.adjust_nutrition(shock_damage)
+
+/datum/species/machine/handle_mutations_and_radiation(mob/living/carbon/human/H)
+ H.adjustBrainLoss(H.radiation / 100)
+ H.AdjustHallucinate(H.radiation)
+ H.radiation = 0
+ return TRUE
+
+/datum/species/machine/handle_brain_death(mob/living/carbon/human/H)
+ H.Weaken(60 SECONDS)
+ H.adjustBrainLoss(1) // 40 seconds to live
+ if(prob(20))
+ var/static/list/error_messages = list("Error 196: motor functions failing.",
+ "Error 32: Process %^~#/£ cannot be reached, being used by another file.",
+ "Error 39: Cannot write to central memory unit, storage full.",
+ "Error -1: isogjiohrj90903744kfgkgrpopK!!",
+ "Error -1: poafejOIDAIJjamfooooWADm!afe!",
+ "Error -1: PIKFAjgaiosafjiGGIGHasksid!!",
+ "Error 534: Arithmetic result exceeded 512 bits.",
+ "Error 0: Operation completed successfully.",
+ "WARNING, CRITICAL COMPONENT ERROR, attempting to troubleshoot....",
+ "runtime in sentience.dm, cannot modify null.som, STACK TRACE:",
+ "master controller timed out, likely infinite recursion loop.",
+ "Error 6344: Cannot delete file ~/2tmp1/8^33, no space left on device",
+ "Error 42: Unable to display error message.",
+ "Daisy.... Daisy...."
+ )
+ var/error_message = pick(error_messages)
+ to_chat(H, "[error_message]")
diff --git a/code/modules/mob/living/carbon/human/species/unathi.dm b/code/modules/mob/living/carbon/human/species/unathi.dm
index 9c87cff6311..90bda821f20 100644
--- a/code/modules/mob/living/carbon/human/species/unathi.dm
+++ b/code/modules/mob/living/carbon/human/species/unathi.dm
@@ -36,7 +36,6 @@
default_headacc = "Simple"
default_headacc_colour = "#404040"
butt_sprite = "unathi"
- brute_mod = 1.05
has_organ = list(
"heart" = /obj/item/organ/internal/heart/unathi,
diff --git a/code/modules/mob/living/carbon/human/species/vox.dm b/code/modules/mob/living/carbon/human/species/vox.dm
index 771f685f9d1..cc70c23b00f 100644
--- a/code/modules/mob/living/carbon/human/species/vox.dm
+++ b/code/modules/mob/living/carbon/human/species/vox.dm
@@ -16,7 +16,7 @@
smell.
Most humans will never meet a Vox raider, instead learning of this insular species through \
dealing with their traders and merchants; those that do rarely enjoy the experience."
- brute_mod = 1.2 //20% more brute damage. Fragile bird bones.
+ oxy_mod = 2 // die slightly faster in crit or areas without N2
breathid = "n2"