diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 6fcd3ba0377..6f368ae3d60 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -521,18 +521,6 @@
access = get_all_centcom_access()
..()
-/obj/item/weapon/clipboard
- name = "clipboard"
- desc = "Apply paper to this to write better. Can also hold pens."
- icon = 'items.dmi'
- icon_state = "clipboard00"
- var/obj/item/weapon/pen/pen = null
- item_state = "clipboard"
- throwforce = 0
- w_class = 2.0
- throw_speed = 3
- throw_range = 10
-
#define MAXCOIL 30
/obj/item/weapon/cable_coil
name = "cable coil"
@@ -757,7 +745,6 @@
m_amt = 400
origin_tech = "magnets=1"
-
/obj/item/weapon/caution
desc = "Caution! Wet Floor!"
name = "wet floor sign"
@@ -775,27 +762,6 @@
name = "warning cone"
icon_state = "cone"
-
-/obj/item/weapon/paper
- name = "paper"
- gender = PLURAL
- icon = 'paper.dmi'
- icon_state = "paper"
- var/info = null
- throwforce = 0
- w_class = 1.0
- throw_speed = 3
- throw_range = 15
- layer = 4
- var/list/stamped
- var/see_face = 1
- var/body_parts_covered = HEAD
- var/protective_temperature = T0C + 10
- var/heat_transfer_coefficient = 0.99
- var/gas_transfer_coefficient = 1
- var/permeability_coefficient = 0.99
- var/siemens_coefficient = 0.80
-
/obj/item/weapon/directions
name = "crumpled paper"
gender = PLURAL
@@ -843,41 +809,6 @@
name = "paper- 'Standard Operating Procedure'"
info = "Alert Levels:
\nBlue- Emergency
\n\t1. Caused by fire
\n\t2. Caused by manual interaction
\n\tAction:
\n\t\tClose all fire doors. These can only be opened by reseting the alarm
\nRed- Ejection/Self Destruct
\n\t1. Caused by module operating computer.
\n\tAction:
\n\t\tAfter the specified time the module will eject completely.
\n
\nEngine Maintenance Instructions:
\n\tShut off ignition systems:
\n\tActivate internal power
\n\tActivate orbital balance matrix
\n\tRemove volatile liquids from area
\n\tWear a fire suit
\n
\n\tAfter
\n\t\tDecontaminate
\n\t\tVisit medical examiner
\n
\nToxin Laboratory Procedure:
\n\tWear a gas mask regardless
\n\tGet an oxygen tank.
\n\tActivate internal atmosphere
\n
\n\tAfter
\n\t\tDecontaminate
\n\t\tVisit medical examiner
\n
\nDisaster Procedure:
\n\tFire:
\n\t\tActivate sector fire alarm.
\n\t\tMove to a safe area.
\n\t\tGet a fire suit
\n\t\tAfter:
\n\t\t\tAssess Damage
\n\t\t\tRepair damages
\n\t\t\tIf needed, Evacuate
\n\tMeteor Shower:
\n\t\tActivate fire alarm
\n\t\tMove to the back of ship
\n\t\tAfter
\n\t\t\tRepair damage
\n\t\t\tIf needed, Evacuate
\n\tAccidental Reentry:
\n\t\tActivate fire alrms in front of ship.
\n\t\tMove volatile matter to a fire proof area!
\n\t\tGet a fire suit.
\n\t\tStay secure until an emergency ship arrives.
\n
\n\t\tIf ship does not arrive-
\n\t\t\tEvacuate to a nearby safe area!"
-/obj/item/weapon/paper_bin
- name = "paper bin"
- desc = "This contains many papers."
- icon = 'paper.dmi'
- icon_state = "paper_bin1"
- var/amount = 30.0
- item_state = "sheet-metal"
- throwforce = 1
- w_class = 3.0
- throw_speed = 3
- throw_range = 7
-
-/obj/item/weapon/pen
- desc = "It's a normal black ink pen."
- name = "pen"
- icon = 'paper.dmi'
- icon_state = "pen"
- flags = FPRINT | ONBELT | TABLEPASS
- throwforce = 0
- w_class = 1.0
- throw_speed = 7
- throw_range = 15
- m_amt = 10
- var/colour = "black" //what colour the ink is!
-
-/obj/item/weapon/pen/blue
- desc = "It's a normal blue ink pen."
- icon_state = "pen_blue"
- colour = "blue"
-
-/obj/item/weapon/pen/red
- desc = "It's a normal red ink pen."
- icon_state = "pen_red"
- colour = "red"
-
/obj/item/weapon/banhammer
desc = "A banhammer"
name = "banhammer"
@@ -1392,60 +1323,6 @@
w_class = 1.0
origin_tech = "biotech=2"
-/obj/item/weapon/stamp
- desc = "A rubber stamp for stamping important documents."
- name = "rubber stamp"
- icon = 'paper.dmi'
- icon_state = "stamp-qm"
- item_state = "stamp"
- flags = FPRINT | TABLEPASS
- throwforce = 0
- w_class = 1.0
- throw_speed = 7
- throw_range = 15
- m_amt = 60
- var/color = "cargo"
-
-/obj/item/weapon/stamp/captain
- name = "captain's rubber stamp"
- icon_state = "stamp-cap"
- color = "captain"
-
-/obj/item/weapon/stamp/hop
- name = "head of personnel's rubber stamp"
- icon_state = "stamp-hop"
- color = "hop"
-
-/obj/item/weapon/stamp/hos
- name = "head of security's rubber stamp"
- icon_state = "stamp-hos"
- color = "hosred"
-
-/obj/item/weapon/stamp/ce
- name = "chief engineer's rubber stamp"
- icon_state = "stamp-ce"
- color = "chief"
-
-/obj/item/weapon/stamp/rd
- name = "research director's rubber stamp"
- icon_state = "stamp-rd"
- color = "director"
-
-/obj/item/weapon/stamp/cmo
- name = "chief medical officer's rubber stamp"
- icon_state = "stamp-cmo"
- color = "medical"
-
-/obj/item/weapon/stamp/denied
- name = "\improper DENIED rubber stamp"
- icon_state = "stamp-qm"
- color = "redcoat"
-
-/obj/item/weapon/stamp/clown
- name = "clown's rubber stamp"
- icon_state = "stamp-clown"
- color = "clown"
-
/*
/obj/item/weapon/cigarpacket
name = "Pete's Cuban Cigars"
diff --git a/code/game/objects/items/weapons/hand_lablers.dm b/code/game/objects/items/weapons/hand_lablers.dm
deleted file mode 100644
index ea560cb43ce..00000000000
--- a/code/game/objects/items/weapons/hand_lablers.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-/obj/item/weapon/hand_labeler
- icon = 'items.dmi'
- icon_state = "labeler"
- item_state = "flight"
- name = "Hand labeler"
- var/label = null
- var/labels_left = 30
-
-/obj/item/weapon/hand_labeler/afterattack(atom/A, mob/user as mob)
- if(A==loc) // if placing the labeller into something (e.g. backpack)
- return // don't set a label
-
- if(!labels_left)
- user << "\red No labels left."
- return
- if(!label || !length(label))
- user << "\red No text set."
- return
- if(length(A.name) + length(label) > 64)
- user << "\red Label too big."
- return
- if(ishuman(A))
- user << "\red You can't label humans."
- return
-
- for(var/mob/M in viewers())
- if ((M.client && !( M.blinded )))
- M << "\blue [user] labels [A] as [label]."
- A.name = "[A.name] ([label])"
-
-/obj/item/weapon/hand_labeler/attack_self()
- var/str = input(usr,"Label text?","Set label","")
- if(!str || !length(str))
- usr << "\red Invalid text."
- return
- if(length(str) > 64)
- usr << "\red Text too long."
- return
- label = str
- usr << "\blue You set the text to '[str]'."
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/papers_bins.dm b/code/game/objects/items/weapons/papers_bins.dm
deleted file mode 100644
index 40c8d01a9e8..00000000000
--- a/code/game/objects/items/weapons/papers_bins.dm
+++ /dev/null
@@ -1,712 +0,0 @@
-/*
-CONTAINS:
-PAPER
-PAPER BIN
-WRAPPING PAPER
-GIFTS
-BEDSHEET BIN
-PHOTOGRAPHS
-CLIPBOARDS
-
-*/
-
-
-// PAPER
-
-/obj/item/weapon/paper/New()
-
- ..()
- src.pixel_y = rand(-8, 8)
- src.pixel_x = rand(-9, 9)
- spawn(2)
- if(src.info)
- src.overlays += "paper_words"
- return
-
-/obj/item/weapon/paper/update_icon()
- if(src.info)
- src.overlays += "paper_words"
- return
-
-/obj/item/weapon/paper/examine()
- set src in view()
-
- ..()
- if (!( istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon) ))
- usr << browse(text("
[][]", src.name, stars(src.info)), text("window=[]", src.name))
- onclose(usr, "[src.name]")
- else
- usr << browse(text("[][]", src.name, src.info), text("window=[]", src.name))
- onclose(usr, "[src.name]")
- return
-
-/obj/item/weapon/paper/verb/rename()
- set name = "Rename paper"
- set category = "Object"
- set src in usr
-
- if ((usr.mutations & CLUMSY) && prob(50))
- usr << text("\red You cut yourself on the paper.")
- return
- var/n_name = input(usr, "What would you like to label the paper?", "Paper Labelling", null) as text
- n_name = copytext(n_name, 1, 32)
- if ((src.loc == usr && usr.stat == 0))
- src.name = text("paper[]", (n_name ? text("- '[n_name]'") : null))
- src.add_fingerprint(usr)
- return
-
-/obj/item/weapon/paper/attack_self(mob/living/user as mob)
- examine()
- return
-
-/obj/item/weapon/paper/attack_ai(var/mob/living/silicon/ai/user as mob)
- var/dist
- if (istype(user) && user.current) //is AI
- dist = get_dist(src, user.current)
- else //cyborg or AI not seeing through a camera
- dist = get_dist(src, user)
- if (dist < 2)
- usr << browse(text("[][]", src.name, src.info), text("window=[]", src.name))
- onclose(usr, "[src.name]")
- else
- usr << browse(text("[][]", src.name, stars(src.info)), text("window=[]", src.name))
- onclose(usr, "[src.name]")
- return
-
-/obj/item/weapon/paper/attackby(obj/item/weapon/P as obj, mob/user as mob)
- ..()
- var/clown = 0
- if(user.mind && (user.mind.assigned_role == "Clown"))
- clown = 1
-
- if (istype(P, /obj/item/weapon/pen))
- var/t = strip_html_simple(input(user, "What text do you wish to add?", text("[]", src.name), null),8192) as message
-
- if ((!in_range(src, usr) && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.equipped() != P))
- return
-
- t = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
- t = dd_replacetext(t, "\[center\]", "")
- t = dd_replacetext(t, "\[/center\]", "")
- t = dd_replacetext(t, "\[list\]", "")
- t = dd_replacetext(t, "\[/list\]", "
")
- t = dd_replacetext(t, "\[*\]", "")
- t = dd_replacetext(t, "\[*\]", "")
- t = dd_replacetext(t, "\[br\]", "
")
- t = dd_replacetext(t, "\[hr\]", "
")
- t = dd_replacetext(t, "\[b\]", "")
- t = dd_replacetext(t, "\[/b\]", "")
- t = dd_replacetext(t, "\[i\]", "")
- t = dd_replacetext(t, "\[/i\]", "")
- t = dd_replacetext(t, "\[u\]", "")
- t = dd_replacetext(t, "\[/u\]", "")
- t = dd_replacetext(t, "\[small\]", "")
- t = dd_replacetext(t, "\[/small\]", "")
- t = dd_replacetext(t, "\[large\]", "")
- t = dd_replacetext(t, "\[/large\]", "")
- t = dd_replacetext(t, "\[sign\]", text("[user.real_name]"))
-
- var/obj/item/weapon/pen/i = P
- t = text("[t]")
-
- if(!overlays.Find("paper_words"))
- src.overlays += "paper_words"
- src.info += t
- return
-
- if(istype(P, /obj/item/toy/crayon))
- var/t = strip_html_simple(input(user, "What text do you wish to add?", text("[]", src.name), null),8192) as message
-
- if ((!in_range(src, usr) && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.equipped() != P))
- return
-
- t = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
- t = dd_replacetext(t, "\[center\]", "")
- t = dd_replacetext(t, "\[/center\]", "")
- t = dd_replacetext(t, "\[br\]", "
")
- t = dd_replacetext(t, "\[b\]", "")
- t = dd_replacetext(t, "\[/b\]", "")
- t = dd_replacetext(t, "\[i\]", "")
- t = dd_replacetext(t, "\[/i\]", "")
- t = dd_replacetext(t, "\[u\]", "")
- t = dd_replacetext(t, "\[/u\]", "")
- t = dd_replacetext(t, "\[large\]", "")
- t = dd_replacetext(t, "\[/large\]", "")
- t = dd_replacetext(t, "\[sign\]", text("[user.real_name]"))
-
- var/obj/item/toy/crayon/i = P
- t = text("[t]")
-
- if(!overlays.Find("paper_words"))
- src.overlays += "paper_words"
- src.info += t
- return
-
- else
- if(istype(P, /obj/item/weapon/stamp))
- if ((!in_range(src, usr) && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.equipped() != P))
- return
- src.info += text("
This paper has been stamped with the [].
", P.name)
- switch(P.type)
- if(/obj/item/weapon/stamp/captain)
- src.overlays += "paper_stamped_cap"
- if(/obj/item/weapon/stamp/hop)
- src.overlays += "paper_stamped_hop"
- if(/obj/item/weapon/stamp/hos)
- src.overlays += "paper_stamped_hos"
- if(/obj/item/weapon/stamp/ce)
- src.overlays += "paper_stamped_ce"
- if(/obj/item/weapon/stamp/rd)
- src.overlays += "paper_stamped_rd"
- if(/obj/item/weapon/stamp/cmo)
- src.overlays += "paper_stamped_cmo"
- if(/obj/item/weapon/stamp/denied)
- src.overlays += "paper_stamped_denied"
- if(/obj/item/weapon/stamp/clown)
- if (!clown)
- usr << "\red You are totally unable to use the stamp. HONK!"
- return
- else
- src.overlays += "paper_stamped_clown"
- else
- src.overlays += "paper_stamped"
- if(!stamped)
- stamped = new
- stamped += P.type
-
- user << "\blue You stamp the paper with your rubber stamp."
- /*
- else
- if (istype(P, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/W = P
- if ((W.welding && W.weldfuel > 0))
- for(var/mob/O in viewers(user, null))
- O.show_message(text("\red [] burns [] with the welding tool!", user, src), 1, "\red You hear a small burning noise", 2)
- //Foreach goto(323)
- spawn( 0 )
- src.burn(1800000.0)
- return
- else
- if (istype(P, /obj/item/device/igniter))
- for(var/mob/O in viewers(user, null))
- O.show_message(text("\red [] burns [] with the igniter!", user, src), 1, "\red You hear a small burning noise", 2)
- //Foreach goto(406)
- spawn( 0 )
- src.burn(1800000.0)
- return
- else
- if (istype(P, /obj/item/weapon/wirecutters))
- for(var/mob/O in viewers(user, null))
- O.show_message(text("\red [] starts cutting []!", user, src), 1)
- //Foreach goto(489)
- sleep(50)
- if (((src.loc == src || get_dist(src, user) <= 1) && (!( user.stat ) && !( user.restrained() ))))
- for(var/mob/O in viewers(user, null))
- O.show_message(text("\red [] cuts [] to pieces!", user, src), 1)
- //Foreach goto(580)
- //SN src = null
- del(src)
- return
- */ //TODO: FIX
- src.add_fingerprint(user)
- return
-
-
-
-
-
-//PAPER BIN
-
-/obj/item/weapon/paper_bin/proc/update()
- src.icon_state = text("paper_bin[]", ((src.amount || locate(/obj/item/weapon/paper, src)) ? "1" : null))
- return
-
-
-/obj/item/weapon/paper_bin/MouseDrop(mob/user as mob)
- if ((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || in_range(src, usr))))))
- if (usr.hand)
- if (!( usr.l_hand ))
- spawn( 0 )
- src.attack_hand(usr, 1, 1)
- return
- else
- if (!( usr.r_hand ))
- spawn( 0 )
- src.attack_hand(usr, 0, 1)
- return
- return
-
-/obj/item/weapon/paper_bin/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
-/obj/item/weapon/paper_bin/attack_hand(mob/user as mob, unused, flag)
- if (flag)
- return ..()
- src.add_fingerprint(user)
- if (locate(/obj/item/weapon/paper, src))
- for(var/obj/item/weapon/paper/P in src)
- if ((usr.hand && !( usr.l_hand )))
- usr.l_hand = P
- P.loc = usr
- P.layer = 20
- P = null
- usr.update_clothing()
- break
- else if (!usr.r_hand)
- usr.r_hand = P
- P.loc = usr
- P.layer = 20
- P = null
- usr.update_clothing()
- break
- else
- if (src.amount >= 1)
- src.amount--
- var/obj/item/weapon/paper/P = new /obj/item/weapon/paper
- P.loc = usr.loc
- if(ishuman(usr))
- if(!usr.get_active_hand())
- usr.put_in_hand(P)
- usr << "You take a paper out of the bin."
- else
- P.loc = get_turf_loc(src)
- usr << "You take a paper out of the bin."
-
- src.update()
- return
-
-/obj/item/weapon/paper_bin/examine()
- set src in oview(1)
-
- src.amount = round(src.amount)
- var/n = src.amount
- for(var/obj/item/weapon/paper/P in src)
- n++
- if (n <= 0)
- n = 0
- usr << "There are no papers in the bin."
- else
- if (n == 1)
- usr << "There is one paper in the bin."
- else
- usr << text("There are [] papers in the bin.", n)
- return
-
-/*
-/obj/item/weapon/paper_bin/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/paper))
- user.drop_item()
- W.loc = src
- else
- if (istype(W, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/T = W
- if ((T.welding && T.weldfuel > 0))
- viewers(user, null) << text("[] burns the paper with the welding tool!", user)
- spawn( 0 )
- src.burn(1800000.0)
- return
- else
- if (istype(W, /obj/item/device/igniter))
- viewers(user, null) << text("[] burns the paper with the igniter!", user)
- spawn( 0 )
- src.burn(1800000.0)
- return
- src.update()
- return
-*/ //TODO: FIX
-
-
-
-
-
-// WRAPPING PAPER
-
-/obj/item/weapon/wrapping_paper/attackby(obj/item/weapon/W as obj, mob/user as mob)
- ..()
- if (!( locate(/obj/structure/table, src.loc) ))
- user << "\blue You MUST put the paper on a table!"
- if (W.w_class < 4)
- if ((istype(user.l_hand, /obj/item/weapon/wirecutters) || istype(user.r_hand, /obj/item/weapon/wirecutters)))
- var/a_used = 2 ** (src.w_class - 1)
- if (src.amount < a_used)
- user << "\blue You need more paper!"
- return
- else
- src.amount -= a_used
- user.drop_item()
- var/obj/item/weapon/gift/G = new /obj/item/weapon/gift( src.loc )
- G.size = W.w_class
- G.w_class = G.size + 1
- G.icon_state = text("gift[]", G.size)
- G.gift = W
- W.loc = G
- G.add_fingerprint(user)
- W.add_fingerprint(user)
- src.add_fingerprint(user)
- if (src.amount <= 0)
- new /obj/item/weapon/c_tube( src.loc )
- //SN src = null
- del(src)
- return
- else
- user << "\blue You need scissors!"
- else
- user << "\blue The object is FAR too large!"
- return
-
-
-/obj/item/weapon/wrapping_paper/examine()
- set src in oview(1)
-
- ..()
- usr << text("There is about [] square units of paper left!", src.amount)
- return
-
-/obj/item/weapon/wrapping_paper/attack(mob/target as mob, mob/user as mob)
- if (!istype(target, /mob/living/carbon/human)) return
- if (istype(target:wear_suit, /obj/item/clothing/suit/straight_jacket) || target:stat)
- if (src.amount > 2)
- var/obj/effect/spresent/present = new /obj/effect/spresent (target:loc)
- src.amount -= 2
-
- if (target:client)
- target:client:perspective = EYE_PERSPECTIVE
- target:client:eye = present
-
- target:loc = present
- target.attack_log += text("\[[time_stamp()]\] Has been wrapped with [src.name] by [user.name] ([user.ckey])")
- user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to wrap [target.name] ([target.ckey])")
-
- log_attack("[user.name] ([user.ckey]) used the [src.name] to wrap [target.name] ([target.ckey])")
-
- else
- user << "/blue You need more paper."
- else
- user << "Theyre moving around too much. a Straitjacket would help."
-
-
-
-
-
-// GIFTS
-
-/obj/item/weapon/gift/attack_self(mob/user as mob)
- if(!src.gift)
- user << "\blue The gift was empty!"
- del(src)
- src.gift.loc = user
- if (user.hand)
- user.l_hand = src.gift
- else
- user.r_hand = src.gift
- src.gift.layer = 20
- src.gift.add_fingerprint(user)
- del(src)
- return
-
-/obj/item/weapon/a_gift/ex_act()
- del(src)
- return
-
-
-/obj/effect/spresent/relaymove(mob/user as mob)
- if (user.stat)
- return
- user << "\blue You cant move."
-
-/obj/effect/spresent/attackby(obj/item/weapon/W as obj, mob/user as mob)
- ..()
-
- if (!istype(W, /obj/item/weapon/wirecutters))
- user << "/blue I need wirecutters for that."
- return
-
- user << "\blue You cut open the present."
-
- for(var/mob/M in src) //Should only be one but whatever.
- M.loc = src.loc
- if (M.client)
- M.client.eye = M.client.mob
- M.client.perspective = MOB_PERSPECTIVE
-
- del(src)
-
-
-/obj/item/weapon/a_gift/attack_self(mob/M as mob)
- switch(pick("flash", "t_gun", "l_gun", "shield", "sword", "axe"))
- if("flash")
- var/obj/item/device/flash/W = new /obj/item/device/flash( M )
- if (M.hand)
- M.l_hand = W
- else
- M.r_hand = W
- W.layer = 20
- W.add_fingerprint(M)
- //SN src = null
- del(src)
- return
- if("l_gun")
- var/obj/item/weapon/gun/energy/laser/W = new /obj/item/weapon/gun/energy/laser( M )
- if (M.hand)
- M.l_hand = W
- else
- M.r_hand = W
- W.layer = 20
- W.add_fingerprint(M)
- //SN src = null
- del(src)
- return
- if("t_gun")
- var/obj/item/weapon/gun/energy/taser/W = new /obj/item/weapon/gun/energy/taser( M )
- if (M.hand)
- M.l_hand = W
- else
- M.r_hand = W
- W.layer = 20
- W.add_fingerprint(M)
- //SN src = null
- del(src)
- return
- if("sword")
- var/obj/item/weapon/melee/energy/sword/W = new /obj/item/weapon/melee/energy/sword( M )
- if (M.hand)
- M.l_hand = W
- else
- M.r_hand = W
- W.layer = 20
- W.add_fingerprint(M)
- //SN src = null
- del(src)
- return
- if("axe")
- var/obj/item/weapon/melee/energy/axe/W = new /obj/item/weapon/melee/energy/axe( M )
- if (M.hand)
- M.l_hand = W
- else
- M.r_hand = W
- W.layer = 20
- W.add_fingerprint(M)
- //SN src = null
- del(src)
- return
- else
- return
-
-
-
-
-
-
-
-// BEDSHEET BIN
-
-/obj/structure/bedsheetbin/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/bedsheet))
- //W = null
- del(W)
- src.amount++
- return
-
-/obj/structure/bedsheetbin/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
-/obj/structure/bedsheetbin/attack_hand(mob/user as mob)
- if (src.amount >= 1)
- src.amount--
- new /obj/item/weapon/bedsheet( src.loc )
- add_fingerprint(user)
-
-/obj/structure/bedsheetbin/examine()
- set src in oview(1)
-
- src.amount = round(src.amount)
- if (src.amount <= 0)
- src.amount = 0
- usr << "There are no bed sheets in the bin."
- else
- if (src.amount == 1)
- usr << "There is one bed sheet in the bin."
- else
- usr << text("There are [] bed sheets in the bin.", src.amount)
- return
-
-
-
-
-
-
-// CLIPBOARD
-
-/obj/item/weapon/clipboard/attack_self(mob/user as mob)
- var/dat = "Clipboard
"
- if (src.pen)
- dat += text("Remove Pen
", src)
- for(var/obj/item/weapon/paper/P in src)
- dat += text("[] Write Remove
", src, P, P.name, src, P, src, P)
- user << browse(dat, "window=clipboard")
- onclose(user, "clipboard")
- return
-
-/obj/item/weapon/clipboard/Topic(href, href_list)
- ..()
- if ((usr.stat || usr.restrained()))
- return
- if (usr.contents.Find(src))
- usr.machine = src
- if (href_list["pen"])
- if (src.pen)
- if ((usr.hand && !( usr.l_hand )))
- usr.l_hand = src.pen
- src.pen.loc = usr
- src.pen.layer = 20
- src.pen = null
- usr.update_clothing()
- else
- if (!( usr.r_hand ))
- usr.r_hand = src.pen
- src.pen.loc = usr
- src.pen.layer = 20
- src.pen = null
- usr.update_clothing()
- if (src.pen)
- src.pen.add_fingerprint(usr)
- update()
- src.add_fingerprint(usr)
- if (href_list["remove"])
- var/obj/item/P = locate(href_list["remove"])
- if ((P && P.loc == src))
- if ((usr.hand && !( usr.l_hand )))
- usr.l_hand = P
- P.loc = usr
- P.layer = 20
- usr.update_clothing()
- else
- if (!( usr.r_hand ))
- usr.r_hand = P
- P.loc = usr
- P.layer = 20
- usr.update_clothing()
- P.add_fingerprint(usr)
- src.add_fingerprint(usr)
- update()
- if (href_list["write"])
- var/obj/item/P = locate(href_list["write"])
- if ((P && P.loc == src))
- if (istype(usr.r_hand, /obj/item/weapon/pen))
- P.attackby(usr.r_hand, usr)
- else
- if (istype(usr.l_hand, /obj/item/weapon/pen))
- P.attackby(usr.l_hand, usr)
- else
- if (istype(src.pen, /obj/item/weapon/pen))
- P.attackby(src.pen, usr)
- src.add_fingerprint(usr)
- if (href_list["read"])
- var/obj/item/weapon/paper/P = locate(href_list["read"])
- if ((P && P.loc == src))
- if (!( istype(usr, /mob/living/carbon/human) ))
- usr << browse(text("[][]", P.name, stars(P.info)), text("window=[]", P.name))
- onclose(usr, "[P.name]")
- else
- usr << browse(text("[][]", P.name, P.info), text("window=[]", P.name))
- onclose(usr, "[P.name]")
- if (ismob(src.loc))
- var/mob/M = src.loc
- if (M.machine == src)
- spawn( 0 )
- src.attack_self(M)
- return
- return
-
-/obj/item/weapon/clipboard/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
-/obj/item/weapon/clipboard/attack_hand(mob/user as mob)
-
- if ((locate(/obj/item/weapon/paper, src) && (!( user.equipped() ) && (user.l_hand == src || user.r_hand == src))))
- var/obj/item/weapon/paper/P
- for(P in src)
- break
- if (P)
- if (user.hand)
- user.l_hand = P
- else
- user.r_hand = P
- P.loc = user
- P.layer = 20
- P.add_fingerprint(user)
- user.update_clothing()
- src.add_fingerprint(user)
- else
- if (user.contents.Find(src))
- spawn( 0 )
- src.attack_self(user)
- return
- else
- return ..()
- return
-
-/obj/item/weapon/clipboard/attackby(obj/item/weapon/P as obj, mob/user as mob)
- ..()
- if (istype(P, /obj/item/weapon/paper))
- if (src.contents.len < 15)
- user.drop_item()
- P.loc = src
- else
- user << "\blue Not enough space!!!"
- else
- if (istype(P, /obj/item/weapon/pen))
- if (!src.pen)
- user.drop_item()
- P.loc = src
- src.pen = P
- else
- return
- src.update()
- spawn(0)
- attack_self(user)
- return
- return
-
-/obj/item/weapon/clipboard/proc/update()
- src.icon_state = text("clipboard[][]", (locate(/obj/item/weapon/paper, src) ? "1" : "0"), (locate(/obj/item/weapon/pen, src) ? "1" : "0"))
- return
-
-
-/obj/item/weapon/clipboard/MouseDrop(obj/over_object as obj) //Quick clipboard fix. -Agouri
- if (ishuman(usr) || ismonkey(usr)) //Can monkeys even place items in the pocket slots? Leaving this in just in case~
- var/mob/M = usr
- if (!( istype(over_object, /obj/screen) ))
- return ..()
- if ((!( M.restrained() ) && !( M.stat ) /*&& M.pocket == src*/))
- if (over_object.name == "r_hand")
- if (!( M.r_hand ))
- M.u_equip(src)
- M.r_hand = src
- else
- if (over_object.name == "l_hand")
- if (!( M.l_hand ))
- M.u_equip(src)
- M.l_hand = src
- M.update_clothing()
- src.add_fingerprint(usr)
- return //
-
-
-// PHOTOGRAPH
-
-/obj/item/weapon/paper/photograph/New()
-
- ..()
- src.pixel_y = 0
- src.pixel_x = 0
- return
-
-/obj/item/weapon/paper/photograph/attack_self(mob/user as mob)
-
- var/n_name = input(user, "What would you like to label the photo?", "Paper Labelling", null) as text
- n_name = copytext(n_name, 1, 32)
- if ((src.loc == user && user.stat == 0))
- src.name = text("photo[]", (n_name ? text("- '[]'", n_name) : null))
- src.add_fingerprint(user)
- return
diff --git a/code/game/objects/items/weapons/wrappingpaper.dm b/code/game/objects/items/weapons/wrappingpaper.dm
new file mode 100644
index 00000000000..764ba3c2698
--- /dev/null
+++ b/code/game/objects/items/weapons/wrappingpaper.dm
@@ -0,0 +1,230 @@
+/*
+CONTAINS:
+WRAPPING PAPER
+GIFTS
+BEDSHEET BIN
+PHOTOGRAPHS
+
+*/
+// WRAPPING PAPER
+
+/obj/item/weapon/wrapping_paper/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ ..()
+ if (!( locate(/obj/structure/table, src.loc) ))
+ user << "\blue You MUST put the paper on a table!"
+ if (W.w_class < 4)
+ if ((istype(user.l_hand, /obj/item/weapon/wirecutters) || istype(user.r_hand, /obj/item/weapon/wirecutters)))
+ var/a_used = 2 ** (src.w_class - 1)
+ if (src.amount < a_used)
+ user << "\blue You need more paper!"
+ return
+ else
+ src.amount -= a_used
+ user.drop_item()
+ var/obj/item/weapon/gift/G = new /obj/item/weapon/gift( src.loc )
+ G.size = W.w_class
+ G.w_class = G.size + 1
+ G.icon_state = text("gift[]", G.size)
+ G.gift = W
+ W.loc = G
+ G.add_fingerprint(user)
+ W.add_fingerprint(user)
+ src.add_fingerprint(user)
+ if (src.amount <= 0)
+ new /obj/item/weapon/c_tube( src.loc )
+ //SN src = null
+ del(src)
+ return
+ else
+ user << "\blue You need scissors!"
+ else
+ user << "\blue The object is FAR too large!"
+ return
+
+
+/obj/item/weapon/wrapping_paper/examine()
+ set src in oview(1)
+
+ ..()
+ usr << text("There is about [] square units of paper left!", src.amount)
+ return
+
+/obj/item/weapon/wrapping_paper/attack(mob/target as mob, mob/user as mob)
+ if (!istype(target, /mob/living/carbon/human)) return
+ if (istype(target:wear_suit, /obj/item/clothing/suit/straight_jacket) || target:stat)
+ if (src.amount > 2)
+ var/obj/effect/spresent/present = new /obj/effect/spresent (target:loc)
+ src.amount -= 2
+
+ if (target:client)
+ target:client:perspective = EYE_PERSPECTIVE
+ target:client:eye = present
+
+ target:loc = present
+ target.attack_log += text("\[[time_stamp()]\] Has been wrapped with [src.name] by [user.name] ([user.ckey])")
+ user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to wrap [target.name] ([target.ckey])")
+
+ log_attack("[user.name] ([user.ckey]) used the [src.name] to wrap [target.name] ([target.ckey])")
+
+ else
+ user << "/blue You need more paper."
+ else
+ user << "Theyre moving around too much. a Straitjacket would help."
+
+
+
+
+
+// GIFTS
+
+/obj/item/weapon/gift/attack_self(mob/user as mob)
+ if(!src.gift)
+ user << "\blue The gift was empty!"
+ del(src)
+ src.gift.loc = user
+ if (user.hand)
+ user.l_hand = src.gift
+ else
+ user.r_hand = src.gift
+ src.gift.layer = 20
+ src.gift.add_fingerprint(user)
+ del(src)
+ return
+
+/obj/item/weapon/a_gift/ex_act()
+ del(src)
+ return
+
+
+/obj/effect/spresent/relaymove(mob/user as mob)
+ if (user.stat)
+ return
+ user << "\blue You cant move."
+
+/obj/effect/spresent/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ ..()
+
+ if (!istype(W, /obj/item/weapon/wirecutters))
+ user << "/blue I need wirecutters for that."
+ return
+
+ user << "\blue You cut open the present."
+
+ for(var/mob/M in src) //Should only be one but whatever.
+ M.loc = src.loc
+ if (M.client)
+ M.client.eye = M.client.mob
+ M.client.perspective = MOB_PERSPECTIVE
+
+ del(src)
+
+
+/obj/item/weapon/a_gift/attack_self(mob/M as mob)
+ switch(pick("flash", "t_gun", "l_gun", "shield", "sword", "axe"))
+ if("flash")
+ var/obj/item/device/flash/W = new /obj/item/device/flash( M )
+ if (M.hand)
+ M.l_hand = W
+ else
+ M.r_hand = W
+ W.layer = 20
+ W.add_fingerprint(M)
+ //SN src = null
+ del(src)
+ return
+ if("l_gun")
+ var/obj/item/weapon/gun/energy/laser/W = new /obj/item/weapon/gun/energy/laser( M )
+ if (M.hand)
+ M.l_hand = W
+ else
+ M.r_hand = W
+ W.layer = 20
+ W.add_fingerprint(M)
+ //SN src = null
+ del(src)
+ return
+ if("t_gun")
+ var/obj/item/weapon/gun/energy/taser/W = new /obj/item/weapon/gun/energy/taser( M )
+ if (M.hand)
+ M.l_hand = W
+ else
+ M.r_hand = W
+ W.layer = 20
+ W.add_fingerprint(M)
+ //SN src = null
+ del(src)
+ return
+ if("sword")
+ var/obj/item/weapon/melee/energy/sword/W = new /obj/item/weapon/melee/energy/sword( M )
+ if (M.hand)
+ M.l_hand = W
+ else
+ M.r_hand = W
+ W.layer = 20
+ W.add_fingerprint(M)
+ //SN src = null
+ del(src)
+ return
+ if("axe")
+ var/obj/item/weapon/melee/energy/axe/W = new /obj/item/weapon/melee/energy/axe( M )
+ if (M.hand)
+ M.l_hand = W
+ else
+ M.r_hand = W
+ W.layer = 20
+ W.add_fingerprint(M)
+ //SN src = null
+ del(src)
+ return
+ else
+ return
+
+// BEDSHEET BIN
+
+/obj/structure/bedsheetbin/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if (istype(W, /obj/item/weapon/bedsheet))
+ //W = null
+ del(W)
+ src.amount++
+ return
+
+/obj/structure/bedsheetbin/attack_paw(mob/user as mob)
+ return src.attack_hand(user)
+
+/obj/structure/bedsheetbin/attack_hand(mob/user as mob)
+ if (src.amount >= 1)
+ src.amount--
+ new /obj/item/weapon/bedsheet( src.loc )
+ add_fingerprint(user)
+
+/obj/structure/bedsheetbin/examine()
+ set src in oview(1)
+
+ src.amount = round(src.amount)
+ if (src.amount <= 0)
+ src.amount = 0
+ usr << "There are no bed sheets in the bin."
+ else
+ if (src.amount == 1)
+ usr << "There is one bed sheet in the bin."
+ else
+ usr << text("There are [] bed sheets in the bin.", src.amount)
+ return
+
+// PHOTOGRAPH
+
+/obj/item/weapon/paper/photograph/New()
+
+ ..()
+ src.pixel_y = 0
+ src.pixel_x = 0
+ return
+
+/obj/item/weapon/paper/photograph/attack_self(mob/user as mob)
+
+ var/n_name = input(user, "What would you like to label the photo?", "Paper Labelling", null) as text
+ n_name = copytext(n_name, 1, 32)
+ if ((src.loc == user && user.stat == 0))
+ src.name = text("photo[]", (n_name ? text("- '[]'", n_name) : null))
+ src.add_fingerprint(user)
+ return
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
new file mode 100644
index 00000000000..66e074543cc
--- /dev/null
+++ b/code/modules/paperwork/clipboard.dm
@@ -0,0 +1,135 @@
+/obj/item/weapon/clipboard
+ name = "clipboard"
+ icon = 'bureaucracy.dmi'
+ icon_state = "clipboard"
+ item_state = "clipboard"
+ throwforce = 0
+ w_class = 2.0
+ throw_speed = 3
+ throw_range = 10
+ var/obj/item/weapon/pen/haspen //The stored pen.
+ var/obj/item/weapon/paper/toppaper //The topmost piece of paper.
+
+/obj/item/weapon/clipboard/MouseDrop(obj/over_object as obj) //Quick clipboard fix. -Agouri
+ if(ishuman(usr) || ismonkey(usr)) //Can monkeys even place items in the pocket slots? Leaving this in just in case~
+ var/mob/M = usr
+ if (!(istype(over_object, /obj/screen) ))
+ return ..()
+ if((!(M.restrained()) && !(M.stat)))
+ if(over_object.name == "r_hand")
+ if(!(M.r_hand))
+ M.u_equip(src)
+ M.r_hand = src
+ else
+ if(over_object.name == "l_hand")
+ if(!(M.l_hand))
+ M.u_equip(src)
+ M.l_hand = src
+ M.update_clothing()
+ src.add_fingerprint(usr)
+ return
+
+/obj/item/weapon/clipboard/update_icon()
+ overlays = null
+ if(toppaper)
+ overlays += toppaper.icon_state
+ overlays += toppaper.overlays
+ if(haspen)
+ overlays += "clipboard_pen"
+ overlays += "clipboard_over"
+ return
+
+/obj/item/weapon/clipboard/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W, /obj/item/weapon/paper))
+ user.drop_item()
+ W.loc = src
+ toppaper = W
+ user << "\blue You clip the paper onto the clipboard."
+ update_icon()
+ else if(toppaper)
+ toppaper.attackby(usr.get_active_hand(), usr)
+ 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(P in src)
+ if(P == toppaper)
+ continue
+ dat += "Write Remove Move to top - [P.name]
"
+ user << browse(dat, "window=clipboard")
+ onclose(user, "clipboard")
+ add_fingerprint(usr)
+ return
+
+/obj/item/weapon/clipboard/Topic(href, href_list)
+ ..()
+ if ((usr.stat || usr.restrained()))
+ return
+
+ if (usr.contents.Find(src))
+
+ if(href_list["pen"])
+ if(haspen)
+ haspen.loc = usr.loc
+ if(ishuman(usr))
+ if(!usr.get_active_hand())
+ usr.put_in_hand(haspen)
+ haspen = null
+
+ if(href_list["addpen"])
+ if(!haspen)
+ if(istype(usr.get_active_hand(), /obj/item/weapon/pen))
+ var/obj/item/weapon/pen/W = usr.get_active_hand()
+ usr.drop_item()
+ W.loc = src
+ haspen = W
+ usr << "\blue You slot the pen into the clipboard."
+
+ if(href_list["write"])
+ var/obj/item/P = locate(href_list["write"])
+ if(P)
+ if(usr.get_active_hand())
+ P.attackby(usr.get_active_hand(), usr)
+
+ if(href_list["remove"])
+ var/obj/item/P = locate(href_list["remove"])
+ if(P)
+ P.loc = usr.loc
+ if(ishuman(usr))
+ if(!usr.get_active_hand())
+ usr.put_in_hand(P)
+ else
+ P.loc = get_turf(usr)
+ if(P == toppaper)
+ var/obj/item/weapon/paper/newtop = locate(/obj/item/weapon/paper in src)
+ if(newtop && newtop != toppaper)
+ toppaper = newtop
+ else
+ toppaper = null
+
+ if(href_list["read"])
+ var/obj/item/P = locate(href_list["read"])
+ if(P)
+ P.examine(usr)
+
+ if(href_list["top"])
+ var/obj/item/P = locate(href_list["top"])
+ if(P)
+ toppaper = P
+ usr << "You move [P.name] to the top."
+
+ //Update everything
+ attack_self(usr)
+ update_icon()
+ return
\ No newline at end of file
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
new file mode 100644
index 00000000000..35df3f0739f
--- /dev/null
+++ b/code/modules/paperwork/folders.dm
@@ -0,0 +1,22 @@
+//THIS IS OBVIOUSLY WIP, SORRY -PETE
+/obj/item/weapon/folder
+ name = "folder"
+ desc = "A folder."
+ icon = 'bureaucracy.dmi'
+ icon_state = "folder"
+ w_class = 2
+
+/obj/item/weapon/folder/blue
+ desc = "A blue folder."
+ icon_state = "folder_blue"
+
+/obj/item/weapon/folder/red
+ desc = "A red folder."
+ icon_state = "folder_red"
+
+/obj/item/weapon/folder/yellow
+ desc = "A yellow folder."
+ icon_state = "folder_yellow"
+
+/obj/item/weapon/folder/attack_self()
+ usr << "lol!"
\ No newline at end of file
diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm
new file mode 100644
index 00000000000..c3170b36ef4
--- /dev/null
+++ b/code/modules/paperwork/handlabeler.dm
@@ -0,0 +1,53 @@
+/obj/item/weapon/hand_labeler
+ name = "Hand labeler"
+ icon = 'bureaucracy.dmi'
+ icon_state = "labeler0"
+ item_state = "flight"
+ var/label = null
+ var/labels_left = 30
+ var/mode = 0 //off or on.
+
+/obj/item/weapon/hand_labeler/afterattack(atom/A, mob/user as mob)
+ if(!mode) //if it's off, give up.
+ return
+ if(A==loc) // if placing the labeller into something (e.g. backpack)
+ return // don't set a label
+
+ if(!labels_left)
+ user << "\blue No labels left."
+ return
+ if(!label || !length(label))
+ user << "\blue No text set."
+ return
+ if(length(A.name) + length(label) > 64)
+ user << "\blue Label too big."
+ return
+ if(ishuman(A))
+ user << "\blue You can't label humans."
+ return
+ if(issilicon(A))
+ user << "\blue You can't label cyborgs."
+ return
+
+ for(var/mob/M in viewers())
+ if ((M.client && !( M.blinded )))
+ M << "\blue [user] labels [A] as [label]."
+ A.name = "[A.name] ([label])"
+
+/obj/item/weapon/hand_labeler/attack_self()
+ mode = !mode
+ icon_state = "labeler[mode]"
+ if(mode)
+ usr << "\blue You turn on the hand labeler."
+ //Now let them chose the text.
+ var/str = input(usr,"Label text?","Set label","")
+ if(!str || !length(str))
+ usr << "\red Invalid text."
+ return
+ if(length(str) > 64)
+ usr << "\red Text too long."
+ return
+ label = str
+ usr << "\blue You set the text to '[str]'."
+ else
+ usr << "\blue You turn off the hand labeler."
\ No newline at end of file
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
new file mode 100644
index 00000000000..ffca9b54237
--- /dev/null
+++ b/code/modules/paperwork/paper.dm
@@ -0,0 +1,186 @@
+/obj/item/weapon/paper
+ name = "paper"
+ gender = PLURAL
+ icon = 'bureaucracy.dmi'
+ icon_state = "paper"
+ throwforce = 0
+ w_class = 1.0
+ throw_speed = 3
+ throw_range = 15
+ layer = 4
+ var/info //What's actually written on the paper.
+ var/stamps //The (text for the) stamps on the paper.
+ var/list/stamped
+ var/see_face = 1
+ var/body_parts_covered = HEAD
+
+/obj/item/weapon/paper/New()
+
+ ..()
+ src.pixel_y = rand(-8, 8)
+ src.pixel_x = rand(-9, 9)
+ spawn(2)
+ if(src.info)
+ src.overlays += "paper_words"
+ return
+
+/obj/item/weapon/paper/update_icon()
+ if(src.info)
+ src.overlays += "paper_words"
+ return
+
+/obj/item/weapon/paper/examine(mob/user as mob)
+ set src in oview(1)
+
+ //I think this is the best way to handle this! Shout at me if it isn't! -Pete
+ if(!user)
+ user = usr
+// ..() //We don't want them to see the dumb "this is a paper" thing every time.
+ 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]")
+ return
+
+/obj/item/weapon/paper/verb/rename()
+ set name = "Rename paper"
+ set category = "Object"
+ set src in usr
+
+ if ((usr.mutations & CLUMSY) && prob(50))
+ usr << "\red You cut yourself on the paper."
+ return
+ var/n_name = input(usr, "What would you like to label the paper?", "Paper Labelling", null) as text
+ n_name = copytext(n_name, 1, 32)
+ if ((loc == usr && usr.stat == 0))
+ name = "paper[(n_name ? text("- '[n_name]'") : null)]"
+ add_fingerprint(usr)
+ return
+
+/obj/item/weapon/paper/attack_self(mob/living/user as mob)
+ examine()
+ return
+
+/obj/item/weapon/paper/attack_ai(var/mob/living/silicon/ai/user as mob)
+ var/dist
+ if (istype(user) && user.current) //is AI
+ dist = get_dist(src, user.current)
+ else //cyborg or AI not seeing through a camera
+ dist = get_dist(src, user)
+ if (dist < 2)
+ usr << browse("[name][info][stamps]", "window=[name]")
+ onclose(usr, "[name]")
+ else
+ usr << browse("[name][stars(info)][stamps]", "window=[name]")
+ onclose(usr, "[name]")
+ return
+
+/obj/item/weapon/paper/attackby(obj/item/weapon/P as obj, mob/user as mob)
+ ..()
+ var/clown = 0
+ if(user.mind && (user.mind.assigned_role == "Clown"))
+ clown = 1
+
+ if (istype(P, /obj/item/weapon/pen))
+ var/t = strip_html_simple(input(user, "What text do you wish to add?", "[name]", null),8192) as message
+
+ if ((!in_range(src, usr) && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.equipped() != P))
+ return
+
+ t = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
+ t = dd_replacetext(t, "\[center\]", "")
+ t = dd_replacetext(t, "\[/center\]", "")
+ t = dd_replacetext(t, "\[list\]", "")
+ t = dd_replacetext(t, "\[/list\]", "
")
+ t = dd_replacetext(t, "\[*\]", "")
+ t = dd_replacetext(t, "\[*\]", "")
+ t = dd_replacetext(t, "\[br\]", "
")
+ t = dd_replacetext(t, "\[hr\]", "
")
+ t = dd_replacetext(t, "\[b\]", "")
+ t = dd_replacetext(t, "\[/b\]", "")
+ t = dd_replacetext(t, "\[i\]", "")
+ t = dd_replacetext(t, "\[/i\]", "")
+ t = dd_replacetext(t, "\[u\]", "")
+ t = dd_replacetext(t, "\[/u\]", "")
+ t = dd_replacetext(t, "\[small\]", "")
+ t = dd_replacetext(t, "\[/small\]", "")
+ t = dd_replacetext(t, "\[large\]", "")
+ t = dd_replacetext(t, "\[/large\]", "")
+ t = dd_replacetext(t, "\[sign\]", "[user.real_name]")
+
+ var/obj/item/weapon/pen/i = P
+ t = "[t]"
+
+ if(!overlays.Find("paper_words"))
+ overlays += "paper_words"
+ info += t
+ return
+
+ if(istype(P, /obj/item/toy/crayon))
+ var/t = strip_html_simple(input(user, "What text do you wish to add?", "[name]", null),8192) as message
+
+ if ((!in_range(src, usr) && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.equipped() != P))
+ return
+
+ t = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
+ t = dd_replacetext(t, "\[center\]", "")
+ t = dd_replacetext(t, "\[/center\]", "")
+ t = dd_replacetext(t, "\[br\]", "
")
+ t = dd_replacetext(t, "\[b\]", "")
+ t = dd_replacetext(t, "\[/b\]", "")
+ t = dd_replacetext(t, "\[i\]", "")
+ t = dd_replacetext(t, "\[/i\]", "")
+ t = dd_replacetext(t, "\[u\]", "")
+ t = dd_replacetext(t, "\[/u\]", "")
+ t = dd_replacetext(t, "\[large\]", "")
+ t = dd_replacetext(t, "\[/large\]", "")
+ t = dd_replacetext(t, "\[sign\]", "[user.real_name]")
+
+ var/obj/item/toy/crayon/i = P
+ t = "[t]"
+
+ if(!overlays.Find("paper_words"))
+ overlays += "paper_words"
+ info += t
+ return
+
+ else
+ if(istype(P, /obj/item/weapon/stamp))
+ if ((!in_range(src, usr) && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.equipped() != P))
+ return
+ if(stamps)
+ stamps += "
This paper has been stamped with the [P.name]."
+ else
+ stamps += "
This paper has been stamped with the [P.name]."
+ switch(P.type)
+ if(/obj/item/weapon/stamp/captain)
+ overlays += "paper_stamped_cap"
+ if(/obj/item/weapon/stamp/hop)
+ overlays += "paper_stamped_hop"
+ if(/obj/item/weapon/stamp/hos)
+ overlays += "paper_stamped_hos"
+ if(/obj/item/weapon/stamp/ce)
+ overlays += "paper_stamped_ce"
+ if(/obj/item/weapon/stamp/rd)
+ overlays += "paper_stamped_rd"
+ if(/obj/item/weapon/stamp/cmo)
+ overlays += "paper_stamped_cmo"
+ if(/obj/item/weapon/stamp/denied)
+ overlays += "paper_stamped_denied"
+ if(/obj/item/weapon/stamp/clown)
+ if (!clown)
+ usr << "\red You are totally unable to use the stamp. HONK!"
+ return
+ else
+ overlays += "paper_stamped_clown"
+ else
+ overlays += "paper_stamped"
+ if(!stamped)
+ stamped = new
+ stamped += P.type
+
+ user << "\blue You stamp the paper with your rubber stamp."
+ add_fingerprint(user)
+ return
\ No newline at end of file
diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm
new file mode 100644
index 00000000000..8cdf75fa745
--- /dev/null
+++ b/code/modules/paperwork/paperbin.dm
@@ -0,0 +1,65 @@
+/obj/item/weapon/paper_bin
+ name = "paper bin"
+ icon = 'bureaucracy.dmi'
+ icon_state = "paper_bin1"
+ item_state = "sheet-metal"
+ throwforce = 1
+ w_class = 3
+ throw_speed = 3
+ throw_range = 7
+ var/amount = 30 //How much paper is in the bin.
+
+/obj/item/weapon/paper_bin/MouseDrop(mob/user as mob)
+ if ((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || in_range(src, usr))))))
+ if (usr.hand)
+ if (!( usr.l_hand ))
+ spawn( 0 )
+ src.attack_hand(usr, 1, 1)
+ return
+ else
+ if (!( usr.r_hand ))
+ spawn( 0 )
+ src.attack_hand(usr, 0, 1)
+ return
+ return
+
+
+/obj/item/weapon/paper_bin/attack_paw(mob/user as mob)
+ return src.attack_hand(user)
+
+/obj/item/weapon/paper_bin/attack_hand(mob/user as mob)
+ if (amount >= 1)
+ amount--
+ update_icon()
+ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper
+ P.loc = user.loc
+ if(ishuman(user))
+ if(!user.get_active_hand())
+ user.put_in_hand(P)
+ user << "You take a paper out of the bin."
+ else
+ P.loc = get_turf_loc(src)
+ user << "You take a paper out of the bin."
+ else
+ user << "The paper bin is empty!"
+
+ add_fingerprint(user)
+ return
+
+/obj/item/weapon/paper_bin/examine()
+ set src in oview(1)
+
+ if(amount)
+ if(amount > 1)
+ usr << "There are [amount] papers in the bin."
+ else
+ usr << "There is one paper in the bin."
+ else
+ usr << "There are no papers in the bin."
+ return
+
+/obj/item/weapon/paper_bin/update_icon()
+ if(amount < 1)
+ icon_state = "paper_bin0"
+ else
+ icon_state = "paper_bin1"
\ No newline at end of file
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
new file mode 100644
index 00000000000..be23c57038b
--- /dev/null
+++ b/code/modules/paperwork/pen.dm
@@ -0,0 +1,22 @@
+/obj/item/weapon/pen
+ desc = "It's a normal black ink pen."
+ name = "pen"
+ icon = 'bureaucracy.dmi'
+ icon_state = "pen"
+ flags = FPRINT | ONBELT | TABLEPASS
+ throwforce = 0
+ w_class = 1.0
+ throw_speed = 7
+ throw_range = 15
+ m_amt = 10
+ var/colour = "black" //what colour the ink is!
+
+/obj/item/weapon/pen/blue
+ desc = "It's a normal blue ink pen."
+ icon_state = "pen_blue"
+ colour = "blue"
+
+/obj/item/weapon/pen/red
+ desc = "It's a normal red ink pen."
+ icon_state = "pen_red"
+ colour = "red"
\ No newline at end of file
diff --git a/code/game/machinery/photocopier.dm b/code/modules/paperwork/photocopier.dm
similarity index 100%
rename from code/game/machinery/photocopier.dm
rename to code/modules/paperwork/photocopier.dm
diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm
new file mode 100644
index 00000000000..abc93d0c2fd
--- /dev/null
+++ b/code/modules/paperwork/stamps.dm
@@ -0,0 +1,53 @@
+/obj/item/weapon/stamp
+ desc = "A rubber stamp for stamping important documents."
+ name = "rubber stamp"
+ icon = 'bureaucracy.dmi'
+ icon_state = "stamp-qm"
+ item_state = "stamp"
+ flags = FPRINT | TABLEPASS
+ throwforce = 0
+ w_class = 1.0
+ throw_speed = 7
+ throw_range = 15
+ m_amt = 60
+ var/color = "cargo"
+
+/obj/item/weapon/stamp/captain
+ name = "captain's rubber stamp"
+ icon_state = "stamp-cap"
+ color = "captain"
+
+/obj/item/weapon/stamp/hop
+ name = "head of personnel's rubber stamp"
+ icon_state = "stamp-hop"
+ color = "hop"
+
+/obj/item/weapon/stamp/hos
+ name = "head of security's rubber stamp"
+ icon_state = "stamp-hos"
+ color = "hosred"
+
+/obj/item/weapon/stamp/ce
+ name = "chief engineer's rubber stamp"
+ icon_state = "stamp-ce"
+ color = "chief"
+
+/obj/item/weapon/stamp/rd
+ name = "research director's rubber stamp"
+ icon_state = "stamp-rd"
+ color = "director"
+
+/obj/item/weapon/stamp/cmo
+ name = "chief medical officer's rubber stamp"
+ icon_state = "stamp-cmo"
+ color = "medical"
+
+/obj/item/weapon/stamp/denied
+ name = "\improper DENIED rubber stamp"
+ icon_state = "stamp-qm"
+ color = "redcoat"
+
+/obj/item/weapon/stamp/clown
+ name = "clown's rubber stamp"
+ icon_state = "stamp-clown"
+ color = "clown"
\ No newline at end of file
diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi
new file mode 100644
index 00000000000..e9a5fcbea50
Binary files /dev/null and b/icons/obj/bureaucracy.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index bfd63ba980e..6c66fa4150c 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/paper.dmi b/icons/obj/paper.dmi
index bdef2b6a009..0bbdd220d0b 100644
Binary files a/icons/obj/paper.dmi and b/icons/obj/paper.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index cac62de460e..9770e0389e5 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -116,6 +116,7 @@
#define FILE_DIR "code/modules/mob/new_player"
#define FILE_DIR "code/modules/mob/organ"
#define FILE_DIR "code/modules/mob/simple_animal"
+#define FILE_DIR "code/modules/paperwork"
#define FILE_DIR "code/modules/power"
#define FILE_DIR "code/modules/power/antimatter"
#define FILE_DIR "code/modules/power/singularity"
@@ -453,7 +454,6 @@
#include "code\game\machinery\newscaster.dm"
#include "code\game\machinery\OpTable.dm"
#include "code\game\machinery\overview.dm"
-#include "code\game\machinery\photocopier.dm"
#include "code\game\machinery\portable_turret.dm"
#include "code\game\machinery\recharger.dm"
#include "code\game\machinery\rechargestation.dm"
@@ -657,7 +657,6 @@
#include "code\game\objects\items\weapons\explosives.dm"
#include "code\game\objects\items\weapons\flamethrower.dm"
#include "code\game\objects\items\weapons\grenades.dm"
-#include "code\game\objects\items\weapons\hand_lablers.dm"
#include "code\game\objects\items\weapons\hydroponics.dm"
#include "code\game\objects\items\weapons\kitchen.dm"
#include "code\game\objects\items\weapons\manuals.dm"
@@ -665,7 +664,6 @@
#include "code\game\objects\items\weapons\mops_cleaners.dm"
#include "code\game\objects\items\weapons\paint.dm"
#include "code\game\objects\items\weapons\paiwire.dm"
-#include "code\game\objects\items\weapons\papers_bins.dm"
#include "code\game\objects\items\weapons\plant_bag.dm"
#include "code\game\objects\items\weapons\RCD.dm"
#include "code\game\objects\items\weapons\RSF.dm"
@@ -678,6 +676,7 @@
#include "code\game\objects\items\weapons\toilets.dm"
#include "code\game\objects\items\weapons\tools.dm"
#include "code\game\objects\items\weapons\twohanded.dm"
+#include "code\game\objects\items\weapons\wrappingpaper.dm"
#include "code\game\objects\items\weapons\implants\implant.dm"
#include "code\game\objects\items\weapons\implants\implantcase.dm"
#include "code\game\objects\items\weapons\implants\implantchair.dm"
@@ -941,6 +940,13 @@
#include "code\modules\mob\simple_animal\life.dm"
#include "code\modules\mob\simple_animal\shade.dm"
#include "code\modules\mob\simple_animal\worm.dm"
+#include "code\modules\paperwork\clipboard.dm"
+#include "code\modules\paperwork\handlabeler.dm"
+#include "code\modules\paperwork\paper.dm"
+#include "code\modules\paperwork\paperbin.dm"
+#include "code\modules\paperwork\pen.dm"
+#include "code\modules\paperwork\photocopier.dm"
+#include "code\modules\paperwork\stamps.dm"
#include "code\modules\power\apc.dm"
#include "code\modules\power\cable.dm"
#include "code\modules\power\cell.dm"