From e4cf2b221bf5a695d1f8a35814f5fec350e911ef Mon Sep 17 00:00:00 2001 From: Citinited Date: Fri, 14 Jul 2017 10:27:58 +0100 Subject: [PATCH 1/8] Makes clipboard code less horrible - You can now move a piece of paper to the top of the clipboard - You can now click on a clipboard with pen in hand to put it directly into the clipboard - Clipboard now works with paper bundles - Added "Remove clipboard pen" verb --- code/modules/paperwork/clipboard.dm | 247 ++++++++++++++-------------- 1 file changed, 125 insertions(+), 122 deletions(-) diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index da26fc96fec..81bf5202616 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -1,154 +1,157 @@ +#define PAPERWORK 1 +#define PHOTO 2 + /obj/item/weapon/clipboard name = "clipboard" + desc = "It looks like you're writing a letter. Want some help?" icon = 'icons/obj/bureaucracy.dmi' icon_state = "clipboard" item_state = "clipboard" - throwforce = 0 w_class = WEIGHT_CLASS_SMALL - throw_speed = 3 - throw_range = 10 - var/obj/item/weapon/pen/haspen //The stored pen. - var/obj/item/weapon/toppaper //The topmost piece of paper. + var/obj/item/weapon/pen + var/obj/item/weapon/toppaper slot_flags = SLOT_BELT burn_state = FLAMMABLE /obj/item/weapon/clipboard/New() + ..() update_icon() -/obj/item/weapon/clipboard/MouseDrop(obj/over_object as obj) //Quick clipboard fix. -Agouri - if(ishuman(usr)) - var/mob/M = usr - if(!(istype(over_object, /obj/screen) )) - return ..() +/obj/item/weapon/clipboard/verb/removePen() + set category = "Object" + set name = "Remove clipboard pen" + if(!ishuman(usr) || usr.incapacitated()) + return + penPlacement(FALSE, pen) - if(!M.restrained() && !M.stat) - switch(over_object.name) - if("r_hand") - M.unEquip(src) - M.put_in_r_hand(src) - if("l_hand") - M.unEquip(src) - M.put_in_l_hand(src) +/obj/item/weapon/clipboard/proc/isPaperwork(var/obj/item/weapon/W) //This could probably do with being somewhere else but for now it's fine here. + if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/paper_bundle)) + return PAPERWORK + if(istype(W, /obj/item/weapon/photo)) + return PHOTO - add_fingerprint(usr) +/obj/item/weapon/clipboard/proc/isPen(var/obj/item/weapon/W) //Should also probably be somewhere else + if(istype(W, /obj/item/weapon/pen)) + return TRUE + +/obj/item/weapon/clipboard/proc/checkTopPaper() + if(toppaper.loc != src) //Oh no! We're missing a top sheet! Better get another one to be at the top. + var/obj/item/weapon/paper/newtoppaper = locate(/obj/item/weapon/paper) in src + if(!newtoppaper) //In case there's no paper, try find a paper bundle instead (why is paper_bundle not a subtype of paper?) + newtoppaper = locate(/obj/item/weapon/paper_bundle) in src + if(newtoppaper) + toppaper = newtoppaper + else + toppaper = null + +obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen/P) + if(placing == TRUE) + if(pen) + to_chat(usr, "There's already a pen in [src]!") return + if(!isPen(P)) + return + to_chat(usr, "You slide [P] into [src].") + usr.unEquip(P) + P.forceMove(src) + pen = P + else + if(!pen) + to_chat(usr, "There isn't a pen in [src] for you to remove!") + return + to_chat(usr, "You remove [pen] from [src].") + usr.put_in_hands(pen) + pen = null + update_icon() + +/obj/item/weapon/clipboard/proc/show_clipboard() //Show them what's on the clipboard + var/dat = "[src]" + dat += "[pen ? "Remove pen" : "Add pen"]

" + for(var/obj/item/weapon/P in src) + if(isPaperwork(P) == PAPERWORK) + dat += "Remove [toppaper == P ? "On top" : "Put on top"] [toppaper == P ? "" : null][P.name][toppaper == P ? "" : null]

" + if(isPaperwork(P) == PHOTO) + dat += "Remove [P.name]

" + var/datum/browser/popup = new(usr, "clipboard", "[src]", 400, 400) + popup.set_content(dat) + popup.open() /obj/item/weapon/clipboard/update_icon() overlays.Cut() if(toppaper) overlays += toppaper.icon_state overlays += toppaper.overlays - if(haspen) + if(pen) overlays += "clipboard_pen" overlays += "clipboard_over" return -/obj/item/weapon/clipboard/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - - if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo)) - user.drop_item() - W.loc = src - if(istype(W, /obj/item/weapon/paper)) - toppaper = W - to_chat(user, "You clip the [W] onto \the [src].") +/obj/item/weapon/clipboard/attackby(obj/item/weapon/W, mob/user) + var/obj/item/weapon/P = W + if(isPaperwork(P)) //If it's a photo, paper bundle, or piece of paper, place it on the clipboard. + user.unEquip(P) + P.forceMove(src) + to_chat(user, "You clip [P] onto [src].") + if(isPaperwork(P) == PAPERWORK) + toppaper = P update_icon() + else if(isPen(W)) //If it's not a pen, we're done here + if(!toppaper) //If there's no paper we can write on, just stick the pen into the clipboard + penPlacement(TRUE, P) + return + if(pen) //If there's a pen in the clipboard, let's just let them write and not bother asking about the pen + var/obj/item/weapon/paper/T = toppaper + T.attackby(P, user) + return + var/writeonwhat = input(user, "Write on [toppaper.name], or place your pen in [src]?", "Pick one!") as null|anything in list("Write", "Place pen") + if(!writeonwhat) + return + if(writeonwhat == "Write") + var/obj/item/weapon/paper/T = toppaper + T.attackby(P, user) + else if(writeonwhat == "Place pen") + penPlacement(TRUE, P) - else if(istype(toppaper) && istype(W, /obj/item/weapon/pen)) - toppaper.attackby(W, usr, params) - update_icon() - - return - -/obj/item/weapon/clipboard/attack_self(mob/user as mob) - var/dat = "Clipboard" - if(haspen) - dat += "Remove Pen

" - else - dat += "Add Pen

" - - //The topmost paper. I don't think there's any way to organise contents in byond, so this is what we're stuck with. -Pete - if(toppaper) - var/obj/item/weapon/paper/P = toppaper - dat += "Write Remove - [P.name]

" - - for(var/obj/item/weapon/paper/P in src) - if(P==toppaper) - continue - dat += "Remove - [P.name]
" - for(var/obj/item/weapon/photo/Ph in src) - dat += "Remove - [Ph.name]
" - - user << browse(dat, "window=clipboard") - onclose(user, "clipboard") - add_fingerprint(usr) - return +/obj/item/weapon/clipboard/attack_self(mob/user) + show_clipboard() /obj/item/weapon/clipboard/Topic(href, href_list) ..() - if((usr.stat || usr.restrained())) + if(!Adjacent(usr) || usr.incapacitated()) return + var/obj/item/I = usr.get_active_hand() + if(href_list["doPenThings"]) + if(href_list["doPenThings"] == "Add") + var/obj/item/weapon/pen/W = usr.get_active_hand() + penPlacement(TRUE, W) + else + penPlacement(FALSE, pen) + else if(href_list["remove"]) + var/obj/item/P = locate(href_list["remove"]) + if(isPaperwork(P)) + usr.put_in_hands(P) + to_chat(usr, "You remove [P] from [src].") + checkTopPaper() //So we don't accidentally make the top sheet not be on the clipboard + else if(href_list["viewOrWrite"]) + var/obj/item/weapon/P = locate(href_list["viewOrWrite"]) + if(!isPaperwork(P)) + return + if(isPen(I) && isPaperwork(P) != PHOTO) //Because you can't write on photos that aren't in your hand + P.attackby(I, usr) + else if(isPaperwork(P) == PAPERWORK) //Why can't these be subtypes of paper + P.examine(usr) + else if(isPaperwork(P) == PHOTO) + var/obj/item/weapon/photo/Ph = P + Ph.show(usr) + else if(href_list["topPaper"]) + var/obj/item/weapon/paper/P = locate(href_list["topPaper"]) + if(P == toppaper) + return + to_chat(usr, "You flick the pages so that [P] is on top.") + playsound(loc, "pageturn", 50, 1) + toppaper = P + update_icon() + show_clipboard() - if(src.loc == usr) - - if(href_list["pen"]) - if(istype(haspen) && (haspen.loc == src)) - haspen.loc = usr.loc - usr.put_in_hands(haspen) - haspen = null - - else if(href_list["addpen"]) - if(!haspen) - var/obj/item/weapon/pen/W = usr.get_active_hand() - if(istype(W, /obj/item/weapon/pen)) - usr.drop_item() - W.loc = src - haspen = W - to_chat(usr, "You slot the pen into \the [src].") - - else if(href_list["write"]) - var/obj/item/weapon/P = locate(href_list["write"]) - - if(P && (P.loc == src) && istype(P, /obj/item/weapon/paper) && (P == toppaper) ) - - var/obj/item/I = usr.get_active_hand() - - if(istype(I, /obj/item/weapon/pen)) - - P.attackby(I, usr) - - else if(href_list["remove"]) - var/obj/item/P = locate(href_list["remove"]) - - if(P && (P.loc == src) && (istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/photo)) ) - - P.loc = usr.loc - usr.put_in_hands(P) - if(P == toppaper) - toppaper = null - var/obj/item/weapon/paper/newtop = locate(/obj/item/weapon/paper) in src - if(newtop && (newtop != P)) - toppaper = newtop - else - toppaper = null - - else if(href_list["read"]) - var/obj/item/weapon/paper/P = locate(href_list["read"]) - - if(P && (P.loc == src) && istype(P, /obj/item/weapon/paper) ) - P.show_content(usr) - - else if(href_list["look"]) - var/obj/item/weapon/photo/P = locate(href_list["look"]) - if(P && (P.loc == src) && istype(P, /obj/item/weapon/photo) ) - P.show(usr) - - else if(href_list["top"]) // currently unused - var/obj/item/P = locate(href_list["top"]) - if(P && (P.loc == src) && istype(P, /obj/item/weapon/paper) ) - toppaper = P - to_chat(usr, "You move [P.name] to the top.") - - //Update everything - attack_self(usr) - update_icon() - return +#undef PAPERWORK +#undef PHOTO From fda19896ea6969de1ecea516534de43242011a0c Mon Sep 17 00:00:00 2001 From: Citinited Date: Fri, 14 Jul 2017 10:43:40 +0100 Subject: [PATCH 2/8] Better variable name for the contained pen --- code/modules/paperwork/clipboard.dm | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 81bf5202616..a83db1ab21e 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -8,7 +8,7 @@ icon_state = "clipboard" item_state = "clipboard" w_class = WEIGHT_CLASS_SMALL - var/obj/item/weapon/pen + var/obj/item/weapon/pen/containedpen var/obj/item/weapon/toppaper slot_flags = SLOT_BELT burn_state = FLAMMABLE @@ -22,7 +22,7 @@ set name = "Remove clipboard pen" if(!ishuman(usr) || usr.incapacitated()) return - penPlacement(FALSE, pen) + penPlacement(FALSE, containedpen) /obj/item/weapon/clipboard/proc/isPaperwork(var/obj/item/weapon/W) //This could probably do with being somewhere else but for now it's fine here. if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/paper_bundle)) @@ -46,7 +46,7 @@ obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen/P) if(placing == TRUE) - if(pen) + if(containedpen) to_chat(usr, "There's already a pen in [src]!") return if(!isPen(P)) @@ -54,19 +54,19 @@ obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen to_chat(usr, "You slide [P] into [src].") usr.unEquip(P) P.forceMove(src) - pen = P + containedpen = P else - if(!pen) + if(!containedpen) to_chat(usr, "There isn't a pen in [src] for you to remove!") return - to_chat(usr, "You remove [pen] from [src].") - usr.put_in_hands(pen) - pen = null + to_chat(usr, "You remove [containedpen] from [src].") + usr.put_in_hands(containedpen) + containedpen = null update_icon() /obj/item/weapon/clipboard/proc/show_clipboard() //Show them what's on the clipboard var/dat = "[src]" - dat += "[pen ? "Remove pen" : "Add pen"]

" + dat += "[containedpen ? "Remove pen" : "Add pen"]

" for(var/obj/item/weapon/P in src) if(isPaperwork(P) == PAPERWORK) dat += "Remove [toppaper == P ? "On top" : "Put on top"] [toppaper == P ? "" : null][P.name][toppaper == P ? "" : null]

" @@ -81,7 +81,7 @@ obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen if(toppaper) overlays += toppaper.icon_state overlays += toppaper.overlays - if(pen) + if(containedpen) overlays += "clipboard_pen" overlays += "clipboard_over" return @@ -99,7 +99,7 @@ obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen if(!toppaper) //If there's no paper we can write on, just stick the pen into the clipboard penPlacement(TRUE, P) return - if(pen) //If there's a pen in the clipboard, let's just let them write and not bother asking about the pen + if(containedpen) //If there's a pen in the clipboard, let's just let them write and not bother asking about the pen var/obj/item/weapon/paper/T = toppaper T.attackby(P, user) return @@ -125,7 +125,7 @@ obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen var/obj/item/weapon/pen/W = usr.get_active_hand() penPlacement(TRUE, W) else - penPlacement(FALSE, pen) + penPlacement(FALSE, containedpen) else if(href_list["remove"]) var/obj/item/P = locate(href_list["remove"]) if(isPaperwork(P)) From 3b7a208384deb4339944de1f6f3869c518acf348 Mon Sep 17 00:00:00 2001 From: Citinited Date: Fri, 14 Jul 2017 11:40:15 +0100 Subject: [PATCH 3/8] Removes some redundant redundancy from the clipboard --- code/modules/paperwork/clipboard.dm | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index a83db1ab21e..a2eea3e277a 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -87,30 +87,28 @@ obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen return /obj/item/weapon/clipboard/attackby(obj/item/weapon/W, mob/user) - var/obj/item/weapon/P = W - if(isPaperwork(P)) //If it's a photo, paper bundle, or piece of paper, place it on the clipboard. - user.unEquip(P) - P.forceMove(src) - to_chat(user, "You clip [P] onto [src].") - if(isPaperwork(P) == PAPERWORK) - toppaper = P + if(isPaperwork(W)) //If it's a photo, paper bundle, or piece of paper, place it on the clipboard. + user.unEquip(W) + W.forceMove(src) + to_chat(user, "You clip [W] onto [src].") + playsound(loc, "pageturn", 50, 1) + if(isPaperwork(W) == PAPERWORK) + toppaper = W update_icon() else if(isPen(W)) //If it's not a pen, we're done here if(!toppaper) //If there's no paper we can write on, just stick the pen into the clipboard - penPlacement(TRUE, P) + penPlacement(TRUE, W) return if(containedpen) //If there's a pen in the clipboard, let's just let them write and not bother asking about the pen - var/obj/item/weapon/paper/T = toppaper - T.attackby(P, user) + toppaper.attackby(W, user) return var/writeonwhat = input(user, "Write on [toppaper.name], or place your pen in [src]?", "Pick one!") as null|anything in list("Write", "Place pen") if(!writeonwhat) return if(writeonwhat == "Write") - var/obj/item/weapon/paper/T = toppaper - T.attackby(P, user) + toppaper.attackby(W, user) else if(writeonwhat == "Place pen") - penPlacement(TRUE, P) + penPlacement(TRUE, W) /obj/item/weapon/clipboard/attack_self(mob/user) show_clipboard() @@ -144,7 +142,7 @@ obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen var/obj/item/weapon/photo/Ph = P Ph.show(usr) else if(href_list["topPaper"]) - var/obj/item/weapon/paper/P = locate(href_list["topPaper"]) + var/obj/item/weapon/P = locate(href_list["topPaper"]) if(P == toppaper) return to_chat(usr, "You flick the pages so that [P] is on top.") From 6709305a74e95fa525688438d3fd19b2b1ff186d Mon Sep 17 00:00:00 2001 From: Citinited Date: Fri, 14 Jul 2017 13:07:30 +0100 Subject: [PATCH 4/8] Adds IS_PEN(x) instead of its own proc --- code/modules/paperwork/clipboard.dm | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index a2eea3e277a..31a64098753 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -1,5 +1,6 @@ #define PAPERWORK 1 #define PHOTO 2 +#define IS_PEN(x) (istype(x, /obj/item/weapon/pen)) /obj/item/weapon/clipboard name = "clipboard" @@ -30,10 +31,6 @@ if(istype(W, /obj/item/weapon/photo)) return PHOTO -/obj/item/weapon/clipboard/proc/isPen(var/obj/item/weapon/W) //Should also probably be somewhere else - if(istype(W, /obj/item/weapon/pen)) - return TRUE - /obj/item/weapon/clipboard/proc/checkTopPaper() if(toppaper.loc != src) //Oh no! We're missing a top sheet! Better get another one to be at the top. var/obj/item/weapon/paper/newtoppaper = locate(/obj/item/weapon/paper) in src @@ -49,7 +46,7 @@ obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen if(containedpen) to_chat(usr, "There's already a pen in [src]!") return - if(!isPen(P)) + if(!IS_PEN(P)) return to_chat(usr, "You slide [P] into [src].") usr.unEquip(P) @@ -95,7 +92,7 @@ obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen if(isPaperwork(W) == PAPERWORK) toppaper = W update_icon() - else if(isPen(W)) //If it's not a pen, we're done here + else if(IS_PEN(W)) //If it's not a pen, we're done here if(!toppaper) //If there's no paper we can write on, just stick the pen into the clipboard penPlacement(TRUE, W) return @@ -134,7 +131,7 @@ obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen var/obj/item/weapon/P = locate(href_list["viewOrWrite"]) if(!isPaperwork(P)) return - if(isPen(I) && isPaperwork(P) != PHOTO) //Because you can't write on photos that aren't in your hand + if(IS_PEN(I) && isPaperwork(P) != PHOTO) //Because you can't write on photos that aren't in your hand P.attackby(I, usr) else if(isPaperwork(P) == PAPERWORK) //Why can't these be subtypes of paper P.examine(usr) @@ -153,3 +150,4 @@ obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen #undef PAPERWORK #undef PHOTO +#undef IS_PEN(x) From 2fd7da4d68a4e4ea6d16ae48e6724c9d86dc8dd9 Mon Sep 17 00:00:00 2001 From: Citinited Date: Fri, 14 Jul 2017 13:18:45 +0100 Subject: [PATCH 5/8] Whoops, forgot to remove (x) --- code/modules/paperwork/clipboard.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 31a64098753..2d6fe36efdc 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -150,4 +150,4 @@ obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen #undef PAPERWORK #undef PHOTO -#undef IS_PEN(x) +#undef IS_PEN From d3c9bf6533826a7aa09833f364b8ff3412587692 Mon Sep 17 00:00:00 2001 From: Citinited Date: Wed, 26 Jul 2017 04:01:08 +0100 Subject: [PATCH 6/8] Improvements to clipboard code You can now stamp the top piece of paper You can now look at the topmost piece of paper by examining the clipboard --- code/modules/paperwork/clipboard.dm | 30 ++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 2d6fe36efdc..71f21ea20ab 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -33,16 +33,16 @@ /obj/item/weapon/clipboard/proc/checkTopPaper() if(toppaper.loc != src) //Oh no! We're missing a top sheet! Better get another one to be at the top. - var/obj/item/weapon/paper/newtoppaper = locate(/obj/item/weapon/paper) in src - if(!newtoppaper) //In case there's no paper, try find a paper bundle instead (why is paper_bundle not a subtype of paper?) - newtoppaper = locate(/obj/item/weapon/paper_bundle) in src - if(newtoppaper) - toppaper = newtoppaper - else - toppaper = null + toppaper = locate(/obj/item/weapon/paper) in src + if(!toppaper) //In case there's no paper, try find a paper bundle instead (why is paper_bundle not a subtype of paper?) + toppaper = locate(/obj/item/weapon/paper_bundle) in src + +/obj/item/weapon/clipboard/examine(mob/user) + if(..(user, 1) && toppaper) + toppaper.examine(user) obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen/P) - if(placing == TRUE) + if(placing) if(containedpen) to_chat(usr, "There's already a pen in [src]!") return @@ -64,11 +64,13 @@ obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen /obj/item/weapon/clipboard/proc/show_clipboard() //Show them what's on the clipboard var/dat = "[src]" dat += "[containedpen ? "Remove pen" : "Add pen"]

