Adds new virology machine - centrifuge.

Used for extracting virus samples or antibodies.
Accepts only vials.
This commit is contained in:
Chinsky
2013-06-19 02:33:32 +04:00
parent 960a22ee43
commit a3587dc81d
4 changed files with 160 additions and 1 deletions

View File

@@ -1260,6 +1260,7 @@
#include "code\modules\virus2\antibodies.dm" #include "code\modules\virus2\antibodies.dm"
#include "code\modules\virus2\curer.dm" #include "code\modules\virus2\curer.dm"
#include "code\modules\virus2\disease2.dm" #include "code\modules\virus2\disease2.dm"
#include "code\modules\virus2\centrifuge.dm"
#include "code\modules\virus2\diseasesplicer.dm" #include "code\modules\virus2\diseasesplicer.dm"
#include "code\modules\virus2\dishincubator.dm" #include "code\modules\virus2\dishincubator.dm"
#include "code\modules\virus2\effect.dm" #include "code\modules\virus2\effect.dm"

View File

@@ -31,7 +31,8 @@
/obj/machinery/disposal, /obj/machinery/disposal,
/obj/machinery/apiary, /obj/machinery/apiary,
/mob/living/simple_animal/cow, /mob/living/simple_animal/cow,
/mob/living/simple_animal/hostile/retaliate/goat ) /mob/living/simple_animal/hostile/retaliate/goat,
/obj/machinery/computer/centrifuge )
examine() examine()
set src in view() set src in view()

View File

@@ -0,0 +1,157 @@
/obj/machinery/computer/centrifuge
name = "Isolation Centrifuge"
desc = "Used to separate things with different weight. Spin 'em round, round, right round."
icon = 'icons/obj/virology.dmi'
icon_state = "centrifuge"
var/curing
var/isolating
var/obj/item/weapon/reagent_containers/glass/beaker/vial/sample = null
var/datum/disease2/disease/virus2 = null
/obj/machinery/computer/centrifuge/attackby(var/obj/I as obj, var/mob/user as mob)
if(istype(I, /obj/item/weapon/screwdriver))
return ..(I,user)
if(istype(I,/obj/item/weapon/reagent_containers/glass/beaker/vial))
var/mob/living/carbon/C = user
if(!sample)
sample = I
C.drop_item()
I.loc = src
src.attack_hand(user)
return
/obj/machinery/computer/centrifuge/update_icon()
..()
if(! (stat & (BROKEN|NOPOWER)) && (isolating || curing))
icon_state = "centrifuge_moving"
/obj/machinery/computer/centrifuge/attack_hand(var/mob/user as mob)
if(..())
return
user.machine = src
var/dat= ""
if(curing)
dat = "Antibody isolation in progress"
else if(isolating)
dat = "Pathogen isolation in progress"
else
dat += "<BR>Blood sample:"
dat += "<br><table cellpadding='10'><tr><td>"
if(sample)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list
if(B)
dat += "Sample inserted."
if (B.data["antibodies"])
dat += "</td></tr><tr><td>"
dat += "Antibodies: [antigens2string(B.data["antibodies"])]"
dat += "</td><td><A href='?src=\ref[src];action=antibody'>Isolate</a>"
var/list/virus = B.data["virus2"]
for (var/ID in virus)
var/datum/disease2/disease/V = virus[ID]
dat += " </td></tr><tr><td> pathogen #[V.uniqueID]"
dat += "</td><td><A href='?src=\ref[src];action=isolate;isolate=[V.uniqueID]'>Isolate</a>"
else
dat += "Please check container contents."
dat += "</td></tr><tr><td><A href='?src=\ref[src];action=sample'>Eject container</a>"
else
dat = "Please insert a container."
dat += "</td></tr></table><br>"
dat += "<hr>"
user << browse(dat, "window=computer;size=400x500")
onclose(user, "computer")
return
/obj/machinery/computer/centrifuge/process()
..()
if(stat & (NOPOWER|BROKEN))
return
use_power(500)
if(curing)
curing -= 1
if(curing == 0)
if(sample)
cure()
update_icon()
if(isolating)
isolating -= 1
if(isolating == 0)
if(sample)
isolate()
update_icon()
return
/obj/machinery/computer/centrifuge/Topic(href, href_list)
if(..())
return
usr.machine = src
switch(href_list["action"])
if("antibody")
var/delay = 20
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list
if (!B)
state("\The [src.name] buzzes, \"No antibody carrier detected.\"", "blue")
return
if(sample.reagents.has_reagent("toxins"))
state("\The [src.name] beeps, \"Pathogen purging speed above nominal.\"", "blue")
delay = delay/2
return
curing = delay
playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1)
update_icon()
if("isolate")
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list
if (!B)
return
var/list/virus = virus_copylist(B.data["virus2"])
var/choice = href_list["isolate"];
if (choice in virus)
virus2 = virus[choice]
else
state("\The [src.name] buzzes, \"No such pathogen detected.\"", "blue")
return
isolating = 40
update_icon()
src.updateUsrDialog()
return
if("sample")
if(sample)
sample.loc = src.loc
sample = null
src.add_fingerprint(usr)
src.updateUsrDialog()
attack_hand(usr)
return
/obj/machinery/computer/centrifuge/proc/cure()
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list
if (!B)
return
var/list/data = list("antibodies" = B.data["antibodies"])
var/amt= sample.reagents.get_reagent_amount("blood")
sample.reagents.remove_reagent("blood",amt)
sample.reagents.add_reagent("antibodies",amt,data)
state("\The [src.name] pings", "blue")
/obj/machinery/computer/centrifuge/proc/isolate()
var/obj/item/weapon/virusdish/dish = new/obj/item/weapon/virusdish(src.loc)
dish.virus2 = virus2
state("\The [src.name] pings", "blue")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB