diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 38101fedab3..9ab05593915 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -228,7 +228,7 @@
spawn(0) src.interact(usr)
else
if (S.amount >= max_amount)
- return 1
+ return
var/to_transfer as num
if (user.get_inactive_hand()==src)
to_transfer = 1
diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm
index 0068304bbcf..5396cdd8940 100644
--- a/code/game/objects/items/weapons/gift_wrappaper.dm
+++ b/code/game/objects/items/weapons/gift_wrappaper.dm
@@ -84,7 +84,9 @@
desc = "You can use this to wrap items in."
icon = 'icons/obj/items.dmi'
icon_state = "wrap_paper"
+ flags = NOBLUDGEON
amount = 25
+ max_amount = 25
/obj/item/stack/wrapping_paper/attack_self(mob/user)
user << "You need to use it on a package that has already been wrapped!"
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index f47d382fe15..f404c37e711 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -50,6 +50,11 @@
user.update_inv_r_hand()
qdel(src)
+/obj/item/weapon/storage/box/attackby(obj/item/W, mob/user)
+ if(istype(W, /obj/item/stack/packageWrap))
+ return 0
+ ..()
+
/obj/item/weapon/storage/box/survival
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 23f5e34ec0a..34f8c622f6e 100644
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -6,6 +6,7 @@
density = 1
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
var/obj/wrapped = null
+ var/giftwrapped = 0
var/sortTag = 0
@@ -41,12 +42,19 @@
user.visible_message("[user] labels [src] as [str].")
name = "[name] ([str])"
- else if(istype(W, /obj/item/stack/wrapping_paper))
- user.visible_message("[user] wraps the package in festive paper!")
- if(istype(wrapped, /obj/structure/closet/crate))
- icon_state = "giftcrate"
+ else if(istype(W, /obj/item/stack/wrapping_paper) && !giftwrapped)
+ var/obj/item/stack/wrapping_paper/WP = W
+ if(WP.use(3))
+ user.visible_message("[user] wraps the package in festive paper!")
+ giftwrapped = 1
+ if(istype(wrapped, /obj/structure/closet/crate))
+ icon_state = "giftcrate"
+ else
+ icon_state = "giftcloset"
+ if(WP.amount <= 0 && !WP.loc) //if we used our last wrapping paper, drop a cardboard tube
+ new /obj/item/weapon/c_tube( get_turf(user) )
else
- icon_state = "giftcloset"
+ user << "You need more paper."
/obj/item/smallDelivery
@@ -55,11 +63,12 @@
icon = 'icons/obj/storage.dmi'
icon_state = "deliverycrateSmall"
var/obj/item/wrapped = null
+ var/giftwrapped = 0
var/sortTag = 0
/obj/item/smallDelivery/attack_self(mob/user as mob)
- if(wrapped) //sometimes items can disappear. For example, bombs. --rastaf0
+ if(wrapped && wrapped.loc) //sometimes items can disappear. For example, bombs. --rastaf0
wrapped.loc = user.loc
if(ishuman(user))
user.put_in_hands(wrapped)
@@ -87,9 +96,17 @@
user.visible_message("[user] labels [src] as [str].")
name = "[name] ([str])"
- else if(istype(W, /obj/item/stack/wrapping_paper))
- icon_state = "giftcrate[wrapped.w_class]"
- user.visible_message("[user] wraps the package in festive paper!")
+ else if(istype(W, /obj/item/stack/wrapping_paper) && !giftwrapped)
+ var/obj/item/stack/wrapping_paper/WP = W
+ if(WP.use(1))
+ icon_state = "giftcrate[wrapped.w_class]"
+ giftwrapped = 1
+ user.visible_message("[user] wraps the package in festive paper!")
+ if(WP.amount <= 0 && !WP.loc) //if we used our last wrapping paper, drop a cardboard tube
+ new /obj/item/weapon/c_tube( get_turf(user) )
+ else
+ user << "You need more paper."
+
/obj/item/stack/packageWrap
@@ -97,8 +114,8 @@
icon = 'icons/obj/items.dmi'
icon_state = "deliveryPaper"
flags = NOBLUDGEON
- w_class = 3.0
amount = 25
+ max_amount = 25
/obj/item/stack/packageWrap/afterattack(var/obj/target as obj, mob/user as mob, proximity)
@@ -113,11 +130,11 @@
if(target in user)
return
- user.attack_log += text("\[[time_stamp()]\] Has used [name] on \ref[target]")
+
if(istype(target, /obj/item) && !(istype(target, /obj/item/weapon/storage) && !istype(target,/obj/item/weapon/storage/box)))
var/obj/item/O = target
- if(amount > 1)
+ if(use(1))
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(O.loc)) //Aaannd wrap it up!
if(!istype(O.loc, /turf))
if(user.client)
@@ -131,33 +148,37 @@
P.add_fingerprint(usr)
O.add_fingerprint(usr)
add_fingerprint(usr)
- amount -= 1
+ else
+ return
else if(istype(target, /obj/structure/closet/crate))
var/obj/structure/closet/crate/O = target
- if(amount > 3 && !O.opened)
+ if(use(3) && !O.opened)
var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc))
P.icon_state = "deliverycrate"
P.wrapped = O
O.loc = P
- amount -= 3
- else if(amount < 3)
+ else
user << "You need more paper."
+ return
else if(istype (target, /obj/structure/closet))
var/obj/structure/closet/O = target
- if(amount > 3 && !O.opened)
+ if(use(3) && !O.opened)
var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc))
P.wrapped = O
O.welded = 1
O.loc = P
- amount -= 3
- else if(amount < 3)
+ else
user << "You need more paper."
+ return
else
user << "The object you are trying to wrap is unsuitable for the sorting machinery."
- if(amount <= 0)
- new /obj/item/weapon/c_tube( loc )
- qdel(src)
return
+
+ user.visible_message("[user] wraps [target].")
+ user.attack_log += text("\[[time_stamp()]\] Has used [name] on [target]")
+
+ if(amount <= 0 && !src.loc) //if we used our last wrapping paper, drop a cardboard tube
+ new /obj/item/weapon/c_tube( get_turf(user) )
return
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 7c4e43a241c..c03fa5e244e 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