" + if(toppaper) + dat += "Remove[toppaper.name]

" for(var/obj/item/weapon/P in src) - if(isPaperwork(P) == PAPERWORK) - dat += "Remove [toppaper == P ? "On top" : "Put on top"] [toppaper == P ? "" : null][P.name][toppaper == P ? "" : null]

" + if(isPaperwork(P) == PAPERWORK && P != toppaper) + dat += "RemovePut on top[P.name]
" if(isPaperwork(P) == PHOTO) - dat += "Remove [P.name]

" + dat += "Remove[P.name]
" var/datum/browser/popup = new(usr, "clipboard", "[src]", 400, 400) popup.set_content(dat) popup.open() @@ -106,6 +108,9 @@ obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen toppaper.attackby(W, user) else if(writeonwhat == "Place pen") penPlacement(TRUE, W) + else if(istype(W, /obj/item/weapon/stamp) && toppaper) //We can stamp the topmost piece of paper + toppaper.attackby(W, user) + update_icon() /obj/item/weapon/clipboard/attack_self(mob/user) show_clipboard() @@ -117,8 +122,7 @@ obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen var/obj/item/I = usr.get_active_hand() if(href_list["doPenThings"]) if(href_list["doPenThings"] == "Add") - var/obj/item/weapon/pen/W = usr.get_active_hand() - penPlacement(TRUE, W) + penPlacement(TRUE, I) else penPlacement(FALSE, containedpen) else if(href_list["remove"]) From 9a4a6b00016805247b57bbdc6bb43c2b1c800115 Mon Sep 17 00:00:00 2001 From: Citinited Date: Wed, 9 Aug 2017 00:37:09 +0100 Subject: [PATCH 7/8] Formatting tweaks --- code/modules/paperwork/clipboard.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 71f21ea20ab..7b47bd90125 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -25,7 +25,7 @@ return penPlacement(FALSE, containedpen) -/obj/item/weapon/clipboard/proc/isPaperwork(var/obj/item/weapon/W) //This could probably do with being somewhere else but for now it's fine here. +/obj/item/weapon/clipboard/proc/isPaperwork(obj/item/weapon/W) //This could probably do with being somewhere else but for now it's fine here. if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/paper_bundle)) return PAPERWORK if(istype(W, /obj/item/weapon/photo)) @@ -41,7 +41,7 @@ if(..(user, 1) && toppaper) toppaper.examine(user) -obj/item/weapon/clipboard/proc/penPlacement(var/placing, var/obj/item/weapon/pen/P) +obj/item/weapon/clipboard/proc/penPlacement(placing, obj/item/weapon/pen/P) if(placing) if(containedpen) to_chat(usr, "There's already a pen in [src]!") From acc6aaa73a2ef791b9f3aeb27e7f7335cd221837 Mon Sep 17 00:00:00 2001 From: Citinited Date: Mon, 16 Oct 2017 03:29:22 +0100 Subject: [PATCH 8/8] Tigercat formatting changes --- code/__DEFINES/is_helpers.dm | 2 + code/modules/paperwork/clipboard.dm | 60 +++++++++++++++-------------- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 393247c5a1f..0023f3bb4f7 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -9,6 +9,8 @@ #define is_cleanable(A) (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/rune)) //if something is cleanable +#define is_pen(W) (istype(W, /obj/item/weapon/pen)) + var/list/static/global/pointed_types = typecacheof(list( /obj/item/weapon/pen, /obj/item/weapon/screwdriver, diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 7b47bd90125..e46e1ed03f9 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -1,6 +1,5 @@ #define PAPERWORK 1 #define PHOTO 2 -#define IS_PEN(x) (istype(x, /obj/item/weapon/pen)) /obj/item/weapon/clipboard name = "clipboard" @@ -9,6 +8,7 @@ icon_state = "clipboard" item_state = "clipboard" w_class = WEIGHT_CLASS_SMALL + throw_speed = 3 var/obj/item/weapon/pen/containedpen var/obj/item/weapon/toppaper slot_flags = SLOT_BELT @@ -18,12 +18,12 @@ ..() update_icon() -/obj/item/weapon/clipboard/verb/removePen() +/obj/item/weapon/clipboard/verb/removePen(mob/user) set category = "Object" set name = "Remove clipboard pen" - if(!ishuman(usr) || usr.incapacitated()) + if(!ishuman(user) || user.incapacitated()) return - penPlacement(FALSE, containedpen) + penPlacement(user, containedpen, FALSE) /obj/item/weapon/clipboard/proc/isPaperwork(obj/item/weapon/W) //This could probably do with being somewhere else but for now it's fine here. if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/paper_bundle)) @@ -41,27 +41,27 @@ if(..(user, 1) && toppaper) toppaper.examine(user) -obj/item/weapon/clipboard/proc/penPlacement(placing, obj/item/weapon/pen/P) +obj/item/weapon/clipboard/proc/penPlacement(mob/user, obj/item/weapon/pen/P, placing) if(placing) if(containedpen) - to_chat(usr, "There's already a pen in [src]!") + to_chat(user, "There's already a pen in [src]!") return - if(!IS_PEN(P)) + if(!is_pen(P)) return - to_chat(usr, "You slide [P] into [src].") - usr.unEquip(P) + to_chat(user, "You slide [P] into [src].") + user.unEquip(P) P.forceMove(src) containedpen = P else if(!containedpen) - to_chat(usr, "There isn't a pen in [src] for you to remove!") + to_chat(user, "There isn't a pen in [src] for you to remove!") return - to_chat(usr, "You remove [containedpen] from [src].") - usr.put_in_hands(containedpen) + to_chat(user, "You remove [containedpen] from [src].") + user.put_in_hands(containedpen) containedpen = null update_icon() -/obj/item/weapon/clipboard/proc/show_clipboard() //Show them what's on the clipboard +/obj/item/weapon/clipboard/proc/showClipboard(mob/user) //Show them what's on the clipboard var/dat = "[src]" dat += "[containedpen ? "Remove pen" : "Add pen"]

