From 9a663e3b1f29f8df1bccafee8d315545e809543b Mon Sep 17 00:00:00 2001 From: Charlie <69320440+hal9000PR@users.noreply.github.com> Date: Sun, 31 Jul 2022 13:28:43 +0100 Subject: [PATCH] Removes the majority of brute/burn mods from species, replaces them with interesting downsides. (#18501) * species rebalance * IPC rework PRT 2 * geneless * grammar * affected's suggestion Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> * Review pass Co-authored-by: Farie82 * farie review * static list Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Co-authored-by: Farie82 --- .../weather/weather_types/radiation_storm.dm | 31 +++++++++------ code/modules/mob/living/carbon/human/life.dm | 3 +- .../living/carbon/human/species/_species.dm | 4 ++ .../mob/living/carbon/human/species/diona.dm | 4 +- .../mob/living/carbon/human/species/drask.dm | 4 +- .../mob/living/carbon/human/species/grey.dm | 10 +---- .../living/carbon/human/species/machine.dm | 38 +++++++++++++++++-- .../mob/living/carbon/human/species/unathi.dm | 1 - .../mob/living/carbon/human/species/vox.dm | 2 +- 9 files changed, 64 insertions(+), 33 deletions(-) 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"