diff --git a/code/controllers/subsystem/shuttles.dm b/code/controllers/subsystem/shuttles.dm
index 6d04a0f9c71..7392c98ec88 100644
--- a/code/controllers/subsystem/shuttles.dm
+++ b/code/controllers/subsystem/shuttles.dm
@@ -298,7 +298,15 @@ var/datum/subsystem/shuttle/SSshuttle
slip.info += "
"
slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS
" // And now this is actually meaningful.
slip.loc = Crate
-
+ if(istype(Crate, /obj/structure/closet/crate))
+ var/obj/structure/closet/crate/CR = Crate
+ CR.manifest = slip
+ CR.update_icon()
+ if(istype(Crate, /obj/structure/largecrate))
+ var/obj/structure/largecrate/LC = Crate
+ LC.manifest = slip
+ LC.update_icon()
+
return Crate
/datum/subsystem/shuttle/proc/generateSupplyOrder(packId, _orderedby, _orderedbyRank, _comment)
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index f3b11af3cbf..040ce4dcf7e 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -10,16 +10,21 @@
var/rigged = 0
var/sound_effect_open = 'sound/machines/click.ogg'
var/sound_effect_close = 'sound/machines/click.ogg'
-
+ var/obj/item/weapon/paper/manifest/manifest
+
/obj/structure/closet/crate/New()
..()
update_icon()
+
/obj/structure/closet/crate/update_icon()
+ overlays.Cut()
if(opened)
icon_state = "[icon_crate]open"
else
icon_state = icon_crate
+ if(manifest)
+ overlays += "manifest"
/obj/structure/closet/crate/internals
desc = "A internals crate."
@@ -143,12 +148,13 @@
name = "secure hydroponics crate"
icon_crate = "hydrosecurecrate"
icon_state = "hydrosecurecrate"
-
-/obj/structure/closet/crate/secure/New()
+
+/obj/structure/closet/crate/secure/update_icon()
..()
- overlays.Cut()
if(locked)
overlays += redlight
+ else if(broken)
+ overlays += emag
else
overlays += greenlight
@@ -188,7 +194,19 @@
AM.loc = src
return 1
+/obj/structure/closet/crate/proc/tear_manifest(mob/user as mob)
+ user << "You tear the manifest off of the crate."
+ playsound(src.loc, 'sound/items/poster_ripped.ogg', 75, 1)
+ manifest.loc = loc
+ if(ishuman(user))
+ user.put_in_hands(manifest)
+ manifest = null
+ overlays-="manifest"
+
/obj/structure/closet/crate/attack_hand(mob/user as mob)
+ if(manifest)
+ tear_manifest(user)
+ return
if(opened)
close()
else
@@ -204,12 +222,14 @@
return
/obj/structure/closet/crate/secure/attack_hand(mob/user as mob)
+ if(manifest)
+ tear_manifest(user)
+ return
if(locked && !broken)
if (allowed(user))
user << "You unlock [src]."
src.locked = 0
- overlays.Cut()
- overlays += greenlight
+ update_icon()
add_fingerprint(user)
return
else
@@ -222,8 +242,7 @@
if(istype(W, /obj/item/weapon/card) && src.allowed(user) && !locked && !opened && !broken)
user << "You lock \the [src]."
src.locked = 1
- overlays.Cut()
- overlays += redlight
+ update_icon()
add_fingerprint(user)
return
@@ -231,13 +250,12 @@
/obj/structure/closet/crate/secure/emag_act(mob/user as mob)
if(locked && !broken)
- overlays.Cut()
- overlays += emag
+ src.locked = 0
+ src.broken = 1
+ update_icon()
overlays += sparks
spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface*
playsound(src.loc, "sparks", 60, 1)
- src.locked = 0
- src.broken = 1
user << "You unlock \the [src]."
add_fingerprint(user)
@@ -287,15 +305,14 @@
if(!broken && !opened && prob(50/severity))
if(!locked)
src.locked = 1
- overlays.Cut()
- overlays += redlight
+ update_icon()
else
- overlays.Cut()
- overlays += emag
+ src.locked = 0
+ src.broken = 1
+ update_icon()
overlays += sparks
spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface*
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
- src.locked = 0
if(!opened && prob(20/severity))
if(!locked)
open()
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index 54a1fe847c3..8e13052eaec 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -4,13 +4,38 @@
icon = 'icons/obj/crates.dmi'
icon_state = "densecrate"
density = 1
+ var/obj/item/weapon/paper/manifest/manifest
+
+/obj/structure/largecrate/New()
+ ..()
+ update_icon()
+
+/obj/structure/largecrate/update_icon()
+ ..()
+ overlays.Cut()
+ if(manifest)
+ overlays += "manifest"
/obj/structure/largecrate/attack_hand(mob/user as mob)
- user << "You need a crowbar to pry this open!"
- return
+ if(manifest)
+ user << "You tear the manifest off of the crate."
+ playsound(src.loc, 'sound/items/poster_ripped.ogg', 75, 1)
+ manifest.loc = loc
+ if(ishuman(user))
+ user.put_in_hands(manifest)
+ manifest = null
+ update_icon()
+ return
+ else
+ user << "You need a crowbar to pry this open!"
+ return
/obj/structure/largecrate/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/crowbar))
+ if(manifest)
+ manifest.loc = loc
+ manifest = null
+ update_icon()
new /obj/item/stack/sheet/mineral/wood(src)
var/turf/T = get_turf(src)
for(var/obj/O in contents)
@@ -18,6 +43,7 @@
user.visible_message("[user] pries \the [src] open.", \
"You pry open \the [src].", \
"You hear splitting wood.")
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 75, 1)
qdel(src)
else
return attack_hand(user)
diff --git a/html/changelogs/Paprka-crades.yml.txt b/html/changelogs/Paprka-crades.yml.txt
new file mode 100644
index 00000000000..f8cbd38a87c
--- /dev/null
+++ b/html/changelogs/Paprka-crades.yml.txt
@@ -0,0 +1,6 @@
+author: Paprka
+
+delete-after: True
+
+changes:
+ - tweak: "Cargo packages are now delivered with their manifests taped to the outside. Click on them with an open hand to remove them."
\ No newline at end of file
diff --git a/icons/obj/crates.dmi b/icons/obj/crates.dmi
index 7a1714234b0..40b9e739d62 100644
Binary files a/icons/obj/crates.dmi and b/icons/obj/crates.dmi differ