diff --git a/baystation12.dme b/baystation12.dme index 53a88423eb..7be8481944 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1059,6 +1059,7 @@ #include "code\modules\paperwork\folders.dm" #include "code\modules\paperwork\handlabeler.dm" #include "code\modules\paperwork\paper.dm" +#include "code\modules\paperwork\paper_bundle.dm" #include "code\modules\paperwork\paperbin.dm" #include "code\modules\paperwork\pen.dm" #include "code\modules\paperwork\photocopier.dm" diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 38b42a86b9..aeb6851145 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -29,12 +29,12 @@ /obj/structure/filingcabinet/initialize() for(var/obj/item/I in loc) - if(istype(I, /obj/item/weapon/paper) || istype(I, /obj/item/weapon/folder) || istype(I, /obj/item/weapon/photo)) + if(istype(I, /obj/item/weapon/paper) || istype(I, /obj/item/weapon/folder) || istype(I, /obj/item/weapon/photo) || istype(I, /obj/item/weapon/paper_bundle)) I.loc = src /obj/structure/filingcabinet/attackby(obj/item/P as obj, mob/user as mob) - if(istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/folder) || istype(P, /obj/item/weapon/photo)) + if(istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/folder) || istype(P, /obj/item/weapon/photo) || istype(P, /obj/item/weapon/paper_bundle)) user << "You put [P] in [src]." user.drop_item() P.loc = src diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index 1c491c126d..0f1b612e93 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -29,7 +29,7 @@ return /obj/item/weapon/folder/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo)) + if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo) || istype(W, /obj/item/weapon/paper_bundle)) user.drop_item() W.loc = src user << "You put the [W] into \the [src]." @@ -47,6 +47,8 @@ dat += "Remove - [P.name]
" for(var/obj/item/weapon/photo/Ph in src) dat += "Remove - [Ph.name]
" + for(var/obj/item/weapon/paper_bundle/Pb in src) + dat += "Remove - [Pb.name]
" user << browse(dat, "window=folder") onclose(user, "folder") add_fingerprint(usr) @@ -78,6 +80,11 @@ var/obj/item/weapon/photo/P = locate(href_list["look"]) if(P) P.show(usr) + if(href_list["browse"]) + var/obj/item/weapon/paper_bundle/P = locate(href_list["browse"]) + if(P) + P.attack_self(usr) + onclose(usr, "[P.name]") //Update everything attack_self(usr) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 992cbd22d6..4fec2ee842 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -315,7 +315,33 @@ if(user.mind && (user.mind.assigned_role == "Clown")) clown = 1 - if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon)) + if(istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/photo)) + var/obj/item/weapon/paper_bundle/B = new(src.loc) + if (name != "paper") + B.name = name + else if (P.name != "paper" && P.name != "photo") + B.name = P.name + user.drop_from_inventory(P) + if (user.r_hand == src) + user.drop_from_inventory(src) + B.loc = user + user.r_hand = B + B.layer = 20 + else if (user.l_hand == src) + user.drop_from_inventory(src) + B.loc = user + user.l_hand = B + B.layer = 20 + if(istype(user,/mob/living/carbon/human)) + user:update_inv_l_hand() + user:update_inv_r_hand() + user << "You clip the [P.name] to [(src.name == "paper") ? "the paper" : src.name]." + src.loc = B + P.loc = B + B.amount++ + B.update_icon() + + else if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon)) if ( istype(P, /obj/item/weapon/pen/robopen) && P:mode == 2 ) P:RenamePaper(user,src) else diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm new file mode 100644 index 0000000000..d6c0058ff8 --- /dev/null +++ b/code/modules/paperwork/paper_bundle.dm @@ -0,0 +1,228 @@ +/obj/item/weapon/paper_bundle + name = "paper bundle" + gender = PLURAL + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "paper" + item_state = "paper" + throwforce = 0 + w_class = 1.0 + throw_range = 2 + throw_speed = 1 + layer = 4 + pressure_resistance = 1 + attack_verb = list("bapped") + var/amount = 0 //Amount of items clipped to the paper + var/page = 1 + var/screen = 0 + + +/obj/item/weapon/paper_bundle/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + var/obj/item/weapon/paper/P + if(istype(W, /obj/item/weapon/paper)) + P = W + amount++ + if(screen == 2) + screen = 1 + user << "You add [(P.name == "paper") ? "the paper" : P.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name]." + user.drop_from_inventory(P) + P.loc = src + if(istype(user,/mob/living/carbon/human)) + user:update_inv_l_hand() + user:update_inv_r_hand() + else if(istype(W, /obj/item/weapon/photo)) + amount++ + if(screen == 2) + screen = 1 + user << "You add [(W.name == "photo") ? "the photo" : W.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name]." + user.drop_from_inventory(W) + W.loc = src + if(istype(user,/mob/living/carbon/human)) + user:update_inv_l_hand() + user:update_inv_r_hand() + else + if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/toy/crayon)) + usr << browse("", "window=[name]") //Closes the dialog + P = src[page] + P.attackby(W, user) + update_icon() + add_fingerprint(usr) + return + + +/obj/item/weapon/paper_bundle/examine() + set src in oview(1) + + usr << desc + if(in_range(usr, src)) + src.attack_self(usr) + else + usr << "It is too far away." + return + + +/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 + 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) + return + + +/obj/item/weapon/paper_bundle/Topic(href, href_list) + ..() + if((src in usr.contents) || (src.loc in usr.contents)) + usr.set_machine(src) + if(href_list["next_page"]) + if(page == amount) + screen = 2 + else if(page == 1) + screen = 1 + else if(page == amount+1) + return + page++ + playsound(src.loc, "pageturn", 50, 1) + if(href_list["prev_page"]) + if(page == 1) + return + else if(page == 2) + screen = 0 + else if(page == amount+1) + screen = 1 + page-- + playsound(src.loc, "pageturn", 50, 1) + if(href_list["remove"]) + var/obj/item/weapon/W = src[page] + W.loc = usr.loc + if(istype(usr,/mob/living/carbon)) + //Place the item in the user's hand if possible + if(!usr.r_hand) + W.loc = usr + usr.r_hand = W + W.layer = 20 + else if(!usr.l_hand) + W.loc = usr + usr.l_hand = W + W.layer = 20 + usr << "You remove the [W.name] from the bundle." + + if(amount == 1) + var/obj/item/weapon/paper/P = src[1] + P.loc = usr.loc + if (usr.r_hand == src) + usr.drop_from_inventory(src) + P.loc = usr + usr.r_hand = P + P.layer = 20 + else if (usr.l_hand == src) + usr.drop_from_inventory(src) + P.loc = usr + usr.l_hand = P + P.layer = 20 + if(istype(usr,/mob/living/carbon/human)) + usr:update_inv_l_hand() + usr:update_inv_r_hand() + del(src) + else if(page == amount) + screen = 2 + else if(page == amount+1) + page-- + + if(istype(usr,/mob/living/carbon/human)) + usr:update_inv_l_hand() + usr:update_inv_r_hand() + amount-- + update_icon() + else + usr << "You need to hold it in hands!" + if (istype(src.loc, /mob) ||istype(src.loc.loc, /mob)) + src.attack_self(src.loc) + updateUsrDialog() + + + +/obj/item/weapon/paper_bundle/verb/rename() + set name = "Rename bundle" + set category = "Object" + set src in usr + + var/n_name = copytext(sanitize(input(usr, "What would you like to label the bundle?", "Bundle Labelling", null) as text), 1, MAX_NAME_LEN) + if((loc == usr && usr.stat == 0)) + name = "[(n_name ? text("[n_name]") : "paper")]" + add_fingerprint(usr) + return + + +/obj/item/weapon/paper_bundle/verb/remove_all() + set name = "Loose bundle" + set category = "Object" + set src in usr + + usr << "You loosen the bundle." + for(var/obj/O in src) + O.loc = usr.loc + usr.drop_from_inventory(src) + if(istype(usr,/mob/living/carbon/human)) + usr:update_inv_l_hand() + usr:update_inv_r_hand() + del(src) + return + + +/obj/item/weapon/paper_bundle/update_icon() + var/obj/item/weapon/paper/P = src[1] + icon_state = P.icon_state + overlays = P.overlays + underlays = 0 + var/i = 0 + var/photo + for(var/obj/O in src) + var/image/img = image('icons/obj/bureaucracy.dmi') + if(istype(O, /obj/item/weapon/paper)) + img.icon_state = O.icon_state + img.pixel_x -= min(1*i, 2) + img.pixel_y -= min(1*i, 2) + pixel_x = min(0.5*i, 1) + pixel_y = min( 1*i, 2) + underlays += img + i++ + else if(istype(O, /obj/item/weapon/photo)) + img.icon_state = "photo" + photo = 1 + overlays += img + if(i>1) + desc = "[i] papers clipped to each other." + else + desc = "A single sheet of paper." + if(photo) + desc += "\nThere is a photo attached to it." + overlays += image('icons/obj/bureaucracy.dmi', "clip") + return \ No newline at end of file diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 2a0feb027a..a1d379cad9 100644 Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