Unapologetic Undead Buffs (#5259)

Halloween is close, and due to such, we must increase the spookyness.

This pr adds zombies. They spread via the bite, that will infect someone with a chemical, that will create a parasite, if left unchecked, it will turn the victim into a flesh eating undead.
This commit is contained in:
Alberyk
2018-09-30 15:32:29 -03:00
committed by Erki
parent 297d581350
commit 9f8cfc7e87
13 changed files with 182 additions and 11 deletions
+1 -1
View File
@@ -1099,7 +1099,7 @@ var/list/global/random_stock_large = list(
if("chempack")
var/total = rand(2,6)
var/list/chems = SSchemistry.chemical_reagents.Copy()
var/list/exclusion = list("drink", "reagent", "adminordrazine", "beer2", "azoth", "elixir_life", "liquid_fire", "philosopher_stone", "undead_ichor", "love", "shapesand", "usolve", "sglue", "black_matter")
var/list/exclusion = list("drink", "reagent", "adminordrazine", "beer2", "azoth", "elixir_life", "liquid_fire", "philosopher_stone", "undead_ichor", "love", "shapesand", "usolve", "sglue", "black_matter", "lightning", "trioxin")
chems -= exclusion
for (var/i=0,i<total,i++)
var/obj/item/weapon/reagent_containers/chem_disp_cartridge/C = new /obj/item/weapon/reagent_containers/chem_disp_cartridge(L)
@@ -115,3 +115,68 @@
sleep(1)
new /obj/effect/decal/cleanable/ash(H.loc)
qdel(H)
/mob/living/carbon/human/zombie/Initialize(mapload)
. = ..(mapload, "Zombie")
/datum/species/zombie
name = "Zombie"
name_plural = "Zombies"
bodytype = "Zombie"
icobase = 'icons/mob/human_races/r_zombie.dmi'
deform = 'icons/mob/human_races/r_zombie.dmi'
hide_name = TRUE
name_language = null // Use the first-name last-name generator rather than a language scrambler
language = null
default_language = LANGUAGE_GIBBERING
unarmed_types = list(/datum/unarmed_attack/bite/infectious, /datum/unarmed_attack/claws/strong)
darksight = 8
has_fine_manipulation = FALSE
speech_sounds = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg')
speech_chance = 50
ethanol_resistance = -1
taste_sensitivity = TASTE_NUMB
breakcuffs = list(MALE,FEMALE,NEUTER)
has_organ = list(
"zombie" = /obj/item/organ/parasite/zombie,
"brain" = /obj/item/organ/brain
)
virus_immune = 1
vision_flags = DEFAULT_SIGHT | SEE_MOBS
reagent_tag = IS_UNDEAD
rarity_value = 10
blurb = "Once a living person, this unholy creature was created either by the power of science or necromancy."
remains_type = /obj/effect/decal/remains/human
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/undead
flesh_color = "#76a05e"
flags = NO_BLOOD | NO_SCAN | NO_SLIP | NO_POISON | NO_PAIN | NO_BREATHE
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR | HAS_SOCKS
spawn_flags = IS_RESTRICTED
stamina = 500 //Tireless automatons
stamina_recovery = 1
sprint_speed_factor = 0.3
exhaust_threshold = 0 //No oxyloss, so zero threshold
inherent_verbs = list(/mob/living/carbon/human/proc/darkness_eyes)
/datum/species/zombie/handle_post_spawn(var/mob/living/carbon/human/H)
H.mutations.Add(CLUMSY)
return ..()
@@ -148,3 +148,12 @@
sharp = 1
edge = 1
attack_name = "mandibles"
/datum/unarmed_attack/bite/infectious
shredding = 1
/datum/unarmed_attack/bite/infectious/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armour,var/attack_damage,var/zone)
..()
if(prob(25))
if(target.reagents)
target.reagents.add_reagent("trioxin", 10)
+11
View File
@@ -105,6 +105,17 @@
return 1
return 0
/proc/isundead(A)
if(istype(A, /mob/living/carbon/human))
switch(A:get_species())
if ("Skeleton")
return 1
if ("Zombie")
return 1
if ("Apparition")
return 1
return 0
/proc/islesserform(A)
if(istype(A, /mob/living/carbon/human))
switch(A:get_species())
+58
View File
@@ -37,6 +37,7 @@
/obj/item/organ/parasite/kois
name = "k'ois mycosis"
icon = 'icons/obj/surgery.dmi'
icon_state = "kois-on"
dead_icon = "kois-off"
@@ -103,6 +104,7 @@
/obj/item/organ/parasite/blackkois
name = "k'ois mycosis"
icon = 'icons/obj/surgery.dmi'
icon_state = "black-on"
dead_icon = "black-off"
subtle = 1
@@ -199,3 +201,59 @@
target << "<span class='warning'>Your mind suddenly grows dark as the unity of the Hive is torn from you.</span>"
removed_langs = 0
..()
/obj/item/organ/parasite/zombie
name = "black tumor"
icon = 'icons/obj/surgery.dmi'
icon_state = "blacktumor"
dead_icon = "blacktumor"
organ_tag = "zombie"
parent_organ = "chest"
stage_interval = 150
/obj/item/organ/parasite/zombie/process()
..()
if (!owner)
return
if(prob(10) && !(owner.species.flags & NO_PAIN))
owner << "<span class='warning'>You feel a burning sensation on your skin!</span>"
owner.make_jittery(10)
else if(prob(10))
owner.emote("moan")
if(stage >= 2)
if(prob(15))
owner.emote("scream")
if(!isundead(owner))
owner.adjustBrainLoss(2, 55)
else if(prob(10))
if(!isundead(owner))
owner << "<span class='warning'>You feel sick.</span>"
owner.adjustToxLoss(5)
owner.delayed_vomit()
if(stage >= 3)
if(prob(10))
if(isundead(owner))
owner.adjustBruteLoss(-30)
owner.adjustFireLoss(-30)
else
owner << "<span class='cult'>You feel an insatiable hunger.</span>"
owner.nutrition = -1
if(stage >= 4)
if(prob(10))
if(!isundead(owner))
if(ishuman_species(owner))
owner << "<span class='warning'>You feel life leaving your husk, but death rejects you...</span>"
playsound(src.loc, 'sound/hallucinations/far_noise.ogg', 50, 1)
owner << "<font size='3'> <span class='cult'>All that is left is a cruel hunger for the flesh of the living, and the desire to spread this infection. You must consume all the living!</font></span>"
owner.set_species("Zombie")
else
owner.adjustToxLoss(50)
@@ -451,19 +451,19 @@
/datum/reagent/estus/affect_blood(var/mob/living/carbon/M, var/removed)
if (!modifier)
modifier = M.add_modifier(/datum/modifier/luminous, MODIFIER_REAGENT, src, _strength = 4, override = MODIFIER_OVERRIDE_STRENGTHEN)
if(isskeleton(M))
if(isundead(M))
M.heal_organ_damage(10 * removed, 15 * removed)
/datum/reagent/estus/affect_ingest(var/mob/living/carbon/M, var/removed)
if (!modifier)
modifier = M.add_modifier(/datum/modifier/luminous, MODIFIER_REAGENT, src, _strength = 4, override = MODIFIER_OVERRIDE_STRENGTHEN)
if(isskeleton(M))
if(isundead(M))
M.heal_organ_damage(10 * removed, 15 * removed)
/datum/reagent/estus/affect_touch(var/mob/living/carbon/M, var/removed)
if (!modifier)
modifier = M.add_modifier(/datum/modifier/luminous, MODIFIER_REAGENT, src, _strength = 4, override = MODIFIER_OVERRIDE_STRENGTHEN)
if(isskeleton(M))
if(isundead(M))
M.heal_organ_damage(10 * removed, 15 * removed)
/datum/reagent/liquid_fire
@@ -270,7 +270,7 @@
taste_description = "salty dirt"
metabolism = REM * 10
breathe_mul = 0
/datum/reagent/toxin/fertilizer/monoammoniumphosphate/touch_turf(var/turf/simulated/T)
if(!istype(T))
return
@@ -780,4 +780,26 @@
..()
M.hallucination = max(M.hallucination, 50)
if(prob(10))
M.see_invisible = SEE_INVISIBLE_CULT
M.see_invisible = SEE_INVISIBLE_CULT
/datum/reagent/toxin/trioxin
name = "Trioxin"
id = "trioxin"
description = "A synthetic compound of unknown origins, designated originally as a performance enhancing substance."
reagent_state = LIQUID
color = "#E7E146"
strength = 1
taste_description = "old eggs"
metabolism = REM
unaffected_species = IS_DIONA | IS_MACHINE | IS_UNDEAD
/datum/reagent/toxin/trioxin/affect_blood(var/mob/living/carbon/M, var/removed)
..()
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(M.reagents.has_reagent("spaceacillin", 15))
return
if(!H.internal_organs_by_name["zombie"] && prob(15))
var/obj/item/organ/external/affected = H.get_organ("chest")
var/obj/item/organ/parasite/zombie/infest = new()
infest.replaced(H, affected)
@@ -135,7 +135,7 @@
/spell/targeted/mend/cast(list/targets, mob/user)
..()
for(var/mob/living/target in targets)
if(isskeleton(target))
if(isundead(target))
user << "This spell can't affect the undead."
return 0
@@ -217,7 +217,7 @@
user << "<span class='warning'>\The [target] is still alive!</span>"
return 0
if(isskeleton(target))
if(isundead(target))
user << "This spell can't affect the undead."
return 0
@@ -91,7 +91,7 @@
user << "This spell can't affect the living."
return 0
if(isskeleton(target))
if(isundead(target))
user << "This spell can't affect the undead."
return 0
@@ -144,7 +144,7 @@
/spell/targeted/lichdom/cast(mob/target,var/mob/living/carbon/human/user as mob)
if(isskeleton(user))
if(isundead(user))
user << "You have no soul or life to offer."
return 0