diff --git a/code/defines/obj/computer.dm b/code/defines/obj/computer.dm index a7a588842a..23148356dd 100644 --- a/code/defines/obj/computer.dm +++ b/code/defines/obj/computer.dm @@ -125,6 +125,8 @@ var/a_id = null var/temp = null var/printing = null + var/list/Perp + var/tempname = null /obj/machinery/computer/med_data/laptop diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index b8a3690adb..91f008508f 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -1257,6 +1257,7 @@ name = "fork" desc = "Pointy." icon_state = "fork" + var/obj/item/weapon/reagent_containers/food/snacks/bite /obj/item/weapon/kitchen/utensil/knife name = "knife" diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index d490f45f4b..3c200f6158 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -21,6 +21,7 @@ if(..()) return var/dat + if (src.temp) dat = text("[src.temp]

Clear Screen") else @@ -28,23 +29,94 @@ if (src.authenticated) switch(src.screen) if(1.0) + dat += "

" + dat += text("Search Records
", src) dat += {" -Search Records -
List Records -
Search DNA -
-
Virus Database -
Medbot Tracking -
-
Record Maintenance -
{Log Out}
-"} - if(2.0) - dat += "Record List:


" +

+ + + + +
Records:
+ + + + + + + + + "} for(var/datum/data/record/R in data_core.general) - dat += text("[]: []
", src, R, R.fields["id"], R.fields["name"]) - //Foreach goto(132) - dat += text("
Back", src) + var/physstat = R.fields["p_stat"] + var/background + switch(physstat) + if("*Deceased*") + background = "'background-color:#CD853F;'" + if("*Unconscious*") + background = "'background-color:#DC143C;'" + if("Physically Unfit") + background = "'background-color:#3BB9FF;'" + if("Active") + background = "'background-color:#00FF7F;'" + if("") + background = "'background-color:#FFFFFF;'" + physstat = "No Record." + dat += text("", background, src, R, R.fields["name"]) + dat += text("", R.fields["id"]) + dat += text("", R.fields["rank"]) + dat += text("", R.fields["fingerprint"]) + dat += text("", physstat) + dat += text("", R.fields["m_stat"]) + dat += "
NameIDRankFingerprintsPhysical StatusMental Status
[][][][][][]

" + dat += "Virus Database
" + dat += "Medbot Tracking
" + dat += "Record Maintenance

" + dat += "{Log Out}" + if(2.0) + if(!Perp.len) + dat += text("ERROR. String could not be located.

Back", src) + else + dat += {" + + "} + dat += text("", tempname) + dat += {" + +
Search Results for '[]':
+ + + + + + + + + "} + for(var/i=1, i<=Perp.len, i += 2) + var/datum/data/record/R = Perp[i] + var/physstat = R.fields["p_stat"] + var/background + switch(physstat) + if("*Deceased*") + background = "'background-color:#CD853F;'" + if("*Unconscious*") + background = "'background-color:#DC143C;'" + if("Physically Unfit") + background = "'background-color:#3BB9FF;'" + if("Active") + background = "'background-color:#00FF7F;'" + if("") + background = "'background-color:#FFFFFF;'" + physstat = "No Record." + dat += text("", background, src, R, R.fields["name"]) + dat += text("", R.fields["id"]) + dat += text("", R.fields["rank"]) + dat += text("", R.fields["fingerprint"]) + dat += text("", physstat) + dat += text("", R.fields["m_stat"]) + dat += "
NameIDRankFingerprintsPhysical StatusMental Status
[][][][][][]

" + dat += text("
Return to index.", src) if(3.0) dat += "Records Maintenance
" if(disk) @@ -81,19 +153,18 @@ else dat += "Medical Record Lost!
" dat += text("New Record

") - dat += text("\nPrint Record
\nBack
", src, src) + dat += text("\nPrint Record
\nBack
", src, src) if(5.0) - dat += "
Virus Database
" + dat += "Virus Database
" for(var/Dt in typesof(/datum/disease/)) var/datum/disease/Dis = new Dt(0) if(!Dis.desc) continue - dat += "
[Dis.name]" + dat += "[Dis.name]
" dat += "
Back" if(6.0) - dat += "
Medical Robot Monitor
" - dat += "Back" - dat += "
Medical Robots:" + dat += "Medical Robot Monitor
" + dat += "Medical Robots:
" var/bdat = null for(var/obj/machinery/bot/medbot/M in world) var/turf/bl = get_turf(M) @@ -104,14 +175,16 @@ bdat += "Using Internal Synthesizer.
" if(!bdat) - dat += "
None detected
" + dat += "None detected

" else - dat += "
[bdat]" + dat += "[bdat]
" + + dat += "Back" else else dat += text("{Log In}", src) - user << browse(text("Medical Records[]", dat), "window=med_rec") + user << browse(text("Medical Records[]", dat), "window=med_rec;size=600x400") onclose(user, "med_rec") return @@ -309,7 +382,7 @@ if("watch") src.active1.fields["m_stat"] = "*Watch*" if("stable") - src.active2.fields["m_stat"] = "Stable" + src.active1.fields["m_stat"] = "Stable" if (href_list["b_type"]) @@ -395,26 +468,33 @@ src.active2.fields[text("com_[]", href_list["del_c"])] = "Deleted" if (href_list["search"]) - var/t1 = input("Search String: (Name or ID)", "Med. records", null, null) as text + var/t1 = input("Search String: (Partial Name or ID or Fingerprints or DNA or Rank)", "Med. records", null, null) as text if ((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || ((!in_range(src, usr)) && (!istype(usr, /mob/living/silicon))))) return - src.active1 = null - src.active2 = null + Perp = new/list() t1 = lowertext(t1) + var/list/components = dd_text2list(t1, " ") + if(components.len > 5) + return //Lets not let them search too greedily. for(var/datum/data/record/R in data_core.general) - if ((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]))) - src.active1 = R - else - //Foreach continue //goto(3229) - if (!( src.active1 )) - src.temp = text("Could not locate record [].", t1) - else + var/temptext = R.fields["name"] + " " + R.fields["id"] + " " + R.fields["fingerprint"] + " " + R.fields["rank"] + for(var/datum/data/record/E in data_core.medical) - if ((E.fields["name"] == src.active1.fields["name"] || E.fields["id"] == src.active1.fields["id"])) - src.active2 = E - else - //Foreach continue //goto(3334) - src.screen = 4 + if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) + temptext += " " + E.fields["b_dna"] + + for(var/i = 1, i<=components.len, i++) + if(findtext(temptext,components[i])) + var/prelist = new/list(2) + prelist[1] = R + Perp += prelist + for(var/i = 1, i<=Perp.len, i+=2) + for(var/datum/data/record/E in data_core.medical) + var/datum/data/record/R = Perp[i] + if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])) + Perp[i+1] = E + tempname = t1 + src.screen = 2 if (href_list["print_p"]) if (!( src.printing )) @@ -437,24 +517,6 @@ P.info += "" P.name = "paper - 'Medical Record'" src.printing = null - - if (href_list["search_dna"]) - var/t1 = input("Search String: (DNA)", "Medical records", null, null) as text - if ((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || (!in_range(src, usr)) && (!istype(usr, /mob/living/silicon)))) - return - active1 = null - active2 = null - t1 = lowertext(t1) - for(var/datum/data/record/R in data_core.medical) - if (lowertext(R.fields["b_dna"]) == t1) - active2 = R - if (!( active2 )) - temp = text("Could not locate record [].", t1) - else - for(var/datum/data/record/E in data_core.general) - if ((E.fields["name"] == active2.fields["name"] || E.fields["id"] == active2.fields["id"])) - active1 = E - screen = 4 if (href_list["eject_disk"]) if (!disk) return diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 6866fae1a6..17915b82ef 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -18,28 +18,71 @@ KNIFE // FORK -/obj/item/weapon/kitchen/utensil/fork/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return ..() - - if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != "head") - return ..() - - if (src.icon_state == "forkloaded") //This is a poor way of handling it, but a proper rewrite of the fork to allow for a more varied foodening can happen when I'm in the mood. --NEO - if(M == user) - for(var/mob/O in viewers(M, null)) - O.show_message(text("\blue [] eats a delicious forkful of omelette!", user), 1) - M.reagents.add_reagent("nutriment", 1) +/obj/item/weapon/kitchen/utensil/fork/attack(mob/living/M as mob, mob/living/carbon/user as mob) + if(istype(M,/mob/living/carbon) || istype(M,/mob/living/simple_animal/livestock)) + if (bite) + if(M == user) + user.visible_message( \ + "\blue [user] eats a delicious forkful of [bite]!", \ + "\blue You eat a delicious forkful of [bite]!") + else + user.visible_message( \ + "\blue [user] feeds [M] a delicious forkful of [bite]!", \ + "\blue You feed [M] a delicious forkful of [bite]!") + spawn(0) + bite.reagents.reaction(M, INGEST) + bite.reagents.trans_to(M) + del(bite) + src.icon_state = "fork" + else if(user.zone_sel.selecting == "eyes") + if((user.mutations & CLUMSY) && prob(50)) + M = user + return eyestab(M, user) else - for(var/mob/O in viewers(M, null)) - O.show_message(text("\blue [] feeds [] a delicious forkful of omelette!", user, M), 1) - M.reagents.add_reagent("nutriment", 1) - src.icon_state = "fork" - return + user << "\red Your fork does not have any food on it." else - if((user.mutations & CLUMSY) && prob(50)) - M = user - return eyestab(M,user) + user << "\red You can't seem to feed [M]." + +/obj/item/weapon/kitchen/utensil/fork/afterattack(obj/item/weapon/reagent_containers/food/snacks/snack as obj, mob/living/carbon/user as mob) + if(istype(snack)) + if(bite) + user << "\red You already have [bite] on your fork." + else + bite = new snack.type(src) + icon_state = "forkloaded" + user.visible_message( \ + "[user] takes a piece of [bite] with their fork!", \ + "\blue You take a piece of [bite] with your fork!" \ + ) + if(bite.reagents && snack.reagents) //transfer bit's worth of reagents to + bite.reagents.clear_reagents() + if(snack.reagents.total_volume) + snack.reagents.reaction(src, TOUCH) // react "food" with fork + spawn(0) + if(snack.reagents.total_volume > snack.bitesize) + snack.reagents.trans_to(bite, snack.bitesize) + else + snack.reagents.trans_to(bite, snack.reagents.total_volume) + snack.bitecount++ + if(!snack.reagents.total_volume) + // due to the trash code being hard-coded to place in hand, do magic trick + // free active hand + user.drop_item(src) + + // consumption fills active hand, drop it back down + snack.On_Consume() + var/obj/trash = user.get_active_hand() + if(trash) + user.drop_item(trash) + trash.loc = get_turf(snack.loc) // move trash to snack's turf + + // put fork back in hand + user.put_in_hand(src) + user << "\red You grab the last bite of [snack]." + del(snack) + else + return ..() + diff --git a/code/modules/food/food.dm b/code/modules/food/food.dm index f4c354d07d..13eb9a4f94 100644 --- a/code/modules/food/food.dm +++ b/code/modules/food/food.dm @@ -453,33 +453,6 @@ ..() reagents.add_reagent("nutriment", 8) bitesize = 1 - attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/kitchen/utensil/fork)) - if (W.icon_state == "forkloaded") - user << "\red You already have omelette on your fork." - return - //W.icon = 'kitchen.dmi' - W.icon_state = "forkloaded" - /*if (herp) - world << "[user] takes a piece of omelette with his fork!"*/ - //Why this unecessary check? Oh I know, because I'm bad >:C - // Yes, you are. You griefing my badmin toys. --rastaf0 - user.visible_message( \ - "[user] takes a piece of omelette with their fork!", \ - "\blue You take a piece of omelette with your fork!" \ - ) - reagents.remove_reagent("nutriment", 1) - if (reagents.total_volume <= 0) - del(src) -/* - * Unsused. -/obj/item/weapon/reagent_containers/food/snacks/omeletteforkload - name = "Omelette Du Fromage" - desc = "That's all you can say!" - New() - ..() - reagents.add_reagent("nutriment", 1) -*/ /obj/item/weapon/reagent_containers/food/snacks/muffin name = "Muffin"