Adds the parcel cart to operations. (#21288)

This adds a parcel cart to the mail room in operations, which can be
loaded with up to 17 packages. These packages can be any that can be
held in the hand, so not crates but anything smaller effectively yes as
long as it can be wrapped in package wrapper.
When it is loaded with 5 packages, it gives a slowdown to the person
pushing it, and further slowdown at 11 packages.
The cart can have a total of 17 packages at the moment, as that is the
amount of different sprites I have for it.
The code is based on the engineering cart, and also contain a small
bugfix so the engineering cart give back steel when taken apart, as that
is what is used to build it.


https://github.com/user-attachments/assets/b8613c9e-55e1-4f76-926a-60f4acd6269e

### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:

| Path | Original Author | License |
| --- | --- | --- |
| icons/obj/parcelcart.dmi | Tomixcomics (Aurora Station) | CC-BY |
This commit is contained in:
Casper3667
2025-09-10 19:05:19 +00:00
committed by GitHub
parent e2b00ebe46
commit 9a9e259104
50 changed files with 367 additions and 328 deletions
+1 -1
View File
@@ -145,7 +145,7 @@
description = "The ultimate in custodial carts. Has space for water, mops, signs, trash bags, and more."
price = 190
items = list(
/obj/structure/janitorialcart
/obj/structure/cart/storage/janitorialcart
)
access = ACCESS_JANITOR
container_type = "crate"
+1 -1
View File
@@ -903,7 +903,7 @@
description = "A cart for your engineering-related storage needs."
price = 100
items = list(
/obj/structure/engineeringcart
/obj/structure/cart/storage/engineeringcart
)
access = ACCESS_ENGINE
container_type = "crate"
+1 -1
View File
@@ -185,7 +185,7 @@
description = "A set of items to restock the janitors closet."
price = 2000
items = list(
/obj/structure/janitorialcart,
/obj/structure/cart/storage/janitorialcart,
/obj/structure/mopbucket,
/obj/item/mop,
/obj/item/storage/bag/trash,
+1 -1
View File
@@ -689,7 +689,7 @@ var/list/worths = list(
/obj/structure/girder = 15,
/obj/structure/grille = 5,
/obj/structure/inflatable = 1,
/obj/structure/janitorialcart = 12,
/obj/structure/cart/storage/janitorialcart = 12,
/obj/structure/kitchenspike = 35,
/obj/structure/lattice = 1,
/obj/structure/morgue = 10,
+3 -2
View File
@@ -71,8 +71,9 @@
recipes += new /datum/stack_recipe_list("miscellaneous construction",
list(
new /datum/stack_recipe("key", /obj/item/key, 1, time = 10, one_per_turf = 0, on_floor = 1),
new /datum/stack_recipe("custodial cart", /obj/structure/janitorialcart, BUILD_AMT, time = 120, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("engineering cart", /obj/structure/engineeringcart, BUILD_AMT, time = 120, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("custodial cart", /obj/structure/cart/storage/janitorialcart, BUILD_AMT, time = 120, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("engineering cart", /obj/structure/cart/storage/engineeringcart, BUILD_AMT, time = 120, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("parcel cart", /obj/structure/cart/storage/parcelcart, BUILD_AMT, time = 120, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("steel closet", /obj/structure/closet, BUILD_AMT, time = 15, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("target stake", /obj/structure/target_stake, BUILD_AMT, time = 15, one_per_turf = 1, on_floor = 1),
+1 -1
View File
@@ -329,7 +329,7 @@
//Wheelchair pushing goes here for now.
//TODO: Fuck wheelchairs.
if(istype(mob.pulledby, /obj/structure/bed/stool/chair/office/wheelchair) || istype(mob.pulledby, /obj/structure/janitorialcart) || istype(mob.pulledby, /obj/structure/engineeringcart))
if(istype(mob.pulledby, /obj/structure/bed/stool/chair/office/wheelchair) || istype(mob.pulledby, /obj/structure/cart))
var/obj/structure/S = mob.pulledby
move_delay += S.slowdown
return mob.pulledby.relaymove(mob, direct)
@@ -48,8 +48,8 @@
var/mob/living/bot/cleanbot/C = A
status = C.on ? "Online" : "Offline"
supply_type = "Cleanbots"
else if(istype(A, /obj/structure/janitorialcart))
var/obj/structure/janitorialcart/J = A
else if(istype(A, /obj/structure/cart/storage/janitorialcart))
var/obj/structure/cart/storage/janitorialcart/J = A
status = J.get_short_status()
supply_type = "Janicarts"
else