diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
index 8aeac6e880e..6b9c1366ddf 100644
--- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
+++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
@@ -349,6 +349,9 @@ Congratulations! You are now trained for xenobiology research!"}
/obj/item/weapon/paper/abductor/update_icon()
return
+/obj/item/weapon/paper/abductor/AltClick()
+ return
+
#define BATON_STUN 0
#define BATON_SLEEP 1
#define BATON_CUFF 2
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 4f172ff20b5..bef437af32a 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -40,6 +40,7 @@
/obj/item/weapon/paper/update_icon()
+
if(burn_state == ON_FIRE)
icon_state = "paper_onfire"
return
@@ -303,11 +304,11 @@
return
else if(istype(P, /obj/item/weapon/stamp))
- if(!in_range(src, usr) && loc != user && !istype(loc, /obj/item/weapon/clipboard) && loc.loc != user && user.get_active_hand() != P)
+
+ if(!in_range(src, user))
return
stamps += "
"
-
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
stampoverlay.pixel_x = rand(-2, 2)
stampoverlay.pixel_y = rand(-3, 2)
@@ -338,7 +339,6 @@
fire_act()
-
add_fingerprint(user)
/obj/item/weapon/paper/fire_act()
@@ -402,6 +402,5 @@
/obj/item/weapon/paper/crumpled/update_icon()
return
-
/obj/item/weapon/paper/crumpled/bloody
icon_state = "scrap_bloodied"
diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm
new file mode 100644
index 00000000000..bbde5e50c49
--- /dev/null
+++ b/code/modules/paperwork/paperplane.dm
@@ -0,0 +1,113 @@
+/obj/item/weapon/paperplane
+ name = "paper plane"
+ desc = "Paper, folded in the shape of a plane"
+ icon = 'icons/obj/bureaucracy.dmi'
+ icon_state = "paperplane"
+ throw_range = 7
+ throw_speed = 1
+ throwforce = 0
+ w_class = 1
+ burn_state = FLAMMABLE
+ burntime = 4
+
+ var/obj/item/weapon/paper/internalPaper
+ var/list/stamped = list()
+
+/obj/item/weapon/paperplane/New(loc, obj/item/weapon/paper/newPaper)
+ ..()
+ pixel_y = rand(-8, 8)
+ pixel_x = rand(-9, 9)
+ if(newPaper)
+ internalPaper = newPaper
+ src.flags = newPaper.flags
+ stamped = internalPaper.stamped
+ newPaper.forceMove(src)
+ else
+ internalPaper = new /obj/item/weapon/paper(src)
+ update_icon()
+
+/obj/item/weapon/paperplane/suicide_act(mob/user)
+ user.Stun(10)
+ user.visible_message("[user] jams the [src] in their brains. It looks like \he's trying to commit suicide.")
+ user.adjust_blurriness(6)
+ user.adjust_eye_damage(rand(6,8))
+ sleep(10)
+ return (BRUTELOSS)
+
+/obj/item/weapon/paperplane/update_icon()
+ overlays.Cut()
+ if(!stamped)
+ stamped = new
+ else if(stamped)
+ for(var/S in stamped)
+ var/obj/item/weapon/stamp/stamp = S
+ var/image/stampoverlay = image('icons/obj/bureaucracy.dmi', "paperplane_[initial(stamp.icon_state)]")
+ overlays += stampoverlay
+
+/obj/item/weapon/paperplane/attack_self(mob/user)
+ user << "You unfold [src]."
+ user.unEquip(src)
+ user.put_in_hands(internalPaper)
+ qdel(src)
+
+/obj/item/weapon/paperplane/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params)
+ ..()
+ if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon))
+ user << "You should unfold [src] before changing it."
+ return
+
+ else if(istype(P, /obj/item/weapon/stamp)) //we don't randomize stamps on a paperplane
+
+ if (!stamped)
+ stamped = new
+
+ stamped += P.type
+ internalPaper.stamps += "
" //stamps the paper inside!
+ internalPaper.stamped = stamped
+ internalPaper.attackby(P) //spoofed attack to update internal paper.
+ user << "You stamp [src] with your rubber stamp."
+ update_icon()
+
+ else if(P.is_hot())
+ if(user.disabilities & CLUMSY && prob(10))
+ user.visible_message("[user] accidentally ignites themselves!", \
+ "You miss the [src] and accidentally light yourself on fire!")
+ user.unEquip(P)
+ user.adjust_fire_stacks(1)
+ user.IgniteMob()
+ return
+
+ if(!(in_range(user, src))) //to prevent issues as a result of telepathically lighting a paper
+ return
+ internalPaper.burntime = 1 //its already pretty burnt out
+ user.unEquip(src)
+ user.visible_message("[user] lights [src] ablaze with [P]!", "You light [src] on fire!")
+ fire_act()
+
+ add_fingerprint(user)
+
+
+/obj/item/weapon/paperplane/throw_at(atom/target, range, speed, mob/thrower, spin=0) //prevent the paper plane from spinning
+ if(!..())
+ return
+
+/obj/item/weapon/paperplane/throw_impact(atom/hit_atom)
+ if(..() || !ishuman(hit_atom))//if the plane is caught or it hits a nonhuman
+ return
+ var/mob/living/carbon/human/H = hit_atom
+ if(prob(15))
+ if((H.head && H.head.flags_cover & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags_cover & MASKCOVERSEYES) || (H.glasses && H.glasses.flags_cover & GLASSESCOVERSEYES))
+ return
+ visible_message("\The [src] hits [H] in the eye!")
+ H.adjust_blurriness(6)
+ H.adjust_eye_damage(rand(6,8))
+ H.Weaken(2)
+ H.emote("scream")
+
+/obj/item/weapon/paper/AltClick(mob/living/carbon/user, obj/item/I,)
+ if((!in_range(src, user)) || usr.stat || usr.restrained())
+ return
+ user << "You fold [src] into the shape of a plane!"
+ user.unEquip(src)
+ I = new /obj/item/weapon/paperplane(loc, src)
+ user.put_in_hands(I)
diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi
index 29969886582..f2406325733 100644
Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 0b2e853d5e9..ea7a50fca10 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1464,6 +1464,7 @@
#include "code\modules\paperwork\paper.dm"
#include "code\modules\paperwork\paper_cutter.dm"
#include "code\modules\paperwork\paperbin.dm"
+#include "code\modules\paperwork\paperplane.dm"
#include "code\modules\paperwork\pen.dm"
#include "code\modules\paperwork\photocopier.dm"
#include "code\modules\paperwork\photography.dm"