" if(toppaper) @@ -71,7 +71,7 @@ obj/item/weapon/clipboard/proc/penPlacement(placing, obj/item/weapon/pen/P) dat += "RemovePut on top[P.name]
" if(isPaperwork(P) == PHOTO) dat += "Remove[P.name]
" - var/datum/browser/popup = new(usr, "clipboard", "[src]", 400, 400) + var/datum/browser/popup = new(user, "clipboard", "[src]", 400, 400) popup.set_content(dat) popup.open() @@ -94,26 +94,29 @@ obj/item/weapon/clipboard/proc/penPlacement(placing, obj/item/weapon/pen/P) if(isPaperwork(W) == PAPERWORK) toppaper = W update_icon() - else if(IS_PEN(W)) //If it's not a pen, we're done here + else if(is_pen(W)) if(!toppaper) //If there's no paper we can write on, just stick the pen into the clipboard - penPlacement(TRUE, W) + penPlacement(user, W, TRUE) return if(containedpen) //If there's a pen in the clipboard, let's just let them write and not bother asking about the pen toppaper.attackby(W, user) return var/writeonwhat = input(user, "Write on [toppaper.name], or place your pen in [src]?", "Pick one!") as null|anything in list("Write", "Place pen") - if(!writeonwhat) + if(!Adjacent(user) || user.incapacitated()) return - if(writeonwhat == "Write") - toppaper.attackby(W, user) - else if(writeonwhat == "Place pen") - penPlacement(TRUE, W) + switch(writeonwhat) + if("Write") + toppaper.attackby(W, user) + if("Place pen") + penPlacement(user, W, TRUE) + else + return else if(istype(W, /obj/item/weapon/stamp) && toppaper) //We can stamp the topmost piece of paper toppaper.attackby(W, user) update_icon() /obj/item/weapon/clipboard/attack_self(mob/user) - show_clipboard() + showClipboard(user) /obj/item/weapon/clipboard/Topic(href, href_list) ..() @@ -122,20 +125,20 @@ obj/item/weapon/clipboard/proc/penPlacement(placing, obj/item/weapon/pen/P) var/obj/item/I = usr.get_active_hand() if(href_list["doPenThings"]) if(href_list["doPenThings"] == "Add") - penPlacement(TRUE, I) + penPlacement(usr, I, TRUE) else - penPlacement(FALSE, containedpen) + penPlacement(usr, containedpen, FALSE) else if(href_list["remove"]) var/obj/item/P = locate(href_list["remove"]) if(isPaperwork(P)) usr.put_in_hands(P) - to_chat(usr, "You remove [P] from [src].") + to_chat(usr, "You remove [P] from [src].") checkTopPaper() //So we don't accidentally make the top sheet not be on the clipboard else if(href_list["viewOrWrite"]) var/obj/item/weapon/P = locate(href_list["viewOrWrite"]) if(!isPaperwork(P)) return - if(IS_PEN(I) && isPaperwork(P) != PHOTO) //Because you can't write on photos that aren't in your hand + if(is_pen(I) && isPaperwork(P) != PHOTO) //Because you can't write on photos that aren't in your hand P.attackby(I, usr) else if(isPaperwork(P) == PAPERWORK) //Why can't these be subtypes of paper P.examine(usr) @@ -146,12 +149,11 @@ obj/item/weapon/clipboard/proc/penPlacement(placing, obj/item/weapon/pen/P) var/obj/item/weapon/P = locate(href_list["topPaper"]) if(P == toppaper) return - to_chat(usr, "You flick the pages so that [P] is on top.") + to_chat(usr, "You flick the pages so that [P] is on top.") playsound(loc, "pageturn", 50, 1) toppaper = P update_icon() - show_clipboard() + showClipboard(usr) #undef PAPERWORK #undef PHOTO -#undef IS_PEN