adds spawners for NPC zombies (#25873)

* lmao

* lol

* yes

* yeah sure

* fix

* Apply suggestions from code review

Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com>
Signed-off-by: Contrabang <91113370+Contrabang@users.noreply.github.com>

* lewc review + duplicate

---------

Signed-off-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com>
This commit is contained in:
Contrabang
2024-06-20 11:38:23 +00:00
committed by GitHub
co-authored by 1080pCat
parent 2ef31cc6e4
commit 18b0b09778
8 changed files with 61 additions and 26 deletions
@@ -2046,3 +2046,13 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
return dna.species.unarmed
return zombie.claw_attack
/mob/living/carbon/human/proc/get_dna_scrambled()
scramble(1, src, 100)
real_name = random_name(gender, dna.species.name) // Give them a name that makes sense for their species.
sync_organ_dna(assimilate = 1)
update_body()
reset_hair() // No more winding up with hairstyles you're not supposed to have, and blowing your cover.
reset_markings() // ...Or markings.
dna.ResetUIFrom(src)
flavor_text = ""
@@ -1087,17 +1087,18 @@ It'll return null if the organ doesn't correspond, so include null checks when u
playsound(user.loc, 'sound/misc/moist_impact.ogg', 50, TRUE)
user.do_attack_animation(target, ATTACK_EFFECT_BITE)
target.apply_damage(20, BRUTE, user.zone_selected)
if(!target.HasDisease(/datum/disease/zombie))
var/datum/disease/zombie/zomb = new /datum/disease/zombie
if(target.CanContractDisease(zomb)) // biosuit aint going to protect you buddy
target.ForceContractDisease(zomb)
target.Dizzy(10 SECONDS)
target.Confused(10 SECONDS)
else
qdel(zomb)
if(!HAS_TRAIT(user, TRAIT_NON_INFECTIOUS_ZOMBIE))
if(!target.HasDisease(/datum/disease/zombie))
var/datum/disease/zombie/zomb = new /datum/disease/zombie
if(target.CanContractDisease(zomb)) // biosuit aint going to protect you buddy
target.ForceContractDisease(zomb)
target.Dizzy(10 SECONDS)
target.Confused(10 SECONDS)
else
qdel(zomb)
for(var/datum/disease/zombie/zomb in target.viruses)
zomb.stage = max(rand(3, 4), zomb.stage)
for(var/datum/disease/zombie/zomb in target.viruses)
zomb.stage = max(rand(3, 4), zomb.stage)
qdel(grabby)
return TRUE
@@ -1126,12 +1127,13 @@ It'll return null if the organ doesn't correspond, so include null checks when u
eat_brain.custom_pain("OH GOD!!! THEY'RE EATING MY [uppertext(eat_brain.name)]!!") // gnarly
user.visible_message("<span class='danger'>[user] digs their claws into [target]'s [brain_house.name], eating their [eat_brain]!</span>", "<span class='danger zombie'>We feast on [target]'s brains.</span>")
if(!target.HasDisease(/datum/disease/zombie))
var/datum/disease/zombie/zomb = new /datum/disease/zombie
target.ContractDisease(zomb)
if(!HAS_TRAIT(user, TRAIT_NON_INFECTIOUS_ZOMBIE))
if(!target.HasDisease(/datum/disease/zombie))
var/datum/disease/zombie/zomb = new /datum/disease/zombie
target.ContractDisease(zomb)
for(var/datum/disease/zombie/zomb in target.viruses)
zomb.stage = max(5, zomb.stage)
for(var/datum/disease/zombie/zomb in target.viruses)
zomb.stage = max(5, zomb.stage)
if(!do_mob(user, target, 1 SECONDS))
return