diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index f8c47a0214c..06921bce252 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -316,7 +316,7 @@
to_chat(user, "Take off the carbon copy first.")
add_fingerprint(user)
return
- var/obj/item/paper_bundle/B = new(src.loc)
+ var/obj/item/paper_bundle/B = new(src.loc, default_papers = FALSE)
if(name != "paper")
B.name = name
else if(P.name != "paper" && P.name != "photo")
diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm
index 08cb7b6555e..73c9f9459dc 100644
--- a/code/modules/paperwork/paper_bundle.dm
+++ b/code/modules/paperwork/paper_bundle.dm
@@ -11,11 +11,15 @@
layer = 4
pressure_resistance = 1
attack_verb = list("bapped")
- var/amount = 0 //Amount of items clipped to the paper
+ var/amount = 0 //Amount of items clipped to the paper. Note: If you have 2 paper, this should be 1
var/page = 1
var/screen = 0
-
+/obj/item/paper_bundle/New(default_papers = TRUE)
+ if(default_papers) // This is to avoid runtime occuring from a paper bundle being created without a paper in it.
+ new /obj/item/paper(src)
+ new /obj/item/paper(src)
+ amount += 1
/obj/item/paper_bundle/attackby(obj/item/W as obj, mob/user as mob, params)
..()
var/obj/item/paper/P
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index a8a0c8ddd19..a3a8dda68e1 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -72,9 +72,15 @@
photocopy(copyitem)
sleep(15)
else if(istype(copyitem, /obj/item/paper_bundle))
+ var/obj/item/paper_bundle/C = copyitem
+ if(toner < (C.amount + 1))
+ visible_message("A yellow light on [src] flashes, indicating there's not enough toner for the operation.") // It is better to prevent partial bundle than to produce broken paper bundle
+ return
var/obj/item/paper_bundle/B = bundlecopy(copyitem)
+ if(!B)
+ return
sleep(15*B.amount)
- else if(ass && ass.loc == src.loc)
+ else if(ass && ass.loc == loc)
copyass()
sleep(15)
else
@@ -287,7 +293,7 @@
//If need_toner is 0, the copies will still be lightened when low on toner, however it will not be prevented from printing. TODO: Implement print queues for fax machines and get rid of need_toner
/obj/machinery/photocopier/proc/bundlecopy(var/obj/item/paper_bundle/bundle, var/need_toner=1)
- var/obj/item/paper_bundle/p = new /obj/item/paper_bundle (src)
+ var/obj/item/paper_bundle/P = new /obj/item/paper_bundle (src, default_papers = FALSE)
for(var/obj/item/W in bundle)
if(toner <= 0 && need_toner)
toner = 0
@@ -298,16 +304,19 @@
W = copy(W)
else if(istype(W, /obj/item/photo))
W = photocopy(W)
- W.forceMove(p)
- p.amount++
- p.amount--
- p.forceMove(get_turf(src))
- p.update_icon()
- p.icon_state = "paper_words"
- p.name = bundle.name
- p.pixel_y = rand(-8, 8)
- p.pixel_x = rand(-9, 9)
- return p
+ W.forceMove(P)
+ P.amount++
+ if(!P.amount)
+ qdel(P)
+ return null
+ P.amount--
+ P.forceMove(get_turf(src))
+ P.update_icon()
+ P.icon_state = "paper_words"
+ P.name = bundle.name
+ P.pixel_y = rand(-8, 8)
+ P.pixel_x = rand(-9, 9)
+ return P
/obj/machinery/photocopier/MouseDrop_T(mob/target, mob/user)