diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index b00bf09529..d23f53c23a 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -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)
diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index 3cdca23fde..1b38fae182 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -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()
diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm
index 5d2482d60c..ab01bfa005 100644
--- a/code/game/objects/effects/decals/Cleanable/misc.dm
+++ b/code/game/objects/effects/decals/Cleanable/misc.dm
@@ -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"
diff --git a/code/modules/mob/living/carbon/human/species/outsider/shadow.dm b/code/modules/mob/living/carbon/human/species/outsider/shadow.dm
index 58a967c809..672840117e 100644
--- a/code/modules/mob/living/carbon/human/species/outsider/shadow.dm
+++ b/code/modules/mob/living/carbon/human/species/outsider/shadow.dm
@@ -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..."
diff --git a/code/modules/mob/living/carbon/human/species/outsider/skeleton.dm b/code/modules/mob/living/carbon/human/species/outsider/skeleton.dm
index d6c5d030a5..d3b9f5d9b9 100644
--- a/code/modules/mob/living/carbon/human/species/outsider/skeleton.dm
+++ b/code/modules/mob/living/carbon/human/species/outsider/skeleton.dm
@@ -22,7 +22,7 @@
hunger_factor = 0
metabolic_rate = 0
- virus_immune = 1
+ virus_immune = 1
brute_mod = 1
burn_mod = 0
diff --git a/code/modules/mob/living/carbon/human/species/station/golem.dm b/code/modules/mob/living/carbon/human/species/station/golem.dm
index bccafdde14..171af12d12 100644
--- a/code/modules/mob/living/carbon/human/species/station/golem.dm
+++ b/code/modules/mob/living/carbon/human/species/station/golem.dm
@@ -17,6 +17,8 @@
blood_color = "#515573"
flesh_color = "#137E8F"
+ virus_immune = 1
+
has_organ = list(
"brain" = /obj/item/organ/internal/brain/golem
)
diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm
index aed54a6b9c..f19eb0e1ea 100644
--- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm
+++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm
@@ -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
diff --git a/code/modules/mob/living/carbon/viruses.dm b/code/modules/mob/living/carbon/viruses.dm
index b4d8297697..2f52dcd1cb 100644
--- a/code/modules/mob/living/carbon/viruses.dm
+++ b/code/modules/mob/living/carbon/viruses.dm
@@ -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]
diff --git a/code/modules/virus2/admin.dm b/code/modules/virus2/admin.dm
index 5769aa099e..dc10bc85f9 100644
--- a/code/modules/virus2/admin.dm
+++ b/code/modules/virus2/admin.dm
@@ -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 @@
Infection Chance: [infectionchance]
Spread Type: [spreadtype]
Speed: [speed]
+ Resistance: [resistance]
"}
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]
diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm
index 9af07c48b6..fbe5123b2e 100644
--- a/code/modules/virus2/disease2.dm
+++ b/code/modules/virus2/disease2.dm
@@ -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()
Antigen: [antigens2string(antigen)]
Transmitted By: [spreadtype]
Rate of Progression: [stageprob * 10]
+ Antibiotic Resistance [resistance]%
Species Affected: [jointext(affected_species, ", ")]
"}
@@ -217,7 +230,7 @@ var/global/list/virusDB = list()
for(var/datum/disease2/effectholder/E in effects)
r += "([E.stage]) [E.effect.name] "
r += "Strength: [E.multiplier >= 3 ? "Severe" : E.multiplier > 1 ? "Above Average" : "Average"] "
- r += "Verosity: [E.chance * 15]
"
+ r += "Aggressiveness: [E.chance * 15]
"
return r
diff --git a/code/modules/virus2/dishincubator.dm b/code/modules/virus2/dishincubator.dm
index ed6810980c..e5204ccedc 100644
--- a/code/modules/virus2/dishincubator.dm
+++ b/code/modules/virus2/dishincubator.dm
@@ -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)
diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm
index 523b8e1eaf..ab0bd7d791 100644
--- a/code/modules/virus2/effect.dm
+++ b/code/modules/virus2/effect.dm
@@ -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 << "Your [O.name] feels as if it might burst!"
- if(prob(10))
- spawn(50)
- if(O)
- O.droplimb(0,DROPLIMB_BLUNT)
- else
- if(prob(75))
- mob << "Your whole body feels like it might fall apart!"
- 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 << "Your [O.name] feels as if it might burst!"
+ if(prob(10))
+ spawn(50)
+ if(O)
+ O.droplimb(0,DROPLIMB_BLUNT)
+ else
+ if(prob(75))
+ mob << "Your whole body feels like it might fall apart!"
+ 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) << "[mob.name] is holding [TM.his] breath. It looks like [TM.he] [TM.is] trying to commit suicide."
- 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) << "[mob.name] is holding [TM.his] breath. It looks like [TM.he] [TM.is] trying to commit suicide."
+ 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 << "You can't feel your [E.name] anymore..."
- 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 << "You can't feel your [E.name] anymore..."
+ 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 << "You feel a cramp in your guts."
/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 << "You suddenly feel hurt and old..."
- 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 << "You suddenly feel hurt and old..."
+ 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 << "It feels like your [O.name] is on fire and your blood is boiling!"
+ H.adjust_fire_stacks(1)
+ if(prob(10))
+ mob << "Flames erupt from your skin, your entire body is burning!"
+ 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 << "You have trouble telling right and left apart all of a sudden."
- mob.Confuse(10)
+
+/datum/disease2/effect/confusion/activate(var/mob/living/carbon/mob,var/multiplier)
+ mob << "You have trouble telling right and left apart all of a sudden."
+ 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 << "Your hair starts to fall out in clumps..."
- 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 << "Your hair starts to fall out in clumps..."
+ 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 << "You feel a rush of energy inside you!"
- 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 << "You feel a rush of energy inside you!"
+ 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 << "You hear an awful ringing in your ears."
+ 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 << "Your stomach churns!"
+ 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 << "You feel like you are about to sneeze!"
- 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 << "You feel like you are about to sneeze!"
+ 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 << "Mucous runs down the back of your throat."
+
+/datum/disease2/effect/gunck/activate(var/mob/living/carbon/mob,var/multiplier)
+ mob << "Mucous runs down the back of your throat."
/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 << "Your head hurts a bit."
diff --git a/code/modules/virus2/helpers.dm b/code/modules/virus2/helpers.dm
index 4daae5c5e2..d10fdbfb68 100644
--- a/code/modules/virus2/helpers.dm
+++ b/code/modules/virus2/helpers.dm
@@ -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
diff --git a/html/changelogs/Cerebulon - VirologyTweaks.yml b/html/changelogs/Cerebulon - VirologyTweaks.yml
new file mode 100644
index 0000000000..7146324461
--- /dev/null
+++ b/html/changelogs/Cerebulon - VirologyTweaks.yml
@@ -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"
+
diff --git a/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm b/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm
index 8c2f028faa..78e4f004e9 100644
--- a/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm
+++ b/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm
@@ -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