Merge pull request #4707 from Cerebulon/virologyRetoothing

Gives Virology teeth again
This commit is contained in:
Mechoid
2018-02-09 11:49:45 -08:00
committed by GitHub
15 changed files with 414 additions and 249 deletions

View File

@@ -389,6 +389,7 @@
/atom/proc/add_vomit_floor(mob/living/carbon/M as mob, var/toxvomit = 0)
if( istype(src, /turf/simulated) )
var/obj/effect/decal/cleanable/vomit/this = new /obj/effect/decal/cleanable/vomit(src)
this.virus2 = virus_copylist(M.virus2)
// Make toxins vomit look different
if(toxvomit)

View File

@@ -247,3 +247,9 @@ var/global/list/image/splatter_cache=list()
/obj/effect/decal/cleanable/mucus/New()
spawn(DRYING_TIME * 2)
dry=1
//This version should be used for admin spawns and pre-mapped virus vectors (e.g. in PoIs), this version does not dry
/obj/effect/decal/cleanable/mucus/mapped/New()
...()
virus2 = new /datum/disease2/disease
virus2.makerandom()

View File

@@ -100,6 +100,7 @@
icon = 'icons/effects/blood.dmi'
icon_state = "vomit_1"
random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4")
var/list/datum/disease2/disease/virus2 = list()
/obj/effect/decal/cleanable/tomato_smudge
name = "tomato smudge"

View File

@@ -15,6 +15,8 @@
blood_color = "#CCCCCC"
flesh_color = "#AAAAAA"
virus_immune = 1
remains_type = /obj/effect/decal/cleanable/ash
death_message = "dissolves into ash..."

View File

@@ -22,7 +22,7 @@
hunger_factor = 0
metabolic_rate = 0
virus_immune = 1
virus_immune = 1
brute_mod = 1
burn_mod = 0

View File

@@ -17,6 +17,8 @@
blood_color = "#515573"
flesh_color = "#137E8F"
virus_immune = 1
has_organ = list(
"brain" = /obj/item/organ/internal/brain/golem
)

View File

@@ -38,6 +38,8 @@
speech_sounds = list('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg')
speech_chance = 100
virus_immune = 1
breath_type = null
poison_type = null

View File

@@ -23,6 +23,13 @@
var/datum/disease2/disease/V = M.virus2[ID]
infect_virus2(src,V)
else if(istype(O,/obj/effect/decal/cleanable/vomit))
var/obj/effect/decal/cleanable/vomit/Vom = O
if(Vom.virus2.len)
for (var/ID in Vom.virus2)
var/datum/disease2/disease/V = Vom.virus2[ID]
infect_virus2(src,V)
if(virus2.len)
for (var/ID in virus2)
var/datum/disease2/disease/V = virus2[ID]

View File

@@ -11,7 +11,7 @@
usr << "Effects:"
for(var/datum/disease2/effectholder/E in effects)
usr << "[E.stage]: [E.effect.name]; chance=[E.chance]; multiplier=[E.multiplier]"
usr << "Antigens: [antigens2string(antigen)]"
usr << "Antigens: [antigens2string(antigen)]; Resistance: [resistance]"
return 1
@@ -46,6 +46,7 @@
var/spreadtype = "Contact"
var/list/antigens = list()
var/speed = 1
var/resistance = 10
var/mob/living/carbon/infectee = null
// this holds spawned viruses so that the "Info" links work after the proc exits
@@ -98,6 +99,7 @@
<b>Infection Chance:</b> <a href="?src=\ref[src];what=ichance">[infectionchance]</a><br />
<b>Spread Type:</b> <a href="?src=\ref[src];what=stype">[spreadtype]</a><br />
<b>Speed:</b> <a href="?src=\ref[src];what=speed">[speed]</a><br />
<b>Resistance:</b> <a href="?src=\ref[src];what=resistance">[resistance]</a><br />
<br />
"}
f = 1
@@ -153,8 +155,8 @@
if(!I) return
infectionchance = I
if("stype")
var/S = alert("Which spread type?", "Spread Type", "Cancel", "Contact", "Airborne")
if(!S || S == "Cancel") return
var/S = alert("Which spread type?", "Spread Type", "Contact", "Airborne", "Blood")
if(!S) return
spreadtype = S
if("speed")
var/S = input("Input speed", "Speed", speed) as null|num
@@ -170,6 +172,10 @@
antigens |= T
else if(href_list["reset"])
antigens = list()
if("resistance")
var/S = input("Input % resistance to antibiotics", "Resistance", resistance) as null|num
if(!S) return
resistance = S
if("infectee")
var/list/candidates = list()
for(var/mob/living/carbon/G in living_mob_list)
@@ -195,6 +201,7 @@
D.antigen = antigens
D.affected_species = species
D.speed = speed
D.resistance = resistance
for(var/i in 1 to 4)
var/datum/disease2/effectholder/E = new
var/Etype = s[i]

