Backports the new zombification mechanics from the Konyang zombie event. (#18710)

* Reorder parasites

* sounds

* organ defines, dmdocs

* maiming stuff

* undead changes, abilities

* hylemnomil, undead sprites

* antibodies

* antibody extractor code

* icons

* antibody fixes

* antibodies vial, rock break sfx

* You're all going to die down here.

* hylemnomilz eta vial and attributions

* zombified organs can't be removed

* hylemnomil zeta edits

* fixes

* lmao

* easier check

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
This commit is contained in:
Matt Atlas
2024-03-24 14:04:52 +00:00
committed by GitHub
co-authored by Matt Atlas
parent ee81fc9b24
commit 82beece3db
37 changed files with 1423 additions and 618 deletions
@@ -1831,3 +1831,22 @@
if(P)
if(P.drug_resistance == 0)
P.drug_resistance = 1
/singleton/reagent/antibodies
name = "Hylemnomil-Zeta Antibodies"
description = "A pure antibody compound that is capable of fighting against Hylemnomil-Zeta."
color = "#FFFFFF"
overdose = 100
metabolism = REM*0.0001
scannable = TRUE
taste_description = "pure death"
/singleton/reagent/antibodies/affect_blood(mob/living/carbon/M, alien, removed, datum/reagents/holder)
. = ..()
M.add_chemical_effect(CE_ANTIBODIES, 10)
var/obj/item/organ/internal/parasite/zombie/Z = M.internal_organs_by_name[BP_ZOMBIE_PARASITE]
if(Z && !Z.curing)
if(prob(5))
var/obj/item/organ/external/E = Z.parent_organ
Z.curing = TRUE
to_chat(M, SPAN_WARNING("Your [E.name] tightens, pulses, and squirms as \the [Z] fights back against the antibodies!"))
@@ -842,49 +842,68 @@
H.berserk_stop()
berserked = FALSE
/singleton/reagent/toxin/trioxin
name = "Trioxin"
description = "A synthetic compound of unknown origins, designated originally as a performance enhancing substance."
/singleton/reagent/toxin/hylemnomil
name = "Hylemnomil-Zeta"
description = "An extraordinary synthetic compound created at Einstein Engines Research Base Omega-99. This compound is synthetically created to incorporate parts of \
the Rampancy Signal on Konyang. It rewrites an organism's DNA at the base and, similarly to rabies, makes the infected organic have an \
unstoppable need to feed on anything it sees. Instructions can be conveyed to some degree, such as information on who is an Einstein Engines \
employee and to not hurt them. The process of DNA rewriting leads to rapid rotting of the flesh."
reagent_state = LIQUID
color = "#E7E146"
color = "#551A8B"
strength = 1
taste_description = "old eggs"
taste_description = "unknown scientific concoction"
metabolism = REM
unaffected_species = IS_DIONA | IS_MACHINE | IS_UNDEAD
affects_dead = TRUE
/singleton/reagent/toxin/trioxin/affect_blood(var/mob/living/carbon/M, var/removed, var/datum/reagents/holder)
/singleton/reagent/toxin/hylemnomil/affect_blood(var/mob/living/carbon/M, var/removed, var/datum/reagents/holder)
..()
if(istype(M,/mob/living/carbon/human))
if(ishuman(M))
var/mob/living/carbon/human/H = M
/// Thetamycin is a temporary fix.
if(H.reagents.has_reagent(/singleton/reagent/thetamycin, 15))
return
/// Antibodies are a more permanent one.
if(H.chem_effects[CE_ANTIBODIES])
return
if(!H.internal_organs_by_name[BP_ZOMBIE_PARASITE] && prob(15))
var/obj/item/organ/external/affected = H.get_organ(BP_CHEST)
var/to_infest
var/list/possible_organs = list()
var/obj/item/organ/external/organ_to_check
/// The infection starts from the hands and feet. The closer it is to the brain, the higher the stage it starts at.
for(var/organ in list(BP_R_HAND, BP_L_HAND, BP_R_FOOT, BP_L_FOOT))
organ_to_check = H.organs_by_name[organ]
if(organ_to_check && !BP_IS_ROBOTIC(organ_to_check))
possible_organs[organ] = 1
if(!length(possible_organs))
for(var/organ in list(BP_R_ARM, BP_L_ARM, BP_R_LEG, BP_L_LEG))
organ_to_check = H.organs_by_name[organ]
if(organ_to_check && !BP_IS_ROBOTIC(organ_to_check))
possible_organs[organ] = 2
/// In case there aren't any appendages, try the groin.
if(!length(possible_organs))
organ_to_check = H.organs_by_name[BP_GROIN]
if(organ_to_check && !BP_IS_ROBOTIC(organ_to_check))
possible_organs[BP_GROIN] = 2
/// I'm not even sure how you get to being a nugget, but the last resort is the chest.
if(!length(possible_organs))
possible_organs[BP_CHEST] = 3
/// Infect the user, apply the right stage, then remove all hylemnomil from the user.
to_infest = pick(possible_organs)
var/obj/item/organ/external/affected = H.organs_by_name[to_infest]
var/obj/item/organ/internal/parasite/zombie/infest = new()
infest.replaced(H, affected)
if(H.species.zombie_type)
if(!H.internal_organs_by_name[BP_BRAIN]) //destroying the brain stops trioxin from bringing the dead back to life
return
if(H && H.stat != DEAD)
return
for(var/datum/language/L in H.languages)
H.remove_language(L.name)
var/r = H.r_skin
var/g = H.g_skin
var/b = H.b_skin
H.set_species(H.species.zombie_type, 0, 0, 0)
H.revive()
H.change_skin_color(r, g, b)
playsound(H.loc, 'sound/hallucinations/far_noise.ogg', 50, 1)
to_chat(H,"<font size='3'><span class='cult'>You return back to life as the undead, all that is left is the hunger to consume the living and the will to spread the infection.</font></span>")
infest.parent_organ = affected.limb_name
infest.stage = possible_organs[to_infest]
H.reagents.remove_reagent(type, REAGENT_VOLUME(H.reagents, type))
/singleton/reagent/toxin/dextrotoxin
name = "Dextrotoxin"
@@ -194,6 +194,13 @@
possible_transfer_amounts = list(5,10,15,25)
fragile = 1 // very fragile
/obj/item/reagent_containers/glass/beaker/vial/antidote
name = "hylemnomil-zeta antidote vial"
desc = "<span class='cult'>Your lifeline. Defend it with your life.</span>"
volume = 60
amount_per_transfer_from_this = 5
reagents_to_add = list(/singleton/reagent/antibodies = 60)
/obj/item/reagent_containers/glass/beaker/medcup
name = "medicine cup"
desc = "A glass medicine cup. Like a shot glass for medicine."
@@ -228,11 +228,10 @@
reagents_to_add = list(/singleton/reagent/hyronalin = 60)
/obj/item/reagent_containers/glass/bottle/trioxin
name = "trioxin bottle"
desc = "A small bottle. Contains a swirling, green liquid."
icon_state = "bottle-1"
reagents_to_add = list(/singleton/reagent/toxin/trioxin = 60)
name = "hylemnomil-zeta vial"
desc = "A small, unmarked lial with an ominous label. <span class='cult'>It contains a swirling, purple liquid.</span>"
icon_state = "bouteille"
reagents_to_add = list(/singleton/reagent/toxin/hylemnomil = 60)
//syrups
/obj/item/reagent_containers/glass/bottle/syrup