Files
2020-02-16 19:40:21 -08:00

257 lines
9.6 KiB
Plaintext

// disease reagent manipulator thing
/obj/submachine/virus_manipulator
name = "Virus Manipulator"
desc = "A device which alters bacteria and virii."
icon = 'icons/obj/objects.dmi'
icon_state = "DAn-off"
flags = NOSPLASH
anchored = 1
density = 1
var/obj/item/reagent_containers/glass/vial/active_vial = null
var/datavial = "No Vial Inserted"
var/datareagent = "N/A"
var/dataspread = "N/A"
var/datacurable = "N/A"
var/dataregress = "N/A"
var/datavaccine = "N/A"
var/datacure = "N/A"
var/dataprob = "N/A"
var/working = 0
New()
..()
src.overlays += image('icons/obj/objects.dmi', "DAn-Oe")
attack_ai(mob/user as mob)
return src.attack_hand(user)
attack_hand(var/mob/user as mob)
user.machine = src
if (!src.working)
var/dat = {"<B>Virus Manipulator</B><BR>
<HR><BR>
<B>Vial:</B> [datavial]<BR>
<B>Vial Contents:</B> [datareagent]<BR>
<HR><BR>
<B>Contagion Vector:</B> [dataspread]<BR>
<B>Strain Vulnerability:</B> [datacure]<BR>
<B>Antibiotic Resistance:</B> [datacurable]<BR>
<B>Immune System Resistance:</B> [dataregress]<BR>
<B>Infection Development Rate:</B> [dataprob]<BR>
<B>Crippled Infectiousness:</B> [datavaccine]<BR><BR>
<HR><BR>
<A href='?src=\ref[src];ops=1'>Attempt to Create Vaccine<BR>
<A href='?src=\ref[src];ops=2'>Mutate<BR>
<A href='?src=\ref[src];ops=3'>Refresh Report<BR>
<A href='?src=\ref[src];ops=4'>Eject Vial"}
user << browse(dat, "window=virusmanip;size=400x500")
onclose(user, "virusmanip")
else
var/dat = {"<B>Virus Manipulator</B><BR>
<HR><BR>
<B>Please wait. Work in progress.</B><BR>"}
user << browse(dat, "window=virusmanip;size=450x500")
onclose(user, "virusmanip")
Topic(href, href_list)
if(href_list["ops"])
var/operation = text2num(href_list["ops"])
if(operation == 1) // Attempt to Create Vaccine
if (src.datareagent == "N/A" || src.datareagent == "No virii detected")
for(var/mob/O in hearers(src, null))
O.show_message(text("<b>[]</b> states, 'Unable to begin process. No reagent detected.'", src), 1)
return
else if (src.datareagent == "Multiple virii detected")
for(var/mob/O in hearers(src, null))
O.show_message(text("<b>[]</b> states, 'Unable to begin process. Excess reagents detected.'", src), 1)
return
src.working = 1
src.icon_state = "DAn-on"
for(var/mob/O in hearers(src, null))
O.show_message(text("<b>[]</b> states, 'Commencing work.'", src), 1)
if(src.active_vial.reagents && src.active_vial.reagents.reagent_list.len)
for(var/current_id in src.active_vial.reagents.reagent_list)
var/datum/reagent/disease/current_disease = src.active_vial.reagents.reagent_list[current_id]
if(istype(current_disease))
if(prob(50))
current_disease.Rvaccine = rand(0,1)
if (current_disease.Rvaccine) src.datavaccine = "Yes"
else src.datavaccine = "No"
SPAWN_DBG(rand(100,150))
src.working = 0
src.icon_state = "DAn-off"
var/vacannounce
if (src.datavaccine == "Yes") vacannounce = "Vaccine created successfully"
else vacannounce = "Failed to create vaccine"
for(var/mob/O in hearers(src, null))
O.show_message(text("<b>[]</b> states, '[].'", src, vacannounce), 1)
src.updateUsrDialog()
if(operation == 2) // Mutate
if (src.datareagent == "N/A" || src.datareagent == "No virii detected")
for(var/mob/O in hearers(src, null))
O.show_message(text("<b>[]</b> states, 'Unable to begin process. No reagent detected.'", src), 1)
return
else if (src.datareagent == "Multiple virii detected")
for(var/mob/O in hearers(src, null))
O.show_message(text("<b>[]</b> states, 'Unable to begin process. Excess reagents detected.'", src), 1)
return
src.working = 1
src.icon_state = "DAn-on"
for(var/mob/O in hearers(src, null))
O.show_message(text("<b>[]</b> states, 'Commencing work.'", src), 1)
if(src.active_vial.reagents.reagent_list.len)
for(var/current_id in active_vial.reagents.reagent_list)
var/datum/reagent/disease/current_disease = active_vial.reagents.reagent_list[current_id]
if(istype(current_disease))
if(prob(40))
current_disease.Rspread = "Non-Contagious"
if (prob(20)) current_disease.Rspread = "Contact"
if (prob(10)) current_disease.Rspread = "Airborne"
src.dataspread = current_disease.Rspread
if(prob(40))
current_disease.Rcure = pick("Sleep", "Antibiotics", "Self-Curing")
if(prob(10)) current_disease.Rcure = pick("Beatings", "Burnings", "Electric Shock")
if(rand(1,5000) == 1) current_disease.Rcure = "Incurable"
src.datacure = current_disease.Rcure
if(prob(50))
current_disease.Rcurable = rand(0,1)
if (current_disease.Rcurable) src.datacurable = "No"
else src.datacurable = "Yes"
if(prob(50))
current_disease.Rregress = rand(0,1)
if (current_disease.Rregress) src.dataregress = "No"
else src.dataregress = "Yes"
if(prob(50))
current_disease.Rprob = rand(-3,3)
src.dataprob = current_disease.Rprob
SPAWN_DBG(rand(100,150))
src.working = 0
src.icon_state = "DAn-off"
for(var/mob/O in hearers(src, null))
O.show_message(text("<b>[]</b> states, 'Work complete.'", src), 1)
src.updateUsrDialog()
if(operation == 3) // Refresh Report
if (src.active_vial) src.datavial = src.active_vial.name
else
src.datavial = "No Vial Inserted"
src.datareagent = "N/A"
src.dataspread = "N/A"
src.datacure = "N/A"
src.datacurable = "N/A"
src.dataregress = "N/A"
src.datavaccine = "N/A"
src.dataprob = "N/A"
src.updateUsrDialog()
return
var/reagcount = 0
if(src.active_vial.reagents.reagent_list.len)
for(var/current_id in active_vial.reagents.reagent_list)
var/datum/reagent/disease/current_disease = active_vial.reagents.reagent_list[current_id]
if(istype(current_disease))
reagcount++
src.datareagent = current_disease.name
src.dataspread = current_disease.Rspread
src.datacure = current_disease.Rcure
if (current_disease.Rcurable) src.datacurable = "No"
else src.datacurable = "Yes"
if (current_disease.Rregress) src.dataregress = "No"
else src.dataregress = "Yes"
if (current_disease.Rvaccine) src.datavaccine = "Yes"
else src.datavaccine = "No"
if (reagcount > 1)
src.datareagent = "Multiple virii detected"
src.dataspread = "N/A"
src.datacure = "N/A"
src.dataprob = "N/A"
src.datacurable = "N/A"
src.dataregress = "N/A"
src.datavaccine = "N/A"
else
src.datareagent = "No virii detected"
src.dataspread = "N/A"
src.datacure = "N/A"
src.dataprob = "N/A"
src.datacurable = "N/A"
src.dataregress = "N/A"
src.datavaccine = "N/A"
src.updateUsrDialog()
if(operation == 4) // Eject Vial
var/log_reagents = ""
if(src.active_vial && src.active_vial.reagents)
for(var/reagent_id in src.active_vial.reagents.reagent_list)
log_reagents += " [reagent_id]"
logTheThing("combat", usr, null, "modified <i>(<b>[log_reagents]</b>)</i> to [src.dataspread], cure = [src.datacure], curable = [src.datacurable], regress = [src.dataregress], speed =[src.dataprob], vaccine = [src.datavaccine]")
for(var/obj/item/reagent_containers/glass/vial/V in src.contents)
V.set_loc(get_turf(src))
src.active_vial = null
src.datavial = "No Vial Inserted"
src.datareagent = "N/A"
src.dataspread = "N/A"
src.datacure = "N/A"
src.dataprob = "N/A"
src.datacurable = "N/A"
src.dataregress = "N/A"
src.datavaccine = "N/A"
src.overlays -= image('icons/obj/objects.dmi', "DAn-Of")
src.overlays += image('icons/obj/objects.dmi', "DAn-Oe")
src.updateUsrDialog()
src.updateUsrDialog()
attackby(var/obj/item/W as obj, var/mob/user as mob)
if (src.working)
boutput(user, "<span style=\"color:red\">The manipulator is busy!</span>")
return
if(istype(W, /obj/item/reagent_containers/glass/vial))
if(src.active_vial)
boutput(user, "<span style=\"color:red\">A vial is already loaded into the manipulator.</span>")
return
boutput(user, "<span style=\"color:blue\">You add the [W] to the manipulator!</span>")
src.datavial = W.name
src.active_vial = W
user.drop_item()
W.set_loc(src)
src.overlays -= image('icons/obj/objects.dmi', "DAn-Oe")
src.overlays += image('icons/obj/objects.dmi', "DAn-Of")
src.updateUsrDialog()
var/reagcount = 0
if(src.active_vial.reagents.reagent_list.len)
for(var/current_id in active_vial.reagents.reagent_list)
var/datum/reagent/disease/current_disease = active_vial.reagents.reagent_list[current_id]
if(istype(current_disease))
reagcount++
src.datareagent = current_disease.name
src.dataspread = current_disease.Rspread
src.datacure = current_disease.Rcure
src.dataprob = current_disease.Rprob
if (current_disease.Rcurable) src.datacurable = "No"
else src.datacurable = "Yes"
if (current_disease.Rregress) src.dataregress = "No"
else src.dataregress = "Yes"
if (current_disease.Rvaccine) src.datavaccine = "Yes"
else src.datavaccine = "No"
if (reagcount > 1)
src.datareagent = "Multiple virii detected"
src.dataspread = "N/A"
src.datacurable = "N/A"
src.dataregress = "N/A"
src.datavaccine = "N/A"
else
src.datareagent = "No virii detected"
src.dataspread = "N/A"
src.datacure = "N/A"
src.dataprob = "N/A"
src.datacurable = "N/A"
src.dataregress = "N/A"
src.datavaccine = "N/A"
else
boutput(user, "<span style=\"color:red\">The manipulator cannot accept that!</span>")
return