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
This commit is contained in:
giacomand@gmail.com
2012-07-12 20:07:09 +00:00
parent 47710d7f24
commit 8224fd408a
15 changed files with 676 additions and 287 deletions

View File

@@ -35,8 +35,7 @@
var/screen // Which screen our main window displays var/screen // Which screen our main window displays
var/subscreen // Which specific function of the main screen is being displayed var/subscreen // Which specific function of the main screen is being displayed
var/tnote // Message history var used for PDA Messaging functions var/obj/item/device/pda/pai/pda = null
var/poff = 0 // For PDA messanging.
var/secHUD = 0 // Toggles whether the Security HUD is active or not var/secHUD = 0 // Toggles whether the Security HUD is active or not
var/medHUD = 0 // Toggles whether the Medical HUD is active or not var/medHUD = 0 // Toggles whether the Medical HUD is active or not

View File

@@ -43,10 +43,13 @@
var/list/names = list() var/list/names = list()
var/list/namecounts = list() var/list/namecounts = list()
var/list/creatures = list() var/list/humans = list()
var/list/others = list()
for(var/mob/living/M in world) for(var/mob/living/M in world)
//Cameras can't track people wearing an agent card or a ninja hood. //Cameras can't track people wearing an agent card or a ninja hood.
var/human = 0
if(istype(M, /mob/living/carbon/human)) if(istype(M, /mob/living/carbon/human))
human = 1
if(istype(M:wear_id, /obj/item/weapon/card/id/syndicate)) if(istype(M:wear_id, /obj/item/weapon/card/id/syndicate))
continue continue
if(istype(M:head, /obj/item/clothing/head/helmet/space/space_ninja)&&!M:head:canremove) if(istype(M:head, /obj/item/clothing/head/helmet/space/space_ninja)&&!M:head:canremove)
@@ -71,66 +74,71 @@
else else
names.Add(name) names.Add(name)
namecounts[name] = 1 namecounts[name] = 1
if(human)
humans[name] = M
else
others[name] = M
creatures[name] = M var/list/targets = sortList(humans) + sortList(others)
//I blame : usage! var/target_name = input(usr, "Which creature should you track?") as null|anything in targets
var/target_name = input(usr, "Which creature should you track?") as null|anything in sortList(creatures)
if (!target_name) if (!target_name)
usr:cameraFollow = null usr:cameraFollow = null
return return
var/mob/target = creatures[target_name] var/mob/target = (isnull(humans[target_name]) ? others[target_name] : humans[target_name])
ai_actual_track(target) ai_actual_track(target)
/mob/living/silicon/ai/proc/ai_actual_track(mob/living/target as mob) /mob/living/silicon/ai/proc/ai_actual_track(mob/living/target as mob)
if(!istype(target)) return if(!istype(target)) return
var/mob/living/silicon/ai/U = usr
usr:cameraFollow = target U.cameraFollow = target
usr << text("Now tracking [] on camera.", target.name) U << text("Now tracking [] on camera.", target.name)
if (usr.machine == null) if (U.machine == null)
usr.machine = usr U.machine = U
spawn (0) spawn (0)
while (usr:cameraFollow == target) while (U.cameraFollow == target)
if (usr:cameraFollow == null) if (U.cameraFollow == null)
return return
else if (istype(target, /mob/living/carbon/human)) else if (istype(target, /mob/living/carbon/human))
if(istype(target:wear_id, /obj/item/weapon/card/id/syndicate)) if(istype(target:wear_id, /obj/item/weapon/card/id/syndicate))
usr << "Follow camera mode terminated." U << "Follow camera mode terminated."
usr:cameraFollow = null U.cameraFollow = null
return return
if(istype(target:head, /obj/item/clothing/head/helmet/space/space_ninja)&&!target:head:canremove) if(istype(target:head, /obj/item/clothing/head/helmet/space/space_ninja)&&!target:head:canremove)
usr << "Follow camera mode terminated." U << "Follow camera mode terminated."
usr:cameraFollow = null U.cameraFollow = null
return return
if(target.digitalcamo) if(target.digitalcamo)
usr << "Follow camera mode terminated." U << "Follow camera mode terminated."
usr:cameraFollow = null U.cameraFollow = null
return return
else if(istype(target.loc,/obj/effect/dummy)) else if(istype(target.loc,/obj/effect/dummy))
usr << "Follow camera mode ended." U << "Follow camera mode ended."
usr:cameraFollow = null U.cameraFollow = null
return return
else if (!target || !istype(target.loc, /turf)) //in a closet 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) sleep(40) //because we're sleeping another second after this (a few lines down)
continue 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 ((C && istype(C, /obj/machinery/camera)) || C==null)
if(isrobot(target)) if(isrobot(target))
C = target:camera var/mob/living/silicon/robot/R = target
usr:current = C C = R.camera
usr.reset_view(C) U.current = C
U.reset_view(C)
else else
var/closestDist = -1 var/closestDist = -1
if (C!=null) if (C!=null)
if (C.status) if (C.status)
closestDist = get_dist(C, target) closestDist = get_dist(C, target)
//usr << text("Dist = [] for camera []", closestDist, C.name) //U << text("Dist = [] for camera []", closestDist, C.name)
var/zmatched = 0 var/zmatched = 0
if (closestDist > 7 || closestDist == -1) if (closestDist > 7 || closestDist == -1)
//check other cameras //check other cameras
@@ -144,18 +152,18 @@
if ((dist < closestDist) || (closestDist == -1)) if ((dist < closestDist) || (closestDist == -1))
closestDist = dist closestDist = dist
closest = C2 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) if (closest != C)
usr:current = closest U.current = closest
usr.reset_view(closest) U.reset_view(closest)
//use_power(50) //use_power(50)
if (zmatched == 0) 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) sleep(40) //because we're sleeping another second after this (a few lines down)
else else
usr << "Follow camera mode ended." U << "Follow camera mode ended."
usr:cameraFollow = null U.cameraFollow = null
sleep(10) sleep(10)
@@ -263,22 +271,35 @@
deactivate(user,0) deactivate(user,0)
/obj/machinery/camera/attackby(W as obj, user as mob) /obj/machinery/camera/attackby(W as obj, user as mob)
..()
if (istype(W, /obj/item/weapon/wirecutters)) if (istype(W, /obj/item/weapon/wirecutters))
deactivate(user) deactivate(user)
else if (istype(W, /obj/item/weapon/paper)) else if ((istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/device/pda)) && isliving(user))
var/obj/item/weapon/paper/X = W var/mob/living/U = user
user << "You hold a paper up to the camera ..." 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) for(var/mob/living/silicon/ai/O in world)
//if (O.current == src) //if (O.current == src)
O << "[user] holds a paper up to one of your cameras ..." if(U.name == "Unknown") O << "<b>[U]</b> holds \a [itemname] up to one of your cameras ..."
O << browse(text("<HTML><HEAD><TITLE>[]</TITLE></HEAD><BODY><TT>[]</TT></BODY></HTML>", X.name, X.info), text("window=[]", X.name)) else O << "<b><a href='byond://?src=\ref[O];track2=\ref[O];track=\ref[U]'>[U]</a></b> holds \a [itemname] up to one of your cameras ..."
O << browse(text("<HTML><HEAD><TITLE>[]</TITLE></HEAD><BODY><TT>[]</TT></BODY></HTML>", itemname, info), text("window=[]", itemname))
for(var/mob/O in world) for(var/mob/O in world)
if (istype(O.machine, /obj/machinery/computer/security)) if (istype(O.machine, /obj/machinery/computer/security))
var/obj/machinery/computer/security/S = O.machine var/obj/machinery/computer/security/S = O.machine
if (S.current == src) if (S.current == src)
O << "[user] holds a paper up to one of the cameras ..." O << "[U] holds \a [itemname] up to one of the cameras ..."
O << browse(text("<HTML><HEAD><TITLE>[]</TITLE></HEAD><BODY><TT>[]</TT></BODY></HTML>", X.name, X.info), text("window=[]", X.name)) O << browse(text("<HTML><HEAD><TITLE>[]</TITLE></HEAD><BODY><TT>[]</TT></BODY></HTML>", itemname, info), text("window=[]", itemname))
else if (istype(W, /obj/item/weapon/wrench)) //Adding dismantlable cameras to go with the constructable ones. --NEO else if (istype(W, /obj/item/weapon/wrench)) //Adding dismantlable cameras to go with the constructable ones. --NEO
if(src.status) if(src.status)
user << "\red You can't dismantle a camera while it is active." user << "\red You can't dismantle a camera while it is active."
@@ -327,6 +348,8 @@
for(var/mob/O in viewers(user, 3)) 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) 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) del(src)
else
..()
return return
/obj/machinery/camera/proc/deactivate(user as mob, var/choice = 1) /obj/machinery/camera/proc/deactivate(user as mob, var/choice = 1)

View File

@@ -477,8 +477,13 @@
id = "Receiver B" id = "Receiver B"
network = "tcommsat" network = "tcommsat"
autolinkers = list("bus3", "bus4") // Bus units 3 and 4 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 /obj/machinery/telecomms/bus/preset_one
@@ -551,9 +556,16 @@
common common
id = "Common Server" id = "Common Server"
freq_listening = list(1459) freq_listening = list()
autolinkers = list("common", "broadcasterB") 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 command
id = "Command Server" id = "Command Server"
freq_listening = list(1353) freq_listening = list(1353)

View File

@@ -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/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/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/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 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 default_cartridge = /obj/item/weapon/cartridge/medical
icon_state = "pda-gene" icon_state = "pda-gene"
// Special AI PDA that cannot explode. // Special AI/pAI PDAs that cannot explode.
/obj/item/device/pda/ai /obj/item/device/pda/ai
icon_state = "NONE" icon_state = "NONE"
ttone = "data" 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) /obj/item/device/pda/ai/attack_self(mob/user as mob)
if ((honkamt > 0) && (prob(60)))//For clown virus. 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) cartridge = new default_cartridge(src)
/obj/item/device/pda/proc/can_use() /obj/item/device/pda/proc/can_use()
if(istype(src, /obj/item/device/pda/ai))
return 1
if(!ismob(loc)) if(!ismob(loc))
return 0 return 0
var/mob/M = loc var/mob/M = loc
if(!M.canmove)
if(!M.canmove && !isAI(M))
return 0 return 0
if((src in M.contents) || ( istype(loc, /turf) && in_range(src, M) )) if((src in M.contents) || ( istype(loc, /turf) && in_range(src, M) ))
return 1 return 1
else else
@@ -350,7 +359,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
for (var/obj/item/device/pda/P in sortList(PDAs)) for (var/obj/item/device/pda/P in sortList(PDAs))
if (!P.owner||P.toff||P == src) continue if (!P.owner||P.toff||P == src) continue
dat += "<li><a href='byond://?src=\ref[src];choice=Message;target=\ref[P]'>[P]</a>" dat += "<li><a href='byond://?src=\ref[src];choice=Message;target=\ref[P]'>[P]</a>"
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 += " (<a href='byond://?src=\ref[src];choice=Detonate;target=\ref[P]'><img src=pda_boom.png>*Detonate*</a>)" dat += " (<a href='byond://?src=\ref[src];choice=Detonate;target=\ref[P]'><img src=pda_boom.png>*Detonate*</a>)"
if (istype(cartridge, /obj/item/weapon/cartridge/clown)) if (istype(cartridge, /obj/item/weapon/cartridge/clown))
dat += " (<a href='byond://?src=\ref[src];choice=Send Honk;target=\ref[P]'><img src=pda_honk.png>*Send Virus*</a>)" dat += " (<a href='byond://?src=\ref[src];choice=Send Honk;target=\ref[P]'><img src=pda_honk.png>*Send Virus*</a>)"
@@ -724,95 +733,70 @@ var/global/list/obj/item/device/pda/PDAs = list()
var/t = input(U, "Please enter message", name, null) as text var/t = input(U, "Please enter message", name, null) as text
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN) t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
if (!t) if (!t || !istype(P))
return return
if (!in_range(src, U) && loc != U) if (!in_range(src, U) && loc != U)
return return
if(!istype(P)) return if (isnull(P)||P.toff || toff)
return
if(istype(P, /obj/item/device/pda)) if (last_text && world.time < last_text + 5)
if (isnull(P)||P.toff || toff) return
return
if (last_text && world.time < last_text + 5) last_text = world.time
return // 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 tnote += "<i><b>&rarr; To [P.owner]:</b></i><br>[t]<br>"
// check if telecomms I/O route 1459 is stable P.tnote += "<i><b>&larr; From <a href='byond://?src=\ref[P];choice=Message;target=\ref[src]'>[owner]</a> ([ownjob]):</b></i><br>[t]<br>"
//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 += "<i><b>&rarr; To [P.owner]:</b></i><br>[t]<br>" if (prob(15)) //Give the AI a chance of intercepting the message
P.tnote += "<i><b>&larr; From <a href='byond://?src=\ref[P];choice=Message;target=\ref[src]'>[owner]</a> ([ownjob]):</b></i><br>[t]<br>" 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("<i>Intercepted message from <b>[who]</b>: [t]</i>")
if (prob(15)) //Give the AI a chance of intercepting the message if (!P.silent)
var/who = src.owner playsound(P.loc, 'twobeep.ogg', 50, 1)
if(prob(50)) for (var/mob/O in hearers(3, P.loc))
who = P:owner if(!P.silent) O.show_message(text("\icon[P] *[P.ttone]*"))
for(var/mob/living/silicon/ai/ai in world) //Search for holder of the PDA.
// Allows other AIs to intercept the message but the AI won't intercept their own message. var/mob/living/L = null
if(ai.aiPDA != P && ai.aiPDA != src) if(P.loc && isliving(P.loc))
ai.show_message("<i>Intercepted message from <b>[who]</b>: [t]</i>") 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] <b>Message from [src.owner] ([ownjob]), </b>\"[t]\" (<a href='byond://?src=\ref[P];choice=Message;skiprefresh=1;target=\ref[src]'>Reply</a>)"
if (!P.silent) log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]")
playsound(P.loc, 'twobeep.ogg', 50, 1) P.overlays = null
for (var/mob/O in hearers(3, P.loc)) P.overlays += image('pda.dmi', "pda-r")
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] <b>Message from [src.owner] ([ownjob]), </b>\"[t]\" (<a href='byond://?src=\ref[P];choice=Message;skiprefresh=1;target=\ref[src]'>Reply</a>)"
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
else 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 += "<i><b>&rarr; To [P]:</b></i><br>[t]<br>"
P.tnote += "<i><b>&larr; From <a href='byond://?src=\ref[P];soft=pdamessage;target=\ref[src]'>[src]</a>:</b></i><br>[t]<br>"
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("<i>Intercepted message from <b>[who]</b>: [t]</i>")
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] <b>Message from [src.owner] ([ownjob]), </b>\"[t]\" (<a href='byond://?src=\ref[P];choice=Message;skiprefresh=1;target=\ref[src]'>Reply</a>)"
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() /obj/item/device/pda/verb/verb_remove_id()
set category = "Object" 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. /obj/item/device/pda/proc/explode() //This needs tuning.
if(!src.detonate) return
var/turf/T = get_turf(src.loc) var/turf/T = get_turf(src.loc)
if (ismob(loc)) if (ismob(loc))
@@ -1027,9 +1011,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
del(src) del(src)
return return
/obj/item/device/pda/ai/explode()
return // No explosions for the AI pda!
/obj/item/device/pda/Del() /obj/item/device/pda/Del()
PDAs -= src PDAs -= src
if (src.id) 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!" usr << "You can't do that because you are dead!"
return return
if(!isnull(aiPDA)) if(!isnull(aiPDA))
//0
aiPDA.silent = !aiPDA.silent aiPDA.silent = !aiPDA.silent
usr << "<span class='notice'>PDA ringer toggled [(aiPDA.silent ? "Off" : "On")]!</span>" usr << "<span class='notice'>PDA ringer toggled [(aiPDA.silent ? "Off" : "On")]!</span>"
else else

View File

@@ -14,6 +14,7 @@
var/translate_hive = 0 var/translate_hive = 0
var/obj/item/device/encryptionkey/keyslot1 = null var/obj/item/device/encryptionkey/keyslot1 = null
var/obj/item/device/encryptionkey/keyslot2 = null var/obj/item/device/encryptionkey/keyslot2 = null
maxf = 1489
/obj/item/device/radio/headset/New() /obj/item/device/radio/headset/New()
..() ..()

View File

@@ -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/list/channels = list() //see communications.dm for full list. First channes is a "default" for :h
var/subspace_transmission = 0 var/subspace_transmission = 0
var/syndie = 0//Holder to see if it's a syndicate encrpyed radio var/syndie = 0//Holder to see if it's a syndicate encrpyed radio
var/maxf = 1499
// "Example" = FREQ_LISTENING|FREQ_BROADCASTING // "Example" = FREQ_LISTENING|FREQ_BROADCASTING
flags = FPRINT | CONDUCT | TABLEPASS flags = FPRINT | CONDUCT | TABLEPASS
slot_flags = SLOT_BELT slot_flags = SLOT_BELT
@@ -65,10 +66,11 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
if(freerange) if(freerange)
if(frequency < 1200 || frequency > 1600) if(frequency < 1200 || frequency > 1600)
frequency = sanitize_frequency(frequency) frequency = sanitize_frequency(frequency, maxf)
else if (frequency < 1441 || frequency > 1489) // 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." world.log << "[src] ([type]) has a frequency of [frequency], sanitizing."
frequency = sanitize_frequency(frequency) frequency = sanitize_frequency(frequency, maxf)
set_frequency(frequency) set_frequency(frequency)
@@ -181,7 +183,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
else if (href_list["freq"]) else if (href_list["freq"])
var/new_frequency = (frequency + text2num(href_list["freq"])) var/new_frequency = (frequency + text2num(href_list["freq"]))
if (!freerange || (frequency < 1200 || frequency > 1600)) if (!freerange || (frequency < 1200 || frequency > 1600))
new_frequency = sanitize_frequency(new_frequency) new_frequency = sanitize_frequency(new_frequency, maxf)
set_frequency(new_frequency) set_frequency(new_frequency)
if (traitor_frequency && frequency == traitor_frequency) if (traitor_frequency && frequency == traitor_frequency)

View File

@@ -654,7 +654,8 @@
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
/obj/machinery/reagentgrinder /obj/machinery/reagentgrinder
name = "Reagent Grinder"
name = "All-In-One Grinder"
icon = 'kitchen.dmi' icon = 'kitchen.dmi'
icon_state = "juicer1" icon_state = "juicer1"
layer = 2.9 layer = 2.9
@@ -663,28 +664,49 @@
use_power = 1 use_power = 1
idle_power_usage = 5 idle_power_usage = 5
active_power_usage = 100 active_power_usage = 100
var/inuse = 0
var/obj/item/weapon/reagent_containers/beaker = null 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/plasma = list("plasma" = 20),
/obj/item/stack/sheet/uranium = list("uranium" = 20), /obj/item/stack/sheet/uranium = list("uranium" = 20),
/obj/item/stack/sheet/clown = list("banana" = 20), /obj/item/stack/sheet/clown = list("banana" = 20),
/obj/item/stack/sheet/silver = list("silver" = 20), /obj/item/stack/sheet/silver = list("silver" = 20),
/obj/item/stack/sheet/gold = list("gold" = 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/nettle = list("acid" = 0),
/obj/item/weapon/grown/deathnettle = list("pacid" = 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() /obj/machinery/reagentgrinder/New()
..() ..()
beaker = new /obj/item/weapon/reagent_containers/glass/large(src) beaker = new /obj/item/weapon/reagent_containers/glass/large(src)
@@ -708,11 +730,14 @@
update_icon() update_icon()
src.updateUsrDialog() src.updateUsrDialog()
return 0 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." user << "Cannot refine into a reagent."
return 1 return 1
user.before_take_item(O) user.before_take_item(O)
if(holdingitems && holdingitems.len == 0)
src.verbs += /obj/machinery/reagentgrinder/verb/eject
O.loc = src O.loc = src
holdingitems += O
src.updateUsrDialog() src.updateUsrDialog()
return 0 return 0
@@ -731,37 +756,43 @@
var/is_beaker_ready = 0 var/is_beaker_ready = 0
var/processing_chamber = "" var/processing_chamber = ""
var/beaker_contents = "" var/beaker_contents = ""
var/dat = ""
for (var/i in allowed_items) if(!inuse)
for (var/obj/item/O in src.contents) for (var/obj/item/O in holdingitems)
if (!istype(O,i)) processing_chamber += "\A [O.name]<BR>"
continue
processing_chamber+= "some <B>[O]</B><BR>" if (!processing_chamber)
break is_chamber_empty = 1
if (!processing_chamber) processing_chamber = "Nothing."
is_chamber_empty = 1 if (!beaker)
processing_chamber = "Nothing." beaker_contents = "<B>No beaker attached.</B><br>"
if (!beaker) else
beaker_contents = "\The [src] has no beaker attached." is_beaker_ready = 1
else if (!beaker.reagents.total_volume) beaker_contents = "<B>The beaker contains:</B><br>"
beaker_contents = "\The [src] has attached an empty beaker." var/anything = 0
is_beaker_ready = 1 for(var/datum/reagent/R in beaker.reagents.reagent_list)
else if (beaker.reagents.total_volume < beaker.reagents.maximum_volume) anything = 1
beaker_contents = "\The [src] has attached a beaker with something." beaker_contents += "[R.volume] - [R.name]<br>"
is_beaker_ready = 1 if(!anything)
beaker_contents += "Nothing<br>"
dat = {"
<b>Processing chamber contains:</b><br>
[processing_chamber]<br>
[beaker_contents]<hr>
"}
if (is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN)))
dat += "<A href='?src=\ref[src];action=grind'>Grind the reagents</a><BR>"
dat += "<A href='?src=\ref[src];action=juice'>Juice the reagents</a><BR><BR>"
if(holdingitems && holdingitems.len > 0)
dat += "<A href='?src=\ref[src];action=eject'>Eject the reagents</a><BR>"
if (beaker)
dat += "<A href='?src=\ref[src];action=detach'>Detach the beaker</a><BR>"
else else
beaker_contents = "\The [src] has attached a beaker and the beaker is full!" dat += "Please wait..."
user << browse("<HEAD><TITLE>All-In-One Grinder</TITLE></HEAD><TT>[dat]</TT>", "window=reagentgrinder")
var/dat = {"
<b>Processing chamber contains:</b><br>
[processing_chamber]<br>
[beaker_contents]<hr>
"}
if (is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN)))
dat += "<A href='?src=\ref[src];action=grind'>Turn on!<BR>"
if (beaker)
dat += "<A href='?src=\ref[src];action=detach'>Detach a beaker!<BR>"
user << browse("<HEAD><TITLE>Reagent Grinder</TITLE></HEAD><TT>[dat]</TT>", "window=reagentgrinder")
onclose(user, "reagentgrinder") onclose(user, "reagentgrinder")
return return
@@ -773,7 +804,10 @@
switch(href_list["action"]) switch(href_list["action"])
if ("grind") if ("grind")
grind() grind()
if("juice")
juice()
if("eject")
eject()
if ("detach") if ("detach")
detach() detach()
src.updateUsrDialog() src.updateUsrDialog()
@@ -792,11 +826,42 @@
beaker = null beaker = null
update_icon() update_icon()
/obj/machinery/reagentgrinder/proc/get_allowed_by_id(var/obj/item/weapon/grown/O) /obj/machinery/reagentgrinder/verb/eject()
for (var/i in allowed_items) set category = "Object"
if (istype(O, i)) set name = "Eject contents from the grinder"
return allowed_items[i] 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) /obj/machinery/reagentgrinder/proc/get_grownweapon_amount(var/obj/item/weapon/grown/O)
if (!istype(O)) if (!istype(O))
@@ -806,40 +871,94 @@
else else
return round(O.potency) return round(O.potency)
/obj/machinery/reagentgrinder/proc/get_grind_id(var/obj/item/stack/sheet/O) /obj/machinery/reagentgrinder/proc/get_juice_amount(var/obj/item/weapon/reagent_containers/food/snacks/grown/O)
for (var/i in allowed_items) if (!istype(O))
if (istype(O, i)) return 5
return allowed_items[i] 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) /obj/machinery/reagentgrinder/proc/remove_object(var/obj/item/O)
return 20 holdingitems -= O
del(O)
/obj/machinery/reagentgrinder/proc/grind() /obj/machinery/reagentgrinder/proc/juice()
power_change() power_change()
if(stat & (NOPOWER|BROKEN)) if(stat & (NOPOWER|BROKEN))
return return
if (!beaker || beaker.reagents.total_volume >= beaker.reagents.maximum_volume) if (!beaker || beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
return return
playsound(src.loc, 'juicer.ogg', 20, 1) playsound(src.loc, 'juicer.ogg', 20, 1)
inuse = 1
spawn(50)
inuse = 0
interact(usr)
//Snacks //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) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break 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) for (var/r_id in allowed)
var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume
var/amount = allowed[r_id] var/amount = get_juice_amount(O)
if (amount == 0)
if (O.reagents != null && O.reagents.has_reagent(r_id)) O.reagents.trans_id_to(beaker, r_id, min(amount, space))
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))
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break 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 //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) var/allowed = get_allowed_by_id(O)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break break
@@ -851,10 +970,10 @@
if (space < amount) if (space < amount)
break break
if (i == round(O.amount, 1)) if (i == round(O.amount, 1))
del(O) remove_object(O)
break break
//Plants //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) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break break
var/allowed = get_allowed_by_id(O) var/allowed = get_allowed_by_id(O)
@@ -869,12 +988,16 @@
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break break
del(O) remove_object(O)
//Pills - Transfers reagents from pill into beaker
for (var/obj/item/weapon/reagent_containers/pill/O in src.contents) //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) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break break
var/amount = O.reagents.total_volume var/amount = O.reagents.total_volume
O.reagents.trans_to(beaker, amount) O.reagents.trans_to(beaker, amount)
if(!O.reagents) if(!O.reagents.total_volume)
del(O) remove_object(O)
if(holdingitems && holdingitems.len == 0)
src.verbs -= /obj/machinery/reagentgrinder/verb/eject

View File

@@ -30,7 +30,7 @@
aiPDA = new/obj/item/device/pda/ai(src) aiPDA = new/obj/item/device/pda/ai(src)
aiPDA.owner = name aiPDA.owner = name
aiPDA.ownjob = "AI" aiPDA.ownjob = "AI"
aiPDA.name = "AI - " + name + " (" + aiPDA.ownjob + ")" aiPDA.name = name + " (" + aiPDA.ownjob + ")"
if (istype(loc, /turf)) if (istype(loc, /turf))
verbs.Add(/mob/living/silicon/ai/proc/ai_call_shuttle,/mob/living/silicon/ai/proc/ai_camera_track, \ verbs.Add(/mob/living/silicon/ai/proc/ai_call_shuttle,/mob/living/silicon/ai/proc/ai_camera_track, \

View File

@@ -16,7 +16,7 @@
if(aiPDA && aiPDA.name != name) if(aiPDA && aiPDA.name != name)
aiPDA.owner = name aiPDA.owner = name
aiPDA.name = "AI - " + name + " (" + aiPDA.ownjob + ")" aiPDA.name = name + " (" + aiPDA.ownjob + ")"
if (src.malfhack) if (src.malfhack)
if (src.malfhack.aidisabled) if (src.malfhack.aidisabled)

View File

@@ -8,6 +8,13 @@
card.radio = new /obj/item/device/radio(src.card) card.radio = new /obj/item/device/radio(src.card)
radio = card.radio 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() /mob/living/silicon/pai/Login()

View File

@@ -181,74 +181,17 @@
spawn CheckDNA(M, src) spawn CheckDNA(M, src)
if("pdamessage") if("pdamessage")
if(href_list["target"]) if(!isnull(pda))
if(silence_time) if(href_list["toggler"])
return alert("Communications circuits remain unitialized.") 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 var/target = locate(href_list["target"])
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN) pda.create_message(src, target)
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 += "<i><b>&rarr; To [P.owner]:</b></i><br>[t]<br>"
P.tnote += "<i><b>&larr; From <a href='byond://?src=\ref[P];choice=Message;target=\ref[src]'>[src]</a>:</b></i><br>[t]<br>"
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("<i>Intercepted message from <b>[who]</b>: [t]</i>")
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 += "<i><b>&rarr; To [P]:</b></i><br>[t]<br>"
P.tnote += "<i><b>&larr; From <a href='byond://?src=\ref[P];soft=pdamessage;target=\ref[src]'>[src]</a>:</b></i><br>[t]<br>"
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("<i>Intercepted message from <b>[who]</b>: [t]</i>")
playsound(P.loc, 'twobeep.ogg', 50, 1)
// Accessing medical records // Accessing medical records
if("medicalrecord") if("medicalrecord")
@@ -309,6 +252,7 @@
/mob/living/silicon/pai/proc/softwareMenu() // Populate the right menu /mob/living/silicon/pai/proc/softwareMenu() // Populate the right menu
var/dat = "" var/dat = ""
dat += "<A href='byond://?src=\ref[src];software=refresh'>Refresh</A><br>"
// Built-in // Built-in
dat += "<A href='byond://?src=\ref[src];software=directives'>Directives</A><br>" dat += "<A href='byond://?src=\ref[src];software=directives'>Directives</A><br>"
dat += "<A href='byond://?src=\ref[src];software=radio;sub=0'>Radio Configuration</A><br>" dat += "<A href='byond://?src=\ref[src];software=radio;sub=0'>Radio Configuration</A><br>"
@@ -660,17 +604,19 @@
// Digital Messenger // Digital Messenger
/mob/living/silicon/pai/proc/pdamessage() /mob/living/silicon/pai/proc/pdamessage()
var/dat = "<h3>Digital Messenger</h3>" var/dat = "<h3>Digital Messenger</h3>"
dat += {"<b>Signal/Receiver Status:</b> <A href='byond://?src=\ref[src];software=pdamessage;toggler=1'>
[(pda.toff) ? "<font color='red'> \[Off\]</font>" : "<font color='green'> \[On\]</font>"]</a><br>
<b>Ringer Status:</b> <A href='byond://?src=\ref[src];software=pdamessage;ringer=1'>
[(pda.silent) ? "<font color='red'> \[Off\]</font>" : "<font color='green'> \[On\]</font>"]</a><br><br>"}
dat += "<ul>" dat += "<ul>"
for (var/obj/item/device/pda/P in world) if(!pda.toff)
if (!P.owner||P.toff||P == src) continue for (var/obj/item/device/pda/P in sortList(PDAs))
dat += "<li><a href='byond://?src=\ref[src];software=pdamessage;target=\ref[P]'>[P]</a>" if (!P.owner||P.toff||P == src.pda) continue
dat += "</li>"
for (var/mob/living/silicon/pai/P in world)
if(P.stat != 2)
dat += "<li><a href='byond://?src=\ref[src];software=pdamessage;target=\ref[P]'>[P]</a>" dat += "<li><a href='byond://?src=\ref[src];software=pdamessage;target=\ref[P]'>[P]</a>"
dat += "</li>" dat += "</li>"
dat += "</ul>" dat += "</ul>"
dat += "<br><br>" dat += "<br><br>"
dat += "Messages: <hr> [tnote]" dat += "Messages: <hr> [pda.tnote]"
return dat return dat

View File

@@ -14,4 +14,5 @@ korphaeron - Game Master
nodrak - Game Master nodrak - Game Master
carnwennan - Game Master carnwennan - Game Master
ikarrus - Game Master ikarrus - Game Master
cheridan - Game Master cheridan - Game Master
giacomand - Game Master

View File

@@ -33,7 +33,7 @@
<table align='center' class="top"> <table align='center' class="top">
<tr> <tr>
<td valign='top'> <td valign='top'>
<font size='2'><b>Coders:</b> 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<br></font> <font size='2'><b>Coders:</b> 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<br></font>
<font size='2'><b>Spriters:</b> Agouri, Cheridan, Cruazy Guest, Deeaych, Deuryn, Matty406, Microwave, ShiftyEyesShady, Skie, Uhangi, Veyveyr, Petethegoat, Kor, Ricotez, Ausops, TankNut<br></font> <font size='2'><b>Spriters:</b> Agouri, Cheridan, Cruazy Guest, Deeaych, Deuryn, Matty406, Microwave, ShiftyEyesShady, Skie, Uhangi, Veyveyr, Petethegoat, Kor, Ricotez, Ausops, TankNut<br></font>
<font size='2'><b>Sounds:</b> Skie, Lasty/Vinyl<br></font> <font size='2'><b>Sounds:</b> Skie, Lasty/Vinyl<br></font>
<font size='2'><b>Thanks to:</b> CDK Station devs, GoonStation devs, the original SpaceStation developers and Invisty for the title image</font> <font size='2'><b>Thanks to:</b> CDK Station devs, GoonStation devs, the original SpaceStation developers and Invisty for the title image</font>
@@ -47,7 +47,19 @@ should be listed in the changelog upon commit tho. Thanks. -->
<!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here --> <!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here -->
<div class="commit sansserif"> <div class="commit sansserif">
<h2 class="date">11 July 2012</h2> <h2 class="date">Thursday July 12th 2012</h2>
<h3 class="author">Giacom updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">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.</li>
<li class="rscadd">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.</li>
<li class="rscadd">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.</li>
<li class="rscadd">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.</li>
<li class="rscadd">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.</li>
</ul>
</div>
<div class="commit sansserif">
<h2 class="date">Wednesday July 11th 2012</h2>
<h3 class="author">Nodrak, Cheridan and Icarus updated:</h3> <h3 class="author">Nodrak, Cheridan and Icarus updated:</h3>
<ul class="changes bgimages16"> <ul class="changes bgimages16">
<li class="rscadd">Added a couple of Emergency Shield Projectors to Engineering secure storage. <li class="rscadd">Added a couple of Emergency Shield Projectors to Engineering secure storage.

View File

@@ -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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "aUv" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/hydroponics)
"aUw" = (/obj/item/weapon/reagent_containers/glass/bucket,/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) "aUx" = (/obj/machinery/hydroponics,/turf/simulated/floor{dir = 1; icon_state = "green"},/area/hydroponics)

View File

@@ -5,6 +5,266 @@
// END_INTERNALS // END_INTERNALS
// BEGIN_FILE_DIR // BEGIN_FILE_DIR
#define 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"
#define FILE_DIR "code/ATMOSPHERICS" #define FILE_DIR "code/ATMOSPHERICS"
#define FILE_DIR "code/ATMOSPHERICS/components" #define FILE_DIR "code/ATMOSPHERICS/components"
@@ -166,6 +426,15 @@
#define FILE_DIR "code/WorkInProgress/mapload" #define FILE_DIR "code/WorkInProgress/mapload"
#define FILE_DIR "code/WorkInProgress/organs" #define FILE_DIR "code/WorkInProgress/organs"
#define FILE_DIR "code/WorkInProgress/virus2" #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 "html"
#define FILE_DIR "icons" #define FILE_DIR "icons"
#define FILE_DIR "icons/48x48" #define FILE_DIR "icons/48x48"
@@ -181,6 +450,7 @@
#define FILE_DIR "icons/obj/machines" #define FILE_DIR "icons/obj/machines"
#define FILE_DIR "icons/obj/pipes" #define FILE_DIR "icons/obj/pipes"
#define FILE_DIR "icons/pda_icons" #define FILE_DIR "icons/pda_icons"
#define FILE_DIR "icons/PSD files"
#define FILE_DIR "icons/spideros_icons" #define FILE_DIR "icons/spideros_icons"
#define FILE_DIR "icons/Testing" #define FILE_DIR "icons/Testing"
#define FILE_DIR "icons/turf" #define FILE_DIR "icons/turf"
@@ -190,6 +460,7 @@
#define FILE_DIR "interface" #define FILE_DIR "interface"
#define FILE_DIR "maps" #define FILE_DIR "maps"
#define FILE_DIR "maps/RandomZLevels" #define FILE_DIR "maps/RandomZLevels"
#define FILE_DIR "music"
#define FILE_DIR "Redirector" #define FILE_DIR "Redirector"
#define FILE_DIR "sound" #define FILE_DIR "sound"
#define FILE_DIR "sound/AI" #define FILE_DIR "sound/AI"
@@ -203,6 +474,16 @@
#define FILE_DIR "sound/piano" #define FILE_DIR "sound/piano"
#define FILE_DIR "sound/voice" #define FILE_DIR "sound/voice"
#define FILE_DIR "sound/weapons" #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 // END_FILE_DIR
// BEGIN_PREFERENCES // BEGIN_PREFERENCES