From 9f8cfc7e87c82a78f034d13cf5d33ebe76664227 Mon Sep 17 00:00:00 2001 From: Alberyk Date: Sun, 30 Sep 2018 15:32:29 -0300 Subject: [PATCH] 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. --- aurorastation.dme | 2 +- code/modules/cargo/randomstock.dm | 2 +- .../outsider/{skeleton.dm => undead.dm} | 65 ++++++++++++++++++ .../carbon/human/species/species_attack.dm | 9 +++ code/modules/mob/mob_helpers.dm | 11 +++ code/modules/organs/subtypes/parasite.dm | 58 ++++++++++++++++ .../Chemistry-Reagents-Other.dm | 6 +- .../Chemistry-Reagents-Toxins.dm | 26 ++++++- code/modules/spells/targeted/cleric_spells.dm | 4 +- .../spells/targeted/necromancer_spells.dm | 4 +- html/changelogs/alberyk-brains.yml | 6 ++ icons/mob/human_races/r_zombie.dmi | Bin 0 -> 7184 bytes icons/obj/surgery.dmi | Bin 24094 -> 24265 bytes 13 files changed, 182 insertions(+), 11 deletions(-) rename code/modules/mob/living/carbon/human/species/outsider/{skeleton.dm => undead.dm} (67%) create mode 100644 html/changelogs/alberyk-brains.yml create mode 100644 icons/mob/human_races/r_zombie.dmi diff --git a/aurorastation.dme b/aurorastation.dme index 0acdce0a63c..a5fdc07014e 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -1690,7 +1690,7 @@ #include "code\modules\mob\living\carbon\human\species\species_attack.dm" #include "code\modules\mob\living\carbon\human\species\species_hud.dm" #include "code\modules\mob\living\carbon\human\species\outsider\shadow.dm" -#include "code\modules\mob\living\carbon\human\species\outsider\skeleton.dm" +#include "code\modules\mob\living\carbon\human\species\outsider\undead.dm" #include "code\modules\mob\living\carbon\human\species\outsider\vox.dm" #include "code\modules\mob\living\carbon\human\species\station\golem.dm" #include "code\modules\mob\living\carbon\human\species\station\human_subspecies.dm" diff --git a/code/modules/cargo/randomstock.dm b/code/modules/cargo/randomstock.dm index fc4e1220852..7510db70d0f 100644 --- a/code/modules/cargo/randomstock.dm +++ b/code/modules/cargo/randomstock.dm @@ -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,iYour mind suddenly grows dark as the unity of the Hive is torn from you." 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 << "You feel a burning sensation on your skin!" + 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 << "You feel sick." + owner.adjustToxLoss(5) + owner.delayed_vomit() + + if(stage >= 3) + if(prob(10)) + if(isundead(owner)) + owner.adjustBruteLoss(-30) + owner.adjustFireLoss(-30) + else + owner << "You feel an insatiable hunger." + owner.nutrition = -1 + + if(stage >= 4) + if(prob(10)) + if(!isundead(owner)) + if(ishuman_species(owner)) + owner << "You feel life leaving your husk, but death rejects you..." + playsound(src.loc, 'sound/hallucinations/far_noise.ogg', 50, 1) + owner << " 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!" + owner.set_species("Zombie") + else + owner.adjustToxLoss(50) \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm index 2c3d13987dc..0a482d8b38a 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm @@ -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 diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index 7d9ee09fe56..9f7406a83f2 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -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 \ No newline at end of file + 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) \ No newline at end of file diff --git a/code/modules/spells/targeted/cleric_spells.dm b/code/modules/spells/targeted/cleric_spells.dm index 9c1fe8686dc..2e3e8878139 100644 --- a/code/modules/spells/targeted/cleric_spells.dm +++ b/code/modules/spells/targeted/cleric_spells.dm @@ -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 << "\The [target] is still alive!" return 0 - if(isskeleton(target)) + if(isundead(target)) user << "This spell can't affect the undead." return 0 diff --git a/code/modules/spells/targeted/necromancer_spells.dm b/code/modules/spells/targeted/necromancer_spells.dm index 820810942ef..97227959f97 100644 --- a/code/modules/spells/targeted/necromancer_spells.dm +++ b/code/modules/spells/targeted/necromancer_spells.dm @@ -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 diff --git a/html/changelogs/alberyk-brains.yml b/html/changelogs/alberyk-brains.yml new file mode 100644 index 00000000000..7b05c74bb9e --- /dev/null +++ b/html/changelogs/alberyk-brains.yml @@ -0,0 +1,6 @@ +author: Alberyk + +delete-after: True + +changes: + - rscadd: "Added zombies." diff --git a/icons/mob/human_races/r_zombie.dmi b/icons/mob/human_races/r_zombie.dmi new file mode 100644 index 0000000000000000000000000000000000000000..93af5161deb7aa89ac671cd3f1ea9849fe83696c GIT binary patch literal 7184 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 Z_Xk#L#$!nc1fmClZtEJsinZ-g{{gW9CI