Obliterates Zombies

This commit is contained in:
AffectedArc07
2020-07-02 21:22:55 +01:00
parent cd5da7494c
commit e305530d59
19 changed files with 8 additions and 356 deletions
-11
View File
@@ -767,17 +767,6 @@
desc = "Bark bark bark."
key = "vu"
/datum/language/zombie
name = "Zombie"
desc = "BRAAAAAAINS!"
speech_verb = "moans"
whisper_verb = "mutters"
exclaim_verb = "wails"
colour = "zombie"
key = "zom"
flags = RESTRICTED
syllables = list("BRAAAAAAAAAAAAAAAAINS", "BRAAINS", "BRAINS")
/mob/proc/grant_all_babel_languages()
for(var/la in GLOB.all_languages)
var/datum/language/new_language = GLOB.all_languages[la]
@@ -53,7 +53,6 @@
var/stun_mod = 1 // If a species is more/less impacated by stuns/weakens/paralysis
var/speed_mod = 0 // this affects the race's speed. positive numbers make it move slower, negative numbers make it move faster
var/blood_damage_type = OXY //What type of damage does this species take if it's low on blood?
var/obj/item/mutanthands
var/total_health = 100
var/punchdamagelow = 0 //lowest possible punch damage
var/punchdamagehigh = 9 //highest possible punch damage
@@ -1,102 +0,0 @@
#define REGENERATION_DELAY 60 // After taking damage, how long it takes for automatic regeneration to begin
/datum/species/zombie
// 1spooky
name = "High-Functioning Zombie"
name_plural = "High-Functioning Zombies"
icobase = 'icons/mob/human_races/r_zombie.dmi'
deform = 'icons/mob/human_races/r_def_zombie.dmi'
dies_at_threshold = TRUE
language = "Zombie"
species_traits = list(NO_BLOOD, NOZOMBIE, NOTRANSSTING, NO_BREATHE, RADIMMUNE, NO_SCAN)
var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg')
warning_low_pressure = -1
hazard_low_pressure = -1
hazard_high_pressure = 999999999
warning_high_pressure = 999999999
cold_level_1 = -1
cold_level_2 = -1
cold_level_3 = -1
tox_mod = 0
flesh_color = "#00FF00" // for green examine text
bodyflags = HAS_SKIN_COLOR
dietflags = DIET_CARN
has_organ = list(
"heart" = /obj/item/organ/internal/heart,
"lungs" = /obj/item/organ/internal/lungs,
"liver" = /obj/item/organ/internal/liver,
"kidneys" = /obj/item/organ/internal/kidneys,
"brain" = /obj/item/organ/internal/brain,
"appendix" = /obj/item/organ/internal/appendix,
"eyes" = /obj/item/organ/internal/eyes,
"ears" = /obj/item/organ/internal/ears)
/datum/species/zombie/infectious
name = "Infectious Zombie"
mutanthands = /obj/item/zombie_hand
icobase = 'icons/mob/human_races/r_zombie.dmi'
deform = 'icons/mob/human_races/r_def_zombie.dmi'
brute_mod = 0.8 // 120 damage to KO a zombie, which kills it
burn_mod = 0.8
clone_mod = 0.8
brain_mod = 0.8
stamina_mod = 0.8
speed_mod = 1.6
default_language = "Zombie"
var/heal_rate = 1
var/regen_cooldown = 0
/datum/species/zombie/infectious/spec_stun(mob/living/carbon/human/H, amount)
. = min(20, amount)
/datum/species/zombie/infectious/apply_damage(damage = 0, damagetype = BRUTE, def_zone = null, blocked = 0, sharp = 0, obj/used_weapon = null)
. = ..()
if(damage)
regen_cooldown = world.time + REGENERATION_DELAY
/datum/species/zombie/infectious/handle_life(mob/living/carbon/human/H)
. = ..()
H.a_intent = INTENT_HARM // THE SUFFERING MUST FLOW
//Zombies never actually die, they just fall down until they regenerate enough to rise back up.
//They must be restrained, beheaded or gibbed to stop being a threat.
if(regen_cooldown < world.time)
var/heal_amt = heal_rate
if(H.InCritical())
heal_amt *= 2
H.heal_overall_damage(heal_amt,heal_amt)
H.adjustToxLoss(-heal_amt)
if(!H.InCritical() && prob(4))
playsound(H, pick(spooks), 50, TRUE, 10)
//Congrats you somehow died so hard you stopped being a zombie
/datum/species/zombie/infectious/handle_death(gibbed, mob/living/carbon/C)
. = ..()
var/obj/item/organ/internal/zombie_infection/infection
infection = C.get_organ_slot("zombie_infection")
if(infection)
qdel(infection)
/datum/species/zombie/infectious/on_species_gain(mob/living/carbon/human/H, datum/species/old_species)
. = ..()
// Deal with the source of this zombie corruption
// Infection organ needs to be handled separately from mutant_organs
// because it persists through species transitions
if(mutanthands)
H.drop_l_hand()
H.drop_r_hand()
H.put_in_hands(new mutanthands())
H.put_in_hands(new mutanthands())
var/obj/item/organ/internal/zombie_infection/infection
infection = H.get_organ_slot("zombie_infection")
if(!infection)
infection = new()
infection.insert(H)
/datum/species/zombie/infectious/on_species_loss(mob/living/carbon/human/C, datum/species/old_species)
QDEL_NULL(C.r_hand)
QDEL_NULL(C.l_hand)
return ..()
#undef REGENERATION_DELAY
@@ -82,14 +82,14 @@
/obj/structure/spawner/nether/examine(mob/user)
. = ..()
if(isskeleton(user) || iszombie(user))
if(isskeleton(user))
. += "A direct link to another dimension full of creatures very happy to see you. <span class='nicegreen'>You can see your house from here!</span>"
else
. += "A direct link to another dimension full of creatures not very happy to see you. <span class='warning'>Entering the link would be a very bad idea.</span>"
/obj/structure/spawner/nether/attack_hand(mob/user)
. = ..()
if(isskeleton(user) || iszombie(user))
if(isskeleton(user))
to_chat(user, "<span class='notice'>You don't feel like going home yet...</span>")
else
user.visible_message("<span class='warning'>[user] is violently pulled into the link!</span>", \
@@ -48,7 +48,7 @@
var/gender = NEUTER //Determines if the accessory will be skipped or included in random hair generations
// Restrict some styles to specific species
var/list/species_allowed = list("Human", "Slime People", "Infectious Zombie", "High-Functioning Zombie")
var/list/species_allowed = list("Human", "Slime People")
var/list/sprite_sheets = list() //For accessories common across species but need to use 'fitted' sprites (like underwear). e.g. list("Vox" = 'icons/mob/species/vox/iconfile.dmi')
var/list/models_allowed = list() //Specifies which, if any, hairstyles or markings can be accessed by which prosthetics. Should equal the manufacturing company name in robolimbs.dm.
var/list/heads_allowed = null //Specifies which, if any, alt heads a head marking, hairstyle or facial hair style is compatible with.
@@ -226,37 +226,6 @@
if(B && islist(B.data) && !data)
data = B.data.Copy()
/datum/reagent/romerol
name = "romerol"
// the REAL zombie powder
id = "romerol"
description = "Romerol is a highly experimental bioterror agent \
which causes dormant nodules to be etched into the grey matter of \
the subject. These nodules only become active upon death of the \
host, upon which, the secondary structures activate and take control \
of the host body."
color = "#123524" // RGB (18, 53, 36)
metabolization_rate = INFINITY
can_synth = FALSE
taste_description = "CAAAARL"
/datum/reagent/romerol/reaction_mob(mob/living/carbon/human/H, method = REAGENT_TOUCH, volume)
if(!istype(H))
return
// Silently add the zombie infection organ to be activated upon death
if(!H.get_organ_slot("zombie_infection"))
var/obj/item/organ/internal/zombie_infection/nodamage/ZI = new()
ZI.insert(H)
..()
/datum/reagent/romerol/on_mob_life(mob/living/M)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(!H.get_organ_slot("zombie_infection"))
var/obj/item/organ/internal/zombie_infection/nodamage/ZI = new()
ZI.insert(H)
return ..()
/datum/reagent/uranium
name ="Uranium"
id = "uranium"
@@ -12,11 +12,6 @@
container_type = OPENCONTAINER
volume = 30
/obj/item/reagent_containers/glass/bottle/romerol
name = "romerol bottle"
desc = "A small bottle of Romerol. The REAL zombie powder."
list_reagents = list("romerol" = 30)
/obj/item/reagent_containers/glass/bottle/on_reagent_change()
update_icon()
-2
View File
@@ -178,8 +178,6 @@
continue
if(player.stat == DEAD) // Corpses
continue
if(iszombie(player)) // Walking corpses
continue
if(issilicon(player)) //Borgs are technically dead anyways
continue
if(isanimal(player)) //Poly does not own the shuttle
-69
View File
@@ -1,69 +0,0 @@
/obj/item/zombie_hand
name = "zombie claw"
desc = "A zombie's claw is its primary tool, capable of infecting \
unconscious or dead humans, butchering all other living things to \
sustain the zombie, forcing open airlock doors and opening \
child-safe caps on bottles."
flags = NODROP|ABSTRACT|DROPDEL
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
icon = 'icons/effects/blood.dmi'
icon_state = "bloodhand_left"
var/icon_left = "bloodhand_left"
var/icon_right = "bloodhand_right"
hitsound = 'sound/hallucinations/growl1.ogg'
force = 21 // Just enough to break airlocks with melee attacks
damtype = "brute"
/obj/item/zombie_hand/equipped(mob/user, slot)
. = ..()
switch(slot)
// Yes, these intentionally don't match
if(slot_l_hand)
icon_state = icon_right
if(slot_r_hand)
icon_state = icon_left
/obj/item/zombie_hand/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
if(!proximity_flag)
return
else if(isliving(target))
if(ishuman(target))
try_to_zombie_infect(target)
else
check_feast(target, user)
/proc/try_to_zombie_infect(mob/living/carbon/human/target)
CHECK_DNA_AND_SPECIES(target)
if(NOZOMBIE in target.dna.species.species_traits)
// cannot infect any NOZOMBIE subspecies (such as high functioning
// zombies)
return
var/obj/item/organ/internal/zombie_infection/infection
infection = target.get_organ_slot("zombie_infection")
if(!infection)
infection = new()
infection.insert(target)
/obj/item/zombie_hand/proc/check_feast(mob/living/target, mob/living/user)
if(target.stat == DEAD)
var/hp_gained = target.maxHealth
target.gib()
user.adjustBruteLoss(-hp_gained, FALSE)
user.adjustToxLoss(-hp_gained, FALSE)
user.adjustFireLoss(-hp_gained, FALSE)
user.adjustCloneLoss(-hp_gained, FALSE)
user.adjustBrainLoss(-hp_gained, FALSE) // Zom Bee gibbers "BRAAAAISNSs!1!"
user.updatehealth()
/obj/item/zombie_hand/suicide_act(mob/living/carbon/human/user)
user.visible_message("<span class='suicide'>[user] is ripping [user.p_their()] brains out! It looks like [user.p_theyre()] trying to commit suicide!</span>")
if(ishuman(user))
var/mob/living/carbon/human/L = user
var/obj/item/organ/external/O = L.get_organ("head")
if(O)
O.droplimb()
return (BRUTELOSS)
-99
View File
@@ -1,99 +0,0 @@
/obj/item/organ/internal/zombie_infection
name = "festering ooze"
desc = "A black web of pus and viscera."
parent_organ = "head"
slot = "zombie_infection"
icon_state = "blacktumor"
var/causes_damage = TRUE
var/datum/species/old_species = /datum/species/human
var/living_transformation_time = 30
var/converts_living = FALSE
var/revive_time_min = 450
var/revive_time_max = 700
var/timer_id
/obj/item/organ/internal/zombie_infection/New(mob/living/carbon/holder)
..()
GLOB.zombie_infection_list += src
/obj/item/organ/internal/zombie_infection/Destroy()
GLOB.zombie_infection_list -= src
. = ..()
/obj/item/organ/internal/zombie_infection/insert(mob/living/carbon/human/M, special = 0)
..()
START_PROCESSING(SSobj, src)
/obj/item/organ/internal/zombie_infection/remove(mob/living/carbon/human/M, special = 0)
STOP_PROCESSING(SSobj, src)
if(iszombie(M) && old_species)
M.set_species(old_species, retain_damage = TRUE)
if(timer_id)
deltimer(timer_id)
. = ..()
/obj/item/organ/internal/zombie_infection/on_find(mob/living/finder)
to_chat(finder, "<span class='warning'>Inside the head is a disgusting black \
web of pus and viscera, bound tightly around the brain like some \
biological harness.</span>")
/obj/item/organ/internal/zombie_infection/process()
if(!owner)
return
if(!(src in owner.internal_organs))
remove(owner)
if(causes_damage && !iszombie(owner) && owner.stat != DEAD)
owner.adjustToxLoss(1)
if (prob(10))
to_chat(owner, "<span class='danger'>You feel sick...</span>")
if(timer_id)
return
if(owner.suiciding)
return
if(owner.stat != DEAD && !converts_living)
return
if(!owner.get_int_organ(/obj/item/organ/internal/brain))
return
if(!iszombie(owner))
to_chat(owner, "<span class='cultlarge'>You can feel your heart stopping, but something isn't right... \
life has not abandoned your broken form. You can only feel a deep and immutable hunger that \
not even death can stop, you will rise again!</span>")
var/revive_time = rand(revive_time_min, revive_time_max)
var/flags = TIMER_STOPPABLE
timer_id = addtimer(CALLBACK(src, .proc/zombify), revive_time, flags)
/obj/item/organ/internal/zombie_infection/proc/zombify()
timer_id = null
if(!converts_living && owner.stat != DEAD)
return
if(!iszombie(owner))
old_species = owner.dna.species.type
owner.set_species(/datum/species/zombie/infectious)
for(var/datum/disease/critical/crit in owner.viruses) // cure any new crit viruses
crit.cure(0)
var/stand_up = (owner.stat == DEAD) || (owner.stat == UNCONSCIOUS)
//Fully heal the zombie's damage the first time they rise
owner.setToxLoss(0)
owner.setOxyLoss(0)
owner.setBrainLoss(0)
owner.setCloneLoss(0)
owner.SetLoseBreath(0)
owner.heal_overall_damage(INFINITY, INFINITY, TRUE, TRUE, FALSE)
owner.setStaminaLoss(0)
if(!owner.update_revive())
return
owner.grab_ghost()
owner.visible_message("<span class='danger'>[owner] suddenly convulses, as [owner.p_they()][stand_up ? " stagger to [owner.p_their()] feet and" : ""] gain a ravenous hunger in [owner.p_their()] eyes!</span>", "<span class='alien'>You HUNGER!</span>")
playsound(owner.loc, 'sound/hallucinations/far_noise.ogg', 50, TRUE)
owner.do_jitter_animation(living_transformation_time)
owner.Stun(living_transformation_time * 0.05)
to_chat(owner, "<span class='alertalien'>You are now a zombie! Do not seek to be cured, do not help any non-zombies in any way, do not harm your zombie brethren and spread the disease by killing others. You are a creature of hunger and violence.</span>")
/obj/item/organ/internal/zombie_infection/nodamage
causes_damage = FALSE