From 9b5eded546d6c274540a78424356115c4b44c7cb Mon Sep 17 00:00:00 2001 From: mwerezak Date: Fri, 9 Jan 2015 23:30:32 -0500 Subject: [PATCH] Fixes major virus event generating lesser viruses, makes lesser viruses actually less severe Makes more of a distinction between lesser and greater viruses by restricting lesser viruses to only have the "Nil" syndrome for stage 4. --- code/modules/events/viral_infection.dm | 20 ++++++++++++++++++-- code/modules/virus2/disease2.dm | 5 ++++- code/modules/virus2/effect.dm | 19 ++++++++++++++++--- code/modules/virus2/helpers.dm | 11 +++++++---- 4 files changed, 45 insertions(+), 10 deletions(-) diff --git a/code/modules/events/viral_infection.dm b/code/modules/events/viral_infection.dm index 6e40d38d333..87c55460ce1 100644 --- a/code/modules/events/viral_infection.dm +++ b/code/modules/events/viral_infection.dm @@ -1,11 +1,27 @@ +datum/event/viral_infection + var/list/viruses = list() + datum/event/viral_infection/setup() announceWhen = rand(0, 3000) endWhen = announceWhen + 1 + + //generate 1-3 viruses. This way there's an upper limit on how many individual diseases need to be cured if many people are initially infected + var/num_diseases = rand(1,3) + for (var/i=0, i < num_diseases, i++) + var/datum/disease2/disease/D = new /datum/disease2/disease + + var/greater = 0 //whether the disease is of the greater or lesser variety + if (severity >= EVENT_LEVEL_MAJOR && prob(50)) + greater = 1 + D.makerandom(greater) + viruses += D datum/event/viral_infection/announce() command_announcement.Announce("Confirmed outbreak of level five biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg') datum/event/viral_infection/start() + if(!viruses.len) return + var/list/candidates = list() //list of candidate keys for(var/mob/living/carbon/human/G in player_list) if(G.client && G.stat != DEAD) @@ -13,9 +29,9 @@ datum/event/viral_infection/start() if(!candidates.len) return candidates = shuffle(candidates)//Incorporating Donkie's list shuffle - severity = severity == 1 ? 1 : severity - 1 + severity = max(EVENT_LEVEL_MUNDANE, severity - 1) var/actual_severity = severity * rand(1, 3) while(actual_severity > 0 && candidates.len) - infect_mob_random_lesser(candidates[1]) + infect_mob(candidates[1], pick(viruses)) candidates.Remove(candidates[1]) actual_severity-- diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm index 977c9ab9cab..09b6c80ee61 100644 --- a/code/modules/virus2/disease2.dm +++ b/code/modules/virus2/disease2.dm @@ -26,7 +26,10 @@ holder.getrandomeffect() effects += holder uniqueID = rand(0,10000) - infectionchance = rand(60,90) + if (greater) + infectionchance = rand(60,90) + else + infectionchance = 1 antigen |= text2num(pick(ANTIGENS)) antigen |= text2num(pick(ANTIGENS)) spreadtype = prob(70) ? "Airborne" : "Contact" diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm index 3ebeefeba8e..82edfb80493 100644 --- a/code/modules/virus2/effect.dm +++ b/code/modules/virus2/effect.dm @@ -56,6 +56,13 @@ ////////////////////////STAGE 4///////////////////////////////// +/datum/disease2/effect/nothing + name = "Nil Syndrome" + stage = 4 + badness = 1 + activate() + return + /datum/disease2/effect/gibbingtons name = "Gibbingtons Syndrome" stage = 4 @@ -67,12 +74,14 @@ name = "Radian's Syndrome" stage = 4 maxm = 3 + badness = 2 activate(var/mob/living/carbon/mob,var/multiplier) mob.radiation += (2*multiplier) /datum/disease2/effect/deaf name = "Dead Ear Syndrome" stage = 4 + badness = 2 activate(var/mob/living/carbon/mob,var/multiplier) mob.ear_deaf += 20 @@ -101,12 +110,14 @@ /datum/disease2/effect/killertoxins name = "Toxification Syndrome" stage = 4 + badness = 2 activate(var/mob/living/carbon/mob,var/multiplier) mob.adjustToxLoss(15*multiplier) /datum/disease2/effect/dna name = "Reverse Pattern Syndrome" stage = 4 + badness = 2 activate(var/mob/living/carbon/mob,var/multiplier) mob.bodytemperature = max(mob.bodytemperature, 350) scramble(0,mob,10) @@ -115,6 +126,7 @@ /datum/disease2/effect/organs name = "Shutdown Syndrome" stage = 4 + badness = 2 activate(var/mob/living/carbon/mob,var/multiplier) if(istype(mob, /mob/living/carbon/human)) var/mob/living/carbon/human/H = mob @@ -140,6 +152,7 @@ /datum/disease2/effect/immortal name = "Longevity Syndrome" stage = 4 + badness = 2 activate(var/mob/living/carbon/mob,var/multiplier) if(istype(mob, /mob/living/carbon/human)) var/mob/living/carbon/human/H = mob @@ -157,11 +170,10 @@ var/backlash_amt = 5*multiplier mob.apply_damages(backlash_amt,backlash_amt,backlash_amt,backlash_amt) -////////////////////////STAGE 3///////////////////////////////// - /datum/disease2/effect/bones name = "Fragile Bones Syndrome" stage = 4 + badness = 2 activate(var/mob/living/carbon/mob,var/multiplier) if(istype(mob, /mob/living/carbon/human)) var/mob/living/carbon/human/H = mob @@ -174,6 +186,8 @@ for (var/datum/organ/external/E in H.organs) E.min_broken_damage = initial(E.min_broken_damage) +////////////////////////STAGE 3///////////////////////////////// + /datum/disease2/effect/toxins name = "Hyperacidity" stage = 3 @@ -239,7 +253,6 @@ activate(var/mob/living/carbon/mob,var/multiplier) mob.apply_damage(2, CLONE) - /datum/disease2/effect/groan name = "Groaning Syndrome" stage = 3 diff --git a/code/modules/virus2/helpers.dm b/code/modules/virus2/helpers.dm index 6118dade42e..e3da0e5614a 100644 --- a/code/modules/virus2/helpers.dm +++ b/code/modules/virus2/helpers.dm @@ -96,20 +96,23 @@ proc/airborne_can_reach(turf/source, turf/target) M.virus2["[D.uniqueID]"] = D M.hud_updateflag |= 1 << STATUS_HUD +//Infects mob M with disease D +/proc/infect_mob(var/mob/living/carbon/M, var/datum/disease2/disease/D) + infect_virus2(M,D,1) + M.hud_updateflag |= 1 << STATUS_HUD + //Infects mob M with random lesser disease, if he doesn't have one /proc/infect_mob_random_lesser(var/mob/living/carbon/M) var/datum/disease2/disease/D = new /datum/disease2/disease D.makerandom() D.infectionchance = 1 - infect_virus2(M,D,1) - M.hud_updateflag |= 1 << STATUS_HUD + infect_mob(M, D) //Infects mob M with random greated disease, if he doesn't have one /proc/infect_mob_random_greater(var/mob/living/carbon/M) var/datum/disease2/disease/D = new /datum/disease2/disease D.makerandom(1) - infect_virus2(M,D,1) - M.hud_updateflag |= 1 << STATUS_HUD + infect_mob(M, D) //Fancy prob() function. /proc/dprob(var/p)