Buffs the Virus Outbreak event (#23285)

* Spring cleaning

* The great virus reclassification

* Add severity comment to Fake GBS

* Fix Jungle Fever being uncurable

* Fix Shock causing fainting slightly too often

* Makes Brainrot kill more reliably (yes, it already did)

* Make Wizarditis replace clothes a bit less eagerly, cleanup

* Buff Wizarditis effects' probabilities

* Add a bit of variety to Wizarditis flavor messages

* Clean up, nerf, and add some variety to Lycancoughy

* Refactor Spanish Inquisition Flu

* Refactor and slightly rebalance ICE9 Cold

* Fix DROPDEL items not GCing properly sometimes

* Lightly overhaul Pierrot's Throat

* Remove unnecessary `null` declaration assignment

* Deduplicate Critical disease properties

* Spring cleaning 2: Electric Boogaloo

* whoops

* Fixes DROPDEL items not GCing properly someothertimes

* Make Wizarditis clothes DROPDEL too

* Lewcc review

* Deduplicate Pierrot's Throat symptoms

* Spread out Cold9 and Spanish Flu's damage

* Clean up Adv. Kingstons

* Fix Adv. Kingstons *healing* brute damage
This commit is contained in:
Nathan Winters
2023-12-31 10:21:45 +00:00
committed by GitHub
parent 69a49cfe18
commit dad3774e7b
25 changed files with 265 additions and 311 deletions
+2 -2
View File
@@ -59,7 +59,7 @@ GLOBAL_LIST_INIT(diseases, subtypesof(/datum/disease))
//Other
var/list/viable_mobtypes = list() //typepaths of viable mobs
var/mob/living/carbon/affected_mob = null
var/mob/living/carbon/affected_mob
var/list/cures = list() //list of cures if the disease has the CURABLE flag, these are reagent ids
var/infectivity = 65
var/cure_chance = 8
@@ -67,7 +67,7 @@ GLOBAL_LIST_INIT(diseases, subtypesof(/datum/disease))
var/bypasses_immunity = FALSE //Does it skip species virus immunity check? Some things may diseases and not viruses
var/virus_heal_resistant = FALSE // Some things aren't technically viruses/traditional diseases and should be immune to edge case cure methods, like healing viruses.
var/permeability_mod = 1
var/severity = NONTHREAT
var/severity = NONTHREAT
var/list/required_organs = list()
var/needs_all_cures = TRUE
var/list/strain_data = list() //dna_spread special bullshit
+2 -2
View File
@@ -9,13 +9,13 @@
agent = "Excess Lepidopticides"
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/monkey)
desc = "If left untreated subject will regurgitate butterflies."
severity = MEDIUM
severity = MINOR
/datum/disease/anxiety/stage_act()
if(!..())
return FALSE
switch(stage)
if(2) //also changes say, see say.dm
if(2)
if(prob(5))
to_chat(affected_mob, "<span class='notice'>You feel anxious.</span>")
if(3)
+1 -2
View File
@@ -7,9 +7,8 @@
cure_text = "Surgery"
agent = "Shitty Appendix"
viable_mobtypes = list(/mob/living/carbon/human)
permeability_mod = 1
desc = "If left untreated the subject will become very weak, and may vomit often."
severity = "Dangerous!"
severity = MINOR
disease_flags = CAN_CARRY|CAN_RESIST
visibility_flags = HIDDEN_PANDEMIC
required_organs = list(/obj/item/organ/internal/appendix)
+2 -4
View File
@@ -9,13 +9,13 @@
agent = "Apidae Infection"
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/monkey)
desc = "If left untreated subject will regurgitate bees."
severity = DANGEROUS
severity = BIOHAZARD
/datum/disease/beesease/stage_act()
if(!..())
return FALSE
switch(stage)
if(2) //also changes say, see say.dm // no it doesn't, that's horrifyingly snowflakey
if(2)
if(prob(2))
to_chat(affected_mob, "<span class='notice'>You taste honey in your mouth.</span>")
if(3)
@@ -35,6 +35,4 @@
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up a swarm of bees!</span>", \
"<span class='userdanger'>You cough up a swarm of bees!</span>")
new /mob/living/simple_animal/hostile/poison/bees(affected_mob.loc)
//if(5)
//Plus if you die, you explode into bees
return
+1 -1
View File
@@ -10,7 +10,7 @@
cure_chance = 10
viable_mobtypes = list(/mob/living/carbon/human)
desc = "Swearing, shouting, attacking nearby crew members uncontrollably."
severity = DANGEROUS
severity = BIOHAZARD
disease_flags = CURABLE
/datum/disease/berserker/stage_act()
+5 -5
View File
@@ -7,12 +7,12 @@
cures = list("mannitol")
agent = "Cryptococcus Cosmosis"
viable_mobtypes = list(/mob/living/carbon/human)
cure_chance = 15//higher chance to cure, since two reagents are required
cure_chance = 15
desc = "This disease destroys the braincells, causing brain fever, brain necrosis and general intoxication."
required_organs = list(/obj/item/organ/internal/brain)
severity = DANGEROUS
severity = HARMFUL
/datum/disease/brainrot/stage_act() //Removed toxloss because damaging diseases are pretty horrible. Last round it killed the entire station because the cure didn't work -- Urist -ACTUALLY Removed rather than commented out, I don't see it returning - RR
/datum/disease/brainrot/stage_act()
if(!..())
return FALSE
switch(stage)
@@ -30,7 +30,7 @@
affected_mob.emote("stare")
if(prob(2))
affected_mob.emote("drool")
if(prob(10) && affected_mob.getBrainLoss()<=98)//shouldn't brainpain you to death now
if(prob(10) && affected_mob.getBrainLoss() < 100)
affected_mob.adjustBrainLoss(2)
if(prob(2))
to_chat(affected_mob, "<span class='danger'>Your try to remember something important...but can't.</span>")
@@ -40,7 +40,7 @@
affected_mob.emote("stare")
if(prob(2))
affected_mob.emote("drool")
if(prob(15) && affected_mob.getBrainLoss()<=98) //shouldn't brainpain you to death now
if(prob(15) && affected_mob.getBrainLoss() < 100)
affected_mob.adjustBrainLoss(3)
if(prob(2))
to_chat(affected_mob, "<span class='danger'>Strange buzzing fills your head, removing all thoughts.</span>")
+16 -27
View File
@@ -4,38 +4,27 @@
max_stages = 3
spread_text = "On contact"
spread_flags = CONTACT_GENERAL
cure_text = "Common Cold Anti-bodies & Spaceacillin"
cure_text = "Spaceacillin"
cures = list("spaceacillin")
agent = "ICE9-rhinovirus"
viable_mobtypes = list(/mob/living/carbon/human)
desc = "If left untreated the subject will slow, as if partly frozen."
severity = MEDIUM
severity = HARMFUL
/datum/disease/cold9/stage_act()
if(!..())
return FALSE
switch(stage)
if(2)
affected_mob.bodytemperature -= 10
if(prob(1) && prob(10))
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
cure()
return
if(prob(1))
affected_mob.emote("sneeze")
if(prob(1))
affected_mob.emote("cough")
if(prob(1))
to_chat(affected_mob, "<span class='danger'>Your throat feels sore.</span>")
if(prob(5))
to_chat(affected_mob, "<span class='danger'>You feel stiff.</span>")
if(3)
affected_mob.bodytemperature -= 20
if(prob(1))
affected_mob.emote("sneeze")
if(prob(1))
affected_mob.emote("cough")
if(prob(1))
to_chat(affected_mob, "<span class='danger'>Your throat feels sore.</span>")
if(prob(10))
to_chat(affected_mob, "<span class='danger'>You feel stiff.</span>")
if(stage < 2)
return
var/stage_factor = stage - 1
affected_mob.bodytemperature -= 7.5 * stage_factor // Enough to consistently frostburn certain species alive at stage 3
if(prob(2 * stage_factor))
affected_mob.emote("sneeze")
if(prob(2 * stage_factor))
affected_mob.emote("cough")
if(prob(3 * stage_factor))
to_chat(affected_mob, "<span class='danger'>Your throat feels sore.</span>")
if(prob(5 * stage_factor))
to_chat(affected_mob, "<span class='danger'>You feel stiff.</span>")
affected_mob.adjustFireLoss(1)
+14 -30
View File
@@ -1,4 +1,12 @@
/datum/disease/critical
form = "Medical Emergency"
max_stages = 3
spread_flags = SPECIAL
viable_mobtypes = list(/mob/living/carbon/human)
severity = MINOR
disease_flags = CURABLE
bypasses_immunity = TRUE
virus_heal_resistant = TRUE
/datum/disease/critical/stage_act() //overriden to ensure unique behavior
stage = min(stage, max_stages)
@@ -20,19 +28,11 @@
/datum/disease/critical/shock
name = "Shock"
form = "Medical Emergency"
spread_text = "The patient is in shock"
max_stages = 3
spread_flags = SPECIAL
spread_text = "The patient is in shock."
cure_text = "Saline-Glucose Solution"
cures = list("salglu_solution", "syndicate_nanites", "stimulative_agent")
cure_chance = 10
viable_mobtypes = list(/mob/living/carbon/human)
stage_prob = 6
severity = DANGEROUS
disease_flags = CURABLE
bypasses_immunity = TRUE
virus_heal_resistant = TRUE
/datum/disease/critical/shock/stage_act()
if(..())
@@ -60,7 +60,7 @@
if(prob(5))
to_chat(affected_mob, "<span class='danger'>You feel absolutely terrible!</span>")
if(prob(5))
affected_mob.emote("faint", "faint", "groan") // this is bugged, but out of scope, someone fix it :)
affected_mob.emote(pick(2; "faint", 1; "groan"))
if(3)
if(prob(1) && prob(10))
to_chat(affected_mob, "<span class='notice'>You feel better.</span>")
@@ -71,7 +71,7 @@
if(prob(5))
to_chat(affected_mob, "<span class='danger'>You feel horrible!</span>")
if(prob(5))
affected_mob.emote(pick("faint", "faint", "groan"))
affected_mob.emote(pick(2; "faint", 1; "groan"))
if(prob(7))
to_chat(affected_mob, "<span class='danger'>You can't breathe!</span>")
affected_mob.AdjustLoseBreath(2 SECONDS)
@@ -81,21 +81,13 @@
/datum/disease/critical/heart_failure
name = "Cardiac Failure"
form = "Medical Emergency"
spread_text = "The patient is having a cardiac emergency"
max_stages = 3
spread_flags = SPECIAL
spread_text = "The patient is having a cardiac emergency."
cure_text = "Atropine, Epinephrine, or Heparin"
cures = list("atropine", "epinephrine", "heparin", "syndicate_nanites", "stimulative_agent")
cure_chance = 10
needs_all_cures = FALSE
viable_mobtypes = list(/mob/living/carbon/human)
stage_prob = 5
severity = DANGEROUS
disease_flags = CURABLE
severity = HARMFUL
required_organs = list(/obj/item/organ/internal/heart)
bypasses_immunity = TRUE
virus_heal_resistant = TRUE
/datum/disease/critical/heart_failure/stage_act()
if(..())
@@ -125,7 +117,7 @@
to_chat(affected_mob, "<span class='danger'>Your heart stops beating!</span>")
affected_mob.AdjustLoseBreath(6 SECONDS)
if(prob(5))
affected_mob.emote(pick("faint", "faint", "groan"))
affected_mob.emote(pick(2; "faint", 1; "groan"))
if(3)
affected_mob.adjustOxyLoss(1)
if(prob(8))
@@ -136,17 +128,9 @@
/datum/disease/critical/hypoglycemia
name = "Hypoglycemia"
form = "Medical Emergency"
max_stages = 3
spread_flags = SPECIAL
spread_text = "The patient has low blood sugar."
cure_text = "Eating or administration of vitamins or nutrients"
viable_mobtypes = list(/mob/living/carbon/human)
stage_prob = 1
severity = DANGEROUS
disease_flags = CURABLE
bypasses_immunity = TRUE
virus_heal_resistant = TRUE
/datum/disease/critical/hypoglycemia/has_cure()
if(ishuman(affected_mob))
+1 -1
View File
@@ -8,7 +8,7 @@
agent = "Gravitokinetic Bipotential SADS-"
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/monkey)
desc = "If left untreated death will occur."
severity = BIOHAZARD
severity = BIOHAZARD // Mimicking real GBS
/datum/disease/fake_gbs/stage_act()
if(!..())
+1 -1
View File
@@ -9,7 +9,7 @@
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/monkey)
permeability_mod = 0.75
desc = "If left untreated the subject will feel quite unwell."
severity = MEDIUM
severity = MINOR
/datum/disease/flu/stage_act()
if(!..())
+14 -23
View File
@@ -1,37 +1,28 @@
/datum/disease/fluspanish
name = "Spanish inquisition Flu"
name = "Spanish Inquisition Flu"
max_stages = 3
spread_text = "Airborne"
cure_text = "Spaceacillin & Anti-bodies to the common flu"
cure_text = "Spaceacillin"
cures = list("spaceacillin")
cure_chance = 10
agent = "1nqu1s1t10n flu virion"
viable_mobtypes = list(/mob/living/carbon/human)
permeability_mod = 0.75
desc = "If left untreated the subject will burn to death for being a heretic."
severity = DANGEROUS
severity = HARMFUL
/datum/disease/fluspanish/stage_act()
if(!..())
return FALSE
switch(stage)
if(2)
affected_mob.bodytemperature += 10
if(prob(5))
affected_mob.emote("sneeze")
if(prob(5))
affected_mob.emote("cough")
if(prob(1))
to_chat(affected_mob, "<span class='danger'>You're burning in your own skin!</span>")
affected_mob.take_organ_damage(0,5)
if(stage < 2)
return
if(3)
affected_mob.bodytemperature += 20
if(prob(5))
affected_mob.emote("sneeze")
if(prob(5))
affected_mob.emote("cough")
if(prob(5))
to_chat(affected_mob, "<span class='danger'>You're burning in your own skin!</span>")
affected_mob.take_organ_damage(0,5)
return
var/stage_factor = stage - 1
affected_mob.bodytemperature += 10 * stage_factor // Enough to consistently cook certain species alive at stage 3
if(prob(3 * stage_factor))
affected_mob.emote("sneeze")
if(prob(3 * stage_factor))
affected_mob.emote("cough")
if(prob(2.5 * stage_factor))
to_chat(affected_mob, "<span class='danger'>You're burning in your own skin!</span>")
affected_mob.adjustFireLoss(5)
+1 -3
View File
@@ -5,11 +5,9 @@
spread_flags = CONTACT_GENERAL
cure_text = "Diphenhydramine & Sulfur"
cures = list("diphenhydramine","sulfur")
cure_chance = 15//higher chance to cure, since two reagents are required
cure_chance = 15 // Higher chance to cure, since two reagents are required
agent = "Gravitokinetic Bipotential SADS+"
viable_mobtypes = list(/mob/living/carbon/human)
disease_flags = CAN_CARRY|CAN_RESIST|CURABLE
permeability_mod = 1
severity = BIOHAZARD
/datum/disease/gbs/stage_act()
+34 -26
View File
@@ -9,7 +9,7 @@
viable_mobtypes = list(/mob/living/carbon/human)
permeability_mod = 0.75
desc = "If left untreated the subject will turn into a feline. In felines it has... OTHER... effects."
severity = DANGEROUS
severity = BIOHAZARD
/datum/disease/kingstons/stage_act()
if(!..())
@@ -46,8 +46,8 @@
var/mob/living/carbon/human/catface = affected_mob
catface.set_species(/datum/species/tajaran, retain_damage = TRUE, keep_missing_bodyparts = TRUE)
/datum/disease/kingstons_advanced //this used to be directly a subtype of kingstons, which sounds nice, but it ment that it would *turn you into a tarjaran always and have normal kingstons stage act* Don't make virusus subtypes unless the base virus does nothing.
// Not a subtype of regular Kingstons as it would inherit its `stage_act()`
/datum/disease/kingstons_advanced
name = "Advanced Kingstons Syndrome"
medical_name = "Advanced Kingstons Syndrome"
max_stages = 4
@@ -75,27 +75,35 @@
/datum/disease/kingstons_advanced/stage_act()
if(!..())
return FALSE
if(ishuman(affected_mob))
var/mob/living/carbon/human/twisted = affected_mob
switch(stage)
if(1)
if(prob(10))
to_chat(twisted, "<span class='notice'>You feel awkward.</span>")
if(2)
if(prob(10))
to_chat(twisted, "<span class='danger'>You itch.</span>")
if(3)
if(prob(10))
to_chat(twisted, "<span class='danger'>Your skin starts to flake!</span>")
if(!ishuman(affected_mob))
return
if(4)
if(prob(5))
if(!istype(twisted.dna.species, chosentype))
twisted.visible_message("<span class='danger'>[twisted]'s skin splits and form contorts!</span>", \
"<span class='userdanger'>Your body mutates into a [initial(chosentype.name)]!</span>")
twisted.set_species(chosentype, retain_damage = TRUE, keep_missing_bodyparts = TRUE)
else
twisted.visible_message("<span class='danger'>[twisted] scratches at their skin!</span>", \
"<span class='userdanger'>You scratch your skin to try not to itch!</span>")
twisted.adjustBruteLoss(-5)
twisted.adjustStaminaLoss(5)
var/mob/living/carbon/human/twisted = affected_mob
switch(stage)
if(1)
if(prob(10))
to_chat(twisted, "<span class='notice'>You feel awkward.</span>")
if(2)
if(prob(10))
to_chat(twisted, "<span class='danger'>You itch.</span>")
if(3)
if(prob(10))
to_chat(twisted, "<span class='danger'>Your skin starts to flake!</span>")
if(4)
if(!prob(5))
return
if(!istype(twisted.dna.species, chosentype))
twisted.visible_message(
"<span class='danger'>[twisted]'s skin splits and form contorts!</span>",
"<span class='userdanger'>Your body mutates into a [initial(chosentype.name)]!</span>"
)
twisted.set_species(chosentype, retain_damage = TRUE, keep_missing_bodyparts = TRUE)
return
twisted.visible_message(
"<span class='danger'>[twisted] scratches at their skin!</span>",
"<span class='userdanger'>You scratch your skin to try not to itch!</span>"
)
twisted.adjustBruteLoss(5)
twisted.adjustStaminaLoss(5)
+1 -1
View File
@@ -11,7 +11,7 @@
desc = "Uncontrollable laughing."
severity = BIOHAZARD
disease_flags = CAN_CARRY
bypasses_immunity = TRUE //Kuru is a prion disorder, not a virus
bypasses_immunity = TRUE // Kuru is a prion disorder, not a virus
virus_heal_resistant = TRUE
/datum/disease/kuru/stage_act()
+56 -39
View File
@@ -9,47 +9,64 @@
agent = "Excess Snuggles"
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/monkey)
desc = "If left untreated subject will regurgitate... puppies."
severity = MEDIUM
var/barklimit = 0
severity = HARMFUL
var/barklimit = 10
var/list/puppy_types = list(/mob/living/simple_animal/pet/dog/corgi/puppy, /mob/living/simple_animal/pet/dog/pug, /mob/living/simple_animal/pet/dog/fox)
var/list/plush_types = list(/obj/item/toy/plushie/orange_fox, /obj/item/toy/plushie/corgi, /obj/item/toy/plushie/robo_corgi, /obj/item/toy/plushie/pink_fox)
/datum/disease/lycan/stage_act()
if(!..())
return FALSE
switch(stage)
if(2) //also changes say, see say.dm
if(prob(5))
to_chat(affected_mob, "<span class='notice'>You itch.</span>")
affected_mob.emote("cough")
if(3)
if(prob(10))
to_chat(affected_mob, "<span class='notice'>You hear faint barking.</span>")
if(prob(5))
to_chat(affected_mob, "<span class='notice'>You crave meat.</span>")
affected_mob.emote("cough")
if(prob(2))
to_chat(affected_mob, "<span class='danger'>Your stomach growls!</span>")
if(4)
if(prob(10))
to_chat(affected_mob, "<span class='danger'>Your stomach barks?!</span>")
if(prob(5))
affected_mob.visible_message("<span class='danger'>[affected_mob] howls!</span>", \
"<span class='userdanger'>You howl!</span>")
affected_mob.AdjustConfused(rand(12 SECONDS, 16 SECONDS))
if(prob(3) && barklimit <= 10)
var/list/puppytype = list(/mob/living/simple_animal/pet/dog/corgi/puppy, /mob/living/simple_animal/pet/dog/pug, /mob/living/simple_animal/pet/dog/fox)
var/mob/living/puppypicked = pick(puppytype)
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up [initial(puppypicked.name)]!</span>", \
"<span class='userdanger'>You cough up [initial(puppypicked.name)]?!</span>")
new puppypicked(affected_mob.loc)
new puppypicked(affected_mob.loc)
barklimit ++
if(prob(1))
var/list/plushtype = list(/obj/item/toy/plushie/orange_fox, /obj/item/toy/plushie/corgi, /obj/item/toy/plushie/robo_corgi, /obj/item/toy/plushie/pink_fox)
var/obj/item/toy/plushie/coughfox = pick(plushtype)
new coughfox(affected_mob.loc)
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up a [initial(coughfox.name)]!</span>", \
"<span class='userdanger'>You cough [initial(coughfox.name)] up ?!</span>")
affected_mob.emote("cough")
affected_mob.adjustBruteLoss(5)
return
var/mob/living/carbon/human/H = affected_mob
switch(stage)
if(2)
if(prob(2))
H.emote("cough")
if(prob(3))
to_chat(H, "<span class='notice'>You itch.</span>")
H.adjustBruteLoss(rand(4, 6))
if(3)
var/obj/item/organ/external/stomach = H.bodyparts_by_name[pick("chest", "groin")]
if(prob(3))
H.emote("cough")
stomach.receive_damage(rand(0, 5))
if(prob(3))
to_chat(H, "<span class='notice'>You hear faint barking.</span>")
stomach.receive_damage(rand(4, 6))
if(prob(2))
to_chat(H, "<span class='notice'>You crave meat.</span>")
if(prob(3))
to_chat(H, "<span class='danger'>Your stomach growls!</span>")
stomach.receive_damage(rand(5, 10))
if(4)
var/obj/item/organ/external/stomach = H.bodyparts_by_name[pick("chest", "groin")]
if(prob(5))
H.emote("cough")
stomach.receive_damage(rand(0, 5))
if(prob(5))
to_chat(H, "<span class='danger'>Your stomach barks?!</span>")
stomach.receive_damage(rand(5, 10))
if(prob(5))
H.visible_message(
"<span class='danger'>[H] howls!</span>",
"<span class='userdanger'>You howl!</span>"
)
H.AdjustConfused(rand(12 SECONDS, 16 SECONDS))
stomach.receive_damage(rand(0, 5))
if(prob(5))
if(!barklimit)
to_chat(H, "<span class='danger'>Your stomach growls!</span>")
stomach.receive_damage(rand(5, 10))
else
var/atom/hairball = pick(prob(50) ? puppy_types : plush_types)
H.visible_message(
"<span class='danger'>[H] coughs up \a [initial(hairball.name)]!</span>",
"<span class='userdanger'>You cough up \a [initial(hairball.name)]?!</span>"
)
new hairball(H.loc)
barklimit--
stomach.receive_damage(rand(10, 15))
+1 -2
View File
@@ -6,10 +6,9 @@
cures = list("iron")
agent = "Fukkos Miracos"
viable_mobtypes = list(/mob/living/carbon/human)
disease_flags = CAN_CARRY|CAN_RESIST|CURABLE
permeability_mod = 0.75
desc = "This disease disrupts the magnetic field of your body, making it act as if a powerful magnet. Injections of iron help stabilize the field."
severity = MEDIUM
severity = MINOR
/datum/disease/magnitis/stage_act()
if(!..())
+42 -51
View File
@@ -5,62 +5,53 @@
cure_text = "Banana products, especially banana bread."
cures = list("banana")
cure_chance = 75
agent = "H0NI<42 Virus"
viable_mobtypes = list(/mob/living/carbon/human)
permeability_mod = 0.75
desc = "If left untreated the subject will probably drive others to insanity."
severity = MEDIUM
/datum/disease/pierrot_throat/stage_act()
if(!..())
return FALSE
switch(stage)
if(1)
if(prob(10))
to_chat(affected_mob, "<span class='danger'>You feel a little silly.</span>")
if(2)
if(prob(10))
to_chat(affected_mob, "<span class='danger'>You start seeing rainbows.</span>")
if(3)
if(prob(10))
to_chat(affected_mob, "<span class='danger'>Your thoughts are interrupted by a loud <b>HONK!</b></span>")
if(4)
if(prob(5))
affected_mob.say( pick( list("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk...") ) )
/datum/disease/pierrot_throat/advanced
name = "Advanced Pierrot's Throat"
spread_text = "Airborne"
cure_text = "Banana products, especially banana bread."
cures = list("banana")
cure_chance = 75
agent = "H0NI<42.B4n4 Virus"
viable_mobtypes = list(/mob/living/carbon/human)
permeability_mod = 0.75
desc = "If left untreated the subject will probably drive others to insanity and go insane themselves."
severity = DANGEROUS
severity = MINOR
/datum/disease/pierrot_throat/advanced/stage_act()
/datum/disease/pierrot_throat/stage_act()
if(!..())
return FALSE
switch(stage)
if(1)
if(prob(10))
to_chat(affected_mob, "<span class='danger'>You feel very silly.</span>")
if(prob(5))
to_chat(affected_mob, "<span class='danger'>You feel like making a joke.</span>")
if(2)
if(prob(10))
to_chat(affected_mob, "<span class='danger'>You don't just start seeing rainbows... YOU ARE RAINBOWS!</span>")
if(3)
if(prob(10))
to_chat(affected_mob, "<span class='danger'>Your thoughts are interrupted by a loud <b>HONK!</b></span>")
SEND_SOUND(affected_mob, sound('sound/items/airhorn.ogg'))
if(4)
if(prob(5))
affected_mob.say( pick( list("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk...") ) )
if(stage < 2)
return
if(!istype(affected_mob.wear_mask, /obj/item/clothing/mask/gas/clown_hat/nodrop))
affected_mob.unEquip(affected_mob.wear_mask, TRUE)
affected_mob.equip_to_slot(new /obj/item/clothing/mask/gas/clown_hat/nodrop(src), SLOT_HUD_WEAR_MASK)
var/mob/living/carbon/human/H = affected_mob
var/static/list/message_chances = list(null, 4, 2, 1)
if(prob(message_chances[stage]))
to_chat(H, "<span class='danger'>You feel [pick("a little silly", "like making a joke", "in the mood for giggling", "like the world is a little more vibrant")].</span>")
if(prob(message_chances[stage]))
to_chat(H, "<span class='danger'>You see [pick("rainbows", "puppies", "banana pies")] for a moment.</span>")
if(stage < 3)
return
var/static/list/honk_chances = list(null, null, 4, 0.66)
if(prob(honk_chances[stage]))
to_chat(H, "<span class='danger'>Your thoughts are interrupted by a loud <b>HONK!</b></span>")
SEND_SOUND(H, sound(pick(18; 'sound/items/bikehorn.ogg', 1; 'sound/items/airhorn.ogg', 1; 'sound/items/airhorn2.ogg'))) // 10% chance total for an airhorn
if(stage < 4)
return
if(prob(5))
H.say(pick(list("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk...")))
// Semi-permanent clown mask while in last stage of infection
if(locate(/obj/item/clothing/mask/gas/clown_hat) in H)
return
if(!H.has_organ_for_slot(SLOT_HUD_WEAR_MASK) || !H.canUnEquip(H.get_item_by_slot(SLOT_HUD_WEAR_MASK)))
return
var/saved_internals = H.internal
H.unEquip(H.get_item_by_slot(SLOT_HUD_WEAR_MASK))
var/obj/item/clothing/mask/gas/clown_hat/peak_comedy = new
peak_comedy.flags |= DROPDEL
H.equip_to_slot_or_del(peak_comedy, SLOT_HUD_WEAR_MASK)
if(saved_internals) // Let's not stealthily suffocate Vox/Plasmamen, this isn't a murder virus
H.internal = saved_internals
H.update_action_buttons_icon()
+1 -1
View File
@@ -8,7 +8,7 @@
agent = ""
viable_mobtypes = list(/mob/living/carbon/human)
desc = "A DNA-altering retrovirus that scrambles the structural and unique enzymes of a host constantly."
severity = DANGEROUS
severity = BIOHAZARD
permeability_mod = 0.4
stage_prob = 2
var/SE
-1
View File
@@ -7,7 +7,6 @@
cures = list("plasma")
agent = "Unknown"
viable_mobtypes = list(/mob/living/carbon/human)
permeability_mod = 1
severity = BIOHAZARD
/datum/disease/rhumba_beat/stage_act()
+1 -16
View File
@@ -6,9 +6,8 @@
cure_text = "A coder's love (theoretical)."
agent = "Shenanigans"
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/alien)
severity = HARMFUL
severity = BIOHAZARD
stage_prob = 10
visibility_flags = HIDDEN_SCANNER|HIDDEN_PANDEMIC
disease_flags = CURABLE
var/list/stage1 = list("You feel unremarkable.")
var/list/stage2 = list("You feel boring.")
@@ -81,15 +80,10 @@
cure_text = "Bananas"
cures = list("banana")
spread_text = "Monkey Bites"
spread_flags = SPECIAL
viable_mobtypes = list(/mob/living/carbon/human)
permeability_mod = 1
cure_chance = 1
disease_flags = CAN_CARRY|CAN_RESIST
desc = "Monkeys with this disease will bite humans, causing humans to mutate into a monkey."
severity = BIOHAZARD
stage_prob = 4
visibility_flags = 0
agent = "Kongey Vibrion M-909"
new_form = /mob/living/carbon/human/monkey
@@ -127,8 +121,6 @@
cure_chance = 5
agent = "R2D2 Nanomachines"
desc = "This disease, actually acute nanomachine infection, converts the victim into a cyborg."
severity = DANGEROUS
visibility_flags = 0
stage1 = null
stage2 = list("Your joints feel stiff.", "<span class='danger'>Beep...boop..</span>")
stage3 = list("<span class='danger'>Your joints feel very stiff.</span>", "Your skin feels loose.", "<span class='danger'>You can feel something move...inside.</span>")
@@ -160,8 +152,6 @@
cure_chance = 5
agent = "Rip-LEY Alien Microbes"
desc = "This disease changes the victim into a xenomorph."
severity = BIOHAZARD
visibility_flags = 0
stage1 = null
stage2 = list("Your throat feels scratchy.", "<span class='danger'>Kill...</span>")
stage3 = list("<span class='danger'>Your throat feels very scratchy.</span>", "Your skin feels tight.", "<span class='danger'>You can feel something move...inside.</span>")
@@ -189,8 +179,6 @@
cure_chance = 80
agent = "Advanced Mutation Toxin"
desc = "This highly concentrated extract converts anything into more of itself."
severity = BIOHAZARD
visibility_flags = 0
stage1 = list("You don't feel very well.")
stage2 = list("Your skin feels a little slimy.")
stage3 = list("<span class='danger'>Your appendages are melting away.</span>", "<span class='danger'>Your limbs begin to lose their shape.</span>")
@@ -218,7 +206,6 @@
cures = list("adminordrazine")
agent = "Fell Doge Majicks"
desc = "This disease transforms the victim into a corgi."
visibility_flags = 0
stage1 = list("BARK.")
stage2 = list("You feel the need to wear silly hats.")
stage3 = list("<span class='danger'>Must... eat... chocolate....</span>", "<span class='danger'>YAP</span>")
@@ -243,8 +230,6 @@
agent = "Gluttony's Blessing"
desc = "A 'gift' from somewhere terrible."
stage_prob = 20
severity = BIOHAZARD
visibility_flags = 0
stage1 = list("Your stomach rumbles.")
stage2 = list("Your skin feels saggy.")
stage3 = list("<span class='danger'>Your appendages are melting away.</span>", "<span class='danger'>Your limbs begin to lose their shape.</span>")
+5 -5
View File
@@ -3,17 +3,17 @@
name = "Fungal tuberculosis"
max_stages = 5
spread_text = "Airborne"
cure_text = "Spaceacillin & salbutamol"
cure_text = "Spaceacillin & Salbutamol"
cures = list("spaceacillin", "salbutamol")
agent = "Fungal Tubercle bacillus Cosmosis"
viable_mobtypes = list(/mob/living/carbon/human)
cure_chance = 5//like hell are you getting out of hell
cure_chance = 5 // Like hell are you getting out of hell
desc = "A rare highly transmittable virulent virus. Few samples exist, rumoured to be carefully grown and cultured by clandestine bio-weapon specialists. Causes fever, blood vomiting, lung damage, weight loss, and fatigue."
required_organs = list(/obj/item/organ/internal/lungs)
severity = DANGEROUS
bypasses_immunity = TRUE //Fungal and bacterial in nature; also infects the lungs
severity = HARMFUL
bypasses_immunity = TRUE // Fungal and bacterial in nature; also infects the lungs
/datum/disease/tuberculosis/stage_act() //it begins
/datum/disease/tuberculosis/stage_act()
if(!..())
return FALSE
switch(stage)
+60 -63
View File
@@ -8,84 +8,82 @@
cure_chance = 100
agent = "Rincewindus Vulgaris"
viable_mobtypes = list(/mob/living/carbon/human)
disease_flags = CAN_CARRY|CAN_RESIST|CURABLE
permeability_mod = 0.75
severity = HARMFUL
required_organs = list(/obj/item/organ/external/head)
severity = MINOR
/// A mapping of `num2text(SLOT_HUD_XYZ)` -> item path
var/list/magic_fashion = new
/*
BIRUZ BENNAR
SCYAR NILA - teleport
NEC CANTIO - dis techno
EI NATH - shocking grasp
AULIE OXIN FIERA - knock
TARCOL MINTI ZHERI - forcewall
STI KALY - blind
*/
/datum/disease/wizarditis/New()
. = ..()
var/list/magic_fashion_slot_IDs = list(
SLOT_HUD_RIGHT_HAND,
SLOT_HUD_LEFT_HAND,
SLOT_HUD_HEAD,
SLOT_HUD_OUTER_SUIT,
SLOT_HUD_SHOES
)
var/list/magic_fashion_items = list(
/obj/item/staff,
/obj/item/staff,
/obj/item/clothing/head/wizard,
/obj/item/clothing/suit/wizrobe,
/obj/item/clothing/shoes/sandal
)
for(var/i in 1 to length(magic_fashion_slot_IDs))
var/slot = num2text(magic_fashion_slot_IDs[i])
var/item = magic_fashion_items[i]
magic_fashion[slot] = item
/datum/disease/wizarditis/stage_act()
if(!..())
return FALSE
switch(stage)
if(2)
if(prob(0.5))
affected_mob.say(pick("You shall not pass!", "Expeliarmus!", "By Merlins beard!", "Feel the power of the Dark Side!"))
if(prob(0.5))
to_chat(affected_mob, "<span class='danger'>You feel [pick("that you don't have enough mana", "that the winds of magic are gone", "an urge to summon familiar")].</span>")
if(3)
if(prob(0.5))
affected_mob.say(pick("NEC CANTIO!","AULIE OXIN FIERA!", "STI KALY!", "TARCOL MINTI ZHERI!"))
if(prob(0.5))
to_chat(affected_mob, "<span class='danger'>You feel [pick("the magic bubbling in your veins","that this location gives you a +1 to INT","an urge to summon familiar")].</span>")
if(2, 3)
if(prob(2)) // Low prob. since everyone else will also be spouting this
affected_mob.say(pick("You shall not pass!", "Expeliarmus!", "By Merlin's beard!", "Feel the power of the Dark Side!", "A wizard is never late!", "50 points for Security!", "NEC CANTIO!", "STI KALY!", "AULIE OXIN FIERA!", "GAR YOK!", "DIRI CEL!"))
if(prob(8)) // Double the stage advancement prob. so each player has a chance to catch a couple
to_chat(affected_mob, "<span class='danger'>You feel [pick("that you don't have enough mana", "that the winds of magic are gone", "that this location gives you a +1 to INT", "an urge to summon familiar")].</span>")
if(4)
if(prob(1))
affected_mob.say(pick("NEC CANTIO!","AULIE OXIN FIERA!","STI KALY!","EI NATH!"))
return
if(prob(0.5))
to_chat(affected_mob, "<span class='danger'>You feel [pick("the tidal wave of raw power building inside","that this location gives you a +2 to INT and +1 to WIS","an urge to teleport")].</span>")
spawn_wizard_clothes(50)
if(prob(0.01))
affected_mob.say(pick("FORTI GY AMA!", "GITTAH WEIGH!", "TOKI WO TOMARE!", "TARCOL MINTI ZHERI!", "ONI SOMA!", "EI NATH!", "BIRUZ BENNAR!", "NWOLC EGNEVER!"))
if(prob(3)) // Last stage, so we'll have plenty of time to show these off even with a lower prob.
to_chat(affected_mob, "<span class='danger'>You feel [pick("the tidal wave of raw power building inside", "that this location gives you a +2 to INT and +1 to WIS", "an urge to teleport", "the magic bubbling in your veins", "an urge to summon familiar")].</span>")
if(prob(3)) // About 1 minute per item on average
spawn_wizard_clothes()
if(prob(0.033)) // Assuming 50 infected, someone should teleport every ~2 minutes on average
teleport()
return
/datum/disease/wizarditis/proc/spawn_wizard_clothes()
var/mob/living/carbon/human/H = affected_mob
// Which slots can we replace?
var/list/eligible_slot_IDs = new
for(var/slot in magic_fashion)
var/slot_ID = text2num(slot) // Convert back to numeric defines
/datum/disease/wizarditis/proc/spawn_wizard_clothes(chance = 0)
if(ishuman(affected_mob))
var/mob/living/carbon/human/H = affected_mob
if(prob(chance) && !isplasmaman(H))
if(!istype(H.head, /obj/item/clothing/head/wizard))
if(!H.unEquip(H.head))
qdel(H.head)
H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(H), SLOT_HUD_HEAD)
return
if(prob(chance))
if(!istype(H.wear_suit, /obj/item/clothing/suit/wizrobe))
if(!H.unEquip(H.wear_suit))
qdel(H.wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(H), SLOT_HUD_OUTER_SUIT)
return
if(prob(chance))
if(!istype(H.shoes, /obj/item/clothing/shoes/sandal))
if(!H.unEquip(H.shoes))
qdel(H.shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), SLOT_HUD_SHOES)
return
else
var/mob/living/carbon/H = affected_mob
if(prob(chance))
if(!istype(H.r_hand, /obj/item/staff))
H.drop_r_hand()
H.put_in_r_hand( new /obj/item/staff(H) )
return
return
if((locate(magic_fashion[slot]) in H) || !H.has_organ_for_slot(slot_ID) || !H.canUnEquip(H.get_item_by_slot(slot_ID)))
continue
switch(slot_ID) // Extra filtering for specific slots
if(SLOT_HUD_HEAD)
if(isplasmaman(H))
continue // We want them to spread the magical joy, not burn to death in agony
eligible_slot_IDs.Add(slot_ID)
if(!length(eligible_slot_IDs))
return
// Pick the magical winner and apply
var/chosen_slot_ID = pick(eligible_slot_IDs)
var/chosen_fashion = magic_fashion[num2text(chosen_slot_ID)]
H.unEquip(H.get_item_by_slot(chosen_slot_ID))
var/obj/item/magic_attire = new chosen_fashion
magic_attire.flags |= DROPDEL
H.equip_to_slot_or_del(magic_attire, chosen_slot_ID)
/datum/disease/wizarditis/proc/teleport()
if(!is_teleport_allowed(affected_mob.z))
@@ -118,4 +116,3 @@ STI KALY - blind
affected_mob.say("SCYAR NILA [uppertext(chosen_area.name)]!")
affected_mob.forceMove(pick(teleport_turfs))
@@ -433,14 +433,14 @@
if(!usr.unEquip(I, silent = TRUE))
return FALSE
usr.update_icons() //update our overlays
if(QDELING(I))
return FALSE
if(silent)
prevent_warning = TRUE
I.forceMove(src)
if(QDELING(I))
return FALSE
I.on_enter_storage(src)
if(QDELING(I))
return FALSE
for(var/_M in mobs_viewing)
var/mob/M = _M
+1 -2
View File
@@ -4,8 +4,7 @@ GLOBAL_LIST_EMPTY(current_pending_diseases)
var/datum/disease/chosen_disease
var/list/disease_blacklist = list(/datum/disease/advance, /datum/disease/appendicitis, /datum/disease/kuru, /datum/disease/critical, /datum/disease/rhumba_beat, /datum/disease/fake_gbs,
/datum/disease/gbs, /datum/disease/transformation, /datum/disease/food_poisoning, /datum/disease/advance/cold, /datum/disease/advance/flu, /datum/disease/advance/heal,
/datum/disease/advance/hullucigen, /datum/disease/advance/sensory_restoration, /datum/disease/advance/voice_change, /datum/disease/berserker)
/datum/disease/gbs, /datum/disease/transformation, /datum/disease/food_poisoning, /datum/disease/berserker)
var/static/list/transmissable_symptoms = list()
var/static/list/diseases_minor = list()
var/static/list/diseases_moderate_major = list()
+1 -1
View File
@@ -85,7 +85,7 @@
return 0
/mob/proc/put_in_hand_check(obj/item/W, skip_blocked_hands_check)
if(!istype(W))
if(!istype(W) || QDELETED(W))
return FALSE
return TRUE