/obj/machinery/computer/pandemic name = "PanD.E.M.I.C 2200" desc = "Used to work with viruses." density = 1 anchored = 1 icon = 'icons/obj/chemical.dmi' icon_state = "mixer0" circuit = /obj/item/weapon/circuitboard/pandemic use_power = 1 idle_power_usage = 20 var/temp_html = "" var/wait = null var/obj/item/weapon/reagent_containers/beaker = null /obj/machinery/computer/pandemic/New() ..() update_icon() /obj/machinery/computer/pandemic/set_broken() icon_state = (beaker ? "mixer1_b" : "mixer0_b") overlays.Cut() stat |= BROKEN /obj/machinery/computer/pandemic/proc/GetVirusByIndex(index) if(beaker && beaker.reagents) if(beaker.reagents.reagent_list.len) var/datum/reagent/blood/BL = locate() in beaker.reagents.reagent_list if(BL) if(BL.data && BL.data["viruses"]) var/list/viruses = BL.data["viruses"] return viruses[index] return null /obj/machinery/computer/pandemic/proc/GetResistancesByIndex(index) if(beaker && beaker.reagents) if(beaker.reagents.reagent_list.len) var/datum/reagent/blood/BL = locate() in beaker.reagents.reagent_list if(BL) if(BL.data && BL.data["resistances"]) var/list/resistances = BL.data["resistances"] return resistances[index] return null /obj/machinery/computer/pandemic/proc/GetVirusTypeByIndex(index) var/datum/disease/D = GetVirusByIndex(index) if(D) return D.GetDiseaseID() return null /obj/machinery/computer/pandemic/proc/replicator_cooldown(waittime) wait = 1 update_icon() spawn(waittime) wait = null update_icon() playsound(loc, 'sound/machines/ping.ogg', 30, 1) /obj/machinery/computer/pandemic/update_icon() if(stat & BROKEN) icon_state = (beaker ? "mixer1_b" : "mixer0_b") return icon_state = "mixer[(beaker)?"1":"0"][(powered()) ? "" : "_nopower"]" if(wait) overlays.Cut() else overlays += "waitlight" /obj/machinery/computer/pandemic/Topic(href, href_list) if(..()) return usr.set_machine(src) if(!beaker) return if(href_list["create_vaccine"]) if(!wait) var/obj/item/weapon/reagent_containers/glass/bottle/B = new/obj/item/weapon/reagent_containers/glass/bottle(loc) if(B) B.pixel_x = rand(-3, 3) B.pixel_y = rand(-3, 3) var/path = GetResistancesByIndex(text2num(href_list["create_vaccine"])) var/vaccine_type = path var/vaccine_name = "Unknown" if(!ispath(vaccine_type)) if(archive_diseases[path]) var/datum/disease/D = archive_diseases[path] if(D) vaccine_name = D.name vaccine_type = path else if(vaccine_type) var/datum/disease/D = new vaccine_type(0, null) if(D) vaccine_name = D.name if(vaccine_type) B.name = "[vaccine_name] vaccine bottle" B.reagents.add_reagent("vaccine", 15, list(vaccine_type)) replicator_cooldown(200) else temp_html = "The replicator is not ready yet." updateUsrDialog() return else if(href_list["create_virus_culture"]) if(!wait) var/type = GetVirusTypeByIndex(text2num(href_list["create_virus_culture"]))//the path is received as string - converting var/datum/disease/D = null if(!ispath(type)) D = GetVirusByIndex(text2num(href_list["create_virus_culture"])) var/datum/disease/advance/A = archive_diseases[D.GetDiseaseID()] if(A) D = new A.type(0, A) else if(type) if(type in diseases) // Make sure this is a disease D = new type(0, null) if(!D) return var/name = stripped_input(usr,"Name:","Name the culture",D.name,MAX_NAME_LEN) if(name == null || wait) return var/obj/item/weapon/reagent_containers/glass/bottle/B = new/obj/item/weapon/reagent_containers/glass/bottle(loc) B.icon_state = "bottle3" B.pixel_x = rand(-3, 3) B.pixel_y = rand(-3, 3) replicator_cooldown(50) var/list/data = list("viruses"=list(D)) B.name = "[name] culture bottle" B.desc = "A small bottle. Contains [D.agent] culture in synthblood medium." B.reagents.add_reagent("blood",20,data) updateUsrDialog() else temp_html = "The replicator is not ready yet." updateUsrDialog() return else if(href_list["empty_beaker"]) beaker.reagents.clear_reagents() updateUsrDialog() return else if(href_list["eject"]) beaker:loc = loc beaker = null icon_state = "mixer0" updateUsrDialog() return else if(href_list["clear"]) temp_html = "" updateUsrDialog() return else if(href_list["name_disease"]) var/new_name = stripped_input(usr, "Name the Disease", "New Name", "", MAX_NAME_LEN) if(!new_name) return if(..()) return var/id = GetVirusTypeByIndex(text2num(href_list["name_disease"])) if(archive_diseases[id]) var/datum/disease/advance/A = archive_diseases[id] A.AssignName(new_name) for(var/datum/disease/advance/AD in disease_master.processing) AD.Refresh() updateUsrDialog() else usr << browse(null, "window=pandemic") updateUsrDialog() return add_fingerprint(usr) return /obj/machinery/computer/pandemic/attack_hand(mob/user) if(..()) return user.set_machine(src) var/dat = "" if(temp_html) dat = "[temp_html]

