Virus2 Refactoring, Part I - Machinery.

-Removed functions already defined in parent classes.
-Replaced checks in Topic() with parent class ones.
-Removed two unused files (there are duplicates in unused folder anyway)
-Removed commented out lines, mostly pre-antibody curing code.
-Shuffled code around for better readability (like antibody list)
-Moved various devices and items defines to separate file.
This commit is contained in:
Chinsky
2013-06-08 17:36:12 +04:00
parent 405dff19b8
commit 1820a227a1
9 changed files with 257 additions and 515 deletions

View File

@@ -1251,6 +1251,13 @@
#include "code\modules\surgery\ribcage.dm" #include "code\modules\surgery\ribcage.dm"
#include "code\modules\surgery\robolimbs.dm" #include "code\modules\surgery\robolimbs.dm"
#include "code\modules\surgery\surgery.dm" #include "code\modules\surgery\surgery.dm"
#include "code\modules\virus2\analyser.dm"
#include "code\modules\virus2\antibodies.dm"
#include "code\modules\virus2\base.dm"
#include "code\modules\virus2\curer.dm"
#include "code\modules\virus2\diseasesplicer.dm"
#include "code\modules\virus2\dishincubator.dm"
#include "code\modules\virus2\isolator.dm"
#include "code\WorkInProgress\autopsy.dm" #include "code\WorkInProgress\autopsy.dm"
#include "code\WorkInProgress\buildmode.dm" #include "code\WorkInProgress\buildmode.dm"
#include "code\WorkInProgress\explosion_particles.dm" #include "code\WorkInProgress\explosion_particles.dm"
@@ -1306,13 +1313,6 @@
#include "code\WorkInProgress\SkyMarshal\officer_stuff.dm" #include "code\WorkInProgress\SkyMarshal\officer_stuff.dm"
#include "code\WorkInProgress\SkyMarshal\Ultralight_procs.dm" #include "code\WorkInProgress\SkyMarshal\Ultralight_procs.dm"
#include "code\WorkInProgress\Susan\susan_desert_turfs.dm" #include "code\WorkInProgress\Susan\susan_desert_turfs.dm"
#include "code\WorkInProgress\virus2\analyser.dm"
#include "code\WorkInProgress\virus2\antibodies.dm"
#include "code\WorkInProgress\virus2\base.dm"
#include "code\WorkInProgress\virus2\curer.dm"
#include "code\WorkInProgress\virus2\diseasesplicer.dm"
#include "code\WorkInProgress\virus2\dishincubator.dm"
#include "code\WorkInProgress\virus2\isolator.dm"
#include "code\ZAS\Airflow.dm" #include "code\ZAS\Airflow.dm"
#include "code\ZAS\Connection.dm" #include "code\ZAS\Connection.dm"
#include "code\ZAS\Debug.dm" #include "code\ZAS\Debug.dm"

View File

