#define SOLID 1 #define LIQUID 2 #define GAS 3 /obj/machinery/chem_dispenser/ name = "chem dispenser" density = 1 anchored = 1 icon = 'chemical.dmi' icon_state = "dispenser" var/energy = 25 var/max_energy = 25 var/list/dispensable_reagents = list("water","oxygen","nitrogen","hydrogen","potassium","sodium","mercury","copper","sulfur","carbon","chlorine","fluorine","phosphorus","lithium","acid","radium","iron","aluminium","silicon","plasma","sugar","ethanol") proc recharge() if(stat & BROKEN) return if(energy != max_energy) energy++ use_power(50) spawn(600) recharge() New() recharge() ex_act(severity) switch(severity) if(1.0) del(src) return if(2.0) if (prob(50)) del(src) return blob_act() if (prob(50)) del(src) meteorhit() del(src) return Topic(href, href_list) if(stat & BROKEN) return if(usr.stat || usr.restrained()) return if(!in_range(src, usr)) return usr.machine = src if (href_list["dispense"]) if(!energy) var/dat = "Not enough energy.
OK" usr << browse("Chemical DispenserChemical dispenser:
Energy = [energy]/[max_energy]

[dat]", "window=chem_dispenser") return var/id = href_list["dispense"] var/obj/item/weapon/reagent_containers/glass/dispenser/G = new/obj/item/weapon/reagent_containers/glass/dispenser(src.loc) switch(text2num(href_list["state"])) if(LIQUID) G.icon_state = "liquid" if(GAS) G.icon_state = "vapour" if(SOLID) G.icon_state = "solid" G.name += " ([lowertext(href_list["name"])])" G.reagents.add_reagent(id,30) energy-- src.updateUsrDialog() return else usr << browse(null, "window=chem_dispenser") return src.add_fingerprint(usr) return attack_ai(mob/user as mob) return src.attack_hand(user) attack_paw(mob/user as mob) return src.attack_hand(user) attack_hand(mob/user as mob) if(stat & BROKEN) return user.machine = src var/dat = "" for(var/re in dispensable_reagents) for(var/da in typesof(/datum/reagent) - /datum/reagent) var/datum/reagent/temp = new da() if(temp.id == re) dat += "[temp.name]
" dat += "[temp.description]

" user << browse("Chemical DispenserChemical dispenser:
Energy = [energy]/[max_energy]

[dat]", "window=chem_dispenser") onclose(user, "chem_dispenser") return ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /obj/machinery/chem_master/ name = "ChemMaster 3000" density = 1 anchored = 1 icon = 'chemical.dmi' icon_state = "mixer0" var/beaker = null var/mode = 0 var/condi = 0 New() var/datum/reagents/R = new/datum/reagents(50) reagents = R R.my_atom = src ex_act(severity) switch(severity) if(1.0) del(src) return if(2.0) if (prob(50)) del(src) return blob_act() if (prob(50)) del(src) meteorhit() del(src) return attackby(var/obj/item/weapon/reagent_containers/glass/B as obj, var/mob/user as mob) if(!istype(B, /obj/item/weapon/reagent_containers/glass)) return if(src.beaker) user << "A beaker is already loaded into the machine." return src.beaker = B user.drop_item() B.loc = src user << "You add the beaker to the machine!" src.updateUsrDialog() icon_state = "mixer1" Topic(href, href_list) if(stat & BROKEN) return if(usr.stat || usr.restrained()) return if(!in_range(src, usr)) return usr.machine = src if(!beaker) return var/datum/reagents/R = beaker:reagents if (href_list["analyze"]) var/dat = "" if(!condi) dat += "Chemmaster 3000Chemical infos:

Name:
[href_list["name"]]

Description:
[href_list["desc"]]


(Back)" else dat += "Condimaster 3000Condiment infos:

Name:
[href_list["name"]]

Description:
[href_list["desc"]]


(Back)" usr << browse(dat, "window=chem_master;size=575x400") return else if (href_list["add1"]) R.remove_reagent(href_list["add1"], 1) //Remove/add used instead of trans_to since we're moving a specific reagent. reagents.add_reagent(href_list["add1"], 1) else if (href_list["add5"]) R.remove_reagent(href_list["add5"], 5) reagents.add_reagent(href_list["add5"], 5) else if (href_list["add10"]) R.remove_reagent(href_list["add10"], 10) reagents.add_reagent(href_list["add10"], 10) else if (href_list["addall"]) var/temp_amt = R.get_reagent_amount(href_list["addall"]) reagents.add_reagent(href_list["addall"], temp_amt) R.del_reagent(href_list["addall"]) else if (href_list["remove1"]) reagents.remove_reagent(href_list["remove1"], 1) if(mode) R.add_reagent(href_list["remove1"], 1) else if (href_list["remove5"]) reagents.remove_reagent(href_list["remove5"], 5) if(mode) R.add_reagent(href_list["remove5"], 5) else if (href_list["remove10"]) reagents.remove_reagent(href_list["remove10"], 10) if(mode) R.add_reagent(href_list["remove10"], 10) else if (href_list["removeall"]) if(mode) var/temp_amt = reagents.get_reagent_amount(href_list["removeall"]) R.add_reagent(href_list["removeall"], temp_amt) reagents.del_reagent(href_list["removeall"]) else if (href_list["toggle"]) if(mode) mode = 0 else mode = 1 else if (href_list["main"]) attack_hand(usr) return else if (href_list["eject"]) beaker:loc = src.loc beaker = null reagents.clear_reagents() icon_state = "mixer0" else if (href_list["createpill"]) var/obj/item/weapon/reagent_containers/pill/P = new/obj/item/weapon/reagent_containers/pill(src.loc) var/name = input(usr,"Name:","Name your pill!",reagents.get_master_reagent_name()) if(!name || name == " ") name = reagents.get_master_reagent_name() P.name = "[name] pill" reagents.trans_to(P,50) else if (href_list["createbottle"]) if(!condi) var/name = input(usr,"Name:","Name your bottle!",reagents.get_master_reagent_name()) var/obj/item/weapon/reagent_containers/glass/bottle/P = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc) if(!name || name == " ") name = reagents.get_master_reagent_name() P.name = "[name] bottle" reagents.trans_to(P,30) else var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(src.loc) reagents.trans_to(P,50) else usr << browse(null, "window=chem_master") src.updateUsrDialog() src.add_fingerprint(usr) return attack_ai(mob/user as mob) return src.attack_hand(user) attack_paw(mob/user as mob) return src.attack_hand(user) attack_hand(mob/user as mob) if(stat & BROKEN) return user.machine = src var/dat = "" if(!beaker) dat = "Please insert beaker.
" dat += "Close" else var/datum/reagents/R = beaker:reagents dat += "Eject beaker and Clear Buffer

" if(!R.total_volume) dat += "Beaker is empty." else dat += "Add to buffer:
" for(var/datum/reagent/G in R.reagent_list) dat += "[G.name] , [G.volume] Units - " dat += "(Analyze) " dat += "(1) " if(G.volume >= 5) dat += "(5) " if(G.volume >= 10) dat += "(10) " dat += "(All)
" if(!mode) dat += "
Transfer to disposal:
" else dat += "
Transfer to beaker:
" if(reagents.total_volume) for(var/datum/reagent/N in reagents.reagent_list) dat += "[N.name] , [N.volume] Units - " dat += "(Analyze) " dat += "(1) " if(N.volume >= 5) dat += "(5) " if(N.volume >= 10) dat += "(10) " dat += "(All)
" else dat += "Empty
" if(!condi) dat += "

Create pill (50 units max)
" dat += "Create bottle (30 units max)" else dat += "Create bottle (50 units max)" if(!condi) user << browse("Chemmaster 3000Chemmaster menu:

[dat]", "window=chem_master;size=575x400") else user << browse("Condimaster 3000Condimaster menu:

[dat]", "window=chem_master;size=575x400") onclose(user, "chem_master") return /obj/machinery/chem_master/condimaster name = "CondiMaster 3000" condi = 1 //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// /obj/machinery/computer/pandemic name = "PanD.E.M.I.C 2200" density = 1 anchored = 1 icon = 'chemical.dmi' icon_state = "mixer0" var/temphtml = "" var/wait = null var/obj/item/weapon/reagent_containers/glass/beaker = null set_broken() icon_state = (src.beaker?"mixer1_b":"mixer0_b") stat |= BROKEN power_change() if(stat & BROKEN) icon_state = (src.beaker?"mixer1_b":"mixer0_b") else if(powered()) icon_state = (src.beaker?"mixer1":"mixer0") stat &= ~NOPOWER else spawn(rand(0, 15)) src.icon_state = (src.beaker?"mixer1_nopower":"mixer0_nopower") stat |= NOPOWER Topic(href, href_list) if(stat & (NOPOWER|BROKEN)) return if(usr.stat || usr.restrained()) return if(!in_range(src, usr)) return usr.machine = src if(!beaker) return if (href_list["create_vaccine"]) if(!src.wait) var/obj/item/weapon/reagent_containers/glass/bottle/B = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc) var/vaccine_type = text2path(href_list["create_vaccine"])//the path is received as string - converting var/datum/disease/D = new vaccine_type var/name = input(usr,"Name:","Name the vaccine",D.name) if(!name || name == " ") name = D.name B.name = "[name] vaccine bottle" B.reagents.add_reagent("vaccine",15,vaccine_type) del(D) wait = 1 spawn(1200) src.wait = null else src.temphtml = "The replicator is not ready yet." src.updateUsrDialog() return else if (href_list["create_virus_culture"]) if(!wait) var/obj/item/weapon/reagent_containers/glass/bottle/B = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc) B.icon_state = "bottle3" var/type = text2path(href_list["create_virus_culture"])//the path is received as string - converting var/datum/disease/D = new type var/list/data = list("virus"=D) var/name = sanitize(input(usr,"Name:","Name the culture",D.name)) if(!name || name == " ") name = D.name B.name = "[name] culture bottle" B.desc = "A small bottle. Contains [D.agent] culture in synthblood medium." B.reagents.add_reagent("blood",20,data) src.updateUsrDialog() wait = 1 spawn(3000) src.wait = null else src.temphtml = "The replicator is not ready yet." src.updateUsrDialog() return else if (href_list["empty_beaker"]) beaker.reagents.clear_reagents() src.updateUsrDialog() return else if (href_list["eject"]) beaker:loc = src.loc beaker = null icon_state = "mixer0" src.updateUsrDialog() return else if(href_list["clear"]) src.temphtml = "" src.updateUsrDialog() return else usr << browse(null, "window=pandemic") src.updateUsrDialog() return src.add_fingerprint(usr) return attack_ai(mob/user as mob) return src.attack_hand(user) attack_paw(mob/user as mob) return src.attack_hand(user) attack_hand(mob/user as mob) if(stat & (NOPOWER|BROKEN)) return user.machine = src var/dat = "" if(src.temphtml) dat = "[src.temphtml]

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 dat += "

Blood sample data:

" dat += "Blood DNA: [(Blood.data["blood_DNA"]||"none")]
" dat += "Blood Type: [(Blood.data["blood_type"]||"none")]
" var/datum/disease/D = Blood.data["virus"] dat += "Agent of disease: [D?"[D.agent] - Create virus culture bottle":"none"]
" if(D) dat += "Common name: [(D.name||"none")]
" dat += "Possible cure: [(D.cure||"none")]
" 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" user << browse("[src.name]
[dat]", "window=pandemic;size=575x400") onclose(user, "pandemic") return attackby(var/obj/I as obj, var/mob/user as mob) if(istype(I, /obj/item/weapon/screwdriver)) playsound(src.loc, 'Screwdriver.ogg', 50, 1) if(do_after(user, 20)) if (src.stat & BROKEN) user << "\blue The broken glass falls out." var/obj/computerframe/A = new /obj/computerframe(src.loc) new /obj/item/weapon/shard(src.loc) var/obj/item/weapon/circuitboard/pandemic/M = new /obj/item/weapon/circuitboard/pandemic(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/computerframe/A = new /obj/computerframe( src.loc ) var/obj/item/weapon/circuitboard/pandemic/M = new /obj/item/weapon/circuitboard/pandemic(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) else if(istype(I, /obj/item/weapon/reagent_containers/glass)) if(stat & (NOPOWER|BROKEN)) return if(src.beaker) user << "A beaker is already loaded into the machine." return src.beaker = I user.drop_item() I.loc = src user << "You add the beaker to the machine!" src.updateUsrDialog() icon_state = "mixer1" else ..() return