Main Menu" else if(!beaker) dat += "Please insert beaker.
" dat += "Close" else var/datum/reagents/R = beaker.reagents var/datum/reagent/blood/Blood = null for(var/datum/reagent/blood/B in R.reagent_list) if(B) Blood = B break if(!R.total_volume||!R.reagent_list.len) dat += "The beaker is empty
" else if(!Blood) dat += "No blood sample found in beaker." else if(!Blood.data) dat += "No blood data found in beaker." else dat += "

Blood sample data:

" dat += "Blood DNA: [(Blood.data["blood_DNA"]||"none")]
" dat += "Blood Type: [(Blood.data["blood_type"]||"none")]
" if(Blood.data["viruses"]) var/list/vir = Blood.data["viruses"] if(vir.len) var/i = 0 for(var/datum/disease/D in Blood.data["viruses"]) i++ if(!(D.visibility_flags & HIDDEN_PANDEMIC)) if(istype(D, /datum/disease/advance)) var/datum/disease/advance/A = D D = archive_diseases[A.GetDiseaseID()] if(D && D.name == "Unknown") dat += "Name Disease
" if(!D) CRASH("We weren't able to get the advance disease from the archive.") dat += "Disease Agent: [D?"[D.agent] - Create virus culture bottle":"none"]
" dat += "Common name: [(D.name||"none")]
" dat += "Description: [(D.desc||"none")]
" dat += "Spread: [(D.spread_text||"none")]
" dat += "Possible cure: [(D.cure_text||"none")]

" if(istype(D, /datum/disease/advance)) var/datum/disease/advance/A = D dat += "Symptoms: " var/english_symptoms = list() for(var/datum/symptom/S in A.symptoms) english_symptoms += S.name dat += english_list(english_symptoms) else dat += "No detectable virus in the sample." else dat += "No detectable virus in the sample." dat += "
Contains antibodies to: " if(Blood.data["resistances"]) var/list/res = Blood.data["resistances"] if(res.len) dat += "
" else dat += "nothing
" else dat += "nothing
" dat += "
Eject beaker[((R.total_volume&&R.reagent_list.len) ? "-- Empty beaker":"")]
" dat += "Close" var/datum/browser/popup = new(user, "pandemic", name, 575, 400) popup.set_content(dat) popup.open(0) onclose(user, "pandemic") return /obj/machinery/computer/pandemic/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/reagent_containers) && (I.flags & OPENCONTAINER)) if(stat & (NOPOWER|BROKEN)) return if(beaker) to_chat(user, "A beaker is already loaded into the machine!") return if(!user.drop_item()) return beaker = I beaker.loc = src to_chat(user, "You add the beaker to the machine.") updateUsrDialog() icon_state = "mixer1" else if(istype(I, /obj/item/weapon/screwdriver)) if(beaker) beaker.loc = get_turf(src) ..() return else ..() return