/obj/machinery/computer/med_data//TODO:SANITY name = "medical records console" desc = "This can be used to check medical records." icon_screen = "medcomp" icon_keyboard = "med_key" req_one_access = list(GLOB.access_medical, GLOB.access_forensics_lockers) circuit = /obj/item/weapon/circuitboard/computer/med_data var/obj/item/weapon/card/id/scan = null var/authenticated = null var/rank = null var/screen = null var/datum/data/record/active1 var/datum/data/record/active2 var/a_id = null var/temp = null var/printing = null //Sorting Variables var/sortBy = "name" var/order = 1 // -1 = Descending - 1 = Ascending light_color = LIGHT_COLOR_BLUE /obj/machinery/computer/med_data/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/weapon/card/id) && !scan) if(!user.drop_item()) return O.loc = src scan = O to_chat(user, "You insert [O].") else return ..() /obj/machinery/computer/med_data/attack_hand(mob/user) if(..()) return var/dat if(src.temp) dat = text("[src.temp]

Clear Screen") else dat = text("Confirm Identity: []
", src, (src.scan ? text("[]", src.scan.name) : "----------")) if(src.authenticated) switch(src.screen) if(1) dat += {" Search Records
List Records

Virus Database
Medbot Tracking

Record Maintenance
{Log Out}
"} if(2) dat += {"

Records:
"} if(!isnull(GLOB.data_core.general)) for(var/datum/data/record/R in sortRecord(GLOB.data_core.general, sortBy, order)) var/blood_type = "" var/b_dna = "" for(var/datum/data/record/E in GLOB.data_core.medical) if((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])) blood_type = E.fields["blood_type"] b_dna = E.fields["b_dna"] var/background if(R.fields["m_stat"] == "*Insane*" || R.fields["p_stat"] == "*Deceased*") background = "'background-color:#990000;'" else if(R.fields["p_stat"] == "*Unconscious*" || R.fields["m_stat"] == "*Unstable*") background = "'background-color:#CD6500;'" else if(R.fields["p_stat"] == "Physically Unfit" || R.fields["m_stat"] == "*Watch*") background = "'background-color:#3BB9FF;'" else background = "'background-color:#4F7529;'" dat += text("", background, src, R.fields["id"], R.fields["name"]) dat += text("", R.fields["id"]) dat += text("", R.fields["fingerprint"], b_dna) dat += text("", blood_type) dat += text("", R.fields["p_stat"]) dat += text("", R.fields["m_stat"]) dat += "
Name ID Fingerprints (F) | DNA (D) Blood Type Physical Status Mental Status
[][]F: []
D: []
[][][]

" // if(GLOB.data_core.general) // for(var/datum/data/record/R in sortRecord(GLOB.data_core.general)) // dat += "[R.fields["id"]]: [R.fields["name"]]
" // //Foreach goto(132) dat += text("
Back", src) if(3) dat += text("Records Maintenance
\nBackup To Disk
\nUpload From Disk
\nDelete All Records
\n
\nBack", src, src, src, src) if(4) dat += "" if(active1 in GLOB.data_core.general) if(istype(active1.fields["photo_front"], /obj/item/weapon/photo)) var/obj/item/weapon/photo/P1 = active1.fields["photo_front"] user << browse_rsc(P1.img, "photo_front") if(istype(active1.fields["photo_side"], /obj/item/weapon/photo)) var/obj/item/weapon/photo/P2 = active1.fields["photo_side"] user << browse_rsc(P2.img, "photo_side") dat += "" dat += "" dat += "" dat += "" dat += "" dat += "" if(config.mutant_races) dat += "" dat += "" dat += "" dat += "" else dat += "" dat += "" if(active2 in GLOB.data_core.medical) dat += "" dat += "" dat += "" dat += "" dat += "" dat += "" dat += "" dat += "" dat += "" //(per disease info placed in log/comment section) dat += "" dat += "" dat += "" var/counter = 1 while(src.active2.fields[text("com_[]", counter)]) dat += "" counter++ dat += "" dat += "" else dat += "" dat += "" dat += "" dat += "" dat += "
Medical Record
Name:[active1.fields["name"]]
ID:[active1.fields["id"]]
Sex: [active1.fields["sex"]] 
Age: [active1.fields["age"]] 
Species: [active1.fields["species"]] 
Fingerprint: [active1.fields["fingerprint"]] 
Physical Status: [active1.fields["p_stat"]] 
Mental Status: [active1.fields["m_stat"]] 
General Record Lost!

Medical Data
Blood Type: [active2.fields["blood_type"]] 
DNA: [active2.fields["b_dna"]] 

Minor Disabilities:

 [active2.fields["mi_dis"]] 
Details: [active2.fields["mi_dis_d"]] 

Major Disabilities:

 [active2.fields["ma_dis"]] 
Details: [active2.fields["ma_dis_d"]] 

Allergies:

 [active2.fields["alg"]] 
Details: [active2.fields["alg_d"]] 

Current Diseases:

 [active2.fields["cdi"]] 
Details: [active2.fields["cdi_d"]] 

Important Notes:

 [active2.fields["notes"]] 

Comments/Log
[active2.fields[text("com_[]", counter)]]
Delete Entry
Add Entry

Delete Record (Medical Only)
Medical Record Lost!

New Record
Print Record
Back
" if(5) dat += "
Virus Database
" for(var/Dt in typesof(/datum/disease/)) var/datum/disease/Dis = new Dt(0) if(istype(Dis, /datum/disease/advance)) continue // TODO (tm): Add advance diseases to the virus database which no one uses. if(!Dis.desc) continue dat += "
[Dis.name]" dat += "
Back" if(6) dat += "
Medical Robot Monitor
" dat += "Back" dat += "
Medical Robots:" var/bdat = null for(var/mob/living/simple_animal/bot/medbot/M in GLOB.living_mob_list) if(M.z != src.z) continue //only find medibots on the same z-level as the computer var/turf/bl = get_turf(M) if(bl) //if it can't find a turf for the medibot, then it probably shouldn't be showing up bdat += "[M.name] - \[[bl.x],[bl.y]\] - [M.on ? "Online" : "Offline"]
" if((!isnull(M.reagent_glass)) && M.use_beaker) bdat += "Reservoir: \[[M.reagent_glass.reagents.total_volume]/[M.reagent_glass.reagents.maximum_volume]\]
" else bdat += "Using Internal Synthesizer.
" if(!bdat) dat += "
None detected
" else dat += "
[bdat]" else else dat += text("{Log In}", src) var/datum/browser/popup = new(user, "med_rec", "Medical Records Console", 600, 400) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() return /obj/machinery/computer/med_data/Topic(href, href_list) . = ..() if(.) return . if(!(active1 in GLOB.data_core.general)) src.active1 = null if(!(active2 in GLOB.data_core.medical)) src.active2 = null if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr)) usr.set_machine(src) if(href_list["temp"]) src.temp = null if(href_list["scan"]) if(src.scan) if(ishuman(usr) && !usr.get_active_held_item()) usr.put_in_hands(scan) else scan.loc = get_turf(src) src.scan = null else var/obj/item/I = usr.get_active_held_item() if(istype(I, /obj/item/weapon/card/id)) if(!usr.drop_item()) return I.loc = src src.scan = I else if(href_list["logout"]) src.authenticated = null src.screen = null src.active1 = null src.active2 = null else if(href_list["choice"]) // SORTING! if(href_list["choice"] == "Sorting") // Reverse the order if clicked twice if(sortBy == href_list["sort"]) if(order == 1) order = -1 else order = 1 else // New sorting order! sortBy = href_list["sort"] order = initial(order) else if(href_list["login"]) if(issilicon(usr)) src.active1 = null src.active2 = null src.authenticated = 1 src.rank = "AI" src.screen = 1 else if(IsAdminGhost(usr)) src.active1 = null src.active2 = null src.authenticated = 1 src.rank = "Central Command" src.screen = 1 else if(istype(src.scan, /obj/item/weapon/card/id)) src.active1 = null src.active2 = null if(src.check_access(src.scan)) src.authenticated = src.scan.registered_name src.rank = src.scan.assignment src.screen = 1 if(src.authenticated) if(href_list["screen"]) src.screen = text2num(href_list["screen"]) if(src.screen < 1) src.screen = 1 src.active1 = null src.active2 = null else if(href_list["vir"]) var/type = href_list["vir"] var/datum/disease/Dis = new type(0) var/AfS = "" for(var/mob/M in Dis.viable_mobtypes) AfS += " [initial(M.name)];" src.temp = {"Name: [Dis.name]
Number of stages: [Dis.max_stages]
Spread: [Dis.spread_text] Transmission
Possible Cure: [(Dis.cure_text||"none")]
Affected Lifeforms:[AfS]

Notes: [Dis.desc]

Severity: [Dis.severity]"} else if(href_list["del_all"]) src.temp = text("Are you sure you wish to delete all records?
\n\tYes
\n\tNo
", src, src) else if(href_list["del_all2"]) investigate_log("[usr.name] ([usr.key]) has deleted all medical records.", "records") GLOB.data_core.medical.Cut() src.temp = "All records deleted." else if(href_list["field"]) var/a1 = src.active1 var/a2 = src.active2 switch(href_list["field"]) if("fingerprint") if(active1) var/t1 = stripped_input("Please input fingerprint hash:", "Med. records", src.active1.fields["fingerprint"], null) if(!canUseMedicalRecordsConsole(usr, t1, a1)) return src.active1.fields["fingerprint"] = t1 if("sex") if(active1) if(src.active1.fields["sex"] == "Male") src.active1.fields["sex"] = "Female" else src.active1.fields["sex"] = "Male" if("age") if(active1) var/t1 = input("Please input age:", "Med. records", src.active1.fields["age"], null) as num if(!canUseMedicalRecordsConsole(usr, t1, a1)) return src.active1.fields["age"] = t1 if("species") if(active1) var/t1 = stripped_input("Please input species name", "Med. records", src.active1.fields["species"], null) if(!canUseMedicalRecordsConsole(usr, t1, a1)) return active1.fields["species"] = t1 if("mi_dis") if(active2) var/t1 = stripped_input("Please input minor disabilities list:", "Med. records", src.active2.fields["mi_dis"], null) if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) return src.active2.fields["mi_dis"] = t1 if("mi_dis_d") if(active2) var/t1 = stripped_multiline_input("Please summarize minor dis.:", "Med. records", src.active2.fields["mi_dis_d"], null) if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) return src.active2.fields["mi_dis_d"] = t1 if("ma_dis") if(active2) var/t1 = stripped_input("Please input major diabilities list:", "Med. records", src.active2.fields["ma_dis"], null) if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) return src.active2.fields["ma_dis"] = t1 if("ma_dis_d") if(active2) var/t1 = stripped_multiline_input("Please summarize major dis.:", "Med. records", src.active2.fields["ma_dis_d"], null) if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) return src.active2.fields["ma_dis_d"] = t1 if("alg") if(active2) var/t1 = stripped_input("Please state allergies:", "Med. records", src.active2.fields["alg"], null) if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) return src.active2.fields["alg"] = t1 if("alg_d") if(active2) var/t1 = stripped_multiline_input("Please summarize allergies:", "Med. records", src.active2.fields["alg_d"], null) if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) return src.active2.fields["alg_d"] = t1 if("cdi") if(active2) var/t1 = stripped_input("Please state diseases:", "Med. records", src.active2.fields["cdi"], null) if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) return src.active2.fields["cdi"] = t1 if("cdi_d") if(active2) var/t1 = stripped_multiline_input("Please summarize diseases:", "Med. records", src.active2.fields["cdi_d"], null) if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) return src.active2.fields["cdi_d"] = t1 if("notes") if(active2) var/t1 = stripped_multiline_input("Please summarize notes:", "Med. records", src.active2.fields["notes"], null) if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) return src.active2.fields["notes"] = t1 if("p_stat") if(active1) src.temp = text("Physical Condition:
\n\t*Deceased*
\n\t*Unconscious*
\n\tActive
\n\tPhysically Unfit
", src, src, src, src) if("m_stat") if(active1) src.temp = text("Mental Condition:
\n\t*Insane*
\n\t*Unstable*
\n\t*Watch*
\n\tStable
", src, src, src, src) if("blood_type") if(active2) src.temp = text("Blood Type:
\n\tA- A+
\n\tB- B+
\n\tAB- AB+
\n\tO- O+
", src, src, src, src, src, src, src, src) if("b_dna") if(active2) var/t1 = stripped_input("Please input DNA hash:", "Med. records", src.active2.fields["b_dna"], null) if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) return src.active2.fields["b_dna"] = t1 if("show_photo_front") if(active1) if(active1.fields["photo_front"]) if(istype(active1.fields["photo_front"], /obj/item/weapon/photo)) var/obj/item/weapon/photo/P = active1.fields["photo_front"] P.show(usr) if("show_photo_side") if(active1) if(active1.fields["photo_side"]) if(istype(active1.fields["photo_side"], /obj/item/weapon/photo)) var/obj/item/weapon/photo/P = active1.fields["photo_side"] P.show(usr) else else if(href_list["p_stat"]) if(active1) switch(href_list["p_stat"]) if("deceased") src.active1.fields["p_stat"] = "*Deceased*" if("unconscious") src.active1.fields["p_stat"] = "*Unconscious*" if("active") src.active1.fields["p_stat"] = "Active" if("unfit") src.active1.fields["p_stat"] = "Physically Unfit" else if(href_list["m_stat"]) if(active1) switch(href_list["m_stat"]) if("insane") src.active1.fields["m_stat"] = "*Insane*" if("unstable") src.active1.fields["m_stat"] = "*Unstable*" if("watch") src.active1.fields["m_stat"] = "*Watch*" if("stable") src.active1.fields["m_stat"] = "Stable" else if(href_list["blood_type"]) if(active2) switch(href_list["blood_type"]) if("an") src.active2.fields["blood_type"] = "A-" if("bn") src.active2.fields["blood_type"] = "B-" if("abn") src.active2.fields["blood_type"] = "AB-" if("on") src.active2.fields["blood_type"] = "O-" if("ap") src.active2.fields["blood_type"] = "A+" if("bp") src.active2.fields["blood_type"] = "B+" if("abp") src.active2.fields["blood_type"] = "AB+" if("op") src.active2.fields["blood_type"] = "O+" else if(href_list["del_r"]) if(active2) src.temp = text("Are you sure you wish to delete the record (Medical Portion Only)?
\n\tYes
\n\tNo
", src, src) else if(href_list["del_r2"]) investigate_log("[usr.name] ([usr.key]) has deleted the medical records for [active1.fields["name"]].", "records") if(active2) qdel(active2) active2 = null else if(href_list["d_rec"]) active1 = find_record("id", href_list["d_rec"], GLOB.data_core.general) if(active1) active2 = find_record("id", href_list["d_rec"], GLOB.data_core.medical) if(!active2) active1 = null screen = 4 else if(href_list["new"]) if((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) ))) var/datum/data/record/R = new /datum/data/record( ) R.fields["name"] = src.active1.fields["name"] R.fields["id"] = src.active1.fields["id"] R.name = text("Medical Record #[]", R.fields["id"]) R.fields["blood_type"] = "Unknown" R.fields["b_dna"] = "Unknown" R.fields["mi_dis"] = "None" R.fields["mi_dis_d"] = "No minor disabilities have been diagnosed." R.fields["ma_dis"] = "None" R.fields["ma_dis_d"] = "No major disabilities have been diagnosed." R.fields["alg"] = "None" R.fields["alg_d"] = "No allergies have been detected in this patient." R.fields["cdi"] = "None" R.fields["cdi_d"] = "No diseases have been diagnosed at the moment." R.fields["notes"] = "No notes." GLOB.data_core.medical += R src.active2 = R src.screen = 4 else if(href_list["add_c"]) if(!(active2 in GLOB.data_core.medical)) return var/a2 = src.active2 var/t1 = stripped_multiline_input("Add Comment:", "Med. records", null, null) if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) return var/counter = 1 while(src.active2.fields[text("com_[]", counter)]) counter++ src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []
[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), GLOB.year_integer+540, t1) else if(href_list["del_c"]) if((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])])) src.active2.fields[text("com_[]", href_list["del_c"])] = "Deleted" else if(href_list["search"]) var/t1 = stripped_input(usr, "Search String: (Name, DNA, or ID)", "Med. records") if(!canUseMedicalRecordsConsole(usr, t1)) return src.active1 = null src.active2 = null t1 = lowertext(t1) for(var/datum/data/record/R in GLOB.data_core.medical) if((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"]))) src.active2 = R else //Foreach continue //goto(3229) if(!( src.active2 )) src.temp = text("Could not locate record [].", sanitize(t1)) else for(var/datum/data/record/E in GLOB.data_core.general) if((E.fields["name"] == src.active2.fields["name"] || E.fields["id"] == src.active2.fields["id"])) src.active1 = E else //Foreach continue //goto(3334) src.screen = 4 else if(href_list["print_p"]) if(!( src.printing )) src.printing = 1 GLOB.data_core.medicalPrintCount++ playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1) sleep(30) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc ) P.info = "
Medical Record - (MR-[GLOB.data_core.medicalPrintCount])

" if(active1 in GLOB.data_core.general) P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
", src.active1.fields["name"], src.active1.fields["id"], src.active1.fields["sex"], src.active1.fields["age"]) if(config.mutant_races) P.info += "\nSpecies: [active1.fields["species"]]
" P.info += text("\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", src.active1.fields["fingerprint"], src.active1.fields["p_stat"], src.active1.fields["m_stat"]) else P.info += "General Record Lost!
" if(active2 in GLOB.data_core.medical) P.info += text("
\n
Medical Data

\nBlood Type: []
\nDNA: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\n
Comments/Log

", src.active2.fields["blood_type"], src.active2.fields["b_dna"], src.active2.fields["mi_dis"], src.active2.fields["mi_dis_d"], src.active2.fields["ma_dis"], src.active2.fields["ma_dis_d"], src.active2.fields["alg"], src.active2.fields["alg_d"], src.active2.fields["cdi"], src.active2.fields["cdi_d"], src.active2.fields["notes"]) var/counter = 1 while(src.active2.fields[text("com_[]", counter)]) P.info += text("[]
", src.active2.fields[text("com_[]", counter)]) counter++ P.name = text("MR-[] '[]'", GLOB.data_core.medicalPrintCount, src.active1.fields["name"]) else P.info += "Medical Record Lost!
" P.name = text("MR-[] '[]'", GLOB.data_core.medicalPrintCount, "Record Lost") P.info += "" src.printing = null src.add_fingerprint(usr) src.updateUsrDialog() return /obj/machinery/computer/med_data/emp_act(severity) if(!(stat & (BROKEN|NOPOWER))) for(var/datum/data/record/R in GLOB.data_core.medical) if(prob(10/severity)) switch(rand(1,6)) if(1) if(prob(10)) R.fields["name"] = random_unique_lizard_name(R.fields["sex"],1) else R.fields["name"] = random_unique_name(R.fields["sex"],1) if(2) R.fields["sex"] = pick("Male", "Female") if(3) R.fields["age"] = rand(AGE_MIN, AGE_MAX) if(4) R.fields["blood_type"] = random_blood_type() if(5) R.fields["p_stat"] = pick("*Unconcious*", "Active", "Physically Unfit") if(6) R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable") continue else if(prob(1)) qdel(R) continue ..() /obj/machinery/computer/med_data/proc/canUseMedicalRecordsConsole(mob/user, message = 1, record1, record2) if(user) if(message) if(authenticated) if(user.canUseTopic(src)) if(!record1 || record1 == active1) if(!record2 || record2 == active2) return 1 return 0 /obj/machinery/computer/med_data/laptop name = "medical laptop" desc = "A cheap Nanotrasen medical laptop, it functions as a medical records computer. It's bolted to the table." icon_state = "laptop" icon_screen = "medlaptop" icon_keyboard = "laptop_key" clockwork = TRUE //it'd look weird