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

View File

@@ -0,0 +1,14 @@
author: Cerebulon
delete-after: True
changes:
- rscadd: "Adds antibiotic resistance chance to viruses, capped at 90% without admin edits."
- rscadd: "Adds adminspawned non-transmittable viruses"
- rscadd: "Adds several new disease symptoms"
- tweak: "Vomit is now a disease vector"
- tweak: "Viruses have a lower chance of curing themselves without medical intervention"
- bugfix: "Virus food no longer infinitely generates in incubator beakers"
- bugfix: "Xenomorphs and supernatural begins can no longer catch the flu"

View File

@@ -86,35 +86,36 @@
"bH" = (/obj/machinery/recharge_station,/turf/simulated/shuttle/floor,/area/submap/cave/qShuttle)
"bI" = (/obj/machinery/door/airlock{name = "Charge Station"},/turf/simulated/shuttle/wall,/area/submap/cave/qShuttle)
"bJ" = (/obj/item/trash/tastybread,/obj/item/weapon/material/butterfly/boxcutter,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{tag = "icon-floor_white"; icon_state = "floor_white"},/area/submap/cave/qShuttle)
"bK" = (/obj/structure/bed/chair{dir = 1},/obj/effect/decal/remains/xeno,/turf/simulated/shuttle/floor{tag = "icon-floor_white"; icon_state = "floor_white"},/area/submap/cave/qShuttle)
"bL" = (/obj/structure/bed/chair{dir = 1},/obj/item/weapon/card/id/external{desc = "An identification card of some sort. Looks like this one was issued by the Vir Independent Mining Corp."; name = "VIMC identification card"; rank = "Miner"; registered_name = "Nadia Chu"},/turf/simulated/shuttle/floor{tag = "icon-floor_white"; icon_state = "floor_white"},/area/submap/cave/qShuttle)
"bM" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/shuttle/floor{tag = "icon-floor_white"; icon_state = "floor_white"},/area/submap/cave/qShuttle)
"bN" = (/obj/structure/table/rack,/obj/item/clothing/head/soft/mbill{desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; name = "old shipping cap"},/turf/simulated/shuttle/floor{tag = "icon-floor_white"; icon_state = "floor_white"},/area/submap/cave/qShuttle)
"bO" = (/obj/structure/ore_box,/turf/simulated/shuttle/floor{tag = "icon-floor_yellow"; icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
"bP" = (/obj/item/weapon/contraband/poster,/turf/simulated/shuttle/floor{tag = "icon-floor_yellow"; icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
"bQ" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/shuttle/floor{tag = "icon-floor_yellow"; icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
"bR" = (/obj/structure/sign/biohazard,/turf/simulated/shuttle/wall/hard_corner,/area/submap/cave/qShuttle)
"bS" = (/obj/item/tape/medical{icon_state = "tape_v_0"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"bT" = (/obj/item/taperoll/medical,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"bU" = (/obj/item/tape/medical{dir = 1; icon_state = "tape_dir_0"},/obj/item/tape/medical{dir = 4; icon_state = "tape_dir_0"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"bV" = (/obj/item/tape/medical{icon_state = "tape_h_0"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"bW" = (/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"bX" = (/obj/structure/sign/warning/secure_area,/turf/simulated/wall/iron,/area/submap/cave/qShuttle)
"bY" = (/obj/structure/sign/kiddieplaque{desc = "By order of the S.D.D.C, this site or craft is to be buried and not disturbed until such time that sterility can be confirmed. Dated: 20/12/2491 "; name = "\improper Sif Department of Disease Control notice"},/turf/simulated/wall/iron,/area/submap/cave/qShuttle)
"bZ" = (/obj/structure/sign/warning,/turf/simulated/wall/iron,/area/submap/cave/qShuttle)
"ca" = (/obj/item/bodybag,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"cb" = (/obj/structure/table/steel,/obj/item/weapon/storage/box/bodybags,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"cc" = (/obj/structure/table/steel,/obj/item/clothing/suit/bio_suit,/obj/random/medical/lite,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"cd" = (/obj/structure/closet/l3closet/virology,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"ce" = (/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"cf" = (/obj/structure/dispenser/oxygen,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"cg" = (/obj/structure/table/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"ch" = (/obj/structure/table/steel,/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"ci" = (/obj/structure/table/steel,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"cj" = (/obj/structure/table/steel,/obj/item/weapon/crowbar/power,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"ck" = (/obj/structure/table/rack,/obj/item/clothing/head/bio_hood,/obj/item/clothing/suit/bio_suit,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"cl" = (/obj/item/weapon/weldingtool/largetank,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"cm" = (/obj/structure/closet/crate/medical,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"bK" = (/obj/effect/decal/cleanable/vomit,/obj/effect/decal/cleanable/mucus/mapped,/turf/simulated/shuttle/floor{tag = "icon-floor_white"; icon_state = "floor_white"},/area/submap/cave/qShuttle)
"bL" = (/obj/structure/bed/chair{dir = 1},/obj/effect/decal/remains/xeno,/turf/simulated/shuttle/floor{tag = "icon-floor_white"; icon_state = "floor_white"},/area/submap/cave/qShuttle)
"bM" = (/obj/structure/bed/chair{dir = 1},/obj/item/weapon/card/id/external{desc = "An identification card of some sort. Looks like this one was issued by the Vir Independent Mining Corp."; name = "VIMC identification card"; rank = "Miner"; registered_name = "Nadia Chu"},/turf/simulated/shuttle/floor{tag = "icon-floor_white"; icon_state = "floor_white"},/area/submap/cave/qShuttle)
"bN" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/shuttle/floor{tag = "icon-floor_white"; icon_state = "floor_white"},/area/submap/cave/qShuttle)
"bO" = (/obj/structure/table/rack,/obj/item/clothing/head/soft/mbill{desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; name = "old shipping cap"},/turf/simulated/shuttle/floor{tag = "icon-floor_white"; icon_state = "floor_white"},/area/submap/cave/qShuttle)
"bP" = (/obj/structure/ore_box,/turf/simulated/shuttle/floor{tag = "icon-floor_yellow"; icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
"bQ" = (/obj/item/weapon/contraband/poster,/turf/simulated/shuttle/floor{tag = "icon-floor_yellow"; icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
"bR" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/shuttle/floor{tag = "icon-floor_yellow"; icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
"bS" = (/obj/structure/sign/biohazard,/turf/simulated/shuttle/wall/hard_corner,/area/submap/cave/qShuttle)
"bT" = (/obj/item/tape/medical{icon_state = "tape_v_0"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"bU" = (/obj/item/taperoll/medical,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"bV" = (/obj/item/tape/medical{dir = 1; icon_state = "tape_dir_0"},/obj/item/tape/medical{dir = 4; icon_state = "tape_dir_0"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"bW" = (/obj/item/tape/medical{icon_state = "tape_h_0"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"bX" = (/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"bY" = (/obj/structure/sign/warning/secure_area,/turf/simulated/wall/iron,/area/submap/cave/qShuttle)
"bZ" = (/obj/structure/sign/kiddieplaque{desc = "By order of the S.D.D.C, this site or craft is to be buried and not disturbed until such time that sterility can be confirmed. Dated: 20/12/2491 "; name = "\improper Sif Department of Disease Control notice"},/turf/simulated/wall/iron,/area/submap/cave/qShuttle)
"ca" = (/obj/structure/sign/warning,/turf/simulated/wall/iron,/area/submap/cave/qShuttle)
"cb" = (/obj/item/bodybag,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"cc" = (/obj/structure/table/steel,/obj/item/weapon/storage/box/bodybags,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"cd" = (/obj/structure/table/steel,/obj/item/clothing/suit/bio_suit,/obj/random/medical/lite,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"ce" = (/obj/structure/closet/l3closet/virology,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"cf" = (/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"cg" = (/obj/structure/dispenser/oxygen,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"ch" = (/obj/structure/table/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"ci" = (/obj/structure/table/steel,/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"cj" = (/obj/structure/table/steel,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"ck" = (/obj/structure/table/steel,/obj/item/weapon/crowbar/power,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"cl" = (/obj/structure/table/rack,/obj/item/clothing/head/bio_hood,/obj/item/clothing/suit/bio_suit,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"cm" = (/obj/item/weapon/weldingtool/largetank,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
"cn" = (/obj/structure/closet/crate/medical,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -131,13 +132,13 @@ aaaaaiaJaKaLadaMaNaOaPaQaQaRaSaTaUaVaAaWaXaAaYabaa
aaabaiaZbababbbcbdadbebfbgadbhbiadbjaAbkaAblaYabaa
aaabaiaJbmbnadbobpbqbrbsbtbqaNbuaUbvaAbwaVbxaYabaa
aaabadadadadadaDbyaAbzaAbAbBbCbDadbEaGbFadadbGabaa
aaababadadbHbIbJaoadbKaQbLadbMbNadbObPbQadagahabaa
ababacabadaiajakakbRaiadaiadadadadadadadadadadaaaa
ababababbSabaeaeafaeababababbTabababababadagahaaaa
aaabababbUbVbVbVbVbVbVbVbVbVbVbVbVbVbVbVadadadaaaa
aaaaababababababababbWbXbYbZcacacaabcbcccdabceaaaa
aaaaacababcfcgchcicjckababclabcacaababababababaaaa
aaaaaaababcmcgababababababababaaaaaaaaaaababacaaaa
aaababadadbHbIbJbKadbLaQbMadbNbOadbPbQbRadagahabaa
ababacabadaiajakakbSaiadaiadadadadadadadadadadaaaa
ababababbTabaeaeafaeababababbUabababababadagahaaaa
aaabababbVbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWadadadaaaa
aaaaababababababababbXbYbZcacbcbcbabcccdceabcfaaaa
aaaaacababcgchcicjckclababcmabcbcbababababababaaaa
aaaaaaababcnchababababababababaaaaaaaaaaababacaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa