From 1ea79a2ed836ef4d20db511485c2f935304bfd55 Mon Sep 17 00:00:00 2001 From: Ben <91219575+Ben10083@users.noreply.github.com> Date: Thu, 17 Aug 2023 07:13:46 -0400 Subject: [PATCH] Zombie Rework (#4060) # About the pull request The goal for this PR is to rework zombies into being a fast and numerous, but weaker, entity. As it stands a zombie has too many advantages where a hold against them is essentially a fool's errand. CURRENT PLAN (Will adjust as needed) Zombies will be FASTER but much weaker than current iteration, with weaker attacks. They will be designed around being a foe that can be taken down quicker but if they close the distance, the threat of infection spells a death sentence. # Explain why it's good for the game This will be hard to balance, and as such will be taking feedback before I submit this for review. This is current position of Zombies: - Tough: Extreme (25% ?!) brute modifier, with fire modifier on top, making them very tanky and requiring clips to take down one - self-revive: They WILL come back up, coupled with toughness, they are a feared opponent. - Strength: Claws inflict superslow at 40 brute damage, one of the highest damage levels. - Numerous: They have the numbers to put lesser drones and even entire hives to shame Overall, they are very overtuned and makes playing against them not that fun. My plan is to have it so they are much weaker, with their threat being from infections. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: balance: Zombie attacks deal less damage and only slow down targets (not superslow as they currently do) balance: Zombie resistances have been reduced heavily, making them far more susceptible to brute damage. Their speed has been doubled to compensate balance: Black goo on tiles now requires you to not wear shoes to have chance for infection fix: Zombie attacks now only apply effects such as slow and infection if the attack is valid (if the zombie is able to attack) /:cl: --- code/datums/diseases/black_goo.dm | 12 +++++------- code/game/objects/effects/decals/cleanable/misc.dm | 2 +- .../mob/living/carbon/human/species/zombie.dm | 10 +++++++--- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/code/datums/diseases/black_goo.dm b/code/datums/diseases/black_goo.dm index 97aec074d2d3..38a26f3648c7 100644 --- a/code/datums/diseases/black_goo.dm +++ b/code/datums/diseases/black_goo.dm @@ -124,7 +124,7 @@ icon = 'icons/mob/humans/species/r_zombie.dmi' icon_state = "claw_l" flags_item = NODROP|DELONDROP|ITEM_ABSTRACT - force = 40 + force = MELEE_FORCE_TIER_6 //slightly higher than normal w_class = SIZE_MASSIVE sharp = 1 attack_verb = list("slashed", "torn", "scraped", "gashed", "ripped") @@ -135,8 +135,9 @@ return FALSE . = ..() - if(.) - playsound(loc, 'sound/weapons/bladeslice.ogg', 25, 1, 5) + if(!.) + return FALSE + playsound(loc, 'sound/weapons/bladeslice.ogg', 25, 1, 5) if(ishuman_strict(target)) var/mob/living/carbon/human/human = target @@ -149,10 +150,7 @@ target.AddDisease(new /datum/disease/black_goo) to_chat(user, SPAN_XENOWARNING("You sense your target is now infected.")) - if(issynth(target)) - target.apply_effect(2, SLOW) - else - target.apply_effect(2, SUPERSLOW) + target.apply_effect(2, SLOW) /obj/item/weapon/zombie_claws/afterattack(obj/O as obj, mob/user as mob, proximity) if(get_dist(src, O) > 1) diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index 0399d0996411..43c3500813a4 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -169,7 +169,7 @@ /obj/effect/decal/cleanable/blackgoo/Crossed(mob/living/carbon/human/H) if(!istype(H)) return if(H.species.name == "Human") - if(!H.shoes || prob(25)) + if(!H.shoes && prob(50)) H.contract_disease(new /datum/disease/black_goo) diff --git a/code/modules/mob/living/carbon/human/species/zombie.dm b/code/modules/mob/living/carbon/human/species/zombie.dm index 532d9413102c..07fe8f5e1255 100644 --- a/code/modules/mob/living/carbon/human/species/zombie.dm +++ b/code/modules/mob/living/carbon/human/species/zombie.dm @@ -1,8 +1,12 @@ +// DEFINES +///Time until a zombie rises from the dead +#define ZOMBIE_REVIVE_TIME 1 MINUTES + /datum/species/zombie group = SPECIES_HUMAN name = SPECIES_ZOMBIE name_plural = "Zombies" - slowdown = 1 + slowdown = 0.75 blood_color = BLOOD_COLOR_ZOMBIE icobase = 'icons/mob/humans/species/r_goo_zed.dmi' deform = 'icons/mob/humans/species/r_goo_zed.dmi' @@ -12,7 +16,7 @@ death_message = "seizes up and falls limp..." flags = NO_BREATHE|NO_CLONE_LOSS|NO_POISON|NO_NEURO|NO_SHRAPNEL mob_inherent_traits = list(TRAIT_FOREIGN_BIO) - brute_mod = 0.25 //EXTREME BULLET RESISTANCE + brute_mod = 0.6 //Minor bullet resistance burn_mod = 0.8 //Lowered burn damage since it would 1-shot zombies from 2 to 0.8. speech_chance = 5 cold_level_1 = -1 //zombies don't mind the cold @@ -96,7 +100,7 @@ zombie.play_screen_text("You are dead...
You will rise again in one minute.", /atom/movable/screen/text/screen_text/command_order, rgb(155, 0, 200)) to_chat(zombie, SPAN_XENOWARNING("You fall... but your body is slowly regenerating itself.")) var/weak_ref = WEAKREF(zombie) - to_revive[weak_ref] = addtimer(CALLBACK(src, PROC_REF(revive_from_death), zombie, "[REF(zombie)]"), 1 MINUTES, TIMER_STOPPABLE|TIMER_OVERRIDE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT) + to_revive[weak_ref] = addtimer(CALLBACK(src, PROC_REF(revive_from_death), zombie, "[REF(zombie)]"), ZOMBIE_REVIVE_TIME, TIMER_STOPPABLE|TIMER_OVERRIDE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT) revive_times[weak_ref] = world.time + 1 MINUTES else if(zombie.client)