From 8224fd408aaef8ac78fa468e80cee8afa00bcc66 Mon Sep 17 00:00:00 2001 From: "giacomand@gmail.com" Date: Thu, 12 Jul 2012 20:07:09 +0000 Subject: [PATCH] pAI Stuff pAI gets a better PDA that can actually receive messages from people. They can also instantly reply like everybody else now. Got rid of old pAI messaging code. pAI can toggle their receiver/signaller and their ringer. AI Stuff You can show the AI the notes on your PDA by holding it up to a camera. When you show up a paper/pda to the camera the AI can now click on your name to go to you, if you're near a camera. The AI's "track with camera" list was adjusted so that it is sorted by humans and then by other mobs. In short, the huge list of monkeys will be below the human master race. Made the AI's PDA name look nicer. When showing a piece of paper/your pda to a camera... people who are Unknown will not have a link; which would allow the AI to track them. Radio/Telecomms Stuff Made the" common server" and the "preset right receiver" listen for frequencies 144.1 to 148.9. This will allow people to use different frequencies to talk to eachother without bothering the common channel. It will also allow Revs and Cultists to work with each other; everything is still logged though so it still has risks. Increased the maximum frequency limit for handheld radios and intercoms. It will give you the option to just use station bounced radios on a higher frequency so that anyone with a headset can't simply tune in. All-In-One Grinder Created an All-In-One Grinder that is suppose to replace the blender, juicer and reagent grinder altogether. Meaning any department that has a juicer, blender and grinder will instead get this. It will help people be more independent from Chemistry by recycling food and plants. The All-In-One grinder can grind and juice. Grinding food that isn't part of a recipe will transfer the reagents of the food into the beaker. Juicing only works with certain foods. I've updated the UI a bit, it will now tell you what's in the beaker and I made it look nicer. Map I removed all blenders and juicers on the station and replaced them with the All-In-One grinder! Misc. Added myself to the admin.txt list. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4053 316c924e-a436-60f5-8080-3fe189b3f50e --- code/defines/mob/living/silicon/pai.dm | 3 +- code/game/machinery/camera.dm | 101 ++++--- .../machinery/telecomms/telecomunications.dm | 16 +- code/game/objects/devices/PDA/PDA.dm | 154 +++++----- code/game/objects/radio/headset.dm | 1 + code/game/objects/radio/radio.dm | 10 +- code/modules/chemical/Chemistry-Machinery.dm | 267 ++++++++++++----- code/modules/mob/living/silicon/ai/ai.dm | 2 +- code/modules/mob/living/silicon/ai/life.dm | 2 +- code/modules/mob/living/silicon/pai/pai.dm | 7 + .../mob/living/silicon/pai/software.dm | 94 ++---- config/admins.txt | 3 +- html/changelog.html | 16 +- maps/tgstation.2.0.9.dmm | 6 +- tgstation.dme | 281 ++++++++++++++++++ 15 files changed, 676 insertions(+), 287 deletions(-) diff --git a/code/defines/mob/living/silicon/pai.dm b/code/defines/mob/living/silicon/pai.dm index 2f1bcc2ade0..564bd1588f8 100644 --- a/code/defines/mob/living/silicon/pai.dm +++ b/code/defines/mob/living/silicon/pai.dm @@ -35,8 +35,7 @@ var/screen // Which screen our main window displays var/subscreen // Which specific function of the main screen is being displayed - var/tnote // Message history var used for PDA Messaging functions - var/poff = 0 // For PDA messanging. + var/obj/item/device/pda/pai/pda = null var/secHUD = 0 // Toggles whether the Security HUD is active or not var/medHUD = 0 // Toggles whether the Medical HUD is active or not diff --git a/code/game/machinery/camera.dm b/code/game/machinery/camera.dm index 90db45601cb..714b2a224aa 100644 --- a/code/game/machinery/camera.dm +++ b/code/game/machinery/camera.dm @@ -43,10 +43,13 @@ var/list/names = list() var/list/namecounts = list() - var/list/creatures = list() + var/list/humans = list() + var/list/others = list() for(var/mob/living/M in world) //Cameras can't track people wearing an agent card or a ninja hood. + var/human = 0 if(istype(M, /mob/living/carbon/human)) + human = 1 if(istype(M:wear_id, /obj/item/weapon/card/id/syndicate)) continue if(istype(M:head, /obj/item/clothing/head/helmet/space/space_ninja)&&!M:head:canremove) @@ -71,66 +74,71 @@ else names.Add(name) namecounts[name] = 1 + if(human) + humans[name] = M + else + others[name] = M - creatures[name] = M - //I blame : usage! - var/target_name = input(usr, "Which creature should you track?") as null|anything in sortList(creatures) + var/list/targets = sortList(humans) + sortList(others) + var/target_name = input(usr, "Which creature should you track?") as null|anything in targets if (!target_name) usr:cameraFollow = null return - var/mob/target = creatures[target_name] + var/mob/target = (isnull(humans[target_name]) ? others[target_name] : humans[target_name]) ai_actual_track(target) /mob/living/silicon/ai/proc/ai_actual_track(mob/living/target as mob) if(!istype(target)) return + var/mob/living/silicon/ai/U = usr - usr:cameraFollow = target - usr << text("Now tracking [] on camera.", target.name) - if (usr.machine == null) - usr.machine = usr + U.cameraFollow = target + U << text("Now tracking [] on camera.", target.name) + if (U.machine == null) + U.machine = U spawn (0) - while (usr:cameraFollow == target) - if (usr:cameraFollow == null) + while (U.cameraFollow == target) + if (U.cameraFollow == null) return else if (istype(target, /mob/living/carbon/human)) if(istype(target:wear_id, /obj/item/weapon/card/id/syndicate)) - usr << "Follow camera mode terminated." - usr:cameraFollow = null + U << "Follow camera mode terminated." + U.cameraFollow = null return if(istype(target:head, /obj/item/clothing/head/helmet/space/space_ninja)&&!target:head:canremove) - usr << "Follow camera mode terminated." - usr:cameraFollow = null + U << "Follow camera mode terminated." + U.cameraFollow = null return if(target.digitalcamo) - usr << "Follow camera mode terminated." - usr:cameraFollow = null + U << "Follow camera mode terminated." + U.cameraFollow = null return else if(istype(target.loc,/obj/effect/dummy)) - usr << "Follow camera mode ended." - usr:cameraFollow = null + U << "Follow camera mode ended." + U.cameraFollow = null return else if (!target || !istype(target.loc, /turf)) //in a closet - usr << "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb)." + U << "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb)." sleep(40) //because we're sleeping another second after this (a few lines down) continue - var/obj/machinery/camera/C = usr:current + var/obj/machinery/camera/C = U.current if ((C && istype(C, /obj/machinery/camera)) || C==null) if(isrobot(target)) - C = target:camera - usr:current = C - usr.reset_view(C) + var/mob/living/silicon/robot/R = target + C = R.camera + U.current = C + U.reset_view(C) else var/closestDist = -1 if (C!=null) if (C.status) closestDist = get_dist(C, target) - //usr << text("Dist = [] for camera []", closestDist, C.name) + //U << text("Dist = [] for camera []", closestDist, C.name) var/zmatched = 0 if (closestDist > 7 || closestDist == -1) //check other cameras @@ -144,18 +152,18 @@ if ((dist < closestDist) || (closestDist == -1)) closestDist = dist closest = C2 - //usr << text("Closest camera dist = [], for camera []", closestDist, closest.area.name) + //U << text("Closest camera dist = [], for camera []", closestDist, closest.area.name) if (closest != C) - usr:current = closest - usr.reset_view(closest) + U.current = closest + U.reset_view(closest) //use_power(50) if (zmatched == 0) - usr << "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb)." + U << "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb)." sleep(40) //because we're sleeping another second after this (a few lines down) else - usr << "Follow camera mode ended." - usr:cameraFollow = null + U << "Follow camera mode ended." + U.cameraFollow = null sleep(10) @@ -263,22 +271,35 @@ deactivate(user,0) /obj/machinery/camera/attackby(W as obj, user as mob) - ..() if (istype(W, /obj/item/weapon/wirecutters)) deactivate(user) - else if (istype(W, /obj/item/weapon/paper)) - var/obj/item/weapon/paper/X = W - user << "You hold a paper up to the camera ..." + else if ((istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/device/pda)) && isliving(user)) + var/mob/living/U = user + var/obj/item/weapon/paper/X = null + var/obj/item/device/pda/P = null + + var/itemname = "" + var/info = "" + if(istype(W, /obj/item/weapon/paper)) + X = W + itemname = X.name + info = X.info + else + P = W + itemname = P.name + info = P.note + U << "You hold \a [itemname] up to the camera ..." for(var/mob/living/silicon/ai/O in world) //if (O.current == src) - O << "[user] holds a paper up to one of your cameras ..." - O << browse(text("[][]", X.name, X.info), text("window=[]", X.name)) + if(U.name == "Unknown") O << "[U] holds \a [itemname] up to one of your cameras ..." + else O << "[U] holds \a [itemname] up to one of your cameras ..." + O << browse(text("[][]", itemname, info), text("window=[]", itemname)) for(var/mob/O in world) if (istype(O.machine, /obj/machinery/computer/security)) var/obj/machinery/computer/security/S = O.machine if (S.current == src) - O << "[user] holds a paper up to one of the cameras ..." - O << browse(text("[][]", X.name, X.info), text("window=[]", X.name)) + O << "[U] holds \a [itemname] up to one of the cameras ..." + O << browse(text("[][]", itemname, info), text("window=[]", itemname)) else if (istype(W, /obj/item/weapon/wrench)) //Adding dismantlable cameras to go with the constructable ones. --NEO if(src.status) user << "\red You can't dismantle a camera while it is active." @@ -327,6 +348,8 @@ for(var/mob/O in viewers(user, 3)) O.show_message(text("\blue The camera has been sliced apart by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2) del(src) + else + ..() return /obj/machinery/camera/proc/deactivate(user as mob, var/choice = 1) diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 74544a72634..d0be2e727e5 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -477,8 +477,13 @@ id = "Receiver B" network = "tcommsat" autolinkers = list("bus3", "bus4") // Bus units 3 and 4 - freq_listening = list(1459, 1353, 1357, 1359) // common, command, engineering, security + freq_listening = list(1353, 1357, 1359) //command, engineering, security + //Common and other radio frequencies for people to freely use + New() + for(var/i = 1441, i < 1489, i += 2) + freq_listening |= i + ..() /obj/machinery/telecomms/bus/preset_one @@ -551,9 +556,16 @@ common id = "Common Server" - freq_listening = list(1459) + freq_listening = list() autolinkers = list("common", "broadcasterB") + //Common and other radio frequencies for people to freely use + // 1441 to 1489 + New() + for(var/i = 1441, i < 1489, i += 2) + freq_listening |= i + ..() + command id = "Command Server" freq_listening = list(1353) diff --git a/code/game/objects/devices/PDA/PDA.dm b/code/game/objects/devices/PDA/PDA.dm index c29a9e71b91..45893fcd8d2 100644 --- a/code/game/objects/devices/PDA/PDA.dm +++ b/code/game/objects/devices/PDA/PDA.dm @@ -34,6 +34,7 @@ var/global/list/obj/item/device/pda/PDAs = list() var/mimeamt = 0 //How many silence left when infected with mime.exe var/note = "Congratulations, your station has chosen the Thinktronic 5230 Personal Data Assistant!" //Current note in the notepad function. var/cart = "" //A place to stick cartridge menu information + var/detonate = 1 // Can the PDA be blown up? var/obj/item/device/uplink/pda/uplink = null @@ -171,10 +172,16 @@ var/global/list/obj/item/device/pda/PDAs = list() default_cartridge = /obj/item/weapon/cartridge/medical icon_state = "pda-gene" -// Special AI PDA that cannot explode. +// Special AI/pAI PDAs that cannot explode. /obj/item/device/pda/ai icon_state = "NONE" ttone = "data" + detonate = 0 + +/obj/item/device/pda/pai + icon_state = "NONE" + ttone = "data" + detonate = 0 /obj/item/device/pda/ai/attack_self(mob/user as mob) if ((honkamt > 0) && (prob(60)))//For clown virus. @@ -203,13 +210,15 @@ var/global/list/obj/item/device/pda/PDAs = list() cartridge = new default_cartridge(src) /obj/item/device/pda/proc/can_use() + + if(istype(src, /obj/item/device/pda/ai)) + return 1 if(!ismob(loc)) return 0 + var/mob/M = loc - - if(!M.canmove && !isAI(M)) + if(!M.canmove) return 0 - if((src in M.contents) || ( istype(loc, /turf) && in_range(src, M) )) return 1 else @@ -350,7 +359,7 @@ var/global/list/obj/item/device/pda/PDAs = list() for (var/obj/item/device/pda/P in sortList(PDAs)) if (!P.owner||P.toff||P == src) continue dat += "
  • [P]" - if (istype(cartridge, /obj/item/weapon/cartridge/syndicate) && !istype(P, /obj/item/device/pda/ai)) + if (istype(cartridge, /obj/item/weapon/cartridge/syndicate) && P.detonate) dat += " (*Detonate*)" if (istype(cartridge, /obj/item/weapon/cartridge/clown)) dat += " (*Send Virus*)" @@ -724,95 +733,70 @@ var/global/list/obj/item/device/pda/PDAs = list() var/t = input(U, "Please enter message", name, null) as text t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN) - if (!t) + if (!t || !istype(P)) return if (!in_range(src, U) && loc != U) return - if(!istype(P)) return + if (isnull(P)||P.toff || toff) + return - if(istype(P, /obj/item/device/pda)) - if (isnull(P)||P.toff || toff) - return + if (last_text && world.time < last_text + 5) + return - if (last_text && world.time < last_text + 5) - return + last_text = world.time + // check if telecomms I/O route 1459 is stable + //var/telecomms_intact = telecomms_process(P.owner, owner, t) + var/obj/machinery/message_server/useMS = null + if(message_servers) + for (var/obj/machinery/message_server/MS in message_servers) + //PDAs are now dependant on the Message Server. + if(MS.active) + useMS = MS + break + if(useMS) // only send the message if it's stable + useMS.send_pda_message("[P.owner]","[owner]","[t]") - last_text = world.time - // check if telecomms I/O route 1459 is stable - //var/telecomms_intact = telecomms_process(P.owner, owner, t) - var/obj/machinery/message_server/useMS = null - if(message_servers) - for (var/obj/machinery/message_server/MS in message_servers) - //PDAs are now dependant on the Message Server. - if(MS.active) - useMS = MS - break - if(useMS) // only send the message if it's stable - useMS.send_pda_message("[P.owner]","[owner]","[t]") + tnote += "→ To [P.owner]:
    [t]
    " + P.tnote += "← From [owner] ([ownjob]):
    [t]
    " - tnote += "→ To [P.owner]:
    [t]
    " - P.tnote += "← From [owner] ([ownjob]):
    [t]
    " + if (prob(15)) //Give the AI a chance of intercepting the message + var/who = src.owner + if(prob(50)) + who = P:owner + for(var/mob/living/silicon/ai/ai in world) + // Allows other AIs to intercept the message but the AI won't intercept their own message. + if(ai.aiPDA != P && ai.aiPDA != src) + ai.show_message("Intercepted message from [who]: [t]") - if (prob(15)) //Give the AI a chance of intercepting the message - var/who = src.owner - if(prob(50)) - who = P:owner - for(var/mob/living/silicon/ai/ai in world) - // Allows other AIs to intercept the message but the AI won't intercept their own message. - if(ai.aiPDA != P && ai.aiPDA != src) - ai.show_message("Intercepted message from [who]: [t]") + if (!P.silent) + playsound(P.loc, 'twobeep.ogg', 50, 1) + for (var/mob/O in hearers(3, P.loc)) + if(!P.silent) O.show_message(text("\icon[P] *[P.ttone]*")) + //Search for holder of the PDA. + var/mob/living/L = null + if(P.loc && isliving(P.loc)) + L = P.loc + //Maybe they are a pAI! + else if(istype(P, /obj/item/device/pda/pai) && P.loc) + //Search through the location's contents + for(var/obj/item/device/paicard/Pcard in P.loc) + //If there's a Pcard there then get the mind inside + if(Pcard.pai) + var/mob/living/silicon/pai/pai = Pcard.pai + //Is it the pAI that is receiving the message? + if(pai.pda && pai.pda == P) + L = pai + break + if(L) + L << "\icon[P] Message from [src.owner] ([ownjob]), \"[t]\" (Reply)" - if (!P.silent) - playsound(P.loc, 'twobeep.ogg', 50, 1) - for (var/mob/O in hearers(3, P.loc)) - if(!P.silent) O.show_message(text("\icon[P] *[P.ttone]*")) - if( P.loc && isliving(P.loc) ) - var/mob/living/L = P.loc - L << "\icon[P] Message from [src.owner] ([ownjob]), \"[t]\" (Reply)" - - log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]") - P.overlays = null - P.overlays += image('pda.dmi', "pda-r") - else - U << "ERROR: Server isn't responding." - - // pAI Message + log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]") + P.overlays = null + P.overlays += image('pda.dmi', "pda-r") else + U << "ERROR: Server isn't responding." - //var/telecomms_intact = telecomms_process(P.owner, owner, t) - var/obj/machinery/message_server/useMS = null - if(message_servers) - for (var/obj/machinery/message_server/MS in message_servers) - //PDAs are now dependant on the Message Server. - if(MS.active) - useMS = MS - break - if(useMS) // only send the message if it's stable - useMS.send_pda_message("[P.owner]","[owner]","[t]") - tnote += "→ To [P]:
    [t]
    " - P.tnote += "← From [src]:
    [t]
    " - - - if (prob(15)) //Give the AI a chance of intercepting the message - var/who = src - if(prob(50)) - who = P - for (var/mob/living/silicon/ai/ai in world) - // Allows other AIs to intercept the message but the AI won't intercept their own message. - if(ai.aiPDA != P && ai.aiPDA != src) - ai.show_message("Intercepted message from [who]: [t]") - - if (!P.silent) - playsound(P.loc, 'twobeep.ogg', 50, 1) - for (var/mob/O in hearers(3, P.loc)) - if(!P.silent) O.show_message(text("\icon[P] *[P.ttone]*")) - if( P.loc && isliving(P.loc) ) - var/mob/living/L = P.loc - L << "\icon[P] Message from [src.owner] ([ownjob]), \"[t]\" (Reply)" - log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]") - else - U << "ERROR: Server isn't responding." /obj/item/device/pda/verb/verb_remove_id() set category = "Object" @@ -1012,7 +996,7 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/proc/explode() //This needs tuning. - + if(!src.detonate) return var/turf/T = get_turf(src.loc) if (ismob(loc)) @@ -1027,9 +1011,6 @@ var/global/list/obj/item/device/pda/PDAs = list() del(src) return -/obj/item/device/pda/ai/explode() - return // No explosions for the AI pda! - /obj/item/device/pda/Del() PDAs -= src if (src.id) @@ -1118,6 +1099,7 @@ var/global/list/obj/item/device/pda/PDAs = list() usr << "You can't do that because you are dead!" return if(!isnull(aiPDA)) + //0 aiPDA.silent = !aiPDA.silent usr << "PDA ringer toggled [(aiPDA.silent ? "Off" : "On")]!" else diff --git a/code/game/objects/radio/headset.dm b/code/game/objects/radio/headset.dm index 81b56c9a849..9e8cd74d9e3 100644 --- a/code/game/objects/radio/headset.dm +++ b/code/game/objects/radio/headset.dm @@ -14,6 +14,7 @@ var/translate_hive = 0 var/obj/item/device/encryptionkey/keyslot1 = null var/obj/item/device/encryptionkey/keyslot2 = null + maxf = 1489 /obj/item/device/radio/headset/New() ..() diff --git a/code/game/objects/radio/radio.dm b/code/game/objects/radio/radio.dm index 61f163e7233..a53ea5f53dd 100644 --- a/code/game/objects/radio/radio.dm +++ b/code/game/objects/radio/radio.dm @@ -24,6 +24,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use var/list/channels = list() //see communications.dm for full list. First channes is a "default" for :h var/subspace_transmission = 0 var/syndie = 0//Holder to see if it's a syndicate encrpyed radio + var/maxf = 1499 // "Example" = FREQ_LISTENING|FREQ_BROADCASTING flags = FPRINT | CONDUCT | TABLEPASS slot_flags = SLOT_BELT @@ -65,10 +66,11 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use if(freerange) if(frequency < 1200 || frequency > 1600) - frequency = sanitize_frequency(frequency) - else if (frequency < 1441 || frequency > 1489) + frequency = sanitize_frequency(frequency, maxf) + // The max freq is higher than a regular headset to decrease the chance of people listening in, if you use the higher channels. + else if (frequency < 1441 || frequency > maxf) world.log << "[src] ([type]) has a frequency of [frequency], sanitizing." - frequency = sanitize_frequency(frequency) + frequency = sanitize_frequency(frequency, maxf) set_frequency(frequency) @@ -181,7 +183,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use else if (href_list["freq"]) var/new_frequency = (frequency + text2num(href_list["freq"])) if (!freerange || (frequency < 1200 || frequency > 1600)) - new_frequency = sanitize_frequency(new_frequency) + new_frequency = sanitize_frequency(new_frequency, maxf) set_frequency(new_frequency) if (traitor_frequency && frequency == traitor_frequency) diff --git a/code/modules/chemical/Chemistry-Machinery.dm b/code/modules/chemical/Chemistry-Machinery.dm index d5dd8fe61f1..d51a1fdfeca 100644 --- a/code/modules/chemical/Chemistry-Machinery.dm +++ b/code/modules/chemical/Chemistry-Machinery.dm @@ -654,7 +654,8 @@ //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// /obj/machinery/reagentgrinder - name = "Reagent Grinder" + + name = "All-In-One Grinder" icon = 'kitchen.dmi' icon_state = "juicer1" layer = 2.9 @@ -663,28 +664,49 @@ use_power = 1 idle_power_usage = 5 active_power_usage = 100 + var/inuse = 0 var/obj/item/weapon/reagent_containers/beaker = null - var/global/list/allowed_items = list ( // reagent = amount, amount of 0 indicate to determine the amount from the reagents list, only implemented on plants for now + var/list/blend_items = list ( + + //Sheets /obj/item/stack/sheet/plasma = list("plasma" = 20), /obj/item/stack/sheet/uranium = list("uranium" = 20), /obj/item/stack/sheet/clown = list("banana" = 20), /obj/item/stack/sheet/silver = list("silver" = 20), /obj/item/stack/sheet/gold = list("gold" = 20), -/* - /obj/item/weapon/reagent_containers/food/snacks/grown/banana = list("banana" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/carrot = list("imidazoline" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/corn = list("cornoil" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap = list("psilocybin" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita = list("amatoxin" = 0, "psilocybin" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel = list("amatoxin" = 0, "psilocybin" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/chili = list("capsaicin" = 0), - /obj/item/weapon/reagent_containers/food/snacks/grown/icepepper = list("frostoil" = 0), -*/ /obj/item/weapon/grown/nettle = list("acid" = 0), /obj/item/weapon/grown/deathnettle = list("pacid" = 0), - /obj/item/weapon/reagent_containers/pill = list() + + //Blender Stuff + /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans = list("soymilk" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/tomato = list("ketchup" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/corn = list("cornoil" = 0), + + + + //All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.! + /obj/item/weapon/reagent_containers/pill = list(), + /obj/item/weapon/reagent_containers/food = list() ) + var/list/juice_items = list ( + + //Juicer Stuff + /obj/item/weapon/reagent_containers/food/snacks/grown/tomato = list("tomatojuice" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/carrot = list("carrotjuice" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/berries = list("berryjuice" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/banana = list("banana" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/potato = list("potato" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/lemon = list("lemonjuice" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/orange = list("orangejuice" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/lime = list("limejuice" = 0), + /obj/item/weapon/reagent_containers/food/snacks/watermelonslice = list("watermelonjuice" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/poisonberries = list("poisonberryjuice" = 0), + ) + + + var/list/holdingitems = list() + /obj/machinery/reagentgrinder/New() ..() beaker = new /obj/item/weapon/reagent_containers/glass/large(src) @@ -708,11 +730,14 @@ update_icon() src.updateUsrDialog() return 0 - if (!is_type_in_list(O, allowed_items)) + if (!is_type_in_list(O, blend_items) && !is_type_in_list(O, juice_items)) user << "Cannot refine into a reagent." return 1 user.before_take_item(O) + if(holdingitems && holdingitems.len == 0) + src.verbs += /obj/machinery/reagentgrinder/verb/eject O.loc = src + holdingitems += O src.updateUsrDialog() return 0 @@ -731,37 +756,43 @@ var/is_beaker_ready = 0 var/processing_chamber = "" var/beaker_contents = "" + var/dat = "" - for (var/i in allowed_items) - for (var/obj/item/O in src.contents) - if (!istype(O,i)) - continue - processing_chamber+= "some [O]
    " - break - if (!processing_chamber) - is_chamber_empty = 1 - processing_chamber = "Nothing." - if (!beaker) - beaker_contents = "\The [src] has no beaker attached." - else if (!beaker.reagents.total_volume) - beaker_contents = "\The [src] has attached an empty beaker." - is_beaker_ready = 1 - else if (beaker.reagents.total_volume < beaker.reagents.maximum_volume) - beaker_contents = "\The [src] has attached a beaker with something." - is_beaker_ready = 1 + if(!inuse) + for (var/obj/item/O in holdingitems) + processing_chamber += "\A [O.name]
    " + + if (!processing_chamber) + is_chamber_empty = 1 + processing_chamber = "Nothing." + if (!beaker) + beaker_contents = "No beaker attached.
    " + else + is_beaker_ready = 1 + beaker_contents = "The beaker contains:
    " + var/anything = 0 + for(var/datum/reagent/R in beaker.reagents.reagent_list) + anything = 1 + beaker_contents += "[R.volume] - [R.name]
    " + if(!anything) + beaker_contents += "Nothing
    " + + + dat = {" + Processing chamber contains:
    + [processing_chamber]
    + [beaker_contents]
    + "} + if (is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN))) + dat += "Grind the reagents
    " + dat += "Juice the reagents

    " + if(holdingitems && holdingitems.len > 0) + dat += "Eject the reagents
    " + if (beaker) + dat += "Detach the beaker
    " else - beaker_contents = "\The [src] has attached a beaker and the beaker is full!" - - var/dat = {" -Processing chamber contains:
    -[processing_chamber]
    -[beaker_contents]
    -"} - if (is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN))) - dat += "Turn on!
    " - if (beaker) - dat += "
    Detach a beaker!
    " - user << browse("Reagent Grinder[dat]", "window=reagentgrinder") + dat += "Please wait..." + user << browse("All-In-One Grinder[dat]", "window=reagentgrinder") onclose(user, "reagentgrinder") return @@ -773,7 +804,10 @@ switch(href_list["action"]) if ("grind") grind() - + if("juice") + juice() + if("eject") + eject() if ("detach") detach() src.updateUsrDialog() @@ -792,11 +826,42 @@ beaker = null update_icon() -/obj/machinery/reagentgrinder/proc/get_allowed_by_id(var/obj/item/weapon/grown/O) - for (var/i in allowed_items) - if (istype(O, i)) - return allowed_items[i] +/obj/machinery/reagentgrinder/verb/eject() + set category = "Object" + set name = "Eject contents from the grinder" + set src in oview(1) + if (usr.stat != 0) + return + if (holdingitems && holdingitems.len == 0) + return + src.verbs -= /obj/machinery/reagentgrinder/verb/eject + + for(var/obj/item/O in holdingitems) + O.loc = src.loc + holdingitems -= O + holdingitems = list() + +/obj/machinery/reagentgrinder/proc/is_allowed(var/obj/item/weapon/reagent_containers/O) + for (var/i in blend_items) + if(istype(O, i)) + return 1 + return 0 + +/obj/machinery/reagentgrinder/proc/get_allowed_by_id(var/obj/item/weapon/grown/O) + for (var/i in blend_items) + if (istype(O, i)) + return blend_items[i] + +/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_id(var/obj/item/weapon/reagent_containers/food/snacks/O) + for(var/i in blend_items) + if(istype(O, i)) + return blend_items[i] + +/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_id(var/obj/item/weapon/reagent_containers/food/snacks/O) + for(var/i in juice_items) + if(istype(O, i)) + return juice_items[i] /obj/machinery/reagentgrinder/proc/get_grownweapon_amount(var/obj/item/weapon/grown/O) if (!istype(O)) @@ -806,40 +871,94 @@ else return round(O.potency) -/obj/machinery/reagentgrinder/proc/get_grind_id(var/obj/item/stack/sheet/O) - for (var/i in allowed_items) - if (istype(O, i)) - return allowed_items[i] +/obj/machinery/reagentgrinder/proc/get_juice_amount(var/obj/item/weapon/reagent_containers/food/snacks/grown/O) + if (!istype(O)) + return 5 + else if (O.potency == -1) + return 5 + else + return round(5*sqrt(O.potency)) -/obj/machinery/reagentgrinder/proc/get_grind_amount(var/obj/item/stack/sheet/O) - return 20 +/obj/machinery/reagentgrinder/proc/remove_object(var/obj/item/O) + holdingitems -= O + del(O) -/obj/machinery/reagentgrinder/proc/grind() +/obj/machinery/reagentgrinder/proc/juice() power_change() if(stat & (NOPOWER|BROKEN)) return if (!beaker || beaker.reagents.total_volume >= beaker.reagents.maximum_volume) return playsound(src.loc, 'juicer.ogg', 20, 1) + inuse = 1 + spawn(50) + inuse = 0 + interact(usr) //Snacks - for (var/obj/item/weapon/reagent_containers/food/snacks/O in src.contents) + for (var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) break - var/allowed = get_allowed_by_id(O) + + var/allowed = get_allowed_juice_by_id(O) + if(isnull(allowed)) + break + for (var/r_id in allowed) + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - if (amount == 0) - if (O.reagents != null && O.reagents.has_reagent(r_id)) - beaker.reagents.add_reagent(r_id,min(O.reagents.get_reagent_amount(r_id), space)) - else - beaker.reagents.add_reagent(r_id,min(amount, space)) + var/amount = get_juice_amount(O) + + O.reagents.trans_id_to(beaker, r_id, min(amount, space)) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) break - del(O) + if(O.reagents.reagent_list.len == 0) + remove_object(O) + + + if(holdingitems && holdingitems.len == 0) + src.verbs -= /obj/machinery/reagentgrinder/verb/eject + +/obj/machinery/reagentgrinder/proc/grind() + + power_change() + if(stat & (NOPOWER|BROKEN)) + return + if (!beaker || beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + return + playsound(src.loc, 'blender.ogg', 50, 1) + inuse = 1 + spawn(60) + inuse = 0 + interact(usr) + //Snacks + for (var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems) + if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + + var/allowed = get_allowed_snack_by_id(O) + if(isnull(allowed)) + break + + for (var/r_id in allowed) + + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + var/amount = allowed[r_id] + if(amount == 0) + if (O.reagents != null && O.reagents.has_reagent("nutriment")) + beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("nutriment"), space)) + + else + O.reagents.trans_id_to(beaker, r_id, min(amount, space)) + + if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + + if(O.reagents.reagent_list.len == 0) + remove_object(O) + //Sheets - for (var/obj/item/stack/sheet/O in src.contents) + for (var/obj/item/stack/sheet/O in holdingitems) var/allowed = get_allowed_by_id(O) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) break @@ -851,10 +970,10 @@ if (space < amount) break if (i == round(O.amount, 1)) - del(O) + remove_object(O) break //Plants - for (var/obj/item/weapon/grown/O in src.contents) + for (var/obj/item/weapon/grown/O in holdingitems) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) break var/allowed = get_allowed_by_id(O) @@ -869,12 +988,16 @@ if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) break - del(O) - //Pills - Transfers reagents from pill into beaker - for (var/obj/item/weapon/reagent_containers/pill/O in src.contents) + remove_object(O) + + //Everything else - Transfers reagents from it into beaker + for (var/obj/item/weapon/reagent_containers/O in holdingitems) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) break var/amount = O.reagents.total_volume O.reagents.trans_to(beaker, amount) - if(!O.reagents) - del(O) + if(!O.reagents.total_volume) + remove_object(O) + + if(holdingitems && holdingitems.len == 0) + src.verbs -= /obj/machinery/reagentgrinder/verb/eject diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 44f49d0defc..c480bde39e8 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -30,7 +30,7 @@ aiPDA = new/obj/item/device/pda/ai(src) aiPDA.owner = name aiPDA.ownjob = "AI" - aiPDA.name = "AI - " + name + " (" + aiPDA.ownjob + ")" + aiPDA.name = name + " (" + aiPDA.ownjob + ")" if (istype(loc, /turf)) verbs.Add(/mob/living/silicon/ai/proc/ai_call_shuttle,/mob/living/silicon/ai/proc/ai_camera_track, \ diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index c5a70dac5f7..37b0513ba5d 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -16,7 +16,7 @@ if(aiPDA && aiPDA.name != name) aiPDA.owner = name - aiPDA.name = "AI - " + name + " (" + aiPDA.ownjob + ")" + aiPDA.name = name + " (" + aiPDA.ownjob + ")" if (src.malfhack) if (src.malfhack.aidisabled) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 7a8f6fad20a..7ae5a323057 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -8,6 +8,13 @@ card.radio = new /obj/item/device/radio(src.card) radio = card.radio + //PDA + pda = new(src) + spawn(5) + pda.ownjob = "Personal Assistant" + pda.owner = text("[]", src) + pda.name = pda.owner + " (" + pda.ownjob + ")" + pda.toff = 1 ..() /mob/living/silicon/pai/Login() diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index 641a4d84b58..afcf2e471a5 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -181,74 +181,17 @@ spawn CheckDNA(M, src) if("pdamessage") - if(href_list["target"]) - if(silence_time) - return alert("Communications circuits remain unitialized.") + if(!isnull(pda)) + if(href_list["toggler"]) + pda.toff = !pda.toff + else if(href_list["ringer"]) + pda.silent = !pda.silent + else if(href_list["target"]) + if(silence_time) + return alert("Communications circuits remain unitialized.") - var/t = input(usr, "Please enter message", name, null) as text - t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN) - if(!t) - return - var/target = locate(href_list["target"]) - - // PDA Message - if(istype(target, /obj/item/device/pda)) - var/obj/item/device/pda/P = target - if(isnull(P)||P.toff) - return - - var/AnsweringMS = 0 - for (var/obj/machinery/message_server/MS in message_servers) - if(MS.active) - MS.send_pda_message("[P.owner]","[src]","[t]") - AnsweringMS = 1 - break - - if(!AnsweringMS) - return alert("ERROR: No response from server!") - - tnote += "→ To [P.owner]:
    [t]
    " - P.tnote += "← From
    [src]:
    [t]
    " - - if(prob(15)) //Give the AI a chance of intercepting the message - var/who = src - if(prob(50)) - who = P:owner - for(var/mob/living/silicon/ai/ai in world) - ai.show_message("Intercepted message from [who]: [t]") - - if(!P.silent) - playsound(P.loc, 'twobeep.ogg', 50, 1) - for (var/mob/O in hearers(3, P.loc)) - O.show_message(text("\icon[P] *[P.ttone]*")) - - P.overlays = null - P.overlays += image('pda.dmi', "pda-r") - - // pAI Message - else - var/mob/living/silicon/pai/P = target - - var/AnsweringMS = 0 - for (var/obj/machinery/message_server/MS in message_servers) - MS.send_pda_message("[P]","[src]","[t]") - AnsweringMS = 1 - break - - if(!AnsweringMS) - return alert("ERROR: No response from server!") - - tnote += "→ To [P]:
    [t]
    " - P.tnote += "← From [src]:
    [t]
    " - - if (prob(15)) //Give the AI a chance of intercepting the message - var/who = src - if(prob(50)) - who = P - for (var/mob/living/silicon/ai/ai in world) - ai.show_message("Intercepted message from [who]: [t]") - - playsound(P.loc, 'twobeep.ogg', 50, 1) + var/target = locate(href_list["target"]) + pda.create_message(src, target) // Accessing medical records if("medicalrecord") @@ -309,6 +252,7 @@ /mob/living/silicon/pai/proc/softwareMenu() // Populate the right menu var/dat = "" + dat += "Refresh
    " // Built-in dat += "Directives
    " dat += "Radio Configuration
    " @@ -660,17 +604,19 @@ // Digital Messenger /mob/living/silicon/pai/proc/pdamessage() + var/dat = "

    Digital Messenger

    " + dat += {"Signal/Receiver Status: + [(pda.toff) ? " \[Off\]" : " \[On\]"]
    + Ringer Status: + [(pda.silent) ? " \[Off\]" : " \[On\]"]

    "} dat += "" dat += "

    " - dat += "Messages:
    [tnote]" + dat += "Messages:
    [pda.tnote]" return dat \ No newline at end of file diff --git a/config/admins.txt b/config/admins.txt index 49b0db4ed5a..05f1dc9c753 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -14,4 +14,5 @@ korphaeron - Game Master nodrak - Game Master carnwennan - Game Master ikarrus - Game Master -cheridan - Game Master \ No newline at end of file +cheridan - Game Master +giacomand - Game Master \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index cc6928641d2..9378e9a46d3 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -33,7 +33,7 @@
    - Coders: TLE, NEO, Errorage, muskets, veryinky, Skie, Noise, Numbers, Agouri, Noka, Urist McDorf, Uhangi, Darem, Mport, rastaf0, Doohl, Superxpdude, Rockdtben, ConstantA, Petethegoat, Kor, Polymorph, Carn, Nodrak, Donkie, Sieve
    + Coders: TLE, NEO, Errorage, muskets, veryinky, Skie, Noise, Numbers, Agouri, Noka, Urist McDorf, Uhangi, Darem, Mport, rastaf0, Doohl, Superxpdude, Rockdtben, ConstantA, Petethegoat, Kor, Polymorph, Carn, Nodrak, Donkie, Sieve, Giacom
    Spriters: Agouri, Cheridan, Cruazy Guest, Deeaych, Deuryn, Matty406, Microwave, ShiftyEyesShady, Skie, Uhangi, Veyveyr, Petethegoat, Kor, Ricotez, Ausops, TankNut
    Sounds: Skie, Lasty/Vinyl
    Thanks to: CDK Station devs, GoonStation devs, the original SpaceStation developers and Invisty for the title image @@ -47,7 +47,19 @@ should be listed in the changelog upon commit tho. Thanks. -->
    -

    11 July 2012

    +

    Thursday July 12th 2012

    +

    Giacom updated:

    +
      +
    • pAI gets a better PDA that can actually receive messages from people. They can also instantly reply like everybody else now and they can toggle their receiver/signaller/ringer.
    • +
    • You can show the AI the notes on your PDA by holding it up to a camera. When you show up a paper/pda to the camera the AI can now click on your name to go to you, if you're near a camera. People who are Unknown will not have a link; which would've allowed the AI to track them.
    • +
    • Made the" common server" and the "preset right receiver" listen for frequencies 144.1 to 148.9. This will allow people to use different frequencies to talk to eachother without bothering the common channel. It will also allow Revs and Cultists to work with each other; everything is still logged though so it still has risks.
    • +
    • Increased the maximum frequency limit for handheld radios and intercoms. It will give you the option to just use station bounced radios on a higher frequency so that anyone with a headset can't simply tune in.
    • +
    • Created an All-In-One Grinder that is suppose to replace the blender, juicer and reagent grinder all together. Meaning any department that has a juicer, blender and grinder will instead get this. It will help people be more independent from Chemistry by recycling foods and plants.
    • +
    +
    + +
    +

    Wednesday July 11th 2012

    Nodrak, Cheridan and Icarus updated:

    • Added a couple of Emergency Shield Projectors to Engineering secure storage. diff --git a/maps/tgstation.2.0.9.dmm b/maps/tgstation.2.0.9.dmm index eb4d9a4dc0c..0462631e03d 100644 --- a/maps/tgstation.2.0.9.dmm +++ b/maps/tgstation.2.0.9.dmm @@ -1813,7 +1813,7 @@ "aIS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar) "aIT" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar) "aIU" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar) -"aIV" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/light/small{dir = 8},/obj/structure/table,/obj/machinery/juicer,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/bar) +"aIV" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/bar) "aIW" = (/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/bar) "aIX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/bar) "aIY" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/bar) @@ -2343,7 +2343,7 @@ "aTc" = (/obj/effect/landmark/start{name = "Chef"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "aTd" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "aTe" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) -"aTf" = (/obj/structure/table,/obj/machinery/blender{pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/requests_console{department = "Kitchen"; departmentType = 2; pixel_x = 30; pixel_y = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"aTf" = (/obj/structure/table,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/requests_console{department = "Kitchen"; departmentType = 2; pixel_x = 30; pixel_y = 0},/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "aTg" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/hallway/primary/starboard) "aTh" = (/obj/machinery/atmospherics/pipe/simple{color = "blue"; icon_state = "intact-b-f"; level = 1; name = "pipe"},/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor,/area/hallway/primary/starboard) "aTi" = (/turf/simulated/floor,/area/hallway/primary/starboard) @@ -2410,7 +2410,7 @@ "aUr" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar) "aUs" = (/obj/structure/extinguisher_cabinet{pixel_x = 27},/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar) "aUt" = (/obj/machinery/door_control{id = "kitchen"; name = "Hallway Shutters"; pixel_x = -1; pixel_y = -24},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) -"aUu" = (/obj/structure/table,/obj/machinery/juicer,/obj/structure/disposalpipe/segment,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) +"aUu" = (/obj/structure/table,/obj/structure/disposalpipe/segment,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "aUv" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/hydroponics) "aUw" = (/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor,/area/hydroponics) "aUx" = (/obj/machinery/hydroponics,/turf/simulated/floor{dir = 1; icon_state = "green"},/area/hydroponics) diff --git a/tgstation.dme b/tgstation.dme index e6030cb5f7c..259e2db9b70 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5,6 +5,266 @@ // END_INTERNALS // BEGIN_FILE_DIR #define FILE_DIR . +#define FILE_DIR ".svn" +#define FILE_DIR ".svn/pristine" +#define FILE_DIR ".svn/pristine/00" +#define FILE_DIR ".svn/pristine/01" +#define FILE_DIR ".svn/pristine/02" +#define FILE_DIR ".svn/pristine/03" +#define FILE_DIR ".svn/pristine/04" +#define FILE_DIR ".svn/pristine/05" +#define FILE_DIR ".svn/pristine/06" +#define FILE_DIR ".svn/pristine/07" +#define FILE_DIR ".svn/pristine/08" +#define FILE_DIR ".svn/pristine/09" +#define FILE_DIR ".svn/pristine/0a" +#define FILE_DIR ".svn/pristine/0b" +#define FILE_DIR ".svn/pristine/0c" +#define FILE_DIR ".svn/pristine/0d" +#define FILE_DIR ".svn/pristine/0e" +#define FILE_DIR ".svn/pristine/0f" +#define FILE_DIR ".svn/pristine/10" +#define FILE_DIR ".svn/pristine/11" +#define FILE_DIR ".svn/pristine/12" +#define FILE_DIR ".svn/pristine/13" +#define FILE_DIR ".svn/pristine/14" +#define FILE_DIR ".svn/pristine/15" +#define FILE_DIR ".svn/pristine/16" +#define FILE_DIR ".svn/pristine/17" +#define FILE_DIR ".svn/pristine/18" +#define FILE_DIR ".svn/pristine/19" +#define FILE_DIR ".svn/pristine/1a" +#define FILE_DIR ".svn/pristine/1b" +#define FILE_DIR ".svn/pristine/1c" +#define FILE_DIR ".svn/pristine/1d" +#define FILE_DIR ".svn/pristine/1e" +#define FILE_DIR ".svn/pristine/1f" +#define FILE_DIR ".svn/pristine/20" +#define FILE_DIR ".svn/pristine/21" +#define FILE_DIR ".svn/pristine/22" +#define FILE_DIR ".svn/pristine/23" +#define FILE_DIR ".svn/pristine/24" +#define FILE_DIR ".svn/pristine/25" +#define FILE_DIR ".svn/pristine/26" +#define FILE_DIR ".svn/pristine/27" +#define FILE_DIR ".svn/pristine/28" +#define FILE_DIR ".svn/pristine/29" +#define FILE_DIR ".svn/pristine/2a" +#define FILE_DIR ".svn/pristine/2b" +#define FILE_DIR ".svn/pristine/2c" +#define FILE_DIR ".svn/pristine/2d" +#define FILE_DIR ".svn/pristine/2e" +#define FILE_DIR ".svn/pristine/2f" +#define FILE_DIR ".svn/pristine/30" +#define FILE_DIR ".svn/pristine/31" +#define FILE_DIR ".svn/pristine/32" +#define FILE_DIR ".svn/pristine/33" +#define FILE_DIR ".svn/pristine/34" +#define FILE_DIR ".svn/pristine/35" +#define FILE_DIR ".svn/pristine/36" +#define FILE_DIR ".svn/pristine/37" +#define FILE_DIR ".svn/pristine/38" +#define FILE_DIR ".svn/pristine/39" +#define FILE_DIR ".svn/pristine/3a" +#define FILE_DIR ".svn/pristine/3b" +#define FILE_DIR ".svn/pristine/3c" +#define FILE_DIR ".svn/pristine/3d" +#define FILE_DIR ".svn/pristine/3e" +#define FILE_DIR ".svn/pristine/3f" +#define FILE_DIR ".svn/pristine/40" +#define FILE_DIR ".svn/pristine/41" +#define FILE_DIR ".svn/pristine/42" +#define FILE_DIR ".svn/pristine/43" +#define FILE_DIR ".svn/pristine/44" +#define FILE_DIR ".svn/pristine/45" +#define FILE_DIR ".svn/pristine/46" +#define FILE_DIR ".svn/pristine/47" +#define FILE_DIR ".svn/pristine/48" +#define FILE_DIR ".svn/pristine/49" +#define FILE_DIR ".svn/pristine/4a" +#define FILE_DIR ".svn/pristine/4b" +#define FILE_DIR ".svn/pristine/4c" +#define FILE_DIR ".svn/pristine/4d" +#define FILE_DIR ".svn/pristine/4e" +#define FILE_DIR ".svn/pristine/4f" +#define FILE_DIR ".svn/pristine/50" +#define FILE_DIR ".svn/pristine/51" +#define FILE_DIR ".svn/pristine/52" +#define FILE_DIR ".svn/pristine/53" +#define FILE_DIR ".svn/pristine/54" +#define FILE_DIR ".svn/pristine/55" +#define FILE_DIR ".svn/pristine/56" +#define FILE_DIR ".svn/pristine/57" +#define FILE_DIR ".svn/pristine/58" +#define FILE_DIR ".svn/pristine/59" +#define FILE_DIR ".svn/pristine/5a" +#define FILE_DIR ".svn/pristine/5b" +#define FILE_DIR ".svn/pristine/5c" +#define FILE_DIR ".svn/pristine/5d" +#define FILE_DIR ".svn/pristine/5e" +#define FILE_DIR ".svn/pristine/5f" +#define FILE_DIR ".svn/pristine/60" +#define FILE_DIR ".svn/pristine/61" +#define FILE_DIR ".svn/pristine/62" +#define FILE_DIR ".svn/pristine/63" +#define FILE_DIR ".svn/pristine/64" +#define FILE_DIR ".svn/pristine/65" +#define FILE_DIR ".svn/pristine/66" +#define FILE_DIR ".svn/pristine/67" +#define FILE_DIR ".svn/pristine/68" +#define FILE_DIR ".svn/pristine/69" +#define FILE_DIR ".svn/pristine/6a" +#define FILE_DIR ".svn/pristine/6b" +#define FILE_DIR ".svn/pristine/6c" +#define FILE_DIR ".svn/pristine/6d" +#define FILE_DIR ".svn/pristine/6e" +#define FILE_DIR ".svn/pristine/6f" +#define FILE_DIR ".svn/pristine/70" +#define FILE_DIR ".svn/pristine/71" +#define FILE_DIR ".svn/pristine/72" +#define FILE_DIR ".svn/pristine/73" +#define FILE_DIR ".svn/pristine/74" +#define FILE_DIR ".svn/pristine/75" +#define FILE_DIR ".svn/pristine/76" +#define FILE_DIR ".svn/pristine/77" +#define FILE_DIR ".svn/pristine/78" +#define FILE_DIR ".svn/pristine/79" +#define FILE_DIR ".svn/pristine/7a" +#define FILE_DIR ".svn/pristine/7b" +#define FILE_DIR ".svn/pristine/7c" +#define FILE_DIR ".svn/pristine/7d" +#define FILE_DIR ".svn/pristine/7e" +#define FILE_DIR ".svn/pristine/7f" +#define FILE_DIR ".svn/pristine/80" +#define FILE_DIR ".svn/pristine/81" +#define FILE_DIR ".svn/pristine/82" +#define FILE_DIR ".svn/pristine/83" +#define FILE_DIR ".svn/pristine/84" +#define FILE_DIR ".svn/pristine/85" +#define FILE_DIR ".svn/pristine/86" +#define FILE_DIR ".svn/pristine/87" +#define FILE_DIR ".svn/pristine/88" +#define FILE_DIR ".svn/pristine/89" +#define FILE_DIR ".svn/pristine/8a" +#define FILE_DIR ".svn/pristine/8b" +#define FILE_DIR ".svn/pristine/8c" +#define FILE_DIR ".svn/pristine/8d" +#define FILE_DIR ".svn/pristine/8e" +#define FILE_DIR ".svn/pristine/8f" +#define FILE_DIR ".svn/pristine/90" +#define FILE_DIR ".svn/pristine/91" +#define FILE_DIR ".svn/pristine/92" +#define FILE_DIR ".svn/pristine/93" +#define FILE_DIR ".svn/pristine/94" +#define FILE_DIR ".svn/pristine/95" +#define FILE_DIR ".svn/pristine/96" +#define FILE_DIR ".svn/pristine/97" +#define FILE_DIR ".svn/pristine/98" +#define FILE_DIR ".svn/pristine/99" +#define FILE_DIR ".svn/pristine/9a" +#define FILE_DIR ".svn/pristine/9b" +#define FILE_DIR ".svn/pristine/9c" +#define FILE_DIR ".svn/pristine/9d" +#define FILE_DIR ".svn/pristine/9e" +#define FILE_DIR ".svn/pristine/9f" +#define FILE_DIR ".svn/pristine/a0" +#define FILE_DIR ".svn/pristine/a1" +#define FILE_DIR ".svn/pristine/a2" +#define FILE_DIR ".svn/pristine/a3" +#define FILE_DIR ".svn/pristine/a4" +#define FILE_DIR ".svn/pristine/a5" +#define FILE_DIR ".svn/pristine/a6" +#define FILE_DIR ".svn/pristine/a7" +#define FILE_DIR ".svn/pristine/a8" +#define FILE_DIR ".svn/pristine/a9" +#define FILE_DIR ".svn/pristine/aa" +#define FILE_DIR ".svn/pristine/ab" +#define FILE_DIR ".svn/pristine/ac" +#define FILE_DIR ".svn/pristine/ad" +#define FILE_DIR ".svn/pristine/ae" +#define FILE_DIR ".svn/pristine/af" +#define FILE_DIR ".svn/pristine/b0" +#define FILE_DIR ".svn/pristine/b1" +#define FILE_DIR ".svn/pristine/b2" +#define FILE_DIR ".svn/pristine/b3" +#define FILE_DIR ".svn/pristine/b4" +#define FILE_DIR ".svn/pristine/b5" +#define FILE_DIR ".svn/pristine/b6" +#define FILE_DIR ".svn/pristine/b7" +#define FILE_DIR ".svn/pristine/b8" +#define FILE_DIR ".svn/pristine/b9" +#define FILE_DIR ".svn/pristine/ba" +#define FILE_DIR ".svn/pristine/bb" +#define FILE_DIR ".svn/pristine/bc" +#define FILE_DIR ".svn/pristine/bd" +#define FILE_DIR ".svn/pristine/be" +#define FILE_DIR ".svn/pristine/bf" +#define FILE_DIR ".svn/pristine/c0" +#define FILE_DIR ".svn/pristine/c1" +#define FILE_DIR ".svn/pristine/c2" +#define FILE_DIR ".svn/pristine/c3" +#define FILE_DIR ".svn/pristine/c4" +#define FILE_DIR ".svn/pristine/c5" +#define FILE_DIR ".svn/pristine/c6" +#define FILE_DIR ".svn/pristine/c7" +#define FILE_DIR ".svn/pristine/c8" +#define FILE_DIR ".svn/pristine/c9" +#define FILE_DIR ".svn/pristine/ca" +#define FILE_DIR ".svn/pristine/cb" +#define FILE_DIR ".svn/pristine/cc" +#define FILE_DIR ".svn/pristine/cd" +#define FILE_DIR ".svn/pristine/ce" +#define FILE_DIR ".svn/pristine/cf" +#define FILE_DIR ".svn/pristine/d0" +#define FILE_DIR ".svn/pristine/d1" +#define FILE_DIR ".svn/pristine/d2" +#define FILE_DIR ".svn/pristine/d3" +#define FILE_DIR ".svn/pristine/d4" +#define FILE_DIR ".svn/pristine/d5" +#define FILE_DIR ".svn/pristine/d6" +#define FILE_DIR ".svn/pristine/d7" +#define FILE_DIR ".svn/pristine/d8" +#define FILE_DIR ".svn/pristine/d9" +#define FILE_DIR ".svn/pristine/da" +#define FILE_DIR ".svn/pristine/db" +#define FILE_DIR ".svn/pristine/dc" +#define FILE_DIR ".svn/pristine/dd" +#define FILE_DIR ".svn/pristine/de" +#define FILE_DIR ".svn/pristine/df" +#define FILE_DIR ".svn/pristine/e0" +#define FILE_DIR ".svn/pristine/e1" +#define FILE_DIR ".svn/pristine/e2" +#define FILE_DIR ".svn/pristine/e3" +#define FILE_DIR ".svn/pristine/e4" +#define FILE_DIR ".svn/pristine/e5" +#define FILE_DIR ".svn/pristine/e6" +#define FILE_DIR ".svn/pristine/e7" +#define FILE_DIR ".svn/pristine/e8" +#define FILE_DIR ".svn/pristine/e9" +#define FILE_DIR ".svn/pristine/ea" +#define FILE_DIR ".svn/pristine/eb" +#define FILE_DIR ".svn/pristine/ec" +#define FILE_DIR ".svn/pristine/ed" +#define FILE_DIR ".svn/pristine/ee" +#define FILE_DIR ".svn/pristine/ef" +#define FILE_DIR ".svn/pristine/f0" +#define FILE_DIR ".svn/pristine/f1" +#define FILE_DIR ".svn/pristine/f2" +#define FILE_DIR ".svn/pristine/f3" +#define FILE_DIR ".svn/pristine/f4" +#define FILE_DIR ".svn/pristine/f5" +#define FILE_DIR ".svn/pristine/f6" +#define FILE_DIR ".svn/pristine/f7" +#define FILE_DIR ".svn/pristine/f8" +#define FILE_DIR ".svn/pristine/f9" +#define FILE_DIR ".svn/pristine/fa" +#define FILE_DIR ".svn/pristine/fb" +#define FILE_DIR ".svn/pristine/fc" +#define FILE_DIR ".svn/pristine/fd" +#define FILE_DIR ".svn/pristine/fe" +#define FILE_DIR ".svn/pristine/ff" +#define FILE_DIR "bot" +#define FILE_DIR "bot/Marakov" #define FILE_DIR "code" #define FILE_DIR "code/ATMOSPHERICS" #define FILE_DIR "code/ATMOSPHERICS/components" @@ -166,6 +426,15 @@ #define FILE_DIR "code/WorkInProgress/mapload" #define FILE_DIR "code/WorkInProgress/organs" #define FILE_DIR "code/WorkInProgress/virus2" +#define FILE_DIR "config" +#define FILE_DIR "config/names" +#define FILE_DIR "data" +#define FILE_DIR "data/logs" +#define FILE_DIR "data/logs/2012" +#define FILE_DIR "data/logs/2012/07-July" +#define FILE_DIR "data/player_saves" +#define FILE_DIR "data/player_saves/g" +#define FILE_DIR "data/player_saves/g/giacomand" #define FILE_DIR "html" #define FILE_DIR "icons" #define FILE_DIR "icons/48x48" @@ -181,6 +450,7 @@ #define FILE_DIR "icons/obj/machines" #define FILE_DIR "icons/obj/pipes" #define FILE_DIR "icons/pda_icons" +#define FILE_DIR "icons/PSD files" #define FILE_DIR "icons/spideros_icons" #define FILE_DIR "icons/Testing" #define FILE_DIR "icons/turf" @@ -190,6 +460,7 @@ #define FILE_DIR "interface" #define FILE_DIR "maps" #define FILE_DIR "maps/RandomZLevels" +#define FILE_DIR "music" #define FILE_DIR "Redirector" #define FILE_DIR "sound" #define FILE_DIR "sound/AI" @@ -203,6 +474,16 @@ #define FILE_DIR "sound/piano" #define FILE_DIR "sound/voice" #define FILE_DIR "sound/weapons" +#define FILE_DIR "SQL" +#define FILE_DIR "tools" +#define FILE_DIR "tools/UnstandardnessTestForDM" +#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM" +#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/bin" +#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/bin/Debug" +#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj" +#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86" +#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug" +#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties" // END_FILE_DIR // BEGIN_PREFERENCES