diff --git a/code/modules/virus2/Disease2/analyser.dm b/code/modules/virus2/Disease2/analyser.dm
new file mode 100644
index 00000000000..e8728d052b1
--- /dev/null
+++ b/code/modules/virus2/Disease2/analyser.dm
@@ -0,0 +1,75 @@
+/obj/machinery/disease2/diseaseanalyser
+ name = "Disease Analyser"
+ icon = 'virology.dmi'
+ icon_state = "analyser"
+ anchored = 1
+ density = 1
+
+ var/scanning = 0
+ var/pause = 0
+
+ var/obj/item/weapon/virusdish/dish = null
+
+/obj/machinery/disease2/diseaseanalyser/attackby(var/obj/I as obj, var/mob/user as mob)
+ if(istype(I,/obj/item/weapon/virusdish))
+ var/mob/living/carbon/c = user
+ if(!dish)
+
+ dish = I
+ c.drop_item()
+ I.loc = src
+ for(var/mob/M in viewers(src))
+ if(M == user) continue
+ M.show_message("\blue [user.name] inserts the [dish.name] in the [src.name]", 3)
+
+
+ else
+ user << "There is already a dish inserted"
+
+ //else
+ return
+
+
+/obj/machinery/disease2/diseaseanalyser/process()
+ if(stat & (NOPOWER|BROKEN))
+ return
+ use_power(500)
+ src.updateDialog()
+
+
+ if(scanning)
+ scanning -= 1
+ if(scanning == 0)
+ var/r = "GNAv2 based virus lifeform"
+ r += "
Infection rate : [dish.virus2.infectionchance * 10]"
+ r += "
Spread form : [dish.virus2.spreadtype]"
+ r += "
Progress Speed : [dish.virus2.stageprob * 10]"
+ for(var/datum/disease2/effectholder/E in dish.virus2.effects)
+ r += "
Effect:[E.effect.name]. Strength : [E.multiplier * 8]. Verosity : [E.chance * 15]. Type : [5-E.stage]."
+ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src.loc)
+ P.info = r
+ dish.info = r
+ dish.analysed = 1
+ dish.loc = src.loc
+ dish = null
+ icon_state = "analyser"
+
+ for(var/mob/O in hearers(src, null))
+ O.show_message("\icon[src] \blue The [src.name] prints a sheet of paper", 3)
+ else if(dish && !scanning && !pause)
+ if(dish.virus2 && dish.growth > 50)
+ dish.growth -= 10
+ scanning = 25
+ icon_state = "analyser_processing"
+ else
+ pause = 1
+ spawn(25)
+ dish.loc = src.loc
+ dish = null
+ for(var/mob/M in viewers(src))
+ M.show_message("\icon[src] \blue The [src.name] buzzes", 2)
+ pause = 0
+
+
+
+ return
diff --git a/code/modules/virus2/Disease2/base.dm b/code/modules/virus2/Disease2/base.dm
new file mode 100644
index 00000000000..c812405adf8
--- /dev/null
+++ b/code/modules/virus2/Disease2/base.dm
@@ -0,0 +1,331 @@
+//To simplify, all diseases have 4 stages, with effects starting at stage 2
+//Stage 1 = Rest,Minor disease
+//Stage 2 = Minimal effect
+//Stage 3 = Medium effect
+//Stage 4 = Death/Really Really really bad effect
+
+
+/proc/infect_virus2(var/mob/living/carbon/M,var/datum/disease2/disease/disease,var/forced = 0)
+ if(prob(disease.infectionchance))
+ if(M.virus2)
+ return
+ else
+ var/score = 0
+ if(!forced)
+ if(istype(M, /mob/living/carbon/human))
+ if(M:gloves)
+ score += 5
+ if(istype(M:wear_suit, /obj/item/clothing/suit/space)) score += 10
+ if(istype(M:wear_suit, /obj/item/clothing/suit/bio_suit)) score += 10
+ if(istype(M:head, /obj/item/clothing/head/helmet/space)) score += 5
+ if(istype(M:head, /obj/item/clothing/head/bio_hood)) score += 5
+ if(M.wear_mask)
+ score += 5
+ if((istype(M:wear_mask, /obj/item/clothing/mask) || istype(M:wear_mask, /obj/item/clothing/mask/surgical)) && !M.internal)
+ score += 5
+ if(M.internal)
+ score += 5
+
+ if(score > 15)
+ return
+ // else if(score == 20 && prob(95))
+ // return
+ else if(score == 15 && prob(75))
+ return
+ else if(score == 10 && prob(55))
+ return
+ else if(score == 5 && prob(35))
+ return
+
+ M.virus2 = disease.getcopy()
+ M.virus2.minormutate()
+
+ for(var/datum/disease2/resistance/res in M.resistances)
+ if(res.resistsdisease(M.virus2))
+ M.virus2 = null
+
+
+
+/datum/disease2/resistance
+ var/list/datum/disease2/effect/resistances = list()
+
+ proc/resistsdisease(var/datum/disease2/disease/virus2)
+ var/list/res2 = list()
+ for(var/datum/disease2/effect/e in resistances)
+ res2 += e.type
+ for(var/datum/disease2/effectholder/holder in virus2)
+ if(!(holder.effect.type in res2))
+ return 0
+ else
+ res2 -= holder.effect.type
+ if(res2.len > 0)
+ return 0
+ else
+ return 1
+
+ New(var/datum/disease2/disease/virus2)
+ for(var/datum/disease2/effectholder/h in virus2.effects)
+ resistances += h.effect.type
+
+
+/proc/infect_mob_random(var/mob/living/carbon/M)
+ if(!M.virus2)
+ M.virus2 = new /datum/disease2/disease
+ M.virus2.makerandom()
+
+/datum/disease2/disease
+ var/infectionchance = 10
+ var/spreadtype = "Blood" // Can also be "Airborne"
+ var/stage = 1
+ var/stageprob = 2
+ var/dead = 0
+ var/clicks = 0
+
+ var/uniqueID = 0
+ var/list/datum/disease2/effectholder/effects = list()
+ proc/makerandom()
+ var/datum/disease2/effectholder/holder = new /datum/disease2/effectholder
+ holder.stage = 1
+ holder.getrandomeffect()
+ effects += holder
+ holder = new /datum/disease2/effectholder
+ holder.stage = 2
+ holder.getrandomeffect()
+ effects += holder
+ holder = new /datum/disease2/effectholder
+ holder.stage = 3
+ holder.getrandomeffect()
+ effects += holder
+ holder = new /datum/disease2/effectholder
+ holder.stage = 4
+ holder.getrandomeffect()
+ effects += holder
+ uniqueID = rand(0,10000)
+ infectionchance = rand(1,10)
+ spreadtype = "Airborne"
+ proc/minormutate()
+ var/datum/disease2/effectholder/holder = pick(effects)
+ holder.minormutate()
+ infectionchance = min(10,infectionchance + rand(0,1))
+ proc/issame(var/datum/disease2/disease/disease)
+ var/list/types = list()
+ var/list/types2 = list()
+ for(var/datum/disease2/effectholder/d in effects)
+ types += d.effect.type
+ var/equal = 1
+
+ for(var/datum/disease2/effectholder/d in disease.effects)
+ types2 += d.effect.type
+
+ for(var/type in types)
+ if(!(type in types2))
+ equal = 0
+ return equal
+
+ proc/activate(var/mob/living/carbon/mob)
+ if(dead)
+ mob.virus2 = null
+ return
+ if(mob.stat == 2)
+ return
+ if(mob.radiation > 50)
+ if(prob(1))
+ majormutate()
+ if(mob.reagents.has_reagent("spaceacillin"))
+ return
+ if(prob(stageprob) && prob(25 + (clicks/100)) && stage != 4)
+ stage++
+ clicks = 0
+ for(var/datum/disease2/effectholder/e in effects)
+ e.runeffect(mob,stage)
+
+ proc/cure_added(var/datum/disease2/resistance/res)
+ if(res.resistsdisease(src))
+ dead = 1
+
+ proc/majormutate()
+ var/datum/disease2/effectholder/holder = pick(effects)
+ holder.majormutate()
+
+
+ proc/getcopy()
+// world << "getting copy"
+ var/datum/disease2/disease/disease = new /datum/disease2/disease
+ disease.infectionchance = infectionchance
+ disease.spreadtype = spreadtype
+ disease.stageprob = stageprob
+ for(var/datum/disease2/effectholder/holder in effects)
+ // world << "adding effects"
+ var/datum/disease2/effectholder/newholder = new /datum/disease2/effectholder
+ newholder.effect = new holder.effect.type
+ newholder.chance = holder.chance
+ newholder.cure = holder.cure
+ newholder.multiplier = holder.multiplier
+ newholder.happensonce = holder.happensonce
+ newholder.stage = holder.stage
+ disease.effects += newholder
+ // world << "[newholder.effect.name]"
+ // world << "[disease]"
+ return disease
+
+/datum/disease2/effect
+ var/name = "Blanking effect"
+ var/stage = 4
+ var/maxm = 1
+ proc/activate(var/mob/living/carbon/mob,var/multiplier)
+
+/datum/disease2/effect/gibbingtons
+ name = "Gibbingtons Syndrome"
+ stage = 4
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ mob.gib()
+
+/datum/disease2/effect/radian
+ name = "Radian's syndrome"
+ stage = 4
+ maxm = 3
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ mob.radiation += (2*multiplier)
+
+/datum/disease2/effect/toxins
+ name = "Hyperacid Syndrome"
+ stage = 3
+ maxm = 3
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ mob.toxloss += (2*multiplier)
+
+/datum/disease2/effect/scream
+ name = "Random screaming syndrome"
+ stage = 2
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ mob.say("*scream")
+
+/datum/disease2/effect/drowsness
+ name = "Automated sleeping syndrome"
+ stage = 2
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ mob.drowsyness += 10
+
+/datum/disease2/effect/shakey
+ name = "World Shaking syndrome"
+ stage = 3
+ maxm = 3
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ shake_camera(mob,5*multiplier)
+
+/datum/disease2/effect/deaf
+ name = "Hard of hearing syndrome"
+ stage = 4
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ mob.ear_deaf += 20
+
+/datum/disease2/effect/invisible
+ name = "Waiting Syndrome"
+ stage = 1
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ return
+/*
+/datum/disease2/effect/telepathic
+ name = "Telepathy Syndrome"
+ stage = 3
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ mob.mutations |= 512
+*/
+/datum/disease2/effect/noface
+ name = "Identity Loss syndrome"
+ stage = 4
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ mob.real_name = "Unknown"
+
+/datum/disease2/effect/monkey
+ name = "Monkism syndrome"
+ stage = 4
+ 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/sneeze
+ name = "Coldingtons Effect"
+ stage = 1
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ mob.say("*sneeze")
+
+/datum/disease2/effect/gunck
+ name = "Flemmingtons"
+ stage = 1
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ mob << "\red Mucous runs down the back of your throat."
+
+/datum/disease2/effect/killertoxins
+ name = "Toxification syndrome"
+ stage = 4
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ mob.toxloss += 15
+/*
+/datum/disease2/effect/hallucinations
+ name = "Hallucinational Syndrome"
+ stage = 3
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ mob.hallucination += 25
+*/
+/datum/disease2/effect/sleepy
+ name = "Resting syndrome"
+ stage = 2
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ mob.say("*collapse")
+
+/datum/disease2/effect/mind
+ name = "Lazy mind syndrome"
+ stage = 3
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ mob.brainloss = 50
+
+/datum/disease2/effect/suicide
+ name = "Suicidal syndrome"
+ stage = 4
+ activate(var/mob/living/carbon/mob,var/multiplier)
+ mob.suiciding = 1
+ //instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
+ viewers(mob) << "\red [mob.name] is holding \his breath. It looks like \he's trying to commit suicide."
+ mob.oxyloss = max(175 - mob.toxloss - mob.fireloss - mob.bruteloss, mob.oxyloss)
+ mob.updatehealth()
+ spawn(200) //in case they get revived by cryo chamber or something stupid like that, let them suicide again in 20 seconds
+ mob.suiciding = 0
+
+/datum/disease2/effectholder
+ var/name = "Holder"
+ var/datum/disease2/effect/effect
+ var/chance = 0 //Chance in percentage each tick
+ var/cure = "" //Type of cure it requires
+ var/happensonce = 0
+ var/multiplier = 1 //The chance the effects are WORSE
+ var/stage = 0
+
+ proc/runeffect(var/mob/living/carbon/human/mob,var/stage)
+ if(happensonce > -1 && effect.stage <= stage && prob(chance))
+ effect.activate(mob)
+ if(happensonce == 1)
+ happensonce = -1
+
+ proc/getrandomeffect()
+ var/list/datum/disease2/effect/list = list()
+ for(var/e in (typesof(/datum/disease2/effect) - /datum/disease2/effect))
+ // world << "Making [e]"
+ var/datum/disease2/effect/f = new e
+ if(f.stage == src.stage)
+ list += f
+ effect = pick(list)
+ chance = rand(1,6)
+
+ proc/minormutate()
+ switch(pick(1,2,3,4,5))
+ if(1)
+ chance = rand(0,100)
+ if(2)
+ multiplier = rand(1,effect.maxm)
+ proc/majormutate()
+ getrandomeffect()
+
+/proc/dprob(var/p)
+ return(prob(sqrt(p)) && prob(sqrt(p)))
diff --git a/code/modules/virus2/Disease2/biohazard destroyer.dm b/code/modules/virus2/Disease2/biohazard destroyer.dm
new file mode 100644
index 00000000000..98fc9b1b218
--- /dev/null
+++ b/code/modules/virus2/Disease2/biohazard destroyer.dm
@@ -0,0 +1,20 @@
+/obj/machinery/disease2/biodestroyer
+ name = "Biohazard destroyer"
+ icon = 'disposal.dmi'
+ icon_state = "disposal"
+ var/list/accepts = list(/obj/item/clothing,/obj/item/weapon/virusdish/,/obj/item/weapon/cureimplanter,/obj/item/weapon/diseasedisk)
+ density = 1
+ anchored = 1
+
+/obj/machinery/disease2/biodestroyer/attackby(var/obj/I as obj, var/mob/user as mob)
+ for(var/path in accepts)
+ if(I.type in typesof(path))
+ user.drop_item()
+ del(I)
+ overlays += image('disposal.dmi', "dispover-handle")
+ return
+ user.drop_item()
+ I.loc = src.loc
+
+ for(var/mob/O in hearers(src, null))
+ O.show_message("\icon[src] \blue The [src.name] beeps", 2)
diff --git a/code/modules/virus2/Disease2/cureimplanter.dm b/code/modules/virus2/Disease2/cureimplanter.dm
new file mode 100644
index 00000000000..a6b484a2397
--- /dev/null
+++ b/code/modules/virus2/Disease2/cureimplanter.dm
@@ -0,0 +1,42 @@
+/obj/item/weapon/cureimplanter
+ name = "Hypospray injector"
+ icon = 'items.dmi'
+ icon_state = "implanter1"
+ var/datum/disease2/resistance/resistance = null
+ var/works = 0
+ var/datum/disease2/disease/virus2 = null
+ item_state = "syringe_0"
+ throw_speed = 1
+ throw_range = 5
+ w_class = 2.0
+
+
+/obj/item/weapon/cureimplanter/attack(mob/target as mob, mob/user as mob)
+ if(ismob(target))
+ for(var/mob/O in viewers(world.view, user))
+ if (target != user)
+ O.show_message(text("\red [] is trying to inject [] with [src.name]!", user, target), 1)
+ else
+ O.show_message("\red [user] is trying to inject themselves with [src.name]!", 1)
+ if(!do_mob(user, target,60)) return
+
+
+ for(var/mob/O in viewers(world.view, user))
+ if (target != user)
+ O.show_message(text("\red [] injects [] with [src.name]!", user, target), 1)
+ else
+ O.show_message("\red [user] injects themself with [src.name]!", 1)
+
+
+ var/mob/living/carbon/M = target
+
+ if(works == 0 && prob(25))
+ M.resistances2 += resistance
+ if(M.virus2)
+ M.virus2.cure_added(resistance)
+ else if(works == 1)
+ M.toxloss += rand(20,50)
+ else if(works == 2)
+ M.toxloss += rand(50,100)
+ else if(works == 3)
+ infect_virus2(M,virus2,1)
diff --git a/code/modules/virus2/Disease2/diseasesplicer.dm b/code/modules/virus2/Disease2/diseasesplicer.dm
new file mode 100644
index 00000000000..759116f5975
--- /dev/null
+++ b/code/modules/virus2/Disease2/diseasesplicer.dm
@@ -0,0 +1,202 @@
+/obj/machinery/computer/diseasesplicer
+ name = "Disease Splicer"
+ icon = 'computer.dmi'
+ icon_state = "crew"
+ //brightnessred = 0
+// brightnessgreen = 2
+// brightnessblue = 2
+// broken_icon
+
+ var/datum/disease2/effectholder/memorybank = null
+ var/analysed = 0
+ var/obj/item/weapon/virusdish/dish = null
+ var/burning = 0
+
+ var/splicing = 0
+ var/scanning = 0
+
+/obj/machinery/computer/diseasesplicer/attackby(var/obj/I as obj, var/mob/user as mob)
+/*
+ if(istype(I, /obj/item/weapon/screwdriver))
+ playsound(src.loc, 'Screwdriver.ogg', 50, 1)
+ if(do_after(user, 20))
+ if (src.stat & BROKEN)
+ user << "\blue The broken glass falls out."
+ var/obj/computerframe/A = new /obj/computerframe( src.loc )
+ new /obj/item/weapon/shard( src.loc )
+ var/obj/item/weapon/circuitboard/diseasesplicer/M = new /obj/item/weapon/circuitboard/diseasesplicer( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.state = 3
+ A.icon_state = "3"
+ A.anchored = 1
+ del(src)
+ else
+ user << "\blue You disconnect the monitor."
+ var/obj/computerframe/A = new /obj/computerframe( src.loc )
+ var/obj/item/weapon/circuitboard/diseasesplicer/M = new /obj/item/weapon/circuitboard/diseasesplicer( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.state = 4
+ A.icon_state = "4"
+ A.anchored = 1
+ del(src)*/
+ if(istype(I,/obj/item/weapon/virusdish))
+ var/mob/living/carbon/c = user
+ if(!dish)
+
+ dish = I
+ c.drop_item()
+ I.loc = src
+ if(istype(I,/obj/item/weapon/diseasedisk))
+ user << "You upload the contents of the disk into the buffer"
+ memorybank = I:effect
+
+
+ //else
+ src.attack_hand(user)
+ return
+
+/obj/machinery/computer/diseasesplicer/attack_ai(var/mob/user as mob)
+ return src.attack_hand(user)
+
+/obj/machinery/computer/diseasesplicer/attack_paw(var/mob/user as mob)
+
+ return src.attack_hand(user)
+ return
+
+/obj/machinery/computer/diseasesplicer/attack_hand(var/mob/user as mob)
+ if(..())
+ return
+ user.machine = src
+ var/dat
+ if(splicing)
+ dat = "Splicing in progress"
+ else if(scanning)
+ dat = "Splicing in progress"
+ else if(burning)
+ dat = "Data disk burning in progress"
+ else
+ if(dish)
+ dat = "Virus dish inserted"
+
+ dat += "
Current DNA strand : "
+ if(memorybank)
+ dat += ""
+ if(analysed)
+ dat += "[memorybank.effect.name] ([5-memorybank.effect.stage])"
+ else
+ dat += "Unknown DNA strand ([5-memorybank.effect.stage])"
+ dat += ""
+
+ dat += "
Burn DNA Sequence to data storage disk"
+ else
+ dat += "Empty"
+
+ dat += "
"
+
+ if(dish)
+ if(dish.virus2)
+ if(dish.growth >= 50)
+ for(var/datum/disease2/effectholder/e in dish.virus2.effects)
+ dat += "
DNA strand"
+ if(dish.analysed)
+ dat += ": [e.effect.name]"
+ dat += " (5-[e.effect.stage])"
+ else
+ dat += "
Insufficent cells to attempt gene splicing"
+ else
+ dat += "
No virus found in dish"
+
+ dat += "
Eject disk"
+ else
+ dat += "
Please insert dish"
+
+ user << browse(dat, "window=computer;size=400x500")
+ onclose(user, "computer")
+ return
+
+/obj/machinery/computer/diseasesplicer/process()
+ if(stat & (NOPOWER|BROKEN))
+ return
+ use_power(500)
+ src.updateDialog()
+
+ if(scanning)
+ scanning -= 1
+ if(!scanning)
+ state("The [src.name] beeps")
+ icon_state = "crew"
+ if(splicing)
+ splicing -= 1
+ if(!splicing)
+ state("The [src.name] pings")
+ icon_state = "crew"
+ if(burning)
+ burning -= 1
+ if(!burning)
+ var/obj/item/weapon/diseasedisk/d = new /obj/item/weapon/diseasedisk(src.loc)
+ if(analysed)
+ d.name = "[memorybank.effect.name] GNA disk (Stage: [5-memorybank.effect.stage])"
+ else
+ d.name = "Unknown GNA disk (Stage: [5-memorybank.effect.stage])"
+ d.effect = memorybank
+ state("The [src.name] zings")
+ icon_state = "crew"
+
+
+ return
+
+/obj/machinery/computer/diseasesplicer/Topic(href, href_list)
+ if(..())
+ return
+ if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
+ usr.machine = src
+
+ if (href_list["grab"])
+ memorybank = locate(href_list["grab"])
+ analysed = dish.analysed
+ del(dish)
+ dish = null
+ scanning = 30
+ icon_state = "crew"
+
+ else if(href_list["eject"])
+ dish.loc = src.loc
+ dish = null
+
+ else if(href_list["splice"])
+ for(var/datum/disease2/effectholder/e in dish.virus2.effects)
+ if(e.stage == memorybank.stage)
+ e.effect = memorybank.effect
+ splicing = 50
+ dish.virus2.spreadtype = "Blood"
+ icon_state = "crew"
+
+ else if(href_list["disk"])
+ burning = 20
+ icon_state = "crew"
+
+ src.add_fingerprint(usr)
+ src.updateUsrDialog()
+ return
+
+/obj/machinery/computer/diseasesplicer/proc/state(var/msg)
+ for(var/mob/O in hearers(src, null))
+ O.show_message("\icon[src] \blue [msg]", 2)
+
+
+/obj/item/weapon/diseasedisk
+ name = "Blank GNA disk"
+ icon = 'cloning.dmi'
+ icon_state = "datadisk2"
+ var/datum/disease2/effectholder/effect = null
+ var/stage = 1
+
+/obj/item/weapon/diseasedisk/premade/New()
+ name = "Blank GNA disk (stage: [5-stage])"
+ effect = new /datum/disease2/effectholder
+ effect.effect = new /datum/disease2/effect/invisible
+ effect.stage = stage
diff --git a/code/modules/virus2/Disease2/dishincubator.dm b/code/modules/virus2/Disease2/dishincubator.dm
new file mode 100644
index 00000000000..d5d21728b23
--- /dev/null
+++ b/code/modules/virus2/Disease2/dishincubator.dm
@@ -0,0 +1,176 @@
+/obj/machinery/disease2/incubator/
+ name = "Pathogenic incubator"
+ density = 1
+ anchored = 1
+ icon = 'virology.dmi'
+ icon_state = "incubator"
+ var/obj/item/weapon/virusdish/dish
+ var/obj/item/weapon/reagent_containers/glass/beaker = null
+ var/radiation = 0
+
+ var/on = 0
+ var/power = 0
+
+ var/foodsupply = 0
+ var/toxins = 0
+
+ ex_act(severity)
+ switch(severity)
+ if(1.0)
+ del(src)
+ return
+ if(2.0)
+ if (prob(50))
+ del(src)
+ return
+
+ blob_act()
+ if (prob(25))
+ del(src)
+
+ meteorhit()
+ del(src)
+ return
+
+ attackby(var/obj/B as obj, var/mob/user as mob)
+ if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B,/obj/item/weapon/reagent_containers/syringe))
+
+ if(src.beaker)
+ if(istype(beaker,/obj/item/weapon/reagent_containers/syringe))
+ user << "A syringe is already loaded into the machine."
+ else
+ user << "A beaker is already loaded into the machine."
+ return
+
+ src.beaker = B
+ user.drop_item()
+ B.loc = src
+ if(istype(B,/obj/item/weapon/reagent_containers/syringe))
+ user << "You add the syringe to the machine!"
+ src.updateUsrDialog()
+ else
+ user << "You add the beaker to the machine!"
+ src.updateUsrDialog()
+ else
+ if(istype(B,/obj/item/weapon/virusdish))
+ if(src.dish)
+ user << "A dish is already loaded into the machine."
+ return
+
+ src.dish = B
+ user.drop_item()
+ B.loc = src
+ if(istype(B,/obj/item/weapon/virusdish))
+ user << "You add the dish to the machine!"
+ src.updateUsrDialog()
+
+ Topic(href, href_list)
+ if(stat & BROKEN) return
+ if(usr.stat || usr.restrained()) return
+ if(!in_range(src, usr)) return
+
+ usr.machine = src
+ if(!dish) return
+
+ if (href_list["power"])
+ on = !on
+ if(on)
+ icon_state = "incubator_on"
+ else
+ icon_state = "incubator"
+ if (href_list["ejectchem"])
+ if(beaker)
+ beaker.loc = src.loc
+ beaker = null
+ if (href_list["ejectdish"])
+ if(dish)
+ dish.loc = src.loc
+ dish = null
+ if (href_list["rad"])
+ radiation += 10
+ if (href_list["flush"])
+ radiation = 0
+ toxins = 0
+ foodsupply = 0
+
+
+ src.add_fingerprint(usr)
+ src.updateUsrDialog()
+
+ attack_hand(mob/user as mob)
+ if(stat & BROKEN)
+ return
+ user.machine = src
+ var/dat = ""
+ if(!dish)
+ dat = "Please insert dish into the incubator.
"
+ dat += "Close"
+ var/string = "Off"
+ if(on)
+ string = "On"
+ dat += "Power status : [string]"
+ dat += "
"
+ dat += "Food supply : [foodsupply]"
+ dat += "
"
+ dat += "Radiation Levels : [radiation] RADS : Radiate"
+ dat += "
"
+ dat += "Toxins : [toxins]"
+ dat += "
"
+ if(beaker)
+ dat += "Eject chemicals : Eject"
+ dat += "
"
+ if(dish)
+ dat += "Eject Virus dish : Eject"
+ dat += "
"
+ dat += "
"
+ dat += "Flush system"
+
+
+ user << browse("