View File

@@ -1,7 +1,7 @@
/datum/disease2/disease
var/infectionchance = 70
var/speed = 1
var/spreadtype = "Contact" // Can also be "Airborne"
var/spreadtype = "Blood" // Can also be "Contact" or "Airborne"
var/stage = 1
var/stageprob = 10
var/dead = 0
@@ -11,6 +11,7 @@
var/antigen = list() // 16 bits describing the antigens, when one bit is set, a cure with that bit can dock here
var/max_stage = 4
var/list/affected_species = list("Human","Unathi","Skrell","Tajara")
var/resistance = 10 // % chance a disease will resist cure, up to 100
/datum/disease2/disease/New()
uniqueID = rand(0,10000)
@@ -36,6 +37,7 @@
antigen = list(pick(ALL_ANTIGENS))
antigen |= pick(ALL_ANTIGENS)
spreadtype = prob(70) ? "Airborne" : "Contact"
resistance = rand(15,70)
if(all_species.len)
affected_species = get_infectable_species()
@@ -79,11 +81,17 @@
if(prob(1))
majormutate()
//Space antibiotics stop disease completely
//Space antibiotics have a good chance to stop disease completely
if(mob.reagents.has_reagent("spaceacillin"))
if(stage == 1 && prob(20))
if(stage == 1 && prob(70-resistance))
src.cure(mob)
return
else
resistance += rand(1,9)
//Resistance is capped at 90 without being manually set to 100
if(resistance > 90 && resistance < 100)
resistance = 90
//Virus food speeds up disease progress
if(mob.reagents.has_reagent("virusfood"))
@@ -96,7 +104,7 @@
//Moving to the next stage
if(clicks > max(stage*100, 200) && prob(10))
if((stage <= max_stage) && prob(20)) // ~60% of viruses will be cured by the end of S4 with this
if((stage <= max_stage) && prob(5)) // ~20% of viruses will be cured by the end of S4 with this
src.cure(mob)
mob.antibodies |= src.antigen
stage++
@@ -137,11 +145,15 @@
if(D != holder)
exclude += D.effect.type
holder.majormutate(exclude)
if (prob(5))
if (prob(5) && prob(100-resistance)) // The more resistant the disease,the lower the chance of randomly developing the antibodies
antigen = list(pick(ALL_ANTIGENS))
antigen |= pick(ALL_ANTIGENS)
if (prob(5) && all_species.len)
affected_species = get_infectable_species()
if (prob(10))
resistance += rand(1,9)
if(resistance > 90 && resistance < 100)
resistance = 90
/datum/disease2/disease/proc/getcopy()
var/datum/disease2/disease/disease = new /datum/disease2/disease
@@ -210,6 +222,7 @@ var/global/list/virusDB = list()
<u>Antigen:</u> [antigens2string(antigen)]<br>
<u>Transmitted By:</u> [spreadtype]<br>
<u>Rate of Progression:</u> [stageprob * 10]<br>
<u>Antibiotic Resistance</u> [resistance]% <br>
<u>Species Affected:</u> [jointext(affected_species, ", ")]<br>
"}
@@ -217,7 +230,7 @@ var/global/list/virusDB = list()
for(var/datum/disease2/effectholder/E in effects)
r += "([E.stage]) [E.effect.name] "
r += "<small><u>Strength:</u> [E.multiplier >= 3 ? "Severe" : E.multiplier > 1 ? "Above Average" : "Average"] "
r += "<u>Verosity:</u> [E.chance * 15]</small><br>"
r += "<u>Aggressiveness:</u> [E.chance * 15]</small><br>"
return r

