From a3587dc81de5525c26cd2aac4bf18ec32a0e458c Mon Sep 17 00:00:00 2001 From: Chinsky Date: Wed, 19 Jun 2013 02:33:32 +0400 Subject: [PATCH] Adds new virology machine - centrifuge. Used for extracting virus samples or antibodies. Accepts only vials. --- baystation12.dme | 1 + .../reagents/reagent_containers/glass.dm | 3 +- code/modules/virus2/centrifuge.dm | 157 ++++++++++++++++++ icons/obj/virology.dmi | Bin 5796 -> 5167 bytes 4 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 code/modules/virus2/centrifuge.dm diff --git a/baystation12.dme b/baystation12.dme index abd8aeb6389..425d46bf57a 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1260,6 +1260,7 @@ #include "code\modules\virus2\antibodies.dm" #include "code\modules\virus2\curer.dm" #include "code\modules\virus2\disease2.dm" +#include "code\modules\virus2\centrifuge.dm" #include "code\modules\virus2\diseasesplicer.dm" #include "code\modules\virus2\dishincubator.dm" #include "code\modules\virus2\effect.dm" diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index b8e86ec0f97..a35eba0f818 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -31,7 +31,8 @@ /obj/machinery/disposal, /obj/machinery/apiary, /mob/living/simple_animal/cow, - /mob/living/simple_animal/hostile/retaliate/goat ) + /mob/living/simple_animal/hostile/retaliate/goat, + /obj/machinery/computer/centrifuge ) examine() set src in view() diff --git a/code/modules/virus2/centrifuge.dm b/code/modules/virus2/centrifuge.dm new file mode 100644 index 00000000000..a0330f796c8 --- /dev/null +++ b/code/modules/virus2/centrifuge.dm @@ -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 += "
Blood sample:" + dat += "
" + 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 += "
" + dat += "Antibodies: [antigens2string(B.data["antibodies"])]" + dat += "Isolate" + + var/list/virus = B.data["virus2"] + for (var/ID in virus) + var/datum/disease2/disease/V = virus[ID] + dat += "
pathogen #[V.uniqueID]" + dat += "Isolate" + else + dat += "Please check container contents." + dat += "
Eject container" + else + dat = "Please insert a container." + dat += "

" + + dat += "
" + + 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") \ No newline at end of file diff --git a/icons/obj/virology.dmi b/icons/obj/virology.dmi index 01b6e591e34d56a7c86c60967937e357e63fa593..02a426049bb07c2c46e8dbde55fecbcab91dfc72 100644 GIT binary patch literal 5167 zcmaiYc{o&G{QqU_vWJL>M6zZ{$fzhn_9)9p$-ZStTxKjK`@WMU`*<(5ebK*{ zi2-WkMx14#?nkhNwZD#&-@_-aKK`!WUH}l3pOK7Z=~OuJV&so`)H7kn3Vap+WU_Fx zl~lk$bB9M+UH{x%w6f{K#8_HQC-u-8*E%IjJx7<_hAELa&i|! z&qs6F_qgD9#UBywVxia`|vp1us+A2GwNYc zjI*9ig?S=DYN<2myzs3dL;N6p%@X_d1g8%U5l;7-C0d&|I1cV@)(4h_j%i�-cpp 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 literal 5796 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 pjQgQiIse