@@ -14,19 +14,14 @@
if(istype(I,/obj/item/weapon/virusdish)) if(istype(I,/obj/item/weapon/virusdish))
var/mob/living/carbon/c = user var/mob/living/carbon/c = user
if(!dish) if(!dish)
dish = I dish = I
c.drop_item() c.drop_item()
I.loc = src I.loc = src
for(var/mob/M in viewers(src)) for(var/mob/M in viewers(src))
if(M == user) continue if(M == user) continue
M.show_message("\blue [user.name] inserts the [dish.name] in the [src.name]", 3) M.show_message("\blue [user.name] inserts the [dish.name] in the [src.name]", 3)
else else
user << "There is already a dish inserted" user << "There is already a dish inserted"
//else
return return
@@ -34,8 +29,6 @@
if(stat & (NOPOWER|BROKEN)) if(stat & (NOPOWER|BROKEN))
return return
use_power(500) use_power(500)
//src.updateDialog()
if(scanning) if(scanning)
scanning -= 1 scanning -= 1
@@ -46,10 +39,8 @@
r += "<BR>Progress Speed : [dish.virus2.stageprob * 10]" r += "<BR>Progress Speed : [dish.virus2.stageprob * 10]"
for(var/datum/disease2/effectholder/E in dish.virus2.effects) for(var/datum/disease2/effectholder/E in dish.virus2.effects)
r += "<BR>Effect:[E.effect.name]. Strength : [E.multiplier * 8]. Verosity : [E.chance * 15]. Type : [5-E.stage]." r += "<BR>Effect:[E.effect.name]. Strength : [E.multiplier * 8]. Verosity : [E.chance * 15]. Type : [5-E.stage]."
// display the antigens
var/code = "" r += "<BR>Antigen pattern: [antigens2string(dish.virus2.antigen)]"
for(var/V in ANTIGENS) if(text2num(V) & dish.virus2.antigen) code += ANTIGENS[V]
r += "<BR>Antigen pattern: [code]"
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src.loc) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src.loc)
P.info = r P.info = r
@@ -59,8 +50,8 @@
dish = null dish = null
icon_state = "analyser" icon_state = "analyser"
for(var/mob/O in hearers(src, null)) M.state("\The [src.name] prints a sheet of paper")
O.show_message("\icon[src] \blue The [src.name] prints a sheet of paper", 3)
else if(dish && !scanning && !pause) else if(dish && !scanning && !pause)
if(dish.virus2 && dish.growth > 50) if(dish.virus2 && dish.growth > 50)
dish.growth -= 10 dish.growth -= 10
@@ -71,8 +62,6 @@
spawn(25) spawn(25)
dish.loc = src.loc dish.loc = src.loc
dish = null dish = null
for(var/mob/M in viewers(src)) M.state("\The [src.name] buzzes")
M.show_message("\icon[src] \blue The [src.name] buzzes", 2)
pause = 0 pause = 0
return return

View File

@@ -1,23 +1,5 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
// pure concentrated antibodies
datum/reagent/antibodies
data = new/list("antibodies"=0)
name = "Antibodies"
id = "antibodies"
reagent_state = LIQUID
color = "#0050F0"
reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
if(istype(M,/mob/living/carbon))
if(src.data && method == INGEST)
if(M:virus2) if(src.data["antibodies"] & M:virus2.antigen)
M:virus2.dead = 1
// if the virus is killed this way it immunizes
// M:antibodies |= M:virus2.antigen
M:antibodies |= src.data["antibodies"]
return
// reserving some numbers for later special antigens // reserving some numbers for later special antigens
var/global/const/ANTIGEN_A = 1 var/global/const/ANTIGEN_A = 1
var/global/const/ANTIGEN_B = 2 var/global/const/ANTIGEN_B = 2
@@ -33,26 +15,38 @@ var/global/const/ANTIGEN_N = 1024
var/global/const/ANTIGEN_P = 2048 var/global/const/ANTIGEN_P = 2048
var/global/const/ANTIGEN_O = 4096 var/global/const/ANTIGEN_O = 4096
var/global/list/ANTIGENS = list("[ANTIGEN_A]" = "A", "[ANTIGEN_B]" = "B", "[ANTIGEN_RH]" = "RH", "[ANTIGEN_Q]" = "Q", var/global/list/ANTIGENS = list(
"[ANTIGEN_U]" = "U", "[ANTIGEN_V]" = "V", "[ANTIGEN_Z]" = "Z", "[ANTIGEN_M]" = "M", "[ANTIGEN_A]" = "A",
"[ANTIGEN_N]" = "N", "[ANTIGEN_P]" = "P", "[ANTIGEN_O]" = "O") "[ANTIGEN_B]" = "B",
"[ANTIGEN_RH]" = "RH",
"[ANTIGEN_Q]" = "Q",
"[ANTIGEN_U]" = "U",
"[ANTIGEN_V]" = "V",
"[ANTIGEN_Z]" = "Z",
"[ANTIGEN_M]" = "M",
"[ANTIGEN_N]" = "N",
"[ANTIGEN_P]" = "P",
"[ANTIGEN_O]" = "O"
)
// pure concentrated antibodies
datum/reagent/antibodies
data = list("antibodies"=0)
name = "Antibodies"
id = "antibodies"
reagent_state = LIQUID
color = "#0050F0"
reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
if(istype(M,/mob/living/carbon))
if(src.data && method == INGEST)
if(M:virus2) if(src.data["antibodies"] & M:virus2.antigen)
M:virus2.dead = 1
M:antibodies |= src.data["antibodies"]
return
/obj/item/device/antibody_scanner // iterate over the list of antigens and see what matches
name = "Antibody Scanner" /proc/antigens2string(var/antigens)
desc = "Used to scan living beings for antibodies in their blood." var/code = ""
icon_state = "health" for(var/V in ANTIGENS) if(text2num(V) & antigens) code += ANTIGENS[V]
w_class = 2.0 return code
item_state = "electronic"
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
/obj/item/device/antibody_scanner/attack(mob/living/carbon/human/M as mob, mob/user as mob)
if(! istype(M, /mob/living/carbon) || !M:antibodies)
user << "Unable to detect antibodies.."
else
// iterate over the list of antigens and see what matches
var/code = ""
for(var/V in ANTIGENS) if(text2num(V) & M.antibodies) code += ANTIGENS[V]
user << text("\blue [src] The antibody scanner displays a cryptic set of data: [code]")

View File

@@ -1,43 +0,0 @@
/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 <B>[] is trying to inject [] with [src.name]!</B>", user, target), 1)
else
O.show_message("\red <B>[user] is trying to inject themselves with [src.name]!</B>", 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)
M.resistances2 += resistance
//M.immunevirus2 += M.virus2.getcopy()
if(M.virus2)
M.virus2.cure_added(resistance)
else if(works == 1)
M.adjustToxLoss(60)
else if(works == 2)
M.gib()
else if(works == 3)
infect_virus2(M,virus2,1)

View File

@@ -9,31 +9,7 @@
/obj/machinery/computer/curer/attackby(var/obj/I as obj, var/mob/user as mob) /obj/machinery/computer/curer/attackby(var/obj/I as obj, var/mob/user as mob)
if(istype(I, /obj/item/weapon/screwdriver)) if(istype(I, /obj/item/weapon/screwdriver))
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) return ..(I,user)
if(do_after(user, 20))
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
new /obj/item/weapon/shard( src.loc )
//var/obj/item/weapon/circuitboard/curer/M = new /obj/item/weapon/circuitboard/curer( 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/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
//var/obj/item/weapon/circuitboard/curer/M = new /obj/item/weapon/circuitboard/curer( 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/reagent_containers)) if(istype(I,/obj/item/weapon/reagent_containers))
var/mob/living/carbon/C = user var/mob/living/carbon/C = user
if(!container) if(!container)
@@ -55,7 +31,6 @@
state("The [src.name] Buzzes", "blue") state("The [src.name] Buzzes", "blue")
return return
//else
src.attack_hand(user) src.attack_hand(user)
return return
@@ -102,7 +77,6 @@
if(stat & (NOPOWER|BROKEN)) if(stat & (NOPOWER|BROKEN))
return return
use_power(500) use_power(500)
//src.updateDialog()
if(curing) if(curing)
curing -= 1 curing -= 1
@@ -114,16 +88,15 @@
/obj/machinery/computer/curer/Topic(href, href_list) /obj/machinery/computer/curer/Topic(href, href_list)
if(..()) if(..())
return return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.machine = src
usr.machine = src
if (href_list["antibody"]) if (href_list["antibody"])
curing = 10 curing = 10
else if(href_list["eject"]) else if(href_list["eject"])
container.loc = src.loc container.loc = src.loc
container = null container = null
src.add_fingerprint(usr) src.add_fingerprint(usr)
src.updateUsrDialog() src.updateUsrDialog()
return return
@@ -137,11 +110,4 @@
data["antibodies"] = B.data["antibodies"] data["antibodies"] = B.data["antibodies"]
product.reagents.add_reagent("antibodies",30,data) product.reagents.add_reagent("antibodies",30,data)
state("The [src.name] Buzzes", "blue") state("\The [src.name] buzzes", "blue")
/*
/obj/machinery/computer/curer/proc/createvirus(var/datum/disease2/disease/virus2)
var/obj/item/weapon/cureimplanter/implanter = new /obj/item/weapon/cureimplanter(src.loc)
implanter.name = "Viral implanter (MAJOR BIOHAZARD)"
implanter.works = 3
state("The [src.name] Buzzes", "blue")
*/

View File

@@ -13,31 +13,7 @@
/obj/machinery/computer/diseasesplicer/attackby(var/obj/I as obj, var/mob/user as mob) /obj/machinery/computer/diseasesplicer/attackby(var/obj/I as obj, var/mob/user as mob)
if(istype(I, /obj/item/weapon/screwdriver)) if(istype(I, /obj/item/weapon/screwdriver))
playsound(src.loc, 'Screwdriver.ogg', 50, 1) return ..(I,user)
if(do_after(user, 20))
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/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/structure/computerframe/A = new /obj/structure/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)) if(istype(I,/obj/item/weapon/virusdish))
var/mob/living/carbon/c = user var/mob/living/carbon/c = user
if(!dish) if(!dish)
@@ -49,8 +25,6 @@
user << "You upload the contents of the disk into the buffer" user << "You upload the contents of the disk into the buffer"
memorybank = I:effect memorybank = I:effect
//else
src.attack_hand(user) src.attack_hand(user)
return return
@@ -117,7 +91,6 @@
if(stat & (NOPOWER|BROKEN)) if(stat & (NOPOWER|BROKEN))
return return
use_power(500) use_power(500)
//src.updateDialog()
if(scanning) if(scanning)
scanning -= 1 scanning -= 1
@@ -143,44 +116,29 @@
/obj/machinery/computer/diseasesplicer/Topic(href, href_list) /obj/machinery/computer/diseasesplicer/Topic(href, href_list)
if(..()) if(..())
return 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"]) if (href_list["grab"])
memorybank = locate(href_list["grab"]) memorybank = locate(href_list["grab"])
analysed = dish.analysed analysed = dish.analysed
del(dish) del(dish)
dish = null dish = null
scanning = 10 scanning = 10
else if(href_list["eject"]) else if(href_list["eject"])
dish.loc = src.loc dish.loc = src.loc
dish = null dish = null
else if(href_list["splice"]) else if(href_list["splice"])
if(dish) if(dish)
for(var/datum/disease2/effectholder/e in dish.virus2.effects) for(var/datum/disease2/effectholder/e in dish.virus2.effects)
if(e.stage == memorybank.stage) if(e.stage == memorybank.stage)
e.effect = memorybank.effect e.effect = memorybank.effect
splicing = 10 splicing = 10
dish.virus2.spreadtype = "Blood" dish.virus2.spreadtype = "Blood"
else if(href_list["disk"]) else if(href_list["disk"])
burning = 10 burning = 10
src.add_fingerprint(usr) src.add_fingerprint(usr)
src.updateUsrDialog() src.updateUsrDialog()
return return
/obj/item/weapon/diseasedisk
name = "Blank GNA disk"
icon = 'cloning.dmi'
icon_state = "datadisk0"
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

View File

@@ -14,156 +14,132 @@
var/foodsupply = 0 var/foodsupply = 0
var/toxins = 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() /obj/machinery/disease2/incubator/attackby(var/obj/B as obj, var/mob/user as mob)
if (prob(25)) if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B,/obj/item/weapon/reagent_containers/syringe))
del(src)
meteorhit() if(src.beaker)
del(src) if(istype(beaker,/obj/item/weapon/reagent_containers/syringe))
return user << "A syringe is already loaded into the machine."
else
user << "A beaker is already loaded into the machine."
return
attackby(var/obj/B as obj, var/mob/user as mob) src.beaker = B
if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B,/obj/item/weapon/reagent_containers/syringe)) user.drop_item()
B.loc = src
if(src.beaker) if(istype(B,/obj/item/weapon/reagent_containers/syringe))
if(istype(beaker,/obj/item/weapon/reagent_containers/syringe)) user << "You add the syringe to the machine!"
user << "A syringe is already loaded into the machine." src.updateUsrDialog()
else else
user << "A beaker is already loaded into the machine." 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 return
src.beaker = B src.dish = B
user.drop_item() user.drop_item()
B.loc = src 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(istype(B,/obj/item/weapon/virusdish))
if(src.dish) user << "You add the dish to the machine!"
user << "A dish is already loaded into the machine." src.updateUsrDialog()
return
src.dish = B /obj/machinery/disease2/incubator/Topic(href, href_list)
user.drop_item() if(..()) return
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 (href_list["ejectchem"])
if(stat & BROKEN) return
if(usr.stat || usr.restrained()) return
if(!in_range(src, usr)) return
if (href_list["ejectchem"])
if(beaker)
beaker.loc = src.loc
beaker = null
if(!dish)
return
usr.machine = src
if (href_list["power"])
on = !on
if(on)
icon_state = "incubator_on"
else
icon_state = "incubator"
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.<BR>"
var/string = "Off"
if(on)
string = "On"
dat += "Power status : <A href='?src=\ref[src];power=1'>[string]</a>"
dat += "<BR>"
dat += "Food supply : [foodsupply]"
dat += "<BR>"
dat += "Radiation Levels : [radiation] RADS : <A href='?src=\ref[src];rad=1'>Radiate</a>"
dat += "<BR>"
dat += "Toxins : [toxins]"
dat += "<BR><BR>"
if(beaker) if(beaker)
dat += "Eject chemicals : <A href='?src=\ref[src];ejectchem=1'> Eject</a>" beaker.loc = src.loc
dat += "<BR>" beaker = null
if(dish) if(!dish)
dat += "Eject Virus dish : <A href='?src=\ref[src];ejectdish=1'> Eject</a>"
dat += "<BR>"
dat += "<BR><BR>"
dat += "<A href='?src=\ref[src];flush=1'>Flush system</a><BR>"
dat += "<A href='?src=\ref[src];close=1'>Close</A><BR>"
user << browse("<TITLE>Pathogenic incubator</TITLE>incubator menu:<BR><BR>[dat]", "window=incubator;size=575x400")
onclose(user, "incubator")
return return
usr.machine = src
if (href_list["power"])
on = !on
if(on)
icon_state = "incubator_on"
else
icon_state = "incubator"
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()
/obj/machinery/disease2/incubator/attack_hand(mob/user as mob)
if(stat & BROKEN)
return
user.machine = src
var/dat = ""
if(!dish)
dat = "Please insert dish into the incubator.<BR>"
var/string = "Off"
if(on)
string = "On"
dat += "Power status : <A href='?src=\ref[src];power=1'>[string]</a>"
dat += "<BR>"
dat += "Food supply : [foodsupply]"
dat += "<BR>"
dat += "Radiation Levels : [radiation] RADS : <A href='?src=\ref[src];rad=1'>Radiate</a>"
dat += "<BR>"
dat += "Toxins : [toxins]"
dat += "<BR><BR>"
if(beaker)
dat += "Eject chemicals : <A href='?src=\ref[src];ejectchem=1'> Eject</a>"
dat += "<BR>"
if(dish)
dat += "Eject Virus dish : <A href='?src=\ref[src];ejectdish=1'> Eject</a>"
dat += "<BR>"
dat += "<BR><BR>"
dat += "<A href='?src=\ref[src];flush=1'>Flush system</a><BR>"
dat += "<A href='?src=\ref[src];close=1'>Close</A><BR>"
user << browse("<TITLE>Pathogenic incubator</TITLE>incubator menu:<BR><BR>[dat]", "window=incubator;size=575x400")
onclose(user, "incubator")
return
/obj/machinery/disease2/incubator/process()
process() if(dish && on && dish.virus2)
use_power(50,EQUIP)
if(dish && on && dish.virus2) if(!powered(EQUIP))
use_power(50,EQUIP)
if(!powered(EQUIP))
on = 0
icon_state = "incubator"
if(foodsupply)
foodsupply -= 1
dish.growth += 3
if(dish.growth >= 100)
state("The [src.name] pings", "blue")
if(radiation)
if(radiation > 50 & prob(5))
dish.virus2.majormutate()
if(dish.info)
dish.info = "OUTDATED : [dish.info]"
dish.analysed = 0
state("The [src.name] beeps", "blue")
else if(prob(5))
dish.virus2.minormutate()
radiation -= 1
if(toxins && prob(5))
dish.virus2.infectionchance -= 1
if(toxins > 50)
dish.virus2 = null
else if(!dish)
on = 0 on = 0
icon_state = "incubator" icon_state = "incubator"
if(foodsupply)
foodsupply -= 1
dish.growth += 3
if(dish.growth >= 100)
state("The [src.name] pings", "blue")
if(radiation)
if(radiation > 50 & prob(5))
dish.virus2.majormutate()
if(dish.info)
dish.info = "OUTDATED : [dish.info]"
dish.analysed = 0
state("The [src.name] beeps", "blue")
else if(prob(5))
dish.virus2.minormutate()
radiation -= 1
if(toxins && prob(5))
dish.virus2.infectionchance -= 1
if(toxins > 50)
dish.virus2 = null
else if(!dish)
on = 0
icon_state = "incubator"
if(beaker) if(beaker)
if(!beaker.reagents.remove_reagent("virusfood",5)) if(!beaker.reagents.remove_reagent("virusfood",5))
foodsupply += 10 foodsupply += 10
if(!beaker.reagents.remove_reagent("toxin",1)) if(!beaker.reagents.remove_reagent("toxin",1))
toxins += 1 toxins += 1

View File

@@ -8,154 +8,86 @@
var/isolating = 0 var/isolating = 0
var/beaker = null var/beaker = null
ex_act(severity) /obj/machinery/disease2/isolator/attackby(var/W as obj, var/mob/user)
switch(severity) if(!istype(W,/obj/item/weapon/reagent_containers/syringe))
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 return
attackby(var/obj/item/weapon/reagent_containers/glass/B as obj, var/mob/user as mob) var/obj/item/weapon/reagent_containers/syringe/B = W
if(!istype(B,/obj/item/weapon/reagent_containers/syringe))
return
if(src.beaker) if(src.beaker)
user << "A syringe is already loaded into the machine." user << "A syringe is already loaded into the machine."
return return
src.beaker = B src.beaker = B
user.drop_item() user.drop_item()
B.loc = src B.loc = src
if(istype(B,/obj/item/weapon/reagent_containers/syringe)) if(istype(B,/obj/item/weapon/reagent_containers/syringe))
user << "You add the syringe to the machine!" user << "You add the syringe to the machine!"
src.updateUsrDialog() src.updateUsrDialog()
icon_state = "isolator_in" icon_state = "isolator_in"
Topic(href, href_list) /obj/machinery/disease2/isolator/Topic(href, href_list)
if(stat & BROKEN) return if(..()) return
if(usr.stat || usr.restrained()) return
if(!in_range(src, usr)) return
usr.machine = src usr.machine = src
if(!beaker) return if(!beaker) return
var/datum/reagents/R = beaker:reagents
if (href_list["isolate"])
var/datum/reagent/blood/Blood
for(var/datum/reagent/blood/B in R.reagent_list)
if(B)
Blood = B
break
if(Blood.data["virus2"])
virus2 = Blood.data["virus2"]
isolating = 40
icon_state = "isolator_processing"
src.updateUsrDialog()
return
else if (href_list["main"])
attack_hand(usr)
return
else if (href_list["eject"])
beaker:loc = src.loc
beaker = null
icon_state = "isolator"
src.updateUsrDialog()
return
/obj/machinery/disease2/isolator/attack_hand(mob/user as mob)
if(stat & BROKEN)
return
user.machine = src
var/dat = ""
if(!beaker)
dat = "Please insert sample into the isolator.<BR>"
dat += "<A href='?src=\ref[src];close=1'>Close</A>"
else if(isolating)
dat = "Isolating"
else
var/datum/reagents/R = beaker:reagents var/datum/reagents/R = beaker:reagents
dat += "<A href='?src=\ref[src];eject=1'>Eject</A><BR><BR>"
if (href_list["isolate"]) if(!R.total_volume)
var/datum/reagent/blood/Blood dat += "[beaker] is empty."
for(var/datum/reagent/blood/B in R.reagent_list)
if(B)
Blood = B
break
if(Blood.data["virus2"])
virus2 = Blood.data["virus2"]
isolating = 40
icon_state = "isolator_processing"
src.updateUsrDialog()
return
else if (href_list["main"])
attack_hand(usr)
return
else if (href_list["eject"])
beaker:loc = src.loc
beaker = null
icon_state = "isolator"
src.updateUsrDialog()
return
attack_hand(mob/user as mob)
if(stat & BROKEN)
return
user.machine = src
var/dat = ""
if(!beaker)
dat = "Please insert sample into the isolator.<BR>"
dat += "<A href='?src=\ref[src];close=1'>Close</A>"
else if(isolating)
dat = "Isolating"
else else
var/datum/reagents/R = beaker:reagents dat += "Contained reagents:<BR>"
dat += "<A href='?src=\ref[src];eject=1'>Eject</A><BR><BR>" for(var/datum/reagent/blood/G in R.reagent_list)
if(!R.total_volume) if(G.data["virus2"])
dat += "[beaker] is empty." dat += " [G.name]: <A href='?src=\ref[src];isolate=[G.id]'>Isolate</a>"
else else
dat += "Contained reagents:<BR>" dat += " <b>No pathogen</b>"
for(var/datum/reagent/blood/G in R.reagent_list) user << browse("<TITLE>Pathogenic Isolator</TITLE>Isolator menu:<BR><BR>[dat]", "window=isolator;size=575x400")
if(G.data["virus2"]) onclose(user, "isolator")
dat += " [G.name]: <A href='?src=\ref[src];isolate=[G.id]'>Isolate</a>" return
else
dat += " <b>No pathogen</b>"
user << browse("<TITLE>Pathogenic Isolator</TITLE>Isolator menu:<BR><BR>[dat]", "window=isolator;size=575x400")
onclose(user, "isolator")
return
/obj/machinery/disease2/isolator/process()
if(isolating > 0)
isolating -= 1
process() if(isolating == 0)
if(isolating > 0) var/obj/item/weapon/virusdish/d = new /obj/item/weapon/virusdish(src.loc)
isolating -= 1 d.virus2 = virus2.getcopy()
if(isolating == 0) virus2 = null
var/obj/item/weapon/virusdish/d = new /obj/item/weapon/virusdish(src.loc) icon_state = "isolator_in"
d.virus2 = virus2.getcopy()
virus2 = null
icon_state = "isolator_in"
/obj/item/weapon/virusdish
name = "Virus containment/growth dish"
icon = 'items.dmi'
icon_state = "implantcase-b"
var/datum/disease2/disease/virus2 = null
var/growth = 0
var/info = 0
var/analysed = 0
reagents = list()
/obj/item/weapon/virusdish/random
name = "Virus Sample"
/obj/item/weapon/virusdish/random/New()
..()
// add a random virus to this dish
src.virus2 = new /datum/disease2/disease
src.virus2.makerandom()
growth = rand(5, 50)
/obj/item/weapon/virusdish/attackby(var/obj/item/weapon/W as obj,var/mob/living/carbon/user as mob)
if(istype(W,/obj/item/weapon/hand_labeler) || istype(W,/obj/item/weapon/reagent_containers/syringe))
return
..()
if(prob(50))
user << "The dish shatters"
if(virus2.infectionchance > 0)
for(var/mob/living/carbon/target in view(null, src)) if(!target.virus2)
if(airborne_can_reach(src.loc, target.loc))
if(target.get_infection_chance())
infect_virus2(target,src.virus2)
del src
/obj/item/weapon/virusdish/examine()
usr << "This is a virus containment dish"
if(src.info)
usr << "It has the following information about its contents"
usr << src.info
/obj/machinery/proc/state(var/msg)
for(var/mob/O in hearers(src, null))
O.show_message("\icon[src] \blue [msg]", 2)

View File

@@ -1,30 +0,0 @@
/obj/machinery/disease2/monkeycloner
name = "Monkey dispensor"
icon = 'cloning.dmi'
icon_state = "pod_0"
density = 1
anchored = 1
var/cloning = 0
/obj/machinery/disease2/monkeycloner/attack_hand()
if(!cloning)
cloning = 150
icon_state = "pod_g"
/obj/machinery/disease2/monkeycloner/process()
if(stat & (NOPOWER|BROKEN))
return
use_power(500)
//src.updateDialog()
if(cloning)
cloning -= 1
if(!cloning)
new /mob/living/carbon/monkey(src.loc)
icon_state = "pod_0"
return