View File

@@ -131,9 +131,6 @@
if(foodsupply < 100 && beaker.reagents.remove_reagent("virusfood",5))
if(foodsupply + 10 <= 100)
foodsupply += 10
else
beaker.reagents.add_reagent("virusfood",(100 - foodsupply)/2)
foodsupply = 100
nanomanager.update_uis(src)
if (locate(/datum/reagent/toxin) in beaker.reagents.reagent_list && toxins < 100)

View File

@@ -58,8 +58,10 @@
/datum/disease2/effect/invisible
name = "Waiting Syndrome"
stage = 1
activate(var/mob/living/carbon/mob,var/multiplier)
return
badness = 3
/datum/disease2/effect/invisible/activate(var/mob/living/carbon/mob,var/multiplier)
return
////////////////////////STAGE 4/////////////////////////////////
@@ -70,142 +72,183 @@
chance_maxm = 0
/datum/disease2/effect/gibbingtons
name = "Gibbingtons Syndrome"
name = "Gibbington's Syndrome"
stage = 4
badness = 3
activate(var/mob/living/carbon/mob,var/multiplier)
// Probabilities have been tweaked to kill in ~2-3 minutes, giving 5-10 messages.
// Probably needs more balancing, but it's better than LOL U GIBBED NOW, especially now that viruses can potentially have no signs up until Gibbingtons.
mob.adjustBruteLoss(10*multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
var/obj/item/organ/external/O = pick(H.organs)
if(prob(25))
mob << "<span class='warning'>Your [O.name] feels as if it might burst!</span>"
if(prob(10))
spawn(50)
if(O)
O.droplimb(0,DROPLIMB_BLUNT)
else
if(prob(75))
mob << "<span class='warning'>Your whole body feels like it might fall apart!</span>"
if(prob(10))
mob.adjustBruteLoss(25*multiplier)
/datum/disease2/effect/gibbingtons/activate(var/mob/living/carbon/mob,var/multiplier)
// Probabilities have been tweaked to kill in ~2-3 minutes, giving 5-10 messages.
// Probably needs more balancing, but it's better than LOL U GIBBED NOW, especially now that viruses can potentially have no signs up until Gibbingtons.
mob.adjustBruteLoss(10*multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
var/obj/item/organ/external/O = pick(H.organs)
if(prob(25))
mob << "<span class='warning'>Your [O.name] feels as if it might burst!</span>"
if(prob(10))
spawn(50)
if(O)
O.droplimb(0,DROPLIMB_BLUNT)
else
if(prob(75))
mob << "<span class='warning'>Your whole body feels like it might fall apart!</span>"
if(prob(10))
mob.adjustBruteLoss(25*multiplier)
/datum/disease2/effect/radian
name = "Radian's Syndrome"
stage = 4
maxm = 3
badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.apply_effect(2*multiplier, IRRADIATE, check_protection = 0)
/datum/disease2/effect/radian/activate(var/mob/living/carbon/mob,var/multiplier)
mob.apply_effect(2*multiplier, IRRADIATE, check_protection = 0)
/datum/disease2/effect/deaf
name = "Dead Ear Syndrome"
name = "Deafness"
stage = 4
badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.ear_deaf += 20
/datum/disease2/effect/deaf/activate(var/mob/living/carbon/mob,var/multiplier)
mob.ear_deaf += 20
/datum/disease2/effect/monkey
name = "Monkism Syndrome"
name = "Genome Regression"
stage = 4
badness = 3
activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob,/mob/living/carbon/human))
var/mob/living/carbon/human/h = mob
h.monkeyize()
/datum/disease2/effect/monkey/activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob,/mob/living/carbon/human))
var/mob/living/carbon/human/h = mob
h.monkeyize()
/datum/disease2/effect/suicide
name = "Suicidal Syndrome"
name = "Windpipe Contraction"
stage = 4
badness = 3
activate(var/mob/living/carbon/mob,var/multiplier)
var/datum/gender/TM = gender_datums[mob.get_visible_gender()]
mob.suiciding = 30
//instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
viewers(mob) << "<font color='red'><b>[mob.name] is holding [TM.his] breath. It looks like [TM.he] [TM.is] trying to commit suicide.</b></font>"
mob.adjustOxyLoss(175 - mob.getToxLoss() - mob.getFireLoss() - mob.getBruteLoss() - mob.getOxyLoss())
mob.updatehealth()
/datum/disease2/effect/suicide/activate(var/mob/living/carbon/mob,var/multiplier)
var/datum/gender/TM = gender_datums[mob.get_visible_gender()]
mob.suiciding = 30
//instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
viewers(mob) << "<font color='red'><b>[mob.name] is holding [TM.his] breath. It looks like [TM.he] [TM.is] trying to commit suicide.</b></font>"
mob.adjustOxyLoss(175 - mob.getToxLoss() - mob.getFireLoss() - mob.getBruteLoss() - mob.getOxyLoss())
mob.updatehealth()
/datum/disease2/effect/killertoxins
name = "Toxification Syndrome"
name = "Autoimmune Reponse"
stage = 4
badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.adjustToxLoss(15*multiplier)
/datum/disease2/effect/killertoxins/activate(var/mob/living/carbon/mob,var/multiplier)
mob.adjustToxLoss(15*multiplier)
/datum/disease2/effect/dna
name = "Reverse Pattern Syndrome"
name = "Catastrophic DNA Degeneration"
stage = 4
badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.bodytemperature = max(mob.bodytemperature, 350)
scramble(0,mob,10)
mob.apply_damage(10, CLONE)
/datum/disease2/effect/dna/activate(var/mob/living/carbon/mob,var/multiplier)
mob.bodytemperature = max(mob.bodytemperature, 350)
scramble(0,mob,10)
mob.apply_damage(10, CLONE)
/datum/disease2/effect/organs
name = "Shutdown Syndrome"
name = "Limb Paralysis"
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
var/organ = pick(list("r_arm","l_arm","r_leg","r_leg"))
var/obj/item/organ/external/E = H.organs_by_name[organ]
if (!(E.status & ORGAN_DEAD))
E.status |= ORGAN_DEAD
H << "<span class='notice'>You can't feel your [E.name] anymore...</span>"
for (var/obj/item/organ/external/C in E.children)
C.status |= ORGAN_DEAD
H.update_icons_body()
mob.adjustToxLoss(15*multiplier)
deactivate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
for (var/obj/item/organ/external/E in H.organs)
E.status &= ~ORGAN_DEAD
for (var/obj/item/organ/external/C in E.children)
C.status &= ~ORGAN_DEAD
H.update_icons_body()
/datum/disease2/effect/organs/activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
var/organ = pick(list("r_arm","l_arm","r_leg","l_leg"))
var/obj/item/organ/external/E = H.organs_by_name[organ]
if (!(E.status & ORGAN_DEAD))
E.status |= ORGAN_DEAD
H << "<span class='notice'>You can't feel your [E.name] anymore...</span>"
for (var/obj/item/organ/external/C in E.children)
C.status |= ORGAN_DEAD
H.update_icons_body()
mob.adjustToxLoss(15*multiplier)
/datum/disease2/effect/organs/deactivate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
for (var/obj/item/organ/external/E in H.organs)
E.status &= ~ORGAN_DEAD
for (var/obj/item/organ/external/C in E.children)
C.status &= ~ORGAN_DEAD
H.update_icons_body()
/datum/disease2/effect/internalorgan
name = "Organ Shutdown"
stage = 4
badness = 2
/datum/disease2/effect/internalorgan/activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
var/organ = pick(list("heart","kidney","liver", "lungs"))
var/obj/item/organ/internal/O = H.organs_by_name[organ]
if (!(O.robotic = ORGAN_ROBOT))
O.damage += (5*multiplier)
H << "<span class='notice'>You feel a cramp in your guts.</span>"
/datum/disease2/effect/immortal
name = "Longevity Syndrome"
name = "Hyperaccelerated Aging"
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
for (var/obj/item/organ/external/E in H.organs)
if (E.status & ORGAN_BROKEN && prob(30))
E.status ^= ORGAN_BROKEN
var/heal_amt = -5*multiplier
mob.apply_damages(heal_amt,heal_amt,heal_amt,heal_amt)
deactivate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
H << "<span class='notice'>You suddenly feel hurt and old...</span>"
H.age += 8
var/backlash_amt = 5*multiplier
mob.apply_damages(backlash_amt,backlash_amt,backlash_amt,backlash_amt)
/datum/disease2/effect/immortal/activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
for (var/obj/item/organ/external/E in H.organs)
if (E.status & ORGAN_BROKEN && prob(30))
E.status ^= ORGAN_BROKEN
var/heal_amt = -5*multiplier
mob.apply_damages(heal_amt,heal_amt,heal_amt,heal_amt)
/datum/disease2/effect/immortal/deactivate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
H << "<span class='notice'>You suddenly feel hurt and old...</span>"
H.age += 8
var/backlash_amt = 5*multiplier
mob.apply_damages(backlash_amt,backlash_amt,backlash_amt,backlash_amt)
/datum/disease2/effect/bones
name = "Fragile Bones Syndrome"
name = "Brittle Bones"
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
for (var/obj/item/organ/external/E in H.organs)
E.min_broken_damage = max(5, E.min_broken_damage - 30)
/datum/disease2/effect/bones/activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
for (var/obj/item/organ/external/E in H.organs)
E.min_broken_damage = max(5, E.min_broken_damage - 30)
/datum/disease2/effect/bones/deactivate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
for (var/obj/item/organ/external/E in H.organs)
E.min_broken_damage = initial(E.min_broken_damage)
/datum/disease2/effect/combustion
name = "Organic Ignition"
stage = 4
badness = 3
/datum/disease2/effect/combustion/activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
var/obj/item/organ/external/O = pick(H.organs)
if(prob(25))
mob << "<span class='warning'>It feels like your [O.name] is on fire and your blood is boiling!</span>"
H.adjust_fire_stacks(1)
if(prob(10))
mob << "<span class='warning'>Flames erupt from your skin, your entire body is burning!</span>"
H.adjust_fire_stacks(2)
H.IgniteMob()
deactivate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
for (var/obj/item/organ/external/E in H.organs)
E.min_broken_damage = initial(E.min_broken_damage)
////////////////////////STAGE 3/////////////////////////////////
@@ -213,201 +256,262 @@
name = "Hyperacidity"
stage = 3
maxm = 3
activate(var/mob/living/carbon/mob,var/multiplier)
mob.adjustToxLoss((2*multiplier))
/datum/disease2/effect/toxins/activate(var/mob/living/carbon/mob,var/multiplier)
mob.adjustToxLoss((2*multiplier))
/datum/disease2/effect/shakey
name = "World Shaking Syndrome"
name = "Nervous Motor Instability"
stage = 3
maxm = 3
activate(var/mob/living/carbon/mob,var/multiplier)
shake_camera(mob,5*multiplier)
/datum/disease2/effect/shakey/activate(var/mob/living/carbon/mob,var/multiplier)
shake_camera(mob,5*multiplier)
/datum/disease2/effect/telepathic
name = "Telepathy Syndrome"
name = "Pineal Gland Decalcification"
stage = 3
activate(var/mob/living/carbon/mob,var/multiplier)
/datum/disease2/effect/telepathic/activate(var/mob/living/carbon/mob,var/multiplier)
mob.dna.SetSEState(REMOTETALKBLOCK,1)
domutcheck(mob, null, MUTCHK_FORCED)
/datum/disease2/effect/mind
name = "Lazy Mind Syndrome"
name = "Neurodegeneration"
stage = 3
activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
var/obj/item/organ/internal/brain/B = H.internal_organs_by_name["brain"]
if (B && B.damage < B.min_broken_damage)
B.take_damage(5)
else
mob.setBrainLoss(10)
/datum/disease2/effect/mind/activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
var/obj/item/organ/internal/brain/B = H.internal_organs_by_name["brain"]
if (B && B.damage < B.min_broken_damage)
B.take_damage(5)
else
mob.setBrainLoss(10)
/datum/disease2/effect/hallucinations
name = "Hallucinational Syndrome"
name = "Hallucination"
stage = 3
activate(var/mob/living/carbon/mob,var/multiplier)
mob.hallucination += 25
/datum/disease2/effect/deaf
name = "Hard of Hearing Syndrome"
/datum/disease2/effect/hallucinations/activate(var/mob/living/carbon/mob,var/multiplier)
mob.hallucination += 25
/datum/disease2/effect/minordeaf
name = "Hearing Loss"
stage = 3
activate(var/mob/living/carbon/mob,var/multiplier)
mob.ear_deaf = 5
/datum/disease2/effect/minordeaf/activate(var/mob/living/carbon/mob,var/multiplier)
mob.ear_deaf = 5
/datum/disease2/effect/giggle
name = "Uncontrolled Laughter Effect"
name = "Uncontrolled Laughter"
stage = 3
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*giggle")
/datum/disease2/effect/giggle/activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*giggle")
/datum/disease2/effect/confusion
name = "Topographical Cretinism"
stage = 3
activate(var/mob/living/carbon/mob,var/multiplier)
mob << "<span class='notice'>You have trouble telling right and left apart all of a sudden.</span>"
mob.Confuse(10)
/datum/disease2/effect/confusion/activate(var/mob/living/carbon/mob,var/multiplier)
mob << "<span class='notice'>You have trouble telling right and left apart all of a sudden.</span>"
mob.Confuse(10)
/datum/disease2/effect/mutation
name = "DNA Degradation"
stage = 3
activate(var/mob/living/carbon/mob,var/multiplier)
mob.apply_damage(2, CLONE)
/datum/disease2/effect/mutation/activate(var/mob/living/carbon/mob,var/multiplier)
mob.apply_damage(2, CLONE)
/datum/disease2/effect/groan
name = "Groaning Syndrome"
name = "Phantom Aches"
stage = 3
chance_maxm = 25
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*groan")
/datum/disease2/effect/groan/activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*groan")
/datum/disease2/effect/chem_synthesis
name = "Chemical Synthesis"
stage = 3
chance_maxm = 25
generate(c_data)
if(c_data)
data = c_data
else
data = pick("bicaridine", "kelotane", "anti_toxin", "inaprovaline", "space_drugs", "sugar",
"tramadol", "dexalin", "cryptobiolin", "impedrezene", "hyperzine", "ethylredoxrazine",
"mindbreaker", "glucose")
var/datum/reagent/R = chemical_reagents_list[data]
name = "[initial(name)] ([initial(R.name)])"
/datum/disease2/effect/chem_synthesis/generate(c_data)
if(c_data)
data = c_data
else
data = pick("bicaridine", "kelotane", "anti_toxin", "inaprovaline", "space_drugs", "sugar",
"tramadol", "dexalin", "cryptobiolin", "impedrezene", "hyperzine", "ethylredoxrazine",
"mindbreaker", "glucose")
var/datum/reagent/R = chemical_reagents_list[data]
name = "[initial(name)] ([initial(R.name)])"
/datum/disease2/effect/chem_synthesis/activate(var/mob/living/carbon/mob,var/multiplier)
if (mob.reagents.get_reagent_amount(data) < 5)
mob.reagents.add_reagent(data, 2)
/datum/disease2/effect/nonrejection
name = "Genetic Chameleonism"
stage = 3
/datum/disease2/effect/nonrejection/activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
var/obj/item/organ/internal/O = H.organs_by_name
for (var/organ in H.organs_by_name)
if (!(O.robotic = ORGAN_ROBOT))
O.rejecting = 0
activate(var/mob/living/carbon/mob,var/multiplier)
if (mob.reagents.get_reagent_amount(data) < 5)
mob.reagents.add_reagent(data, 2)
////////////////////////STAGE 2/////////////////////////////////
/datum/disease2/effect/scream
name = "Loudness Syndrome"
name = "Involuntary Vocalization"
stage = 2
chance_maxm = 25
activate(var/mob/living/carbon/mob,var/multiplier)
/datum/disease2/effect/scream/activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*scream")
/datum/disease2/effect/drowsness
name = "Automated Sleeping Syndrome"
name = "Excessive Sleepiness"
stage = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.drowsyness += 10
/datum/disease2/effect/drowsness/activate(var/mob/living/carbon/mob,var/multiplier)
mob.drowsyness += 10
/datum/disease2/effect/sleepy
name = "Resting Syndrome"
name = "Narcolepsy"
stage = 2
chance_maxm = 15
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*collapse")
/datum/disease2/effect/sleepy/activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*collapse")
/datum/disease2/effect/blind
name = "Blackout Syndrome"
name = "Vision Loss"
stage = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.eye_blind = max(mob.eye_blind, 4)
/datum/disease2/effect/blind/activate(var/mob/living/carbon/mob,var/multiplier)
mob.eye_blind = max(mob.eye_blind, 4)
/datum/disease2/effect/cough
name = "Anima Syndrome"
name = "Severe Cough"
stage = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*cough")
for(var/mob/living/carbon/M in oview(2,mob))
mob.spread_disease_to(M)
/datum/disease2/effect/cough/activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*cough")
for(var/mob/living/carbon/M in oview(2,mob))
mob.spread_disease_to(M)
/datum/disease2/effect/hungry
name = "Appetiser Effect"
name = "Digestive Inefficiency"
stage = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.nutrition = max(0, mob.nutrition - 200)
/datum/disease2/effect/hungry/activate(var/mob/living/carbon/mob,var/multiplier)
mob.nutrition = max(0, mob.nutrition - 200)
/datum/disease2/effect/fridge
name = "Refridgerator Syndrome"
name = "Reduced Circulation"
stage = 2
chance_maxm = 25
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*shiver")
/datum/disease2/effect/fridge/activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*shiver")
/datum/disease2/effect/hair
name = "Hair Loss"
stage = 2
activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
if(H.species.name == "Human" && !(H.h_style == "Bald") && !(H.h_style == "Balding Hair"))
H << "<span class='danger'>Your hair starts to fall out in clumps...</span>"
spawn(50)
H.h_style = "Balding Hair"
H.update_hair()
/datum/disease2/effect/hair/activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
if(H.species.name == "Human" && !(H.h_style == "Bald") && !(H.h_style == "Balding Hair"))
H << "<span class='danger'>Your hair starts to fall out in clumps...</span>"
spawn(50)
H.h_style = "Balding Hair"
H.update_hair()
/datum/disease2/effect/stimulant
name = "Adrenaline Extra"
name = "Overactive Adrenal Gland"
stage = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob << "<span class='notice'>You feel a rush of energy inside you!</span>"
if (mob.reagents.get_reagent_amount("hyperzine") < 10)
mob.reagents.add_reagent("hyperzine", 4)
if (prob(30))
mob.jitteriness += 10
/datum/disease2/effect/stimulant/activate(var/mob/living/carbon/mob,var/multiplier)
mob << "<span class='notice'>You feel a rush of energy inside you!</span>"
if (mob.reagents.get_reagent_amount("hyperzine") < 10)
mob.reagents.add_reagent("hyperzine", 4)
if (prob(30))
mob.jitteriness += 10
/datum/disease2/effect/ringing
name = "Tinnitus"
stage = 2
chance_maxm = 25
/datum/disease2/effect/ringing/activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
H << "<span class='notice'>You hear an awful ringing in your ears.</span>"
H << 'sound/weapons/flash.ogg'
/datum/disease2/effect/vomiting
name = "Vomiting"
stage = 2
chance_maxm = 20
/datum/disease2/effect/vomiting/activate(var/mob/living/carbon/mob,var/multiplier)
mob << "<span class='notice'>Your stomach churns!</span>"
if (prob(50))
mob.say("*vomit")
////////////////////////STAGE 1/////////////////////////////////
/datum/disease2/effect/sneeze
name = "Coldingtons Effect"
name = "Sneezing"
stage = 1
activate(var/mob/living/carbon/mob,var/multiplier)
if (prob(30))
mob << "<span class='warning'>You feel like you are about to sneeze!</span>"
sleep(5)
mob.say("*sneeze")
for(var/mob/living/carbon/M in get_step(mob,mob.dir))
mob.spread_disease_to(M)
if (prob(50))
var/obj/effect/decal/cleanable/mucus/M = new(get_turf(mob))
M.virus2 = virus_copylist(mob.virus2)
/datum/disease2/effect/sneeze/activate(var/mob/living/carbon/mob,var/multiplier)
if (prob(30))
mob << "<span class='warning'>You feel like you are about to sneeze!</span>"
sleep(5)
mob.say("*sneeze")
for(var/mob/living/carbon/M in get_step(mob,mob.dir))
mob.spread_disease_to(M)
if (prob(50))
var/obj/effect/decal/cleanable/mucus/M = new(get_turf(mob))
M.virus2 = virus_copylist(mob.virus2)
/datum/disease2/effect/gunck
name = "Flemmingtons"
name = "Mucus Buildup"
stage = 1
activate(var/mob/living/carbon/mob,var/multiplier)
mob << "<span class='warning'>Mucous runs down the back of your throat.</span>"
/datum/disease2/effect/gunck/activate(var/mob/living/carbon/mob,var/multiplier)
mob << "<span class='warning'>Mucous runs down the back of your throat.</span>"
/datum/disease2/effect/drool
name = "Saliva Effect"
name = "Salivary Gland Stimulation"
stage = 1
chance_maxm = 25
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*drool")
/datum/disease2/effect/drool/activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*drool")
if (prob(30))
var/obj/effect/decal/cleanable/mucus/M = new(get_turf(mob))
M.virus2 = virus_copylist(mob.virus2)
/datum/disease2/effect/twitch
name = "Twitcher"
name = "Involuntary Twitching"
stage = 1
chance_maxm = 25
activate(var/mob/living/carbon/mob,var/multiplier)
/datum/disease2/effect/twitch/activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*twitch")
/datum/disease2/effect/headache
name = "Headache"
stage = 1
activate(var/mob/living/carbon/mob,var/multiplier)
/datum/disease2/effect/headache/activate(var/mob/living/carbon/mob,var/multiplier)
mob << "<span class='warning'>Your head hurts a bit.</span>"

View File

@@ -82,7 +82,15 @@ proc/airborne_can_reach(turf/source, turf/target)
if(antibodies_in_common.len)
return
if(M.reagents.has_reagent("spaceacillin"))
return
if(prob(disease.resistance))
var/datum/disease2/disease/D = disease.getcopy()
D.minormutate()
D.resistance += rand(1,9)
// log_debug("Adding virus")
M.virus2["[D.uniqueID]"] = D
BITSET(M.hud_updateflag, STATUS_HUD)
else
return //Virus prevented by antibiotics
if(!disease.affected_species.len)
return