From 91f5138a617501b41e6951aede8ed2519ad13a19 Mon Sep 17 00:00:00 2001 From: Noah Beverly Date: Wed, 19 Nov 2025 21:18:19 -0700 Subject: [PATCH] Mail Cart (#41482) * Add mailcart crate type * Add recent progress, move location of mailcart.rsi * Allow letters and packages to be inserted * Add updated sprites for mailcart * Add storage for letters * Bugfix for sprite * Add fix for mincount mailcart sprite updates * Add dynamic names to packages in mailcart * Add additional whitelist items * Update tag comments * Remove max item size * Update fixture for mailcart, remove unused code from crates.yml * Add mail cart to cargo ordering * Update meta.json * Remove unused comment * Update copyright * Add missing ContainerContainer * Update ContainerContainer * Revert "Update ContainerContainer" This reverts commit 1805dcd58d8c0f52baca9db0d3173940ee241159. * Remove container slots and increase storage * Remove unused tags * Remove LetterDelivery tag --------- Co-authored-by: Justin Pfeifler --- .../Prototypes/Catalog/Cargo/cargo_cargo.yml | 10 ++ .../Objects/Deliveries/deliveries.yml | 3 + .../Structures/Specific/Cargo/mailcart.yml | 94 ++++++++++++++++++ Resources/Prototypes/tags.yml | 11 +- .../Specific/Cargo/mailcart.rsi/icon.png | Bin 0 -> 959 bytes .../Cargo/mailcart.rsi/mailcart_base.png | Bin 0 -> 959 bytes .../Specific/Cargo/mailcart.rsi/meta.json | 41 ++++++++ .../Specific/Cargo/mailcart.rsi/package_1.png | Bin 0 -> 137 bytes .../Specific/Cargo/mailcart.rsi/package_2.png | Bin 0 -> 137 bytes .../Specific/Cargo/mailcart.rsi/package_3.png | Bin 0 -> 136 bytes .../Specific/Cargo/mailcart.rsi/package_4.png | Bin 0 -> 134 bytes .../Specific/Cargo/mailcart.rsi/package_5.png | Bin 0 -> 170 bytes .../Specific/Cargo/mailcart.rsi/package_6.png | Bin 0 -> 171 bytes .../Specific/Cargo/mailcart.rsi/package_7.png | Bin 0 -> 169 bytes .../Specific/Cargo/mailcart.rsi/package_8.png | Bin 0 -> 170 bytes 15 files changed, 155 insertions(+), 4 deletions(-) create mode 100644 Resources/Prototypes/Entities/Structures/Specific/Cargo/mailcart.yml create mode 100644 Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/icon.png create mode 100644 Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/mailcart_base.png create mode 100644 Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/package_1.png create mode 100644 Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/package_2.png create mode 100644 Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/package_3.png create mode 100644 Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/package_4.png create mode 100644 Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/package_5.png create mode 100644 Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/package_6.png create mode 100644 Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/package_7.png create mode 100644 Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/package_8.png diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_cargo.yml b/Resources/Prototypes/Catalog/Cargo/cargo_cargo.yml index 050aa647b8..132f1b3c09 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_cargo.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_cargo.yml @@ -37,3 +37,13 @@ cost: 2500 category: cargoproduct-category-name-cargo group: market + +- type: cargoProduct + id: CargoMailCart + icon: + sprite: Objects/Specific/Cargo/mailcart.rsi + state: icon + product: MailCart + cost: 300 + category: cargoproduct-category-name-cargo + group: market diff --git a/Resources/Prototypes/Entities/Objects/Deliveries/deliveries.yml b/Resources/Prototypes/Entities/Objects/Deliveries/deliveries.yml index a011460366..9267009b3e 100644 --- a/Resources/Prototypes/Entities/Objects/Deliveries/deliveries.yml +++ b/Resources/Prototypes/Entities/Objects/Deliveries/deliveries.yml @@ -102,6 +102,9 @@ containers: delivery: !type:NestedSelector tableId: PackageDeliveryRewards + - type: Tag + tags: + - PackageDelivery - type: entity parent: BaseDelivery diff --git a/Resources/Prototypes/Entities/Structures/Specific/Cargo/mailcart.yml b/Resources/Prototypes/Entities/Structures/Specific/Cargo/mailcart.yml new file mode 100644 index 0000000000..4042b115f5 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Specific/Cargo/mailcart.yml @@ -0,0 +1,94 @@ +# Mailcart +- type: entity + name: mail cart + id: MailCart + parent: [BaseStructureDynamic, StructureWheeled] + description: Deliver packages with style and efficiency. + components: + - type: Sprite + noRot: true + sprite: Objects/Specific/Cargo/mailcart.rsi + layers: + - state: mailcart_base + - type: InteractionOutline + - type: Storage + grid: + - 0,0,15,7 + quickInsert: true + maxItemSize: Huge + whitelist: + components: + - Delivery + tags: + - Paper + - Document + - BoxCardboard + - Folder + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.18,-0.2,0.18,0.2" + density: 60 + mask: + - FullTileMask + layer: + - LargeMobLayer + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: !type:DamageTrigger + damage: 400 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - trigger: !type:DamageTrigger + damage: 200 + behaviors: + - !type:EmptyAllContainersBehaviour + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - type: ItemMapper + mapLayers: + package_1: + minCount: 1 + whitelist: &PackageWhitelist + tags: + - PackageDelivery + package_2: + minCount: 2 + whitelist: *PackageWhitelist + package_3: + minCount: 3 + whitelist: *PackageWhitelist + package_4: + minCount: 4 + whitelist: *PackageWhitelist + package_5: + minCount: 5 + whitelist: *PackageWhitelist + package_6: + minCount: 6 + whitelist: *PackageWhitelist + package_7: + minCount: 7 + whitelist: *PackageWhitelist + package_8: + minCount: 8 + whitelist: *PackageWhitelist + sprite: Objects/Specific/Cargo/mailcart.rsi + - type: Appearance + - type: UserInterface + interfaces: + enum.StorageUiKey.Key: + type: StorageBoundUserInterface + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [] diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 44b636495c..274d9447b4 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -159,7 +159,7 @@ id: Bottle # Storage whitelist: ChemMaster, ChemBag, SmartFridge, ClothingBeltJanitor, ClothingBeltMedical, ClothingBeltPlant - type: Tag - id: BoxCardboard # CargoBounty: BountyCardboardBox + id: BoxCardboard # CargoBounty: BountyCardboardBox. Storage whitelist: MailCart - type: Tag id: BoxHug # ConstructionGraph: HugBot @@ -465,7 +465,7 @@ id: DockEmergency # Used bv EmergencyShuttleSystem for finding a priority FTL destination. - type: Tag - id: Document # A superset of Paper tag. Represents a paper-like entity with writing on it, but is not necessarily writeable itself. + id: Document # A superset of Paper tag. Represents a paper-like entity with writing on it, but is not necessarily writeable itself. Storage whitelist: MailCart - type: Tag id: DonkPocket # Storage whitelist: FoodBoxDonkpocket @@ -581,7 +581,7 @@ id: Flower # CargoBounty: flowerwreath. CargoBounty: BountyFlower - type: Tag - id: Folder # Storage whitelist: Bookshelf, NoticeBoard + id: Folder # Storage whitelist: Bookshelf, NoticeBoard, MailCart - type: Tag id: FoodSnack # Storage whitelist: CandyBucket, CandyBowl. ItemMapper: CandyBowl @@ -1024,6 +1024,9 @@ ## P ## +- type: Tag + id: PackageDelivery # ItemMapper: MailCart + - type: Tag id: Packet # Storage whitelist: ClothingBeltChef @@ -1031,7 +1034,7 @@ id: Pancake # CargoBounty: BountyPancake - type: Tag - id: Paper # A writeable piece of paper. Subset of Document tag. SpecialDigestible: OrganMothStomach, OrganReptilianStomach + id: Paper # A writeable piece of paper. Subset of Document tag. SpecialDigestible: OrganMothStomach, OrganReptilianStomach. Storage whitelist: MailCart - type: Tag id: ParadoxCloneObjectiveBlacklist # objective entities with this tag don't get copied to paradox clones diff --git a/Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/icon.png b/Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..eff08d666224eed07b78b8830a32062457fcb18a GIT binary patch literal 959 zcmV;w13>(VP)Px&c}YY;R9J=WmcMTlR}jZPV=hu88{3M{yB#<|F-0UBNI?~eAL3tNFI7N_6eUuM z{0pQFN)^&j5E^{{02D~jq&ArH5LmX0=&kPn8%K&FJCowgd;9kGj)*GFO>?(9Z+?B} zJF^caGLeZ)WFr5wNcwQ$;syQv$p^Iqhi@JVKx_Vr4jTvEf9Z#HpPh7UY&?@j0B4cEZ0|m!^-Lkcklk@Lxu_x zI0HPf@U$R<+UHsY5<^NAR##Smjd~06EZ4Gh5+D$g-i5?P5fxvaRBRN>Ktk}8pCZOr zMO8g9hY)X>b&@Uobn~W}S>GizT@(HpAw|r&)TpN$aWLNhP5GrJ4$0Zti%T6U+xH%+5{o^vSbo3`2qYdk1`SYKfz% z?--W(3|dFOa(L|9hHh9||J>qmjE`eSw|Kd^Rd0c+=Yb#$cKbNlwowYR?;Db9A16C} zfAuelq7!=IcYwmZZkJ!WACfVklpU~1!8oEQxeR<;O{Oq{xzbfEf=C*_cx0c zF+_~&Dv;@&xVS{Y$+i0KPxpXxrA*JvsPTwhu9L(w#s^AyH(wS7Dsj-_`VCc=TsOW} ztwgo9i<;j8QQYQ(#%qAZkD=VW&+^&(BlSVDCBbcuK9entXh9Uyd~yDpk;ZSzAIIua zdF^hz!^e%dycqr*XL(zXPtUUT>eNW%lM64{8jRMZa^j;GY>)AAV&NqR2YZyR-@Fe1 z-8wh_w(VP)Px&c}YY;R9J=WmcMTlR}jZPV=hu88{3M{yB#<|F-0UBNI?~eAL3tNFI7N_6eUuM z{0pQFN)^&j5E^{{02D~jq&ArH5LmX0=&kPn8%K&FJCowgd;9kGj)*GFO>?(9Z+?B} zJF^caGLeZ)WFr5wNcwQ$;syQv$p^Iqhi@JVKx_Vr4jTvEf9Z#HpPh7UY&?@j0B4cEZ0|m!^-Lkcklk@Lxu_x zI0HPf@U$R<+UHsY5<^NAR##Smjd~06EZ4Gh5+D$g-i5?P5fxvaRBRN>Ktk}8pCZOr zMO8g9hY)X>b&@Uobn~W}S>GizT@(HpAw|r&)TpN$aWLNhP5GrJ4$0Zti%T6U+xH%+5{o^vSbo3`2qYdk1`SYKfz% z?--W(3|dFOa(L|9hHh9||J>qmjE`eSw|Kd^Rd0c+=Yb#$cKbNlwowYR?;Db9A16C} zfAuelq7!=IcYwmZZkJ!WACfVklpU~1!8oEQxeR<;O{Oq{xzbfEf=C*_cx0c zF+_~&Dv;@&xVS{Y$+i0KPxpXxrA*JvsPTwhu9L(w#s^AyH(wS7Dsj-_`VCc=TsOW} ztwgo9i<;j8QQYQ(#%qAZkD=VW&+^&(BlSVDCBbcuK9entXh9Uyd~yDpk;ZSzAIIua zdF^hz!^e%dycqr*XL(zXPtUUT>eNW%lM64{8jRMZa^j;GY>)AAV&NqR2YZyR-@Fe1 z-8wh_wlve c0~64S9r5fety>ju0F7htboFyt=akR{0CYDeY5)KL literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/package_2.png b/Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/package_2.png new file mode 100644 index 0000000000000000000000000000000000000000..dc35d82b8daf3a906f6a3b28e3a13e04a4accd4c GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}&YmugArY;~ z2@1k29f|Amwa#yXs z*kYzLUme~r+pVi+`8#Z8@=M`Rt*GaWH~zNS{`t<|BEgsu$r*XRyQ706W~H`BQ&>WR QD9}CzPgg&ebxsLQ002lizyJUM literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/package_6.png b/Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/package_6.png new file mode 100644 index 0000000000000000000000000000000000000000..60cb003b100fac4688af9c9fc76bef06f1245da5 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}sh%#5ArY-_ z&n@I_Fc4^cDBqN##CC8&pw2-d4U;Czopr0K+*x6aWAK literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/package_8.png b/Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/package_8.png new file mode 100644 index 0000000000000000000000000000000000000000..8363766ecba58432a873bda79ef37a9818ecb08a GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}DV{ElArY-_ z&l&PLIEb`7oUbwWgriB;RPP-vUTX^kw-=~ea44$rjF6*2UngH2@JHP+{ literal 0 HcmV?d00001