diff --git a/baystation12.dme b/baystation12.dme index a3029dd83e..c3720e0cbe 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1132,6 +1132,7 @@ #include "code\modules\organs\wound.dm" #include "code\modules\paperwork\carbonpaper.dm" #include "code\modules\paperwork\clipboard.dm" +#include "code\modules\paperwork\faxmachine.dm" #include "code\modules\paperwork\filingcabinet.dm" #include "code\modules\paperwork\folders.dm" #include "code\modules\paperwork\handlabeler.dm" @@ -1470,7 +1471,6 @@ #include "code\WorkInProgress\computer3\computers\robot.dm" #include "code\WorkInProgress\computer3\computers\security.dm" #include "code\WorkInProgress\computer3\computers\welcome.dm" -#include "code\WorkInProgress\kilakk\fax.dm" #include "code\WorkInProgress\Mini\atmos_control.dm" #include "code\WorkInProgress\Ported\policetape.dm" #include "code\WorkInProgress\SkyMarshal\officer_stuff.dm" diff --git a/code/WorkInProgress/kilakk/fax.dm b/code/WorkInProgress/kilakk/fax.dm deleted file mode 100644 index bbec494ea4..0000000000 --- a/code/WorkInProgress/kilakk/fax.dm +++ /dev/null @@ -1,213 +0,0 @@ -var/list/obj/machinery/faxmachine/allfaxes = list() -var/list/alldepartments = list("Central Command") - -/obj/machinery/faxmachine - name = "fax machine" - icon = 'icons/obj/library.dmi' - icon_state = "fax" - req_one_access = list(access_lawyer, access_heads, access_armory) //Warden needs to be able to Fax solgov too. - anchored = 1 - density = 1 - use_power = 1 - idle_power_usage = 30 - active_power_usage = 200 - power_channel = EQUIP - - var/obj/item/weapon/card/id/scan = null // identification - var/authenticated = 0 - - var/obj/item/weapon/paper/tofax = null // what we're sending - var/sendcooldown = 0 // to avoid spamming fax messages - - var/department = "Unknown" // our department - - var/dpt = "Central Command" // the department we're sending to - - -/obj/machinery/faxmachine/New() - ..() - allfaxes += src - - if( !("[department]" in alldepartments) ) - alldepartments += department - alldepartments += "Sol Government" - -/obj/machinery/faxmachine/process() - return 0 - -/obj/machinery/faxmachine/attack_ai(mob/user as mob) - return attack_hand(user) - -/obj/machinery/faxmachine/attack_hand(mob/user as mob) - user.set_machine(src) - - var/dat = "Fax Machine
" - - var/scan_name - if(scan) - scan_name = scan.name - else - scan_name = "--------" - - dat += "Confirm Identity: [scan_name]
" - - if(authenticated) - dat += "{Log Out}" - else - dat += "{Log In}" - - dat += "
" - - if(authenticated) - dat += "Logged in to: Central Command Quantum Entanglement Network

" - - if(tofax) - dat += "Remove Paper

" - - if(sendcooldown) - dat += "Transmitter arrays realigning. Please stand by.
" - - else - dat += "Send
" - dat += "Currently sending: [tofax.name]
" - dat += "Sending to: [dpt]
" - - else - if(sendcooldown) - dat += "Please insert paper to send via secure connection.

" - dat += "Transmitter arrays realigning. Please stand by.
" - else - dat += "Please insert paper to send via secure connection.

" - - else - dat += "Proper authentication is required to use this device.

" - - if(tofax) - dat += "Remove Paper
" - - user << browse(dat, "window=copier") - onclose(user, "copier") - return - -/obj/machinery/faxmachine/Topic(href, href_list) - if(href_list["send"]) - if(tofax) - - if(dpt == "Central Command") - Centcomm_fax(src, tofax.info, tofax.name, usr) - sendcooldown = 1800 - - else if(dpt == "Sol Government") - Solgov_fax(src, tofax.info, tofax.name, usr) - sendcooldown = 1800 - else - SendFax(tofax.info, tofax.name, usr, dpt) - sendcooldown = 600 - - usr << "Message transmitted successfully." - - spawn(sendcooldown) // cooldown time - sendcooldown = 0 - - if(href_list["remove"]) - if(tofax) - if(!ishuman(usr)) - usr << "You can't do it." - else - tofax.loc = usr.loc - usr.put_in_hands(tofax) - usr << "You take the paper out of \the [src]." - tofax = null - - if(href_list["scan"]) - if (scan) - if(ishuman(usr)) - scan.loc = usr.loc - if(!usr.get_active_hand()) - usr.put_in_hands(scan) - scan = null - else - scan.loc = src.loc - scan = null - else - var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card/id)) - usr.drop_item() - I.loc = src - scan = I - authenticated = 0 - - if(href_list["dept"]) - var/lastdpt = dpt - dpt = input(usr, "Which department?", "Choose a department", "") as null|anything in alldepartments - if(!dpt) dpt = lastdpt - - if(href_list["auth"]) - if ( (!( authenticated ) && (scan)) ) - if (check_access(scan)) - authenticated = 1 - - if(href_list["logout"]) - authenticated = 0 - - updateUsrDialog() - -/obj/machinery/faxmachine/attackby(obj/item/O as obj, mob/user as mob) - - if(istype(O, /obj/item/weapon/paper)) - if(!tofax) - user.drop_item() - tofax = O - O.loc = src - user << "You insert the paper into \the [src]." - flick("faxsend", src) - updateUsrDialog() - else - user << "There is already something in \the [src]." - - else if(istype(O, /obj/item/weapon/card/id)) - - var/obj/item/weapon/card/id/idcard = O - if(!scan) - usr.drop_item() - idcard.loc = src - scan = idcard - - else if(istype(O, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - anchored = !anchored - user << "You [anchored ? "wrench" : "unwrench"] \the [src]." - return - -/proc/Centcomm_fax(var/originfax, var/sent, var/sentname, var/mob/Sender) - - var/msg = "\blue CENTCOMM FAX: [key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (RPLY): Receiving '[sentname]' via secure connection ... view message" - - for(var/client/C in admins) - if(R_ADMIN & C.holder.rights) - C << msg - -/proc/Solgov_fax(var/originfax, var/sent, var/sentname, var/mob/Sender) - var/msg = "\blue SOL GOVERNMENT FAX: [key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (RPLY): Receiving '[sentname]' via secure connection ... view message" - - for(var/client/C in admins) - if(R_ADMIN & C.holder.rights) - C << msg - - -proc/SendFax(var/sent, var/sentname, var/mob/Sender, var/dpt) - - for(var/obj/machinery/faxmachine/F in allfaxes) - if( F.department == dpt ) - if(! (F.stat & (BROKEN|NOPOWER) ) ) - - flick("faxreceive", F) - - // give the sprite some time to flick - spawn(20) - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( F.loc ) - P.name = "[sentname]" - P.info = "[sent]" - P.update_icon() - - playsound(F.loc, "sound/items/polaroid1.ogg", 50, 1) diff --git a/code/game/gamemodes/mutiny/mutiny_fluff.dm b/code/game/gamemodes/mutiny/mutiny_fluff.dm index f8634e8e76..2e4ad147a8 100644 --- a/code/game/gamemodes/mutiny/mutiny_fluff.dm +++ b/code/game/gamemodes/mutiny/mutiny_fluff.dm @@ -5,7 +5,7 @@ mode = M proc/announce_directives() - for (var/obj/machinery/faxmachine/fax in world) + for (var/obj/machinery/photocopier/faxmachine/fax in world) if (fax.department == "Captain's Office") var/obj/item/weapon/paper/directive_x = new(fax.loc) directive_x.name = "emergency action message" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index f74e26505c..db622996da 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1483,61 +1483,92 @@ log_admin("[src.owner] replied to [key_name(H)]'s illegal message with the message [input].") H << "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from your benefactor. Message as follows, agent. \"[input]\" Message ends.\"" - else if(href_list["CentcommFaxView"]) - var/info = locate(href_list["CentcommFaxView"]) + else if(href_list["AdminFaxView"]) + var/obj/item/fax = locate(href_list["AdminFaxView"]) + if (istype(fax, /obj/item/weapon/paper)) + var/obj/item/weapon/paper/P = fax + P.show_content(usr) + else if (istype(fax, /obj/item/weapon/photo)) + var/obj/item/weapon/photo/H = fax + H.show(usr) + else if (istype(fax, /obj/item/weapon/paper_bundle)) + //having multiple people turning pages on a paper_bundle can cause issues + //open a browse window listing the contents instead + var/data = "" + var/obj/item/weapon/paper_bundle/B = fax + + for (var/page = 1, page <= B.amount, page++) + var/obj/pageobj = B.contents[page] + data += "Page [page] - [pageobj.name]
" + + world << data + world << "usr = [usr]" + + usr << browse(data, "window=[B.name]") + else + usr << "\red The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]" - usr << browse("Centcomm Fax Message[info]", "window=Centcomm Fax Message") + else if (href_list["AdminFaxViewPage"]) + var/page = text2num(href_list["AdminFaxViewPage"]) + var/obj/item/weapon/paper_bundle/bundle = locate(href_list["paper_bundle"]) + + if (!bundle) return + + if (istype(bundle.contents[page], /obj/item/weapon/paper)) + var/obj/item/weapon/paper/P = bundle.contents[page] + P.show_content(src.owner, 1) + else if (istype(bundle.contents[page], /obj/item/weapon/photo)) + var/obj/item/weapon/photo/H = bundle.contents[page] + H.show(src.owner) + return else if(href_list["CentcommFaxReply"]) - var/mob/living/carbon/human/H = locate(href_list["CentcommFaxReply"]) - var/obj/machinery/faxmachine/fax = locate(href_list["originfax"]) + var/mob/sender = locate(href_list["CentcommFaxReply"]) + var/obj/machinery/photocopier/faxmachine/fax = locate(href_list["originfax"]) - var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via secure connection. NOTE: BBCode does not work, but HTML tags do! Use
for line breaks.", "Outgoing message from Centcomm", "") as message|null + var/input = input(src.owner, "Please enter a message to reply to [key_name(sender)] via secure connection. NOTE: BBCode does not work, but HTML tags do! Use
for line breaks.", "Outgoing message from Centcomm", "") as message|null if(!input) return var/customname = input(src.owner, "Pick a title for the report", "Title") as text|null + + // Create the reply message + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( null ) //hopefully the null loc won't cause trouble for us + P.name = "[command_name()]- [customname]" + P.info = input + P.update_icon() + + // Stamps + var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') + stampoverlay.icon_state = "paper_stamp-cent" + if(!P.stamped) + P.stamped = new + P.stamped += /obj/item/weapon/stamp + P.overlays += stampoverlay + P.stamps += "
This paper has been stamped by the Central Command Quantum Relay." - for(var/obj/machinery/faxmachine/F in machines) - if(F == fax) - if(! (F.stat & (BROKEN|NOPOWER) ) ) - - // animate! it's alive! - flick("faxreceive", F) - - // give the sprite some time to flick - spawn(20) - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( F.loc ) - P.name = "[command_name()]- [customname]" - P.info = input - P.update_icon() - - playsound(F.loc, "sound/items/polaroid1.ogg", 50, 1) - - // Stamps - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') - stampoverlay.icon_state = "paper_stamp-cent" - if(!P.stamped) - P.stamped = new - P.stamped += /obj/item/weapon/stamp - P.overlays += stampoverlay - P.stamps += "
This paper has been stamped by the Central Command Quantum Relay." - - src.owner << "Message reply to transmitted successfully." - log_admin("[key_name(src.owner)] replied to a fax message from [key_name(H)]: [input]") - message_admins("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(H)]", 1) - return - src.owner << "/red Unable to locate fax!" + if(fax.recievefax(P)) + src.owner << "\blue Message reply to transmitted successfully." + log_admin("[key_name(src.owner)] replied to a fax message from [key_name(sender)]: [input]") + message_admins("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(sender)]", 1) + else + src.owner << "\red Message reply failed." + + spawn(100) + del(P) + return else if(href_list["SolGovFaxReply"]) + //TODO + /* var/mob/living/carbon/human/H = locate(href_list["SolGovFaxReply"]) - var/obj/machinery/faxmachine/fax = locate(href_list["originfax"]) + var/obj/machinery/photocopier/faxmachine/fax = locate(href_list["originfax"]) var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via secure connection. NOTE: BBCode does not work, but HTML tags do! Use
for line breaks.", "Outgoing message from Centcomm", "") as message|null if(!input) return var/customname = input(src.owner, "Pick a title for the report", "Title") as text|null - for(var/obj/machinery/faxmachine/F in machines) + for(var/obj/machinery/photocopier/faxmachine/F in machines) if(F == fax) if(! (F.stat & (BROKEN|NOPOWER) ) ) @@ -1567,6 +1598,7 @@ message_admins("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(H)]", 1) return src.owner << "/red Unable to locate fax!" + */ diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm new file mode 100644 index 0000000000..33d0bb31c6 --- /dev/null +++ b/code/modules/paperwork/faxmachine.dm @@ -0,0 +1,218 @@ +var/list/obj/machinery/photocopier/faxmachine/allfaxes = list() +var/list/admin_departments = list("Central Command", "Sol Government") +var/list/alldepartments = list() + +var/list/adminfaxes = list() //cache for faxes that have been sent to admins + +/obj/machinery/photocopier/faxmachine + name = "fax machine" + icon = 'icons/obj/library.dmi' + icon_state = "fax" + insert_anim = "faxsend" + req_one_access = list(access_lawyer, access_heads, access_armory) //Warden needs to be able to Fax solgov too. + + use_power = 1 + idle_power_usage = 30 + active_power_usage = 200 + + var/obj/item/weapon/card/id/scan = null // identification + var/authenticated = 0 + var/sendcooldown = 0 // to avoid spamming fax messages + + var/department = "Unknown" // our department + + var/destination = "Central Command" // the department we're sending to + +/obj/machinery/photocopier/faxmachine/New() + ..() + allfaxes += src + + if( !(("[department]" in alldepartments) || ("[department]" in admin_departments)) ) + alldepartments |= department + +/obj/machinery/photocopier/faxmachine/attack_hand(mob/user as mob) + user.set_machine(src) + + var/dat = "Fax Machine
" + + var/scan_name + if(scan) + scan_name = scan.name + else + scan_name = "--------" + + dat += "Confirm Identity: [scan_name]
" + + if(authenticated) + dat += "{Log Out}" + else + dat += "{Log In}" + + dat += "
" + + if(authenticated) + dat += "Logged in to: Central Command Quantum Entanglement Network

" + + if(copyitem) + dat += "Remove Item

" + + if(sendcooldown) + dat += "Transmitter arrays realigning. Please stand by.
" + + else + + dat += "Send
" + dat += "Currently sending: [copyitem.name]
" + dat += "Sending to: [destination]
" + + else + if(sendcooldown) + dat += "Please insert paper to send via secure connection.

" + dat += "Transmitter arrays realigning. Please stand by.
" + else + dat += "Please insert paper to send via secure connection.

" + + else + dat += "Proper authentication is required to use this device.

" + + if(copyitem) + dat += "Remove Item
" + + user << browse(dat, "window=copier") + onclose(user, "copier") + return + +/obj/machinery/photocopier/faxmachine/Topic(href, href_list) + if(href_list["send"]) + if(copyitem) + if (destination in admin_departments) + send_admin_fax(usr, destination) + else + sendfax(destination) + + if (sendcooldown) + spawn(sendcooldown) // cooldown time + sendcooldown = 0 + + else if(href_list["remove"]) + if(copyitem) + copyitem.loc = usr.loc + usr.put_in_hands(copyitem) + usr << "You take \the [copyitem] out of \the [src]." + copyitem = null + updateUsrDialog() + + if(href_list["scan"]) + if (scan) + if(ishuman(usr)) + scan.loc = usr.loc + if(!usr.get_active_hand()) + usr.put_in_hands(scan) + scan = null + else + scan.loc = src.loc + scan = null + else + var/obj/item/I = usr.get_active_hand() + if (istype(I, /obj/item/weapon/card/id)) + usr.drop_item() + I.loc = src + scan = I + authenticated = 0 + + if(href_list["dept"]) + var/lastdestination = destination + destination = input(usr, "Which department?", "Choose a department", "") as null|anything in (alldepartments + admin_departments) + if(!destination) destination = lastdestination + + if(href_list["auth"]) + if ( (!( authenticated ) && (scan)) ) + if (check_access(scan)) + authenticated = 1 + + if(href_list["logout"]) + authenticated = 0 + + updateUsrDialog() + +/obj/machinery/photocopier/faxmachine/proc/sendfax(var/destination) + if(stat & (BROKEN|NOPOWER)) + return + + use_power(200) + + var/success = 0 + for(var/obj/machinery/photocopier/faxmachine/F in allfaxes) + if( F.department == destination ) + success = F.recievefax(copyitem) + + if (success) + visible_message("[src] beeps, \"Message transmitted successfully.\"") + //sendcooldown = 600 + else + visible_message("[src] beeps, \"Error transmitting message.\"") + +/obj/machinery/photocopier/faxmachine/proc/recievefax(var/obj/item/incoming) + if(stat & (BROKEN|NOPOWER)) + return 0 + + if(department == "Unknown") + return 0 //You can't send faxes to "Unknown" + + flick("faxreceive", src) + playsound(loc, "sound/items/polaroid1.ogg", 50, 1) + + // give the sprite some time to flick + sleep(20) + + if (istype(incoming, /obj/item/weapon/paper)) + copy(incoming) + else if (istype(incoming, /obj/item/weapon/photo)) + photocopy(incoming) + else if (istype(incoming, /obj/item/weapon/paper_bundle)) + bundlecopy(incoming) + else + return 0 + + use_power(active_power_usage) + return 1 + +/obj/machinery/photocopier/faxmachine/proc/send_admin_fax(var/mob/sender, var/destination) + if(stat & (BROKEN|NOPOWER)) + return + + use_power(200) + + var/obj/item/rcvdcopy + if (istype(copyitem, /obj/item/weapon/paper)) + rcvdcopy = copy(copyitem) + else if (istype(copyitem, /obj/item/weapon/photo)) + rcvdcopy = photocopy(copyitem) + else if (istype(copyitem, /obj/item/weapon/paper_bundle)) + rcvdcopy = bundlecopy(copyitem) + else + visible_message("[src] beeps, \"Error transmitting message.\"") + return + + rcvdcopy.loc = null //hopefully this shouldn't cause trouble + adminfaxes += rcvdcopy + + //message badmins that a fax has arrived + switch(destination) + if ("Central Command") + message_admins(sender, "CENTCOMM FAX", rcvdcopy, "CentcommFaxReply", "#006100") + if ("Sol Government") + message_admins(sender, "SOL GOVERNMENT FAX", rcvdcopy, "CentcommFaxReply", "#1F66A0") + //message_admins(sender, "SOL GOVERNMENT FAX", rcvdcopy, "SolGovFaxReply", "#1F66A0") + + sendcooldown = 1800 + sleep(50) + visible_message("[src] beeps, \"Message transmitted successfully.\"") + + +/obj/machinery/photocopier/faxmachine/proc/message_admins(var/mob/sender, var/faxname, var/obj/item/sent, var/reply_type, font_colour="#006100") + var/msg = "\blue [faxname]: [key_name(sender, 1)] (PP) (VV) (SM) (JMP) (CA) (REPLY): Receiving '[sent.name]' via secure connection ... view message" + + for(var/client/C in admins) + if(R_ADMIN & C.holder.rights) + C << msg diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index eba9744ca2..fec4af1a3a 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -60,20 +60,20 @@ icon_state = "paper" /obj/item/weapon/paper/examine(mob/user) -// ..() //We don't want them to see the dumb "this is a paper" thing every time. -// I didn't like the idea that people can read tiny pieces of paper from across the room. -// Now you need to be next to the paper in order to read it. if(in_range(user, src)) - if(!(istype(user, /mob/living/carbon/human) || istype(user, /mob/dead/observer) || istype(user, /mob/living/silicon))) - user << browse("[name][stars(info)][stamps]", "window=[name]") - onclose(user, "[name]") - else - user << browse("[name][info][stamps]", "window=[name]") - onclose(user, "[name]") + show_content(usr) else user << "It is too far away." return +/obj/item/weapon/paper/proc/show_content(var/mob/user, var/forceshow=0) + if(!(istype(user, /mob/living/carbon/human) || istype(user, /mob/dead/observer) || istype(user, /mob/living/silicon)) && !forceshow) + user << browse("[name][stars(info)][stamps]", "window=[name]") + onclose(user, "[name]") + else + user << browse("[name][info][stamps]", "window=[name]") + onclose(user, "[name]") + /obj/item/weapon/paper/verb/rename() set name = "Rename paper" set category = "Object" diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 0cced7027e..3124f58ee7 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -93,55 +93,51 @@ else user << "\red You must hold \the [P] steady to burn \the [src]." - /obj/item/weapon/paper_bundle/examine(mob/user) if(..(user, 1)) - src.attack_self(user) + src.show_content(user) else user << "It is too far away." return +/obj/item/weapon/paper_bundle/proc/show_content(mob/user as mob) + var/dat + var/obj/item/weapon/W = src[page] + switch(screen) + if(0) + dat+= "
" + dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]
" + dat+= "
Next Page


" + if(1) + dat+= "
Previous Page
" + dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]
" + dat+= "
Next Page


" + if(2) + dat+= "
Previous Page
" + dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]


" + dat+= "
" + if(istype(src[page], /obj/item/weapon/paper)) + var/obj/item/weapon/paper/P = W + if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon))) + dat+= "[P.name][stars(P.info)][P.stamps]" + else + dat+= "[P.name][P.info][P.stamps]" + user << browse(dat, "window=[name]") + else if(istype(src[page], /obj/item/weapon/photo)) + var/obj/item/weapon/photo/P = W + user << browse_rsc(P.img, "tmp_photo.png") + user << browse(dat + "[P.name]" \ + + "" \ + + "
Written on the back:
[P.scribble]" : ]"\ + + "", "window=[name]") /obj/item/weapon/paper_bundle/attack_self(mob/user as mob) - if(ishuman(user)) - var/mob/living/carbon/human/human_user = user - var/dat - var/obj/item/weapon/W = src[page] - switch(screen) - if(0) - dat+= "
" - dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]
" - dat+= "
Next Page


" - if(1) - dat+= "
Previous Page
" - dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]
" - dat+= "
Next Page


" - if(2) - dat+= "
Previous Page
" - dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]


" - dat+= "
" - if(istype(src[page], /obj/item/weapon/paper)) - var/obj/item/weapon/paper/P = W - if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon))) - dat+= "[P.name][stars(P.info)][P.stamps]" - else - dat+= "[P.name][P.info][P.stamps]" - human_user << browse(dat, "window=[name]") - P.add_fingerprint(usr) - else if(istype(src[page], /obj/item/weapon/photo)) - var/obj/item/weapon/photo/P = W - human_user << browse_rsc(P.img, "tmp_photo.png") - human_user << browse(dat + "[P.name]" \ - + "" \ - + "
Written on the back:
[P.scribble]" : ]"\ - + "", "window=[name]") - P.add_fingerprint(usr) - add_fingerprint(usr) - update_icon() + src.show_content(user) + add_fingerprint(usr) + update_icon() return - /obj/item/weapon/paper_bundle/Topic(href, href_list) ..() if((src in usr.contents) || (istype(src.loc, /obj/item/weapon/folder) && (src.loc in usr.contents))) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index ce867e818a..41e59884c7 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -2,210 +2,159 @@ name = "photocopier" icon = 'icons/obj/library.dmi' icon_state = "bigscanner" + var/insert_anim = "bigscanner1" anchored = 1 density = 1 use_power = 1 idle_power_usage = 30 active_power_usage = 200 power_channel = EQUIP - var/obj/item/weapon/paper/copy = null //what's in the copier! - var/obj/item/weapon/photo/photocopy = null - var/obj/item/weapon/paper_bundle/bundle = null + var/obj/item/copyitem = null //what's in the copier! var/copies = 1 //how many copies to print! var/toner = 30 //how much toner is left! woooooo~ var/maxcopies = 10 //how many copies can be copied at once- idea shamelessly stolen from bs12's copier! - attack_ai(mob/user as mob) - return attack_hand(user) +/obj/machinery/photocopier/attack_ai(mob/user as mob) + return attack_hand(user) - attack_hand(mob/user as mob) - user.set_machine(src) +/obj/machinery/photocopier/attack_hand(mob/user as mob) + user.set_machine(src) - var/dat = "Photocopier

" - if(copy || photocopy || bundle) - dat += "Remove Paper
" - if(toner) - dat += "Copy
" - dat += "Printing: [copies] copies." - dat += "- " - dat += "+

" - else if(toner) - dat += "Please insert paper to copy.

" - if(istype(user,/mob/living/silicon)) - dat += "Print photo from database

" - dat += "Current toner level: [toner]" - if(!toner) - dat +="
Please insert a new toner cartridge!" - user << browse(dat, "window=copier") - onclose(user, "copier") - return - - Topic(href, href_list) - if(href_list["copy"]) - if(copy) - for(var/i = 0, i < copies, i++) - if(toner > 0) - copy(copy) - sleep(15) - else - break - updateUsrDialog() - else if(photocopy) - for(var/i = 0, i < copies, i++) - if(toner > 0) - photocopy(photocopy) - sleep(15) - else - break - updateUsrDialog() - else if(bundle) - for(var/i = 0, i < copies, i++) - if(toner <= 0) - break - var/obj/item/weapon/paper_bundle/p = new /obj/item/weapon/paper_bundle (src) - var/j = 0 - for(var/obj/item/weapon/W in bundle) - if(toner <= 0) - usr << "The photocopier couldn't finish the printjob." - break - else if(istype(W, /obj/item/weapon/paper)) - W = copy(W) - else if(istype(W, /obj/item/weapon/photo)) - W = photocopy(W) - W.loc = p - p.amount++ - j++ - p.amount-- - p.loc = src.loc - p.update_icon() - p.icon_state = "paper_words" - p.name = bundle.name - p.pixel_y = rand(-8, 8) - p.pixel_x = rand(-9, 9) - sleep(15*j) - updateUsrDialog() - else if(href_list["remove"]) - if(copy) - copy.loc = usr.loc - usr.put_in_hands(copy) - usr << "You take the paper out of \the [src]." - copy = null - updateUsrDialog() - else if(photocopy) - photocopy.loc = usr.loc - usr.put_in_hands(photocopy) - usr << "You take the photo out of \the [src]." - photocopy = null - updateUsrDialog() - else if(bundle) - bundle.loc = usr.loc - usr.put_in_hands(bundle) - usr << "You take the paper bundle out of \the [src]." - bundle = null - updateUsrDialog() - else if(href_list["min"]) - if(copies > 1) - copies-- - updateUsrDialog() - else if(href_list["add"]) - if(copies < maxcopies) - copies++ - updateUsrDialog() - else if(href_list["aipic"]) - if(!istype(usr,/mob/living/silicon)) return - if(toner >= 5) - var/mob/living/silicon/tempAI = usr - var/obj/item/device/camera/siliconcam/camera = tempAI.aiCamera - - if(!camera) - return - var/obj/item/weapon/photo/selection = camera.selectpicture() - if (!selection) - return - - var/obj/item/weapon/photo/p = photocopy(selection) - p.loc = src.loc - if (p.desc == "") - p.desc += "Copy by [tempAI.name]" - else - p.desc += " - Copy by [tempAI.name]" + var/dat = "Photocopier

" + if(copyitem) + dat += "Remove Item
" + if(toner) + dat += "Copy
" + dat += "Printing: [copies] copies." + dat += "- " + dat += "+

" + else if(toner) + dat += "Please insert something to copy.

" + if(istype(user,/mob/living/silicon)) + dat += "Print photo from database

" + dat += "Current toner level: [toner]" + if(!toner) + dat +="
Please insert a new toner cartridge!" + user << browse(dat, "window=copier") + onclose(user, "copier") + return +/obj/machinery/photocopier/Topic(href, href_list) + if(href_list["copy"]) + if(stat & (BROKEN|NOPOWER)) + return + + for(var/i = 0, i < copies, i++) + if(toner <= 0) + break + + if (istype(copyitem, /obj/item/weapon/paper)) + copy(copyitem) sleep(15) + else if (istype(copyitem, /obj/item/weapon/photo)) + photocopy(copyitem) + sleep(15) + else if (istype(copyitem, /obj/item/weapon/paper_bundle)) + var/obj/item/weapon/paper_bundle/B = bundlecopy(copyitem) + sleep(15*B.amount) else - usr << "The photocopier couldn't finish the printjob." + usr << "\The [copyitem] can't be copied by \the [src]." + break + + use_power(active_power_usage) + updateUsrDialog() + else if(href_list["remove"]) + if(copyitem) + copyitem.loc = usr.loc + usr.put_in_hands(copyitem) + usr << "You take \the [copyitem] out of \the [src]." + copyitem = null updateUsrDialog() + else if(href_list["min"]) + if(copies > 1) + copies-- + updateUsrDialog() + else if(href_list["add"]) + if(copies < maxcopies) + copies++ + updateUsrDialog() + else if(href_list["aipic"]) + if(!istype(usr,/mob/living/silicon)) return + if(stat & (BROKEN|NOPOWER)) return + + if(toner >= 5) + var/mob/living/silicon/tempAI = usr + var/obj/item/device/camera/siliconcam/camera = tempAI.aiCamera - attackby(obj/item/O as obj, mob/user as mob) - if(istype(O, /obj/item/weapon/paper)) - if(!copy && !photocopy && !bundle) - user.drop_item() - copy = O - O.loc = src - user << "You insert the paper into \the [src]." - flick("bigscanner1", src) - updateUsrDialog() - else - user << "There is already something in \the [src]." - else if(istype(O, /obj/item/weapon/photo)) - if(!copy && !photocopy && !bundle) - user.drop_item() - photocopy = O - O.loc = src - user << "You insert the photo into \the [src]." - flick("bigscanner1", src) - updateUsrDialog() - else - user << "There is already something in \the [src]." - else if(istype(O, /obj/item/weapon/paper_bundle)) - if(!copy && !photocopy && !bundle) - user.drop_item() - bundle = O - O.loc = src - user << "You insert the bundle into \the [src]." - flick("bigscanner1", src) - updateUsrDialog() - else if(istype(O, /obj/item/device/toner)) - if(toner == 0) - user.drop_item() - del(O) - toner = 30 - user << "You insert the toner cartridge into \the [src]." - updateUsrDialog() - else - user << "This cartridge is not yet ready for replacement! Use up the rest of the toner." - else if(istype(O, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - anchored = !anchored - user << "You [anchored ? "wrench" : "unwrench"] \the [src]." - return + if(!camera) + return + var/datum/picture/selection = camera.selectpicture() + if (!selection) + return - ex_act(severity) - switch(severity) - if(1.0) - del(src) - if(2.0) - if(prob(50)) - del(src) - else - if(toner > 0) - new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) - toner = 0 + var/obj/item/weapon/photo/p = new /obj/item/weapon/photo (src.loc) + p.construct(selection) + if (p.desc == "") + p.desc += "Copied by [tempAI.name]" else - if(prob(50)) - if(toner > 0) - new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) - toner = 0 - return + p.desc += " - Copied by [tempAI.name]" + toner -= 5 + sleep(15) + updateUsrDialog() - blob_act() - if(prob(50)) - del(src) +/obj/machinery/photocopier/attackby(obj/item/O as obj, mob/user as mob) + if(istype(O, /obj/item/weapon/paper) || istype(O, /obj/item/weapon/photo) || istype(O, /obj/item/weapon/paper_bundle)) + if(!copyitem) + user.drop_item() + copyitem = O + O.loc = src + user << "You insert \the [O] into \the [src]." + flick(insert_anim, src) + updateUsrDialog() else - if(toner > 0) - new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) - toner = 0 - return + user << "There is already something in \the [src]." + else if(istype(O, /obj/item/device/toner)) + if(toner <= 10) //allow replacing when low toner is affecting the print darkness + user.drop_item() + user << "You insert the toner cartridge into \the [src]." + var/obj/item/device/toner/T = O + toner += T.toner_amount + del(O) + updateUsrDialog() + else + user << "This cartridge is not yet ready for replacement! Use up the rest of the toner." + else if(istype(O, /obj/item/weapon/wrench)) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + anchored = !anchored + user << "You [anchored ? "wrench" : "unwrench"] \the [src]." + return +/obj/machinery/photocopier/ex_act(severity) + switch(severity) + if(1.0) + del(src) + if(2.0) + if(prob(50)) + del(src) + else + if(toner > 0) + new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) + toner = 0 + else + if(prob(50)) + if(toner > 0) + new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) + toner = 0 + return + +/obj/machinery/photocopier/blob_act() + if(prob(50)) + del(src) + else + if(toner > 0) + new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) + toner = 0 + return /obj/machinery/photocopier/proc/copy(var/obj/item/weapon/paper/copy) var/obj/item/weapon/paper/c = new /obj/item/weapon/paper (loc) @@ -239,6 +188,8 @@ c.overlays += img c.updateinfolinks() toner-- + if(toner == 0) + visible_message("A red light on \the [src] flashes, indicating that it is out of toner.") return c @@ -258,9 +209,34 @@ toner -= 5 //photos use a lot of ink! if(toner < 0) toner = 0 + visible_message("A red light on \the [src] flashes, indicating that it is out of toner.") return p +//If need_toner is 0, the copies will still be lightened when low on toner, however it will not be prevented from printing. TODO: Implement print queues for fax machines and get rid of need_toner +/obj/machinery/photocopier/proc/bundlecopy(var/obj/item/weapon/paper_bundle/bundle, var/need_toner=1) + var/obj/item/weapon/paper_bundle/p = new /obj/item/weapon/paper_bundle (src) + for(var/obj/item/weapon/W in bundle) + if(toner <= 0 && need_toner) + toner = 0 + visible_message("A red light on \the [src] flashes, indicating that it is out of toner.") + break + + if(istype(W, /obj/item/weapon/paper)) + W = copy(W) + else if(istype(W, /obj/item/weapon/photo)) + W = photocopy(W) + W.loc = p + p.amount++ + //p.amount-- + p.loc = src.loc + p.update_icon() + p.icon_state = "paper_words" + p.name = bundle.name + p.pixel_y = rand(-8, 8) + p.pixel_x = rand(-9, 9) + return p /obj/item/device/toner name = "toner cartridge" icon_state = "tonercartridge" + var/toner_amount = 30 diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index 78592666a1..53a131eb35 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -256,7 +256,7 @@ "aeV" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/brig) "aeW" = (/obj/structure/filingcabinet,/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) "aeX" = (/obj/machinery/computer/secure_data,/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) -"aeY" = (/obj/structure/table,/obj/machinery/faxmachine{department = "Warden's Office"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) +"aeY" = (/obj/structure/table,/obj/machinery/photocopier/faxmachine{department = "Warden's Office"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "aeZ" = (/obj/machinery/computer/security,/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) "afa" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) "afb" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) @@ -532,7 +532,7 @@ "akl" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor,/area/security/brig) "akm" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 2"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/security/brig) "akn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice) -"ako" = (/obj/structure/table/reinforced,/obj/machinery/faxmachine{anchored = 0; department = "Internal Affairs"},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice) +"ako" = (/obj/structure/table/reinforced,/obj/machinery/photocopier/faxmachine{anchored = 0; department = "Internal Affairs"},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice) "akp" = (/obj/structure/flora/pottedplant{tag = "icon-plant-10"; icon_state = "plant-10"},/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) "akq" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) "akr" = (/obj/structure/disposalpipe/segment,/obj/structure/closet/secure_closet/detective,/obj/item/weapon/reagent_containers/food/drinks/flask/detflask,/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) @@ -788,7 +788,7 @@ "aph" = (/obj/structure/flora/pottedplant{tag = "icon-plant-22"; icon_state = "plant-22"},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main) "api" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) "apj" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/item/weapon/stamp,/obj/item/weapon/stamp/denied{pixel_x = 5},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) -"apk" = (/obj/structure/table/woodentable,/obj/machinery/keycard_auth{pixel_x = 30},/obj/machinery/faxmachine{department = "Head of Security"},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) +"apk" = (/obj/structure/table/woodentable,/obj/machinery/keycard_auth{pixel_x = 30},/obj/machinery/photocopier/faxmachine{department = "Head of Security"},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) "apl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos) "apm" = (/obj/structure/table/woodentable,/obj/item/device/megaphone,/obj/item/device/radio/off,/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) "apn" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) @@ -1674,7 +1674,7 @@ "aGj" = (/obj/structure/closet/wardrobe/chaplain_black,/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor{icon_state = "grimy"},/area/chapel/office) "aGk" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep) "aGl" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/bridge/meeting_room) -"aGm" = (/obj/structure/table/woodentable,/obj/machinery/faxmachine{department = "Bridge"},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aGm" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine{department = "Bridge"},/turf/simulated/floor/wood,/area/bridge/meeting_room) "aGn" = (/obj/structure/table/reinforced,/obj/machinery/door/poddoor/shutters{dir = 2; id = "bar"; layer = 3.1; name = "Bar Shutters"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aGo" = (/obj/structure/closet/coffin,/obj/machinery/door/window/eastleft{name = "Coffin Storage"; req_access_txt = "22"},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main) "aGp" = (/obj/item/weapon/book/manual/security_space_law,/obj/structure/table/woodentable,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/bridge/meeting_room) @@ -2046,7 +2046,7 @@ "aNr" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/arrivals) "aNs" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/hallway/primary/central_one) "aNt" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 1; name = "Locker Room"; sortType = "Locker Room"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor,/area/crew_quarters/locker) -"aNu" = (/obj/structure/table,/obj/machinery/faxmachine{anchored = 1; department = "Vacant Office"},/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/security/vacantoffice) +"aNu" = (/obj/structure/table,/obj/machinery/photocopier/faxmachine{anchored = 1; department = "Vacant Office"},/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/security/vacantoffice) "aNv" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/effect/decal/cleanable/blood/oil,/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/locker) "aNw" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/evahallway) "aNx" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plating,/area/maintenance/evahallway) @@ -3867,7 +3867,7 @@ "bws" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/hallway/primary/aft) "bwt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/rnd/research) "bwu" = (/obj/machinery/keycard_auth{pixel_x = -24; pixel_y = 0},/obj/machinery/door_control{desc = "A remote control-switch for engine core."; id = "EngineVent"; name = "Engine Ventillatory Control"; pixel_x = -24; pixel_y = 10; req_access_txt = "10"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door_control{desc = "A remote control-switch for the engine core airlock hatch bolts."; id = "engine_access_hatch"; name = "Engine Hatch Bolt Control"; normaldoorcontrol = 1; pixel_x = -24; pixel_y = -10; req_access_txt = "10"; specialfunctions = 4},/turf/simulated/floor,/area/crew_quarters/heads/chief) -"bwv" = (/obj/structure/table/reinforced,/obj/machinery/faxmachine{department = "Chief Engineer's Office"},/turf/simulated/floor,/area/crew_quarters/heads/chief) +"bwv" = (/obj/structure/table/reinforced,/obj/machinery/photocopier/faxmachine{department = "Chief Engineer's Office"},/turf/simulated/floor,/area/crew_quarters/heads/chief) "bww" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/clothing/glasses/meson{pixel_y = 4},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/clothing/glasses/welding/superior,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/book/manual/supermatter_engine,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/crew_quarters/heads/chief) "bwx" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hallway/primary/central_two) "bwy" = (/obj/structure/disposalpipe/segment,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central_two) @@ -3896,7 +3896,7 @@ "bwV" = (/obj/machinery/light{dir = 1},/obj/structure/bookcase/manuals/medical,/obj/item/weapon/book/manual/stasis,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak) "bwW" = (/turf/simulated/wall,/area/crew_quarters/medbreak) "bwX" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper) -"bwY" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/table,/obj/machinery/faxmachine{department = "CMO's Office"},/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/crew_quarters/heads/cmo) +"bwY" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/table,/obj/machinery/photocopier/faxmachine{department = "CMO's Office"},/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/crew_quarters/heads/cmo) "bwZ" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo) "bxa" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/hallway/primary/central_one) "bxb" = (/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo) @@ -4071,7 +4071,7 @@ "bAo" = (/obj/machinery/light_switch{pixel_y = -23},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor) "bAp" = (/turf/simulated/floor,/area/hallway/secondary/entry/aft) "bAq" = (/turf/simulated/wall,/area/medical/genetics) -"bAr" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/machinery/light,/obj/structure/table,/obj/machinery/faxmachine{department = "Research Director's Office"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hop) +"bAr" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/machinery/light,/obj/structure/table,/obj/machinery/photocopier/faxmachine{department = "Research Director's Office"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hop) "bAs" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/table,/obj/item/weapon/storage/box/botanydisk,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "bAt" = (/obj/structure/table,/obj/item/weapon/cartridge/signal/science,/obj/item/weapon/cartridge/signal/science{pixel_x = -4; pixel_y = 2},/obj/item/weapon/cartridge/signal/science{pixel_x = 4; pixel_y = 6},/obj/machinery/camera{c_tag = "Research Director's Office"; dir = 1; network = list("SS13","Research")},/obj/item/clothing/glasses/welding/superior,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor) "bAu" = (/obj/structure/closet/secure_closet/RD,/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor) @@ -4887,7 +4887,7 @@ "bPY" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room) "bPZ" = (/turf/simulated/wall,/area/medical/medbay2) "bQa" = (/obj/machinery/light_switch{pixel_y = -25},/obj/machinery/camera{c_tag = "Messaging Server"; dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_server_room) -"bQb" = (/obj/structure/table,/obj/machinery/faxmachine{department = "Head of Personnel's Office"},/turf/simulated/floor,/area/crew_quarters/heads/hop) +"bQb" = (/obj/structure/table,/obj/machinery/photocopier/faxmachine{department = "Head of Personnel's Office"},/turf/simulated/floor,/area/crew_quarters/heads/hop) "bQc" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/crew_quarters/heads/hop) "bQd" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Cloning Laboratory"; req_access_txt = "5"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/cryo) "bQe" = (/obj/machinery/camera{c_tag = "Mining Dock External"; dir = 8},/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor{icon_state = "warning"},/area/quartermaster/miningdock) @@ -4983,7 +4983,7 @@ "bRQ" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/substation/command) "bRR" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/camera{c_tag = "Command Substation"; dir = 2; network = list("SS13","Engineering")},/obj/machinery/power/smes/buildable{charge = 0},/turf/simulated/floor/plating,/area/maintenance/substation/command) "bRS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/captain) -"bRT" = (/obj/machinery/faxmachine{department = "Captain's Office"},/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/captain) +"bRT" = (/obj/machinery/photocopier/faxmachine{department = "Captain's Office"},/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bRU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bRV" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/cryo) "bRW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)