From 855268d1461adab920e0ab3f562719a1d7b55812 Mon Sep 17 00:00:00 2001
From: portfiend <109661617+portfiend@users.noreply.github.com>
Date: Mon, 20 Oct 2025 19:47:53 -0500
Subject: [PATCH 01/17] Costume Bundles + Rearrange AutoDrobe (#1903) This PR
adds "costume bundles", a storage item for full costumes in a single bag.
Many items in the AutoDrobe have been replaced with their respective costume
bundles. You can also equip costume bundles in loadouts.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
In addition, the AutoDrobe's stock has been completely rearranged,
ideally to make things more intuitive. Clown / mime / musician stuff
first, then costume bundles, then everything else (roughly grouped by
item slot category).
Halloween feature. Also, the AutoDrobe's stock was very messy and
unintuitive and I felt it was good of a time as any to clean up.
New base entity for costume bundles, and then individual bundle
prototypes for each costume.
Some non-clothing entity prototypes were given a `CostumeItem` tag to
allow them to be inserted into costume bundles.
Many individual items in AutoDrobe and the theatrical performance crates
were replaced with bundles; ultimately, nothing should be actually
"lost". Also, rearranged AutoDrobe.
A new loadout category, "Costumes", with many costume bundles. You get
one. Some bundles have playtime requirements - namely the jester, circus
clown, and musician bundles.
Added a stupid C# check to prevent a debug assert error related to
attempting to set ContainerHeld's fill status before the container has
been initialized.
No inhands sorry I'm tired
Costume bundles:
Loadouts:
Rearranged AutoDrobe:
Click to expand
Theatrical Performances Crate:
- [x] I have read and am following the [Pull Request and Changelog
Guidelines](https://docs.spacestation14.com/en/general-development/codebase-info/pull-request-guidelines.html).
- [x] I have added media to this PR or it does not require an ingame
showcase.
- [x] I have tested any changes or additions.
- [x] I can confirm this PR contains no AI-generated content, and did
not use any AI-generated content.
Only thing is the massive restructure of AutoDrobe inventory and mild
rearrangement of the contents of the theatrical performances crate - may
cause annoying merge conflicts later
**Changelog**
:cl:
- add: Many individual costume parts in the AutoDrobe and theatrical
performances crate have been replaced with "costume bundles", a storage
item for costume parts specifically.
- tweak: The AutoDrobe's inventory has been majorly consolidated and
rearranged. The items inside are sorted by clown, mime, and musician
items first, then costume bundles, then everything else.
- add: You can now take a costume bundle in your loadouts - find it
under Items! You know, in case an occasion that necessitates bringing
your own costume arises.
---
.../ContainerHeld/ContainerHeldSystem.cs | 3 +-
.../Catalog/Fills/Crates/service.yml | 2 +-
.../VendingMachines/Inventories/theater.yml | 2 +-
.../Objects/Consumable/Food/meals.yml | 3 +
.../Entities/Objects/Weapons/Melee/gohei.yml | 3 +
.../Entities/Objects/Storage/costumes.yml | 562 ++++++++++++++++++
.../_DEN/Loadouts/Generic/Items/costumes.yml | 265 +++++++++
Resources/Prototypes/_DEN/tags.yml | 3 +
.../Storage/costume_bundle.rsi/icon-clown.png | Bin 0 -> 373 bytes
.../costume_bundle.rsi/icon-musician.png | Bin 0 -> 376 bytes
.../Storage/costume_bundle.rsi/icon.png | Bin 0 -> 373 bytes
.../Storage/costume_bundle.rsi/label.png | Bin 0 -> 188 bytes
.../Storage/costume_bundle.rsi/meta.json | 32 +
.../Storage/costume_bundle.rsi/outfit.png | Bin 0 -> 239 bytes
.../costume_bundle.rsi/wrapper-fill.png | Bin 0 -> 141 bytes
.../Storage/costume_bundle.rsi/wrapper.png | Bin 0 -> 160 bytes
16 files changed, 872 insertions(+), 3 deletions(-)
create mode 100644 Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
create mode 100644 Resources/Prototypes/_DEN/Loadouts/Generic/Items/costumes.yml
create mode 100644 Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/icon-clown.png
create mode 100644 Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/icon-musician.png
create mode 100644 Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/icon.png
create mode 100644 Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/label.png
create mode 100644 Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/meta.json
create mode 100644 Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/outfit.png
create mode 100644 Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/wrapper-fill.png
create mode 100644 Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/wrapper.png
diff --git a/Content.Shared/ContainerHeld/ContainerHeldSystem.cs b/Content.Shared/ContainerHeld/ContainerHeldSystem.cs
index f09cd4443d4..e0c43ab1dc5 100644
--- a/Content.Shared/ContainerHeld/ContainerHeldSystem.cs
+++ b/Content.Shared/ContainerHeld/ContainerHeldSystem.cs
@@ -23,7 +23,8 @@ public override void Initialize()
private void OnContainerModified(EntityUid uid, ContainerHeldComponent comp, ContainerModifiedMessage args)
{
- if (!(HasComp(uid)
+ if (!(TryComp(uid, out var storage)
+ && storage.Container is not null // DEN - Bugfix lol
&& TryComp(uid, out var appearance)
&& TryComp(uid, out var item)))
{
diff --git a/Resources/Prototypes/Catalog/Fills/Crates/service.yml b/Resources/Prototypes/Catalog/Fills/Crates/service.yml
index 9d53c1e2b4e..a8c824a3e2c 100644
--- a/Resources/Prototypes/Catalog/Fills/Crates/service.yml
+++ b/Resources/Prototypes/Catalog/Fills/Crates/service.yml
@@ -121,7 +121,7 @@
name: theatrical performances crate
description: Contains a moth cloak, barber scissors, maid uniform, clown and mime attributes, and other performance charms.
components:
- - type: EntityTableContainerFill
+ - type: EntityTableContainerFill # TODO: Costume bundles
containers:
entity_storage: !type:AllSelector
children:
diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml
index 7e7bb371625..564a1f48ef6 100644
--- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml
+++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml
@@ -1,6 +1,6 @@
- type: vendingMachineInventory
id: AutoDrobeInventory
- startingInventory:
+ startingInventory: # TODO: Costume bundles
ClothingHeadHatJester: 1
ClothingUniformJumpsuitJester: 1
ClothingHeadHatJesterAlt: 1
diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/meals.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/meals.yml
index 4561464d187..a9ace2addec 100644
--- a/Resources/Prototypes/Entities/Objects/Consumable/Food/meals.yml
+++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/meals.yml
@@ -534,6 +534,9 @@
Quantity: 10
- ReagentId: Allicin
Quantity: 5
+ - type: Tag # DEN: Allow item to be inserted in costume bundles
+ tags:
+ - CostumeItem
# Tastes like pain.
- type: entity
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/gohei.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/gohei.yml
index ff39bc7a576..61e7b5f70ae 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/gohei.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/gohei.yml
@@ -15,3 +15,6 @@
- type: Item
size: Small
sprite: Objects/Weapons/Melee/gohei.rsi
+ - type: Tag # DEN: Add costume item tag
+ tags:
+ - CostumeBundle
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
new file mode 100644
index 00000000000..056b5be41c4
--- /dev/null
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
@@ -0,0 +1,562 @@
+# Costume bundles
+# Used to consolidate multi-item costumes into a single item for drobes.
+
+- type: entity
+ abstract: true
+ parent: [BaseStorageItem, BaseBagOpenClose]
+ id: BaseCostumeBundle
+ name: costume bundle
+ description: A bag containing assorted costume parts.
+ components:
+ - type: Sprite
+ sprite: _DEN/Objects/Storage/costume_bundle.rsi
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#ffffff"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+ - type: Icon
+ sprite: _DEN/Objects/Storage/costume_bundle.rsi
+ state: icon
+ - type: Item
+ size: Large
+ storedRotation: 90
+ heldPrefix: empty
+ # sprite: _DEN/Objects/Storage/costume_bundle.rsi
+ - type: Storage
+ maxItemSize: Normal
+ grid:
+ - 0,0,5,3
+ whitelist:
+ tags:
+ - CostumeItem
+ components:
+ - Clothing
+ - type: ContainerHeld
+ threshold: 1
+ - type: Appearance
+ - type: GenericVisualizer
+ visuals:
+ enum.ToggleableVisuals.Enabled:
+ enum.ToggleableVisuals.Layer:
+ True: {visible: true}
+ False: {visible: false}
+ - type: StaticPrice
+ price: 10
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: EmptyCostumeBundle
+ description: A bag for storing assorted costume parts.
+ components:
+ - type: Sprite
+ sprite: _DEN/Objects/Storage/costume_bundle.rsi
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#ffffff"
+ visible: false # starts with nothing
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleAngel
+ name: angel costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#f5b8c3"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#efec98"
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHalo
+ - id: ClothingUniformJumpskirtAngelDress
+ - id: ClothingHandsAngelGloves
+ - id: ClothingShoesAngelSandals
+ - id: ClothingNeckAngelWings
+ - id: HandheldHarpInstrument
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleBunnySuit
+ name: bunny suit costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#48494e"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHatBunny
+ - id: ClothingCostumeBunnySuit
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleBurglar
+ name: burglar costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#3e3735"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+ - type: StorageFill
+ contents:
+ - id: ClothingMaskBurglar
+ - id: ClothingUniformBurglarJumpsuit
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleCardborg
+ name: cardborg costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#70736c"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHatCardborg
+ - id: ClothingOuterCardborg
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleChicken
+ name: chicken costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#ffc800"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHatChickenhead
+ - id: ClothingOuterSuitChicken
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleCircusClown
+ name: circus clown costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#ffd85d"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#74ff33"
+ - type: Icon
+ state: icon-clown
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHatCircusClown
+ - id: ClothingMaskClownNose
+ - id: ClothingNeckRuffle
+ - id: ClothingUniformCircusClown
+ - id: ClothingShoesCircus
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleDevil
+ name: devil costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#4b3b56"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#d349c9"
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadDevilHorns
+ - id: ClothingHeadJesterEvilHat
+ - id: ClothingNeckDevilWings
+ - id: ClothingUniformJesterEvil
+ - id: ClothingShoesJesterEvilJanglers
+ - id: DevilPitchfork
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleGladiator
+ name: gladiator costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#e1b73d"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHatGladiator
+ - id: ClothingUniformJumpsuitGladiator
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleJester
+ name: jester costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#dd1818"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#74ff33"
+ - type: Icon
+ state: icon-clown
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHatJester
+ - id: ClothingHeadHatJesterAlt
+ - id: ClothingUniformJumpsuitJester
+ - id: ClothingUniformJumpsuitJesterAlt
+ - id: ClothingShoesJester
+ - id: ClothingShoesJester
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleJudge
+ name: judge costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#2e2e2e"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHatPwig
+ - id: ClothingOuterRobesJudge
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleMonkey
+ name: monkey costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#914800"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHatAnimalMonkey
+ - id: ClothingOuterSuitMonkey
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleMusicianMarching
+ name: marching band costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#463c6a"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#6f56b8"
+ - type: Icon
+ state: icon-musician
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHatMusicianShako
+ - id: ClothingUniformJumpsuitMusicianMarchingBand
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleMusicianLoungeSinger
+ name: lounge singer costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#463c6a"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#6f56b8"
+ - type: Icon
+ state: icon-musician
+ - type: StorageFill
+ contents:
+ - id: ClothingUniformMusicianSingerDress
+ - id: ClothingHandsMusicianSingerGloves
+ - id: ClothingNeckFeatherBoa
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundlePirate
+ name: pirate costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#dfe1de"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHatPirate
+ - id: ClothingHeadBandRed
+ - id: ClothingEyesEyepatch
+ - id: ClothingUniformJumpsuitPirate
+ - id: ClothingOuterCoatPirate
+ - id: ClothingShoesBootsLaceup
+ - id: FoamCutlass
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundlePerformer
+ name: performer costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#474f63"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#70cac4"
+ - type: StorageFill
+ contents:
+ - id: ClothingUniformJumpskirtPerformer
+ - id: ClothingShoesBootsPerformer
+ - id: FoodMealMemoryleek
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleRedRaccoon
+ name: red raccoon costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#e48a1b"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHatRedRacoon
+ - id: ClothingOuterRedRacoon
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleSafari
+ name: safari costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#d3bf86"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadSafari
+ - id: ClothingUniformJumpsuitSafari
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleSailor
+ name: sailor costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#dedbec"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadSailorCap
+ - id: ClothingNeckSailorAscot
+ - id: ClothingUniformSailorSuit
+ - id: ClothingShoesBootsLaceup
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleSanta
+ name: santa costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#d73827"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#f2c735"
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHatSantahat
+ - id: ClothingOuterSanta
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleShrineMaiden
+ name: shrine maiden costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#ff1f24"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHatShrineMaidenWig
+ - id: ClothingOuterSuitShrineMaiden
+ - id: Gohei
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleSkub
+ name: skub costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#fcd4d4"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHatSkub
+ - id: ClothingOuterSkub
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleWitch
+ name: witch costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#1b1b1b"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHatWitch1
+ - id: ClothingHeadHatWitch
+ - id: ClothingOuterSuitWitchRobes
+
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleYakuza
+ name: yakuza costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#ae2354"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#dd6b17"
+ - type: StorageFill
+ contents:
+ - id: ClothingUniformJumpsuitDameDane
+ - id: ClothingOuterDameDane
+ - id: ClothingShoesDameDane
diff --git a/Resources/Prototypes/_DEN/Loadouts/Generic/Items/costumes.yml b/Resources/Prototypes/_DEN/Loadouts/Generic/Items/costumes.yml
new file mode 100644
index 00000000000..3c0e7434223
--- /dev/null
+++ b/Resources/Prototypes/_DEN/Loadouts/Generic/Items/costumes.yml
@@ -0,0 +1,265 @@
+## Job-specific
+
+- type: loadout
+ id: LoadoutCostumeBundleCircusClown
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ - !type:CharacterLogicOrRequirement
+ requirements:
+ - !type:CharacterPlaytimeRequirement
+ tracker: JobClown
+ min: 108000 # 30 hours; ~10 full shifts
+ - !type:CharacterJobRequirement
+ jobs:
+ - Clown
+ items:
+ - CostumeBundleCircusClown
+
+- type: loadout
+ id: LoadoutCostumeBundleJester
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ - !type:CharacterLogicOrRequirement
+ requirements:
+ - !type:CharacterPlaytimeRequirement
+ tracker: JobClown
+ min: 108000 # 30 hours; ~10 full shifts
+ - !type:CharacterJobRequirement
+ jobs:
+ - Clown
+ items:
+ - CostumeBundleJester
+
+- type: loadout
+ id: LoadoutCostumeBundleMusicianMarching
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ - !type:CharacterLogicOrRequirement
+ requirements:
+ - !type:CharacterPlaytimeRequirement
+ tracker: JobMusician
+ min: 108000 # 30 hours; ~10 full shifts
+ - !type:CharacterJobRequirement
+ jobs:
+ - Musician
+ items:
+ - CostumeBundleMusicianMarching
+
+- type: loadout
+ id: LoadoutCostumeBundleMusicianLoungeSinger
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ - !type:CharacterLogicOrRequirement
+ requirements:
+ - !type:CharacterPlaytimeRequirement
+ tracker: JobMusician
+ min: 108000 # 30 hours; ~10 full shifts
+ - !type:CharacterJobRequirement
+ jobs:
+ - Musician
+ items:
+ - CostumeBundleMusicianLoungeSinger
+
+## Other
+
+- type: loadout
+ id: LoadoutCostumeBundleAngel
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleAngel
+
+- type: loadout
+ id: LoadoutCostumeBundleBunnySuit
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleBunnySuit
+
+- type: loadout
+ id: LoadoutCostumeBundleBurglar
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleBurglar
+
+- type: loadout
+ id: LoadoutCostumeBundleCardborg
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleCardborg
+
+- type: loadout
+ id: LoadoutCostumeBundleChicken
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleChicken
+
+- type: loadout
+ id: LoadoutCostumeBundleDevil
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleDevil
+
+- type: loadout
+ id: LoadoutCostumeBundleGladiator
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleGladiator
+
+- type: loadout
+ id: LoadoutCostumeBundleJudge
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleJudge
+
+- type: loadout
+ id: LoadoutCostumeBundleMonkey
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleMonkey
+
+- type: loadout
+ id: LoadoutCostumeBundlePirate
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundlePirate
+
+- type: loadout
+ id: LoadoutCostumeBundlePerformer
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundlePerformer
+
+- type: loadout
+ id: LoadoutCostumeBundleRedRaccoon
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleRedRaccoon
+
+- type: loadout
+ id: LoadoutCostumeBundleSafari
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleSafari
+
+- type: loadout
+ id: LoadoutCostumeBundleSailor
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleSailor
+
+- type: loadout
+ id: LoadoutCostumeBundleSanta
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleSanta
+
+- type: loadout
+ id: LoadoutCostumeBundleShrineMaiden
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleShrineMaiden
+
+- type: loadout
+ id: LoadoutCostumeBundleSkub
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleSkub
+
+- type: loadout
+ id: LoadoutCostumeBundleWitch
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleWitch
+
+- type: loadout
+ id: LoadoutCostumeBundleYakuza
+ category: Costumes
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutCostumeBundles
+ items:
+ - CostumeBundleYakuza
diff --git a/Resources/Prototypes/_DEN/tags.yml b/Resources/Prototypes/_DEN/tags.yml
index 21c486c91c5..a468cc3e9c8 100644
--- a/Resources/Prototypes/_DEN/tags.yml
+++ b/Resources/Prototypes/_DEN/tags.yml
@@ -1,5 +1,8 @@
# alphabetical order PLEASE
# also document their purpose
+- type: Tag
+ id: CostumeItem # Used for non-clothing items that should be allowed to fit in costume bundles.
+
- type: Tag
id: TeddyRibbon # Ribbon slot for teddy bears
diff --git a/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/icon-clown.png b/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/icon-clown.png
new file mode 100644
index 0000000000000000000000000000000000000000..c80b2779eb8d334c2219537973bcb763e0fc2965
GIT binary patch
literal 373
zcmV-*0gC>KP)Px$FG)l}R9J=Wma$92P!PsH#nvE%B4o*$!Tn__N~iuM!O6wRLC_(CLWfRWI!XSL
zPDSZ-w>!KwOF%-FfI?i%(7~5?HBhMUH-C5cPx$GD$>1R9J=WmN84iP!PxeN?U_air|nn`2zAXb?IWKd6eQb?M$O
zk*O|SI^E$Hcv&+D61oHw;$nslzPxJ#1%1Eye|P`fy_b7{!|~rak_He_WuuFt$SQY7
zT3jg=4o72c(ydp^kccW96V?Xm;>@fEeGdTOb+^OI&o2M~Gi#-kl?hP?hNH0_^gTR3
zO^mwxhes5fQqO18#+)Jp`1$H2Ng6eUWxivnfwr-}1y`3ZTc`i*{KBaJcz*)`EMD)7
zHCpRHo~6jMR2+Bk5wv0;&r_lZjpU8zb0sF4#zjt
W{AfnX9)7I=0000KP)Px$FG)l}R9J=WmLX5WP!PxekZrUi%YwsFSJziHGqrsKJ_QDaAOTSU31VtypMr0&
zshO#Fb#-qRN1BN?KvD!$Oz?U)nk<3$)Bn5s_pa~V100V3&XF`gYh7`4aU8R9ccjIY
zQo(REHa6XQwG6b@6~_eIKwX@O%%JZ90KD#Qc=`ST03afxlwz3>bznFen?c{h)8m6x
zcYAk_d|R6NY}%MpWB}h^og_)4CTHe5mKtaq_9<9gp6&eo7w0{ze)IAM0GK?#T5Gh{
zfix?SW`#KJ;3H_oK$;bZLLX7+i@P8`1vV4=@Ha;A8(JAb6#9F|vhM+{b#--p0|4mu
zes0|9$=CgmZ%fQ))5fhR>cD!n42a0O32W-b)ua=>2PEs5hzw^PAN)b$a5x;FQGsZN
T>-40F00000NkvXXu0mjfC(5H>
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/label.png b/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/label.png
new file mode 100644
index 0000000000000000000000000000000000000000..afeae01c718cd429500cf56ff1107aeef5109673
GIT binary patch
literal 188
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Wu7jMArY;~
z2@gTe~DWM4f1)@8Q
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/meta.json b/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/meta.json
new file mode 100644
index 00000000000..87af3ca8623
--- /dev/null
+++ b/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/meta.json
@@ -0,0 +1,32 @@
+{
+ "version": 1,
+ "license": "CC0-1.0",
+ "copyright": "Sprites by portfiend (GitHub)",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-clown"
+ },
+ {
+ "name": "icon-musician"
+ },
+ {
+ "name": "label"
+ },
+ {
+ "name": "outfit"
+ },
+ {
+ "name": "wrapper"
+ },
+ {
+ "name": "wrapper-fill"
+ }
+ ]
+}
diff --git a/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/outfit.png b/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/outfit.png
new file mode 100644
index 0000000000000000000000000000000000000000..792ff0027d3ad9cf9e71559bdcaef276b74d67b4
GIT binary patch
literal 239
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}D?MEtLn2y}
z6C_v{Cy4MEB&fIt-#xST|HqT&ORFcR>Rp@`U-RM1|D){w|NsB{E6sZN2&d(Qq|+C5
zk3ADel0E3MN_oqYqbnA*<*)}x_gE!dVPt;CAQogAQ~j%}k$Fe!WOu9?yQ*>_7n2;E%voOMz5
mk%i&1{Y`-eTyBh885yo-mw1)_)7uYpG=rzBpUXO@geCyMEnam1
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/wrapper-fill.png b/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/wrapper-fill.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d39a3edd9a076e0fd68e113ef7c487d371d4800
GIT binary patch
literal 141
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}?w&4=ArY-_
zuWjUIP~c%cIOA`*nf8qiwvYGKck-om)cL<{$aU{tno-W`(Qn=%aY4>s@O8?|vp}6d
j&`>__vDm~qkB$zr*L5NaTPO2A1POb(`njxgN@xNA0^Kcu
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/wrapper.png b/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/wrapper.png
new file mode 100644
index 0000000000000000000000000000000000000000..690e4a40190042a24fd2e84bd705cf1d4ae7fe33
GIT binary patch
literal 160
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}QJyZ2ArY-_
zryb-ypulrv!7G>T|9K);_ApHQ;qdl*;l>JhN4nb9iY*yhz9jI1I74
Date: Tue, 17 Mar 2026 21:23:59 -0500
Subject: [PATCH 02/17] comment out missing costumes
---
.../Entities/Objects/Fun/weapons.yml | 3 +
.../Entities/Objects/Weapons/Melee/gohei.yml | 4 +-
.../Entities/Objects/Storage/costumes.yml | 306 ++++++------------
.../Entities/Objects/Storage/costumes_job.yml | 95 ++++++
4 files changed, 205 insertions(+), 203 deletions(-)
create mode 100644 Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
diff --git a/Resources/Prototypes/Entities/Objects/Fun/weapons.yml b/Resources/Prototypes/Entities/Objects/Fun/weapons.yml
index f9a6e874acd..0f2548b257b 100644
--- a/Resources/Prototypes/Entities/Objects/Fun/weapons.yml
+++ b/Resources/Prototypes/Entities/Objects/Fun/weapons.yml
@@ -211,6 +211,9 @@
sprite: Objects/Weapons/Melee/cutlass.rsi
shape:
- 0,0,0,2
+ - type: Tag # DEN: Allow item be inserted in costume bundles
+ tags:
+ - CostumeItem
- type: entity
parent: [ BaseItem, BaseToySword ]
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/gohei.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/gohei.yml
index 61e7b5f70ae..d123774a81d 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/gohei.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/gohei.yml
@@ -15,6 +15,6 @@
- type: Item
size: Small
sprite: Objects/Weapons/Melee/gohei.rsi
- - type: Tag # DEN: Add costume item tag
+ - type: Tag # DEN: Allow item be inserted in costume bundles
tags:
- - CostumeBundle
+ - CostumeItem
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
index 056b5be41c4..f2b93cd51ca 100644
--- a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
@@ -66,69 +66,69 @@
- state: label
color: "#dd6b17"
-- type: entity
- parent: BaseCostumeBundle
- id: CostumeBundleAngel
- name: angel costume bundle
- components:
- - type: Sprite
- layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
- color: "#f5b8c3"
- - state: wrapper-fill
- color: "#ffffff22"
- - state: wrapper
- - state: label
- color: "#efec98"
- - type: StorageFill
- contents:
- - id: ClothingHeadHalo
- - id: ClothingUniformJumpskirtAngelDress
- - id: ClothingHandsAngelGloves
- - id: ClothingShoesAngelSandals
- - id: ClothingNeckAngelWings
- - id: HandheldHarpInstrument
+# - type: entity
+# parent: BaseCostumeBundle
+# id: CostumeBundleAngel
+# name: angel costume bundle
+# components:
+# - type: Sprite
+# layers:
+# - state: outfit
+# map: [ "enum.ToggleableVisuals.Layer" ]
+# color: "#f5b8c3"
+# - state: wrapper-fill
+# color: "#ffffff22"
+# - state: wrapper
+# - state: label
+# color: "#efec98"
+# - type: StorageFill
+# contents:
+# - id: ClothingHeadHalo
+# - id: ClothingUniformJumpskirtAngelDress
+# - id: ClothingHandsAngelGloves
+# - id: ClothingShoesAngelSandals
+# - id: ClothingNeckAngelWings
+# - id: HandheldHarpInstrument
-- type: entity
- parent: BaseCostumeBundle
- id: CostumeBundleBunnySuit
- name: bunny suit costume bundle
- components:
- - type: Sprite
- layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
- color: "#48494e"
- - state: wrapper-fill
- color: "#ffffff22"
- - state: wrapper
- - state: label
- color: "#dd6b17"
- - type: StorageFill
- contents:
- - id: ClothingHeadHatBunny
- - id: ClothingCostumeBunnySuit
+# - type: entity
+# parent: BaseCostumeBundle
+# id: CostumeBundleBunnySuit
+# name: bunny suit costume bundle
+# components:
+# - type: Sprite
+# layers:
+# - state: outfit
+# map: [ "enum.ToggleableVisuals.Layer" ]
+# color: "#48494e"
+# - state: wrapper-fill
+# color: "#ffffff22"
+# - state: wrapper
+# - state: label
+# color: "#dd6b17"
+# - type: StorageFill
+# contents:
+# - id: ClothingHeadHatBunny
+# - id: ClothingCostumeBunnySuit
-- type: entity
- parent: BaseCostumeBundle
- id: CostumeBundleBurglar
- name: burglar costume bundle
- components:
- - type: Sprite
- layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
- color: "#3e3735"
- - state: wrapper-fill
- color: "#ffffff22"
- - state: wrapper
- - state: label
- color: "#dd6b17"
- - type: StorageFill
- contents:
- - id: ClothingMaskBurglar
- - id: ClothingUniformBurglarJumpsuit
+# - type: entity
+# parent: BaseCostumeBundle
+# id: CostumeBundleBurglar
+# name: burglar costume bundle
+# components:
+# - type: Sprite
+# layers:
+# - state: outfit
+# map: [ "enum.ToggleableVisuals.Layer" ]
+# color: "#3e3735"
+# - state: wrapper-fill
+# color: "#ffffff22"
+# - state: wrapper
+# - state: label
+# color: "#dd6b17"
+# - type: StorageFill
+# contents:
+# - id: ClothingMaskBurglar
+# - id: ClothingUniformBurglarJumpsuit
- type: entity
parent: BaseCostumeBundle
@@ -170,54 +170,29 @@
- id: ClothingHeadHatChickenhead
- id: ClothingOuterSuitChicken
-- type: entity
- parent: BaseCostumeBundle
- id: CostumeBundleCircusClown
- name: circus clown costume bundle
- components:
- - type: Sprite
- layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
- color: "#ffd85d"
- - state: wrapper-fill
- color: "#ffffff22"
- - state: wrapper
- - state: label
- color: "#74ff33"
- - type: Icon
- state: icon-clown
- - type: StorageFill
- contents:
- - id: ClothingHeadHatCircusClown
- - id: ClothingMaskClownNose
- - id: ClothingNeckRuffle
- - id: ClothingUniformCircusClown
- - id: ClothingShoesCircus
-
-- type: entity
- parent: BaseCostumeBundle
- id: CostumeBundleDevil
- name: devil costume bundle
- components:
- - type: Sprite
- layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
- color: "#4b3b56"
- - state: wrapper-fill
- color: "#ffffff22"
- - state: wrapper
- - state: label
- color: "#d349c9"
- - type: StorageFill
- contents:
- - id: ClothingHeadDevilHorns
- - id: ClothingHeadJesterEvilHat
- - id: ClothingNeckDevilWings
- - id: ClothingUniformJesterEvil
- - id: ClothingShoesJesterEvilJanglers
- - id: DevilPitchfork
+# - type: entity
+# parent: BaseCostumeBundle
+# id: CostumeBundleDevil
+# name: devil costume bundle
+# components:
+# - type: Sprite
+# layers:
+# - state: outfit
+# map: [ "enum.ToggleableVisuals.Layer" ]
+# color: "#4b3b56"
+# - state: wrapper-fill
+# color: "#ffffff22"
+# - state: wrapper
+# - state: label
+# color: "#d349c9"
+# - type: StorageFill
+# contents:
+# - id: ClothingHeadDevilHorns
+# - id: ClothingHeadJesterEvilHat
+# - id: ClothingNeckDevilWings
+# - id: ClothingUniformJesterEvil
+# - id: ClothingShoesJesterEvilJanglers
+# - id: DevilPitchfork
- type: entity
parent: BaseCostumeBundle
@@ -239,32 +214,6 @@
- id: ClothingHeadHatGladiator
- id: ClothingUniformJumpsuitGladiator
-- type: entity
- parent: BaseCostumeBundle
- id: CostumeBundleJester
- name: jester costume bundle
- components:
- - type: Sprite
- layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
- color: "#dd1818"
- - state: wrapper-fill
- color: "#ffffff22"
- - state: wrapper
- - state: label
- color: "#74ff33"
- - type: Icon
- state: icon-clown
- - type: StorageFill
- contents:
- - id: ClothingHeadHatJester
- - id: ClothingHeadHatJesterAlt
- - id: ClothingUniformJumpsuitJester
- - id: ClothingUniformJumpsuitJesterAlt
- - id: ClothingShoesJester
- - id: ClothingShoesJester
-
- type: entity
parent: BaseCostumeBundle
id: CostumeBundleJudge
@@ -305,51 +254,6 @@
- id: ClothingHeadHatAnimalMonkey
- id: ClothingOuterSuitMonkey
-- type: entity
- parent: BaseCostumeBundle
- id: CostumeBundleMusicianMarching
- name: marching band costume bundle
- components:
- - type: Sprite
- layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
- color: "#463c6a"
- - state: wrapper-fill
- color: "#ffffff22"
- - state: wrapper
- - state: label
- color: "#6f56b8"
- - type: Icon
- state: icon-musician
- - type: StorageFill
- contents:
- - id: ClothingHeadHatMusicianShako
- - id: ClothingUniformJumpsuitMusicianMarchingBand
-
-- type: entity
- parent: BaseCostumeBundle
- id: CostumeBundleMusicianLoungeSinger
- name: lounge singer costume bundle
- components:
- - type: Sprite
- layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
- color: "#463c6a"
- - state: wrapper-fill
- color: "#ffffff22"
- - state: wrapper
- - state: label
- color: "#6f56b8"
- - type: Icon
- state: icon-musician
- - type: StorageFill
- contents:
- - id: ClothingUniformMusicianSingerDress
- - id: ClothingHandsMusicianSingerGloves
- - id: ClothingNeckFeatherBoa
-
- type: entity
parent: BaseCostumeBundle
id: CostumeBundlePirate
@@ -436,27 +340,27 @@
- id: ClothingHeadSafari
- id: ClothingUniformJumpsuitSafari
-- type: entity
- parent: BaseCostumeBundle
- id: CostumeBundleSailor
- name: sailor costume bundle
- components:
- - type: Sprite
- layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
- color: "#dedbec"
- - state: wrapper-fill
- color: "#ffffff22"
- - state: wrapper
- - state: label
- color: "#dd6b17"
- - type: StorageFill
- contents:
- - id: ClothingHeadSailorCap
- - id: ClothingNeckSailorAscot
- - id: ClothingUniformSailorSuit
- - id: ClothingShoesBootsLaceup
+# - type: entity
+# parent: BaseCostumeBundle
+# id: CostumeBundleSailor
+# name: sailor costume bundle
+# components:
+# - type: Sprite
+# layers:
+# - state: outfit
+# map: [ "enum.ToggleableVisuals.Layer" ]
+# color: "#dedbec"
+# - state: wrapper-fill
+# color: "#ffffff22"
+# - state: wrapper
+# - state: label
+# color: "#dd6b17"
+# - type: StorageFill
+# contents:
+# - id: ClothingHeadSailorCap
+# - id: ClothingNeckSailorAscot
+# - id: ClothingUniformSailorSuit
+# - id: ClothingShoesBootsLaceup
- type: entity
parent: BaseCostumeBundle
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
new file mode 100644
index 00000000000..611ba1ce872
--- /dev/null
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
@@ -0,0 +1,95 @@
+# - type: entity
+# parent: BaseCostumeBundle
+# id: CostumeBundleCircusClown
+# name: circus clown costume bundle
+# components:
+# - type: Sprite
+# layers:
+# - state: outfit
+# map: [ "enum.ToggleableVisuals.Layer" ]
+# color: "#ffd85d"
+# - state: wrapper-fill
+# color: "#ffffff22"
+# - state: wrapper
+# - state: label
+# color: "#74ff33"
+# - type: Icon
+# state: icon-clown
+# - type: StorageFill
+# contents:
+# - id: ClothingHeadHatCircusClown
+# - id: ClothingMaskClownNose
+# - id: ClothingNeckRuffle
+# - id: ClothingUniformCircusClown
+# - id: ClothingShoesCircus
+
+# - type: entity
+# parent: BaseCostumeBundle
+# id: CostumeBundleJester
+# name: jester costume bundle
+# components:
+# - type: Sprite
+# layers:
+# - state: outfit
+# map: [ "enum.ToggleableVisuals.Layer" ]
+# color: "#dd1818"
+# - state: wrapper-fill
+# color: "#ffffff22"
+# - state: wrapper
+# - state: label
+# color: "#74ff33"
+# - type: Icon
+# state: icon-clown
+# - type: StorageFill
+# contents:
+# - id: ClothingHeadHatJester
+# - id: ClothingHeadHatJesterAlt
+# - id: ClothingUniformJumpsuitJester
+# - id: ClothingUniformJumpsuitJesterAlt
+# - id: ClothingShoesJester
+# - id: ClothingShoesJester
+
+# - type: entity
+# parent: BaseCostumeBundle
+# id: CostumeBundleMusicianLoungeSinger
+# name: lounge singer costume bundle
+# components:
+# - type: Sprite
+# layers:
+# - state: outfit
+# map: [ "enum.ToggleableVisuals.Layer" ]
+# color: "#463c6a"
+# - state: wrapper-fill
+# color: "#ffffff22"
+# - state: wrapper
+# - state: label
+# color: "#6f56b8"
+# - type: Icon
+# state: icon-musician
+# - type: StorageFill
+# contents:
+# - id: ClothingUniformMusicianSingerDress
+# - id: ClothingHandsMusicianSingerGloves
+# - id: ClothingNeckFeatherBoa
+
+# - type: entity
+# parent: BaseCostumeBundle
+# id: CostumeBundleMusicianMarching
+# name: marching band costume bundle
+# components:
+# - type: Sprite
+# layers:
+# - state: outfit
+# map: [ "enum.ToggleableVisuals.Layer" ]
+# color: "#463c6a"
+# - state: wrapper-fill
+# color: "#ffffff22"
+# - state: wrapper
+# - state: label
+# color: "#6f56b8"
+# - type: Icon
+# state: icon-musician
+# - type: StorageFill
+# contents:
+# - id: ClothingHeadHatMusicianShako
+# - id: ClothingUniformJumpsuitMusicianMarchingBand
From 229f66e8a1a54fcc23d048c738db1c6b2907660b Mon Sep 17 00:00:00 2001
From: portfiend <109661617+portfiend@users.noreply.github.com>
Date: Tue, 17 Mar 2026 21:24:03 -0500
Subject: [PATCH 03/17] out
---
.../_DEN/Loadouts/Generic/Items/costumes.yml | 265 ------------------
1 file changed, 265 deletions(-)
delete mode 100644 Resources/Prototypes/_DEN/Loadouts/Generic/Items/costumes.yml
diff --git a/Resources/Prototypes/_DEN/Loadouts/Generic/Items/costumes.yml b/Resources/Prototypes/_DEN/Loadouts/Generic/Items/costumes.yml
deleted file mode 100644
index 3c0e7434223..00000000000
--- a/Resources/Prototypes/_DEN/Loadouts/Generic/Items/costumes.yml
+++ /dev/null
@@ -1,265 +0,0 @@
-## Job-specific
-
-- type: loadout
- id: LoadoutCostumeBundleCircusClown
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- - !type:CharacterLogicOrRequirement
- requirements:
- - !type:CharacterPlaytimeRequirement
- tracker: JobClown
- min: 108000 # 30 hours; ~10 full shifts
- - !type:CharacterJobRequirement
- jobs:
- - Clown
- items:
- - CostumeBundleCircusClown
-
-- type: loadout
- id: LoadoutCostumeBundleJester
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- - !type:CharacterLogicOrRequirement
- requirements:
- - !type:CharacterPlaytimeRequirement
- tracker: JobClown
- min: 108000 # 30 hours; ~10 full shifts
- - !type:CharacterJobRequirement
- jobs:
- - Clown
- items:
- - CostumeBundleJester
-
-- type: loadout
- id: LoadoutCostumeBundleMusicianMarching
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- - !type:CharacterLogicOrRequirement
- requirements:
- - !type:CharacterPlaytimeRequirement
- tracker: JobMusician
- min: 108000 # 30 hours; ~10 full shifts
- - !type:CharacterJobRequirement
- jobs:
- - Musician
- items:
- - CostumeBundleMusicianMarching
-
-- type: loadout
- id: LoadoutCostumeBundleMusicianLoungeSinger
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- - !type:CharacterLogicOrRequirement
- requirements:
- - !type:CharacterPlaytimeRequirement
- tracker: JobMusician
- min: 108000 # 30 hours; ~10 full shifts
- - !type:CharacterJobRequirement
- jobs:
- - Musician
- items:
- - CostumeBundleMusicianLoungeSinger
-
-## Other
-
-- type: loadout
- id: LoadoutCostumeBundleAngel
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleAngel
-
-- type: loadout
- id: LoadoutCostumeBundleBunnySuit
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleBunnySuit
-
-- type: loadout
- id: LoadoutCostumeBundleBurglar
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleBurglar
-
-- type: loadout
- id: LoadoutCostumeBundleCardborg
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleCardborg
-
-- type: loadout
- id: LoadoutCostumeBundleChicken
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleChicken
-
-- type: loadout
- id: LoadoutCostumeBundleDevil
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleDevil
-
-- type: loadout
- id: LoadoutCostumeBundleGladiator
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleGladiator
-
-- type: loadout
- id: LoadoutCostumeBundleJudge
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleJudge
-
-- type: loadout
- id: LoadoutCostumeBundleMonkey
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleMonkey
-
-- type: loadout
- id: LoadoutCostumeBundlePirate
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundlePirate
-
-- type: loadout
- id: LoadoutCostumeBundlePerformer
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundlePerformer
-
-- type: loadout
- id: LoadoutCostumeBundleRedRaccoon
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleRedRaccoon
-
-- type: loadout
- id: LoadoutCostumeBundleSafari
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleSafari
-
-- type: loadout
- id: LoadoutCostumeBundleSailor
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleSailor
-
-- type: loadout
- id: LoadoutCostumeBundleSanta
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleSanta
-
-- type: loadout
- id: LoadoutCostumeBundleShrineMaiden
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleShrineMaiden
-
-- type: loadout
- id: LoadoutCostumeBundleSkub
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleSkub
-
-- type: loadout
- id: LoadoutCostumeBundleWitch
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleWitch
-
-- type: loadout
- id: LoadoutCostumeBundleYakuza
- category: Costumes
- cost: 2
- requirements:
- - !type:CharacterItemGroupRequirement
- group: LoadoutCostumeBundles
- items:
- - CostumeBundleYakuza
From 456b30469edf785c3b81c2fecf6cfd3fb97edd6a Mon Sep 17 00:00:00 2001
From: portfiend <109661617+portfiend@users.noreply.github.com>
Date: Wed, 18 Mar 2026 19:08:47 -0500
Subject: [PATCH 04/17] this oen actually exists
---
.../Entities/Objects/Storage/costumes_job.yml | 50 +++++++++----------
1 file changed, 25 insertions(+), 25 deletions(-)
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
index 611ba1ce872..9410a142d26 100644
--- a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
@@ -23,31 +23,31 @@
# - id: ClothingUniformCircusClown
# - id: ClothingShoesCircus
-# - type: entity
-# parent: BaseCostumeBundle
-# id: CostumeBundleJester
-# name: jester costume bundle
-# components:
-# - type: Sprite
-# layers:
-# - state: outfit
-# map: [ "enum.ToggleableVisuals.Layer" ]
-# color: "#dd1818"
-# - state: wrapper-fill
-# color: "#ffffff22"
-# - state: wrapper
-# - state: label
-# color: "#74ff33"
-# - type: Icon
-# state: icon-clown
-# - type: StorageFill
-# contents:
-# - id: ClothingHeadHatJester
-# - id: ClothingHeadHatJesterAlt
-# - id: ClothingUniformJumpsuitJester
-# - id: ClothingUniformJumpsuitJesterAlt
-# - id: ClothingShoesJester
-# - id: ClothingShoesJester
+- type: entity
+ parent: BaseCostumeBundle
+ id: CostumeBundleJester
+ name: jester costume bundle
+ components:
+ - type: Sprite
+ layers:
+ - state: outfit
+ map: [ "enum.ToggleableVisuals.Layer" ]
+ color: "#dd1818"
+ - state: wrapper-fill
+ color: "#ffffff22"
+ - state: wrapper
+ - state: label
+ color: "#74ff33"
+ - type: Icon
+ state: icon-clown
+ - type: StorageFill
+ contents:
+ - id: ClothingHeadHatJester
+ - id: ClothingHeadHatJesterAlt
+ - id: ClothingUniformJumpsuitJester
+ - id: ClothingUniformJumpsuitJesterAlt
+ - id: ClothingShoesJester
+ - id: ClothingShoesJester
# - type: entity
# parent: BaseCostumeBundle
From 74b8221fdcd55729c382857668c10c52eeb9454c Mon Sep 17 00:00:00 2001
From: portfiend <109661617+portfiend@users.noreply.github.com>
Date: Wed, 18 Mar 2026 19:15:13 -0500
Subject: [PATCH 05/17] add costume bundles to autodrobe
---
.../VendingMachines/Inventories/theater.yml | 86 +++++++++++++------
1 file changed, 58 insertions(+), 28 deletions(-)
diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml
index 564a1f48ef6..4055de237c9 100644
--- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml
+++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml
@@ -1,53 +1,70 @@
- type: vendingMachineInventory
id: AutoDrobeInventory
startingInventory: # TODO: Costume bundles
- ClothingHeadHatJester: 1
- ClothingUniformJumpsuitJester: 1
- ClothingHeadHatJesterAlt: 1
- ClothingUniformJumpsuitJesterAlt: 1
- ClothingShoesJester: 2
+ # BEGIN Macrocosm: Costume bundles
+ # ClothingHeadHatJester: 1
+ # ClothingUniformJumpsuitJester: 1
+ # ClothingHeadHatJesterAlt: 1
+ # ClothingUniformJumpsuitJesterAlt: 1
+ # ClothingShoesJester: 2
+ CostumeBundleJester: 1
+ # END Macrocosm
ClothingOuterWinterClown: 1
ClothingOuterWinterMime: 1
ClothingOuterWinterMusician: 1
ClothingMaskJoy: 2
- ClothingHeadHatCardborg: 2
- ClothingOuterCardborg: 2
+ # BEGIN Macrocosm: Costume bundles
+ # ClothingHeadHatCardborg: 2
+ # ClothingOuterCardborg: 2
+ # END Macrocosm
ClothingHeadHatSombrero: 2
ClothingOuterPonchoClassic: 2
- ClothingHeadHatPwig: 2
- ClothingOuterRobesJudge: 2
+ # BEGIN Macrocosm: Costume bundles
+ # ClothingHeadHatPwig: 2
+ # ClothingOuterRobesJudge: 2
+ # END Macrocosm
ClothingOuterPoncho: 2
- ClothingHeadHatSantahat: 2
- ClothingOuterSanta: 2
- ClothingHeadHatSkub: 2
- ClothingOuterSkub: 2
+ # BEGIN Macrocosm: Costume bundles
+ # ClothingHeadHatSantahat: 2
+ # ClothingOuterSanta: 2
+ # ClothingHeadHatSkub: 2
+ # ClothingOuterSkub: 2
+ # END Macrocosm
ClothingHeadHatBeretFrench: 2
- ClothingOuterSuitChicken: 2
- ClothingHeadHatChickenhead: 2
- ClothingOuterSuitMonkey: 2
+ # BEGIN Macrocosm: Costume bundles
+ # ClothingOuterSuitChicken: 2
+ # ClothingHeadHatChickenhead: 2
+ # ClothingOuterSuitMonkey: 2
+ # END Macrocosm
ClothingHeadHatPumpkin: 2
- ClothingHeadHatShrineMaidenWig: 2
- ClothingOuterSuitShrineMaiden: 2
- Gohei: 2
- ClothingOuterSuitWitchRobes: 2
- ClothingHeadHatWitch1: 2
- ClothingHeadHatRedRacoon: 2
- ClothingOuterRedRacoon: 2
+ # BEGIN Macrocosm: Costume bundles
+ # ClothingHeadHatShrineMaidenWig: 2
+ # ClothingOuterSuitShrineMaiden: 2
+ # Gohei: 2
+ # ClothingOuterSuitWitchRobes: 2
+ # ClothingHeadHatWitch1: 2
+ # ClothingHeadHatRedRacoon: 2
+ # ClothingOuterRedRacoon: 2
+ # END Macrocosm
ClothingHeadPaperSack: 2
ClothingHeadPaperSackSmile: 2
ClothingEyesBlindfold: 1
ClothingHeadRastaHat: 2
- ClothingUniformJumpsuitDameDane: 2
- ClothingShoesDameDane: 2
- ClothingOuterDameDane: 2
+ # BEGIN Macrocosm: Costume bundles
+ # ClothingUniformJumpsuitDameDane: 2
+ # ClothingShoesDameDane: 2
+ # ClothingOuterDameDane: 2
+ # END Macrocosm
ClothingOuterClownPriest: 1
ClothingMaskSadMime: 1
ClothingMaskScaredMime: 1
ClothingUniformJumpsuitKimono: 1
ClothingHeadHatCasa: 1
FoodPoppy: 1
- ClothingHeadHatGladiator: 1
- ClothingUniformJumpsuitGladiator: 1
+ # BEGIN Macrocosm: Costume bundles
+ # ClothingHeadHatGladiator: 1
+ # ClothingUniformJumpsuitGladiator: 1
+ # END Macrocosm
ClothingHeadHatCowboyBrown: 1
ClothingHeadHatCowboyBlack: 1
ClothingHeadHatCowboyWhite: 1
@@ -55,6 +72,19 @@
ClothingShoesBootsCowboyBrown: 1
ClothingShoesBootsCowboyBlack: 1
ClothingShoesBootsCowboyWhite: 1
+ # MACRO start: Costume bundles
+ CostumeBundleCardborg: 2
+ CostumeBundleChicken: 2
+ CostumeBundleGladiator: 2
+ CostumeBundleJudge: 2
+ CostumeBundleMonkey: 2
+ CostumeBundleRedRaccoon: 2
+ CostumeBundleSanta: 2
+ CostumeBundleShrineMaiden: 2
+ CostumeBundleSkub: 2
+ CostumeBundleWitch: 2
+ CostumeBundleYakuza: 2
+ # MACRO end
contrabandInventory:
ClothingHeadHatRichard: 1
ToyFigurineBoxer: 1
From 3e3e36e5dc9371fcde6ccc9a7a89f487c6b2b75e Mon Sep 17 00:00:00 2001
From: portfiend <109661617+portfiend@users.noreply.github.com>
Date: Wed, 18 Mar 2026 19:23:05 -0500
Subject: [PATCH 06/17] and then i rearranged the shit
---
.../VendingMachines/Inventories/theater.yml | 52 +++++++++++--------
1 file changed, 31 insertions(+), 21 deletions(-)
diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml
index 4055de237c9..3f5f6d54c50 100644
--- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml
+++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml
@@ -1,6 +1,10 @@
+# MACROCOSM: Autodrobe's inventory is sorted into three sections:
+# "Performer" job clothing (clown/mime), costume bundles, and miscellaneous accessories.
+
- type: vendingMachineInventory
id: AutoDrobeInventory
startingInventory: # TODO: Costume bundles
+ ## MACROCOSM comment - Section 1 - Performer job clothing
# BEGIN Macrocosm: Costume bundles
# ClothingHeadHatJester: 1
# ClothingUniformJumpsuitJester: 1
@@ -9,9 +13,30 @@
# ClothingShoesJester: 2
CostumeBundleJester: 1
# END Macrocosm
+ ClothingHeadHatBeretFrench: 2 # Macrocosm: Moved to performer section
+ ClothingMaskSadMime: 1 # Macrocosm: Moved to performer section
+ ClothingMaskScaredMime: 1 # Macrocosm: Moved to performer section
ClothingOuterWinterClown: 1
ClothingOuterWinterMime: 1
ClothingOuterWinterMusician: 1
+ ClothingOuterClownPriest: 1 # Macrocosm: Moved to performer section
+
+ # MACROCOSM comment - Section 2 - Costume bundles
+ # MACRO start: Costume bundles
+ CostumeBundleCardborg: 2
+ CostumeBundleChicken: 2
+ CostumeBundleGladiator: 2
+ CostumeBundleJudge: 2
+ CostumeBundleMonkey: 2
+ CostumeBundleRedRaccoon: 2
+ CostumeBundleSanta: 2
+ CostumeBundleShrineMaiden: 2
+ CostumeBundleSkub: 2
+ CostumeBundleWitch: 2
+ CostumeBundleYakuza: 2
+ # MACRO end
+
+ # MACROCOSM comment - Section 3 - Unbundled accessories
ClothingMaskJoy: 2
# BEGIN Macrocosm: Costume bundles
# ClothingHeadHatCardborg: 2
@@ -24,14 +49,12 @@
# ClothingOuterRobesJudge: 2
# END Macrocosm
ClothingOuterPoncho: 2
- # BEGIN Macrocosm: Costume bundles
+ # BEGIN Macrocosm: Costume bundles, etc.
# ClothingHeadHatSantahat: 2
# ClothingOuterSanta: 2
# ClothingHeadHatSkub: 2
# ClothingOuterSkub: 2
- # END Macrocosm
- ClothingHeadHatBeretFrench: 2
- # BEGIN Macrocosm: Costume bundles
+ # ClothingHeadHatBeretFrench: 2 # Macrocosm: Move this up with performer items
# ClothingOuterSuitChicken: 2
# ClothingHeadHatChickenhead: 2
# ClothingOuterSuitMonkey: 2
@@ -50,14 +73,14 @@
ClothingHeadPaperSackSmile: 2
ClothingEyesBlindfold: 1
ClothingHeadRastaHat: 2
- # BEGIN Macrocosm: Costume bundles
+ # BEGIN Macrocosm: Costume bundles, etc.
# ClothingUniformJumpsuitDameDane: 2
# ClothingShoesDameDane: 2
# ClothingOuterDameDane: 2
+ # ClothingOuterClownPriest: 1 # Macrocosm: Move this up with performer items
+ # ClothingMaskSadMime: 1 # Macrocosm: Move this up with performer items
+ # ClothingMaskScaredMime: 1 # Macrocosm: Move this up with performer items
# END Macrocosm
- ClothingOuterClownPriest: 1
- ClothingMaskSadMime: 1
- ClothingMaskScaredMime: 1
ClothingUniformJumpsuitKimono: 1
ClothingHeadHatCasa: 1
FoodPoppy: 1
@@ -72,19 +95,6 @@
ClothingShoesBootsCowboyBrown: 1
ClothingShoesBootsCowboyBlack: 1
ClothingShoesBootsCowboyWhite: 1
- # MACRO start: Costume bundles
- CostumeBundleCardborg: 2
- CostumeBundleChicken: 2
- CostumeBundleGladiator: 2
- CostumeBundleJudge: 2
- CostumeBundleMonkey: 2
- CostumeBundleRedRaccoon: 2
- CostumeBundleSanta: 2
- CostumeBundleShrineMaiden: 2
- CostumeBundleSkub: 2
- CostumeBundleWitch: 2
- CostumeBundleYakuza: 2
- # MACRO end
contrabandInventory:
ClothingHeadHatRichard: 1
ToyFigurineBoxer: 1
From d57b9ab483862b326a7732557f9eef04bba131d0 Mon Sep 17 00:00:00 2001
From: portfiend <109661617+portfiend@users.noreply.github.com>
Date: Wed, 18 Mar 2026 19:27:48 -0500
Subject: [PATCH 07/17] forgot we on den lol
---
.../VendingMachines/Inventories/theater.yml | 56 +++++++++----------
1 file changed, 28 insertions(+), 28 deletions(-)
diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml
index 3f5f6d54c50..4271ab87bda 100644
--- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml
+++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml
@@ -1,28 +1,28 @@
-# MACROCOSM: Autodrobe's inventory is sorted into three sections:
+# DEN: Autodrobe's inventory is sorted into three sections:
# "Performer" job clothing (clown/mime), costume bundles, and miscellaneous accessories.
- type: vendingMachineInventory
id: AutoDrobeInventory
startingInventory: # TODO: Costume bundles
- ## MACROCOSM comment - Section 1 - Performer job clothing
- # BEGIN Macrocosm: Costume bundles
+ ## DEN comment - Section 1 - Performer job clothing
+ # BEGIN Den: Costume bundles
# ClothingHeadHatJester: 1
# ClothingUniformJumpsuitJester: 1
# ClothingHeadHatJesterAlt: 1
# ClothingUniformJumpsuitJesterAlt: 1
# ClothingShoesJester: 2
CostumeBundleJester: 1
- # END Macrocosm
- ClothingHeadHatBeretFrench: 2 # Macrocosm: Moved to performer section
- ClothingMaskSadMime: 1 # Macrocosm: Moved to performer section
- ClothingMaskScaredMime: 1 # Macrocosm: Moved to performer section
+ # END Den
+ ClothingHeadHatBeretFrench: 2 # Den: Moved to performer section
+ ClothingMaskSadMime: 1 # Den: Moved to performer section
+ ClothingMaskScaredMime: 1 # Den: Moved to performer section
ClothingOuterWinterClown: 1
ClothingOuterWinterMime: 1
ClothingOuterWinterMusician: 1
- ClothingOuterClownPriest: 1 # Macrocosm: Moved to performer section
+ ClothingOuterClownPriest: 1 # Den: Moved to performer section
- # MACROCOSM comment - Section 2 - Costume bundles
- # MACRO start: Costume bundles
+ # DEN comment - Section 2 - Costume bundles
+ # DEN start: Costume bundles
CostumeBundleCardborg: 2
CostumeBundleChicken: 2
CostumeBundleGladiator: 2
@@ -34,33 +34,33 @@
CostumeBundleSkub: 2
CostumeBundleWitch: 2
CostumeBundleYakuza: 2
- # MACRO end
+ # DEN end
- # MACROCOSM comment - Section 3 - Unbundled accessories
+ # DEN comment - Section 3 - Unbundled accessories
ClothingMaskJoy: 2
- # BEGIN Macrocosm: Costume bundles
+ # BEGIN Den: Costume bundles
# ClothingHeadHatCardborg: 2
# ClothingOuterCardborg: 2
- # END Macrocosm
+ # END Den
ClothingHeadHatSombrero: 2
ClothingOuterPonchoClassic: 2
- # BEGIN Macrocosm: Costume bundles
+ # BEGIN Den: Costume bundles
# ClothingHeadHatPwig: 2
# ClothingOuterRobesJudge: 2
- # END Macrocosm
+ # END Den
ClothingOuterPoncho: 2
- # BEGIN Macrocosm: Costume bundles, etc.
+ # BEGIN Den: Costume bundles, etc.
# ClothingHeadHatSantahat: 2
# ClothingOuterSanta: 2
# ClothingHeadHatSkub: 2
# ClothingOuterSkub: 2
- # ClothingHeadHatBeretFrench: 2 # Macrocosm: Move this up with performer items
+ # ClothingHeadHatBeretFrench: 2 # Den: Move this up with performer items
# ClothingOuterSuitChicken: 2
# ClothingHeadHatChickenhead: 2
# ClothingOuterSuitMonkey: 2
- # END Macrocosm
+ # END Den
ClothingHeadHatPumpkin: 2
- # BEGIN Macrocosm: Costume bundles
+ # BEGIN Den: Costume bundles
# ClothingHeadHatShrineMaidenWig: 2
# ClothingOuterSuitShrineMaiden: 2
# Gohei: 2
@@ -68,26 +68,26 @@
# ClothingHeadHatWitch1: 2
# ClothingHeadHatRedRacoon: 2
# ClothingOuterRedRacoon: 2
- # END Macrocosm
+ # END Den
ClothingHeadPaperSack: 2
ClothingHeadPaperSackSmile: 2
ClothingEyesBlindfold: 1
ClothingHeadRastaHat: 2
- # BEGIN Macrocosm: Costume bundles, etc.
+ # BEGIN Den: Costume bundles, etc.
# ClothingUniformJumpsuitDameDane: 2
# ClothingShoesDameDane: 2
# ClothingOuterDameDane: 2
- # ClothingOuterClownPriest: 1 # Macrocosm: Move this up with performer items
- # ClothingMaskSadMime: 1 # Macrocosm: Move this up with performer items
- # ClothingMaskScaredMime: 1 # Macrocosm: Move this up with performer items
- # END Macrocosm
+ # ClothingOuterClownPriest: 1 # Den: Move this up with performer items
+ # ClothingMaskSadMime: 1 # Den: Move this up with performer items
+ # ClothingMaskScaredMime: 1 # Den: Move this up with performer items
+ # END Den
ClothingUniformJumpsuitKimono: 1
ClothingHeadHatCasa: 1
FoodPoppy: 1
- # BEGIN Macrocosm: Costume bundles
+ # BEGIN Den: Costume bundles
# ClothingHeadHatGladiator: 1
# ClothingUniformJumpsuitGladiator: 1
- # END Macrocosm
+ # END Den
ClothingHeadHatCowboyBrown: 1
ClothingHeadHatCowboyBlack: 1
ClothingHeadHatCowboyWhite: 1
From 4b57fae9d6848ee6abc27b75983a2dfab8235c23 Mon Sep 17 00:00:00 2001
From: portfiend <109661617+portfiend@users.noreply.github.com>
Date: Wed, 18 Mar 2026 19:38:07 -0500
Subject: [PATCH 08/17] document costume bundles
---
.../Entities/Objects/Storage/costumes.yml | 26 +++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
index f2b93cd51ca..24092dee41b 100644
--- a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
@@ -1,5 +1,27 @@
-# Costume bundles
-# Used to consolidate multi-item costumes into a single item for drobes.
+# === COSTUME BUNDLES ===
+# Used to group together multi-part outfits into a single storage item. Think, like, Spirit Halloween costumes.
+# Convenient for vending machines, crate orders, loadouts, admeme spawning, et cetera.
+#
+# == TO MAKE A NEW COSTUME BUNDLE: ==
+# Make an entity that inherits from `BaseCostumeBundle`. Ideally, the ID of this entity should
+# be along the lines of "CostumeBundle[CostumeName]". Check CostumeBundleCardborg for a simple example.
+# Make sure to change the `name`` field to "[costume] costume bundle"!
+#
+# The sprite has four layers:
+# - outfit: This is the clothing "inside" the bundle. I recommend color-picking from the most significant
+# accessory in the bundle itself, such as an inner/outer clothing layer (if there is one).
+# - wrapper-fill: Translucent plastic wrap. Always `#ffffff22`.
+# - wrapper: Outline of the plastic wrap. Don't touch the color of this one.
+# - label: The outer label part of the sprite. This is often `#dd6b17` as a fallback, especially for
+# "generic" costumes, but this can be anything, like an accent color. It doesn't really matter.
+#
+# Then, modify the EntityTableContainerFill component to contain the parts of your costume.
+#
+# Note that costume bundles have a whitelist: entities with the Clothing component, and entities with the
+# CostumeItem tag. If you're inserting prop items, make sure to add the CostumeItem tag if it's not wearable
+# - for example, the pirate's foam cutlass, or the shrine maiden's gohei.
+# =======================
+
- type: entity
abstract: true
From 18864d5d68d417334c6bc45ccacdaf3df28bcecb Mon Sep 17 00:00:00 2001
From: portfiend <109661617+portfiend@users.noreply.github.com>
Date: Wed, 18 Mar 2026 19:42:49 -0500
Subject: [PATCH 09/17] add comment
---
.../Catalog/VendingMachines/Inventories/theater.yml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml
index 4271ab87bda..fe6d0d37ce0 100644
--- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml
+++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml
@@ -3,7 +3,7 @@
- type: vendingMachineInventory
id: AutoDrobeInventory
- startingInventory: # TODO: Costume bundles
+ startingInventory:
## DEN comment - Section 1 - Performer job clothing
# BEGIN Den: Costume bundles
# ClothingHeadHatJester: 1
@@ -88,6 +88,8 @@
# ClothingHeadHatGladiator: 1
# ClothingUniformJumpsuitGladiator: 1
# END Den
+ # TODO DEN: Consider consolidating cowboy accessories into bundles.
+ # I'm not doing this right now b/c they're not "costumes" - just hats/boots.
ClothingHeadHatCowboyBrown: 1
ClothingHeadHatCowboyBlack: 1
ClothingHeadHatCowboyWhite: 1
From 8a5bcaabd1d34771506beedcc81b3af668aacdca Mon Sep 17 00:00:00 2001
From: portfiend <109661617+portfiend@users.noreply.github.com>
Date: Wed, 18 Mar 2026 19:44:03 -0500
Subject: [PATCH 10/17] more comments
---
.../Prototypes/_DEN/Entities/Objects/Storage/costumes.yml | 6 +++++-
.../_DEN/Entities/Objects/Storage/costumes_job.yml | 3 +++
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
index 24092dee41b..cd8d4068fde 100644
--- a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
@@ -22,7 +22,6 @@
# - for example, the pirate's foam cutlass, or the shrine maiden's gohei.
# =======================
-
- type: entity
abstract: true
parent: [BaseStorageItem, BaseBagOpenClose]
@@ -88,6 +87,7 @@
- state: label
color: "#dd6b17"
+# TODO: Port from Impstation
# - type: entity
# parent: BaseCostumeBundle
# id: CostumeBundleAngel
@@ -112,6 +112,7 @@
# - id: ClothingNeckAngelWings
# - id: HandheldHarpInstrument
+# TODO: Port from prebase Den
# - type: entity
# parent: BaseCostumeBundle
# id: CostumeBundleBunnySuit
@@ -132,6 +133,7 @@
# - id: ClothingHeadHatBunny
# - id: ClothingCostumeBunnySuit
+# TODO: Port from Impstation
# - type: entity
# parent: BaseCostumeBundle
# id: CostumeBundleBurglar
@@ -192,6 +194,7 @@
- id: ClothingHeadHatChickenhead
- id: ClothingOuterSuitChicken
+# TODO: Port from Impstation
# - type: entity
# parent: BaseCostumeBundle
# id: CostumeBundleDevil
@@ -362,6 +365,7 @@
- id: ClothingHeadSafari
- id: ClothingUniformJumpsuitSafari
+# TODO: Port from Impstation
# - type: entity
# parent: BaseCostumeBundle
# id: CostumeBundleSailor
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
index 9410a142d26..fe3c2c19908 100644
--- a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
@@ -1,3 +1,4 @@
+# TODO: Port from Impstation
# - type: entity
# parent: BaseCostumeBundle
# id: CostumeBundleCircusClown
@@ -49,6 +50,7 @@
- id: ClothingShoesJester
- id: ClothingShoesJester
+# TODO: Port from Impstation
# - type: entity
# parent: BaseCostumeBundle
# id: CostumeBundleMusicianLoungeSinger
@@ -72,6 +74,7 @@
# - id: ClothingHandsMusicianSingerGloves
# - id: ClothingNeckFeatherBoa
+# TODO: Port from Impstation
# - type: entity
# parent: BaseCostumeBundle
# id: CostumeBundleMusicianMarching
From da792bbe374eb2fbaeb5795da945209101d81d49 Mon Sep 17 00:00:00 2001
From: portfiend <109661617+portfiend@users.noreply.github.com>
Date: Wed, 18 Mar 2026 20:00:43 -0500
Subject: [PATCH 11/17] replace StorageFill with EntityTableContainerFill
---
.../Entities/Objects/Storage/costumes.yml | 209 ++++++++++--------
.../Entities/Objects/Storage/costumes_job.yml | 52 +++--
2 files changed, 142 insertions(+), 119 deletions(-)
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
index cd8d4068fde..fd5d78c89ce 100644
--- a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
@@ -103,14 +103,15 @@
# - state: wrapper
# - state: label
# color: "#efec98"
-# - type: StorageFill
-# contents:
-# - id: ClothingHeadHalo
-# - id: ClothingUniformJumpskirtAngelDress
-# - id: ClothingHandsAngelGloves
-# - id: ClothingShoesAngelSandals
-# - id: ClothingNeckAngelWings
-# - id: HandheldHarpInstrument
+# - type: EntityTableContainerFill
+# containers:
+# storagebase: !type:AllSelector
+# - id: ClothingHeadHalo
+# - id: ClothingUniformJumpskirtAngelDress
+# - id: ClothingHandsAngelGloves
+# - id: ClothingShoesAngelSandals
+# - id: ClothingNeckAngelWings
+# - id: HandheldHarpInstrument
# TODO: Port from prebase Den
# - type: entity
@@ -128,10 +129,11 @@
# - state: wrapper
# - state: label
# color: "#dd6b17"
-# - type: StorageFill
-# contents:
-# - id: ClothingHeadHatBunny
-# - id: ClothingCostumeBunnySuit
+# - type: EntityTableContainerFill
+# containers:
+# storagebase: !type:AllSelector
+# - id: ClothingHeadHatBunny
+# - id: ClothingCostumeBunnySuit
# TODO: Port from Impstation
# - type: entity
@@ -149,10 +151,11 @@
# - state: wrapper
# - state: label
# color: "#dd6b17"
-# - type: StorageFill
-# contents:
-# - id: ClothingMaskBurglar
-# - id: ClothingUniformBurglarJumpsuit
+# - type: EntityTableContainerFill
+# containers:
+# storagebase: !type:AllSelector
+# - id: ClothingMaskBurglar
+# - id: ClothingUniformBurglarJumpsuit
- type: entity
parent: BaseCostumeBundle
@@ -169,10 +172,11 @@
- state: wrapper
- state: label
color: "#dd6b17"
- - type: StorageFill
- contents:
- - id: ClothingHeadHatCardborg
- - id: ClothingOuterCardborg
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ - id: ClothingHeadHatCardborg
+ - id: ClothingOuterCardborg
- type: entity
parent: BaseCostumeBundle
@@ -189,10 +193,11 @@
- state: wrapper
- state: label
color: "#dd6b17"
- - type: StorageFill
- contents:
- - id: ClothingHeadHatChickenhead
- - id: ClothingOuterSuitChicken
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ - id: ClothingHeadHatChickenhead
+ - id: ClothingOuterSuitChicken
# TODO: Port from Impstation
# - type: entity
@@ -210,14 +215,15 @@
# - state: wrapper
# - state: label
# color: "#d349c9"
-# - type: StorageFill
-# contents:
-# - id: ClothingHeadDevilHorns
-# - id: ClothingHeadJesterEvilHat
-# - id: ClothingNeckDevilWings
-# - id: ClothingUniformJesterEvil
-# - id: ClothingShoesJesterEvilJanglers
-# - id: DevilPitchfork
+# - type: EntityTableContainerFill
+# containers:
+# storagebase: !type:AllSelector
+# - id: ClothingHeadDevilHorns
+# - id: ClothingHeadJesterEvilHat
+# - id: ClothingNeckDevilWings
+# - id: ClothingUniformJesterEvil
+# - id: ClothingShoesJesterEvilJanglers
+# - id: DevilPitchfork
- type: entity
parent: BaseCostumeBundle
@@ -234,10 +240,11 @@
- state: wrapper
- state: label
color: "#dd6b17"
- - type: StorageFill
- contents:
- - id: ClothingHeadHatGladiator
- - id: ClothingUniformJumpsuitGladiator
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ - id: ClothingHeadHatGladiator
+ - id: ClothingUniformJumpsuitGladiator
- type: entity
parent: BaseCostumeBundle
@@ -254,10 +261,11 @@
- state: wrapper
- state: label
color: "#dd6b17"
- - type: StorageFill
- contents:
- - id: ClothingHeadHatPwig
- - id: ClothingOuterRobesJudge
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ - id: ClothingHeadHatPwig
+ - id: ClothingOuterRobesJudge
- type: entity
parent: BaseCostumeBundle
@@ -274,10 +282,11 @@
- state: wrapper
- state: label
color: "#dd6b17"
- - type: StorageFill
- contents:
- - id: ClothingHeadHatAnimalMonkey
- - id: ClothingOuterSuitMonkey
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ - id: ClothingHeadHatAnimalMonkey
+ - id: ClothingOuterSuitMonkey
- type: entity
parent: BaseCostumeBundle
@@ -294,15 +303,16 @@
- state: wrapper
- state: label
color: "#dd6b17"
- - type: StorageFill
- contents:
- - id: ClothingHeadHatPirate
- - id: ClothingHeadBandRed
- - id: ClothingEyesEyepatch
- - id: ClothingUniformJumpsuitPirate
- - id: ClothingOuterCoatPirate
- - id: ClothingShoesBootsLaceup
- - id: FoamCutlass
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ - id: ClothingHeadHatPirate
+ - id: ClothingHeadBandRed
+ - id: ClothingEyesEyepatch
+ - id: ClothingUniformJumpsuitPirate
+ - id: ClothingOuterCoatPirate
+ - id: ClothingShoesBootsLaceup
+ - id: FoamCutlass
- type: entity
parent: BaseCostumeBundle
@@ -319,11 +329,12 @@
- state: wrapper
- state: label
color: "#70cac4"
- - type: StorageFill
- contents:
- - id: ClothingUniformJumpskirtPerformer
- - id: ClothingShoesBootsPerformer
- - id: FoodMealMemoryleek
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ - id: ClothingUniformJumpskirtPerformer
+ - id: ClothingShoesBootsPerformer
+ - id: FoodMealMemoryleek
- type: entity
parent: BaseCostumeBundle
@@ -340,10 +351,11 @@
- state: wrapper
- state: label
color: "#dd6b17"
- - type: StorageFill
- contents:
- - id: ClothingHeadHatRedRacoon
- - id: ClothingOuterRedRacoon
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ - id: ClothingHeadHatRedRacoon
+ - id: ClothingOuterRedRacoon
- type: entity
parent: BaseCostumeBundle
@@ -360,10 +372,11 @@
- state: wrapper
- state: label
color: "#dd6b17"
- - type: StorageFill
- contents:
- - id: ClothingHeadSafari
- - id: ClothingUniformJumpsuitSafari
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ - id: ClothingHeadSafari
+ - id: ClothingUniformJumpsuitSafari
# TODO: Port from Impstation
# - type: entity
@@ -381,12 +394,13 @@
# - state: wrapper
# - state: label
# color: "#dd6b17"
-# - type: StorageFill
-# contents:
-# - id: ClothingHeadSailorCap
-# - id: ClothingNeckSailorAscot
-# - id: ClothingUniformSailorSuit
-# - id: ClothingShoesBootsLaceup
+# - type: EntityTableContainerFill
+# containers:
+# storagebase: !type:AllSelector
+# - id: ClothingHeadSailorCap
+# - id: ClothingNeckSailorAscot
+# - id: ClothingUniformSailorSuit
+# - id: ClothingShoesBootsLaceup
- type: entity
parent: BaseCostumeBundle
@@ -403,10 +417,11 @@
- state: wrapper
- state: label
color: "#f2c735"
- - type: StorageFill
- contents:
- - id: ClothingHeadHatSantahat
- - id: ClothingOuterSanta
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ - id: ClothingHeadHatSantahat
+ - id: ClothingOuterSanta
- type: entity
parent: BaseCostumeBundle
@@ -423,11 +438,12 @@
- state: wrapper
- state: label
color: "#dd6b17"
- - type: StorageFill
- contents:
- - id: ClothingHeadHatShrineMaidenWig
- - id: ClothingOuterSuitShrineMaiden
- - id: Gohei
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ - id: ClothingHeadHatShrineMaidenWig
+ - id: ClothingOuterSuitShrineMaiden
+ - id: Gohei
- type: entity
parent: BaseCostumeBundle
@@ -444,10 +460,11 @@
- state: wrapper
- state: label
color: "#dd6b17"
- - type: StorageFill
- contents:
- - id: ClothingHeadHatSkub
- - id: ClothingOuterSkub
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ - id: ClothingHeadHatSkub
+ - id: ClothingOuterSkub
- type: entity
parent: BaseCostumeBundle
@@ -464,11 +481,12 @@
- state: wrapper
- state: label
color: "#dd6b17"
- - type: StorageFill
- contents:
- - id: ClothingHeadHatWitch1
- - id: ClothingHeadHatWitch
- - id: ClothingOuterSuitWitchRobes
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ - id: ClothingHeadHatWitch1
+ - id: ClothingHeadHatWitch
+ - id: ClothingOuterSuitWitchRobes
- type: entity
parent: BaseCostumeBundle
@@ -485,8 +503,9 @@
- state: wrapper
- state: label
color: "#dd6b17"
- - type: StorageFill
- contents:
- - id: ClothingUniformJumpsuitDameDane
- - id: ClothingOuterDameDane
- - id: ClothingShoesDameDane
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ - id: ClothingUniformJumpsuitDameDane
+ - id: ClothingOuterDameDane
+ - id: ClothingShoesDameDane
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
index fe3c2c19908..46cd1de71d1 100644
--- a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
@@ -16,13 +16,14 @@
# color: "#74ff33"
# - type: Icon
# state: icon-clown
-# - type: StorageFill
-# contents:
-# - id: ClothingHeadHatCircusClown
-# - id: ClothingMaskClownNose
-# - id: ClothingNeckRuffle
-# - id: ClothingUniformCircusClown
-# - id: ClothingShoesCircus
+# - type: EntityTableContainerFill
+# containers:
+# storagebase: !type:AllSelector
+# - id: ClothingHeadHatCircusClown
+# - id: ClothingMaskClownNose
+# - id: ClothingNeckRuffle
+# - id: ClothingUniformCircusClown
+# - id: ClothingShoesCircus
- type: entity
parent: BaseCostumeBundle
@@ -41,14 +42,15 @@
color: "#74ff33"
- type: Icon
state: icon-clown
- - type: StorageFill
- contents:
- - id: ClothingHeadHatJester
- - id: ClothingHeadHatJesterAlt
- - id: ClothingUniformJumpsuitJester
- - id: ClothingUniformJumpsuitJesterAlt
- - id: ClothingShoesJester
- - id: ClothingShoesJester
+ - type: EntityTableContainerFill
+ containers:
+ storagebase: !type:AllSelector
+ - id: ClothingHeadHatJester
+ - id: ClothingHeadHatJesterAlt
+ - id: ClothingUniformJumpsuitJester
+ - id: ClothingUniformJumpsuitJesterAlt
+ - id: ClothingShoesJester
+ - id: ClothingShoesJester
# TODO: Port from Impstation
# - type: entity
@@ -68,11 +70,12 @@
# color: "#6f56b8"
# - type: Icon
# state: icon-musician
-# - type: StorageFill
-# contents:
-# - id: ClothingUniformMusicianSingerDress
-# - id: ClothingHandsMusicianSingerGloves
-# - id: ClothingNeckFeatherBoa
+# - type: EntityTableContainerFill
+# containers:
+# storagebase: !type:AllSelector
+# - id: ClothingUniformMusicianSingerDress
+# - id: ClothingHandsMusicianSingerGloves
+# - id: ClothingNeckFeatherBoa
# TODO: Port from Impstation
# - type: entity
@@ -92,7 +95,8 @@
# color: "#6f56b8"
# - type: Icon
# state: icon-musician
-# - type: StorageFill
-# contents:
-# - id: ClothingHeadHatMusicianShako
-# - id: ClothingUniformJumpsuitMusicianMarchingBand
+# - type: EntityTableContainerFill
+# containers:
+# storagebase: !type:AllSelector
+# - id: ClothingHeadHatMusicianShako
+# - id: ClothingUniformJumpsuitMusicianMarchingBand
From b2ef263ddd78ac43e4445a57b3c9a4b6b9aa458f Mon Sep 17 00:00:00 2001
From: portfiend <109661617+portfiend@users.noreply.github.com>
Date: Wed, 18 Mar 2026 20:05:19 -0500
Subject: [PATCH 12/17] replace monkey/performer suits with bundles in
theatrical performances crate
---
.../Catalog/Fills/Crates/service.yml | 22 ++++++++++++-------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/Resources/Prototypes/Catalog/Fills/Crates/service.yml b/Resources/Prototypes/Catalog/Fills/Crates/service.yml
index a8c824a3e2c..b0c452268a2 100644
--- a/Resources/Prototypes/Catalog/Fills/Crates/service.yml
+++ b/Resources/Prototypes/Catalog/Fills/Crates/service.yml
@@ -121,13 +121,16 @@
name: theatrical performances crate
description: Contains a moth cloak, barber scissors, maid uniform, clown and mime attributes, and other performance charms.
components:
- - type: EntityTableContainerFill # TODO: Costume bundles
+ - type: EntityTableContainerFill
containers:
entity_storage: !type:AllSelector
children:
- id: BarberScissors
- - id: ClothingOuterSuitMonkey
- - id: ClothingHeadHatAnimalMonkey
+ # Begin DEN: Costume bundles
+ # - id: ClothingOuterSuitMonkey
+ # - id: ClothingHeadHatAnimalMonkey
+ - id: CostumeBundleMonkey
+ # End DEN
- id: ClothingUniformJumpskirtJanimaid
- id: ClothingUniformJumpskirtOldDress
- id: ClothingHeadHatMagician
@@ -151,11 +154,14 @@
- id: ClothingMaskMime
- id: ClothingBeltSuspendersRed
- id: ClothingBeltSuspendersBlack
- - !type:AllSelector # Performer starter kit
- children:
- - id: ClothingUniformJumpskirtPerformer
- - id: ClothingShoesBootsPerformer
- - id: ClothingHeadPerformerWig
+ # Begin DEN: Costume bundles
+ # - !type:AllSelector # Performer starter kit
+ # children:
+ # - id: ClothingUniformJumpskirtPerformer
+ # - id: ClothingShoesBootsPerformer
+ # - id: ClothingHeadPerformerWig
+ - id: CostumeBundlePerformer
+ # End DEN
- type: entity
parent: CrateGenericSteel
From 04d2e7c103620d9b1c514e2df4ec7e8db1bcf2ed Mon Sep 17 00:00:00 2001
From: portfiend <109661617+portfiend@users.noreply.github.com>
Date: Wed, 18 Mar 2026 20:21:36 -0500
Subject: [PATCH 13/17] summary commment for job costumes
---
.../Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
index 46cd1de71d1..1650804e268 100644
--- a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
@@ -1,3 +1,6 @@
+# Costume bundles that represent uniforms for specific jobs - for example, "alt costumes" for clowns.
+# =======================
+
# TODO: Port from Impstation
# - type: entity
# parent: BaseCostumeBundle
From 45752b5661eebad83f8a18d52e24e9258998838a Mon Sep 17 00:00:00 2001
From: portfiend <109661617+portfiend@users.noreply.github.com>
Date: Sat, 21 Mar 2026 11:43:34 -0500
Subject: [PATCH 14/17] use StorageFillVisualizer instead of ContainerHeld
---
.../ContainerHeld/ContainerHeldSystem.cs | 3 +-
.../Entities/Objects/Storage/costumes.yml | 216 +++++++++---------
.../Entities/Objects/Storage/costumes_job.yml | 52 +++--
.../Storage/costume_bundle.rsi/label.png | Bin 188 -> 154 bytes
.../Storage/costume_bundle.rsi/meta.json | 8 +-
.../Storage/costume_bundle.rsi/outfit-0.png | Bin 0 -> 116 bytes
.../Storage/costume_bundle.rsi/outfit-1.png | Bin 0 -> 181 bytes
.../Storage/costume_bundle.rsi/outfit-2.png | Bin 0 -> 181 bytes
.../Storage/costume_bundle.rsi/outfit.png | Bin 239 -> 0 bytes
.../costume_bundle.rsi/wrapper-fill.png | Bin 141 -> 138 bytes
.../Storage/costume_bundle.rsi/wrapper.png | Bin 160 -> 152 bytes
11 files changed, 150 insertions(+), 129 deletions(-)
create mode 100644 Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/outfit-0.png
create mode 100644 Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/outfit-1.png
create mode 100644 Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/outfit-2.png
delete mode 100644 Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/outfit.png
diff --git a/Content.Shared/ContainerHeld/ContainerHeldSystem.cs b/Content.Shared/ContainerHeld/ContainerHeldSystem.cs
index e0c43ab1dc5..f09cd4443d4 100644
--- a/Content.Shared/ContainerHeld/ContainerHeldSystem.cs
+++ b/Content.Shared/ContainerHeld/ContainerHeldSystem.cs
@@ -23,8 +23,7 @@ public override void Initialize()
private void OnContainerModified(EntityUid uid, ContainerHeldComponent comp, ContainerModifiedMessage args)
{
- if (!(TryComp(uid, out var storage)
- && storage.Container is not null // DEN - Bugfix lol
+ if (!(HasComp(uid)
&& TryComp(uid, out var appearance)
&& TryComp(uid, out var item)))
{
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
index fd5d78c89ce..95e4b50dc40 100644
--- a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
@@ -32,8 +32,8 @@
- type: Sprite
sprite: _DEN/Objects/Storage/costume_bundle.rsi
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-1
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#ffffff"
- state: wrapper-fill
color: "#ffffff22"
@@ -57,15 +57,10 @@
- CostumeItem
components:
- Clothing
- - type: ContainerHeld
- threshold: 1
+ - type: StorageFillVisualizer
+ maxFillLevels: 3
+ fillBaseName: outfit
- type: Appearance
- - type: GenericVisualizer
- visuals:
- enum.ToggleableVisuals.Enabled:
- enum.ToggleableVisuals.Layer:
- True: {visible: true}
- False: {visible: false}
- type: StaticPrice
price: 10
@@ -77,10 +72,9 @@
- type: Sprite
sprite: _DEN/Objects/Storage/costume_bundle.rsi
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-0 # starts with nothing
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#ffffff"
- visible: false # starts with nothing
- state: wrapper-fill
color: "#ffffff22"
- state: wrapper
@@ -95,8 +89,8 @@
# components:
# - type: Sprite
# layers:
-# - state: outfit
-# map: [ "enum.ToggleableVisuals.Layer" ]
+# - state: outfit-1
+# map: [ "enum.StorageFillLayers.Fill" ]
# color: "#f5b8c3"
# - state: wrapper-fill
# color: "#ffffff22"
@@ -106,12 +100,13 @@
# - type: EntityTableContainerFill
# containers:
# storagebase: !type:AllSelector
-# - id: ClothingHeadHalo
-# - id: ClothingUniformJumpskirtAngelDress
-# - id: ClothingHandsAngelGloves
-# - id: ClothingShoesAngelSandals
-# - id: ClothingNeckAngelWings
-# - id: HandheldHarpInstrument
+# children:
+# - id: ClothingHeadHalo
+# - id: ClothingUniformJumpskirtAngelDress
+# - id: ClothingHandsAngelGloves
+# - id: ClothingShoesAngelSandals
+# - id: ClothingNeckAngelWings
+# - id: HandheldHarpInstrument
# TODO: Port from prebase Den
# - type: entity
@@ -121,8 +116,8 @@
# components:
# - type: Sprite
# layers:
-# - state: outfit
-# map: [ "enum.ToggleableVisuals.Layer" ]
+# - state: outfit-1
+# map: [ "enum.StorageFillLayers.Fill" ]
# color: "#48494e"
# - state: wrapper-fill
# color: "#ffffff22"
@@ -132,6 +127,7 @@
# - type: EntityTableContainerFill
# containers:
# storagebase: !type:AllSelector
+# children:
# - id: ClothingHeadHatBunny
# - id: ClothingCostumeBunnySuit
@@ -143,8 +139,8 @@
# components:
# - type: Sprite
# layers:
-# - state: outfit
-# map: [ "enum.ToggleableVisuals.Layer" ]
+# - state: outfit-1
+# map: [ "enum.StorageFillLayers.Fill" ]
# color: "#3e3735"
# - state: wrapper-fill
# color: "#ffffff22"
@@ -154,6 +150,7 @@
# - type: EntityTableContainerFill
# containers:
# storagebase: !type:AllSelector
+# children:
# - id: ClothingMaskBurglar
# - id: ClothingUniformBurglarJumpsuit
@@ -164,8 +161,8 @@
components:
- type: Sprite
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-1
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#70736c"
- state: wrapper-fill
color: "#ffffff22"
@@ -175,8 +172,9 @@
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
- - id: ClothingHeadHatCardborg
- - id: ClothingOuterCardborg
+ children:
+ - id: ClothingHeadHatCardborg
+ - id: ClothingOuterCardborg
- type: entity
parent: BaseCostumeBundle
@@ -185,8 +183,8 @@
components:
- type: Sprite
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-1
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#ffc800"
- state: wrapper-fill
color: "#ffffff22"
@@ -196,8 +194,9 @@
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
- - id: ClothingHeadHatChickenhead
- - id: ClothingOuterSuitChicken
+ children:
+ - id: ClothingHeadHatChickenhead
+ - id: ClothingOuterSuitChicken
# TODO: Port from Impstation
# - type: entity
@@ -207,8 +206,8 @@
# components:
# - type: Sprite
# layers:
-# - state: outfit
-# map: [ "enum.ToggleableVisuals.Layer" ]
+# - state: outfit-1
+# map: [ "enum.StorageFillLayers.Fill" ]
# color: "#4b3b56"
# - state: wrapper-fill
# color: "#ffffff22"
@@ -218,12 +217,13 @@
# - type: EntityTableContainerFill
# containers:
# storagebase: !type:AllSelector
-# - id: ClothingHeadDevilHorns
-# - id: ClothingHeadJesterEvilHat
-# - id: ClothingNeckDevilWings
-# - id: ClothingUniformJesterEvil
-# - id: ClothingShoesJesterEvilJanglers
-# - id: DevilPitchfork
+# children:
+# - id: ClothingHeadDevilHorns
+# - id: ClothingHeadJesterEvilHat
+# - id: ClothingNeckDevilWings
+# - id: ClothingUniformJesterEvil
+# - id: ClothingShoesJesterEvilJanglers
+# - id: DevilPitchfork
- type: entity
parent: BaseCostumeBundle
@@ -232,8 +232,8 @@
components:
- type: Sprite
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-1
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#e1b73d"
- state: wrapper-fill
color: "#ffffff22"
@@ -243,8 +243,9 @@
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
- - id: ClothingHeadHatGladiator
- - id: ClothingUniformJumpsuitGladiator
+ children:
+ - id: ClothingHeadHatGladiator
+ - id: ClothingUniformJumpsuitGladiator
- type: entity
parent: BaseCostumeBundle
@@ -253,8 +254,8 @@
components:
- type: Sprite
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-1
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#2e2e2e"
- state: wrapper-fill
color: "#ffffff22"
@@ -264,8 +265,9 @@
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
- - id: ClothingHeadHatPwig
- - id: ClothingOuterRobesJudge
+ children:
+ - id: ClothingHeadHatPwig
+ - id: ClothingOuterRobesJudge
- type: entity
parent: BaseCostumeBundle
@@ -274,8 +276,8 @@
components:
- type: Sprite
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-1
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#914800"
- state: wrapper-fill
color: "#ffffff22"
@@ -285,8 +287,9 @@
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
- - id: ClothingHeadHatAnimalMonkey
- - id: ClothingOuterSuitMonkey
+ children:
+ - id: ClothingHeadHatAnimalMonkey
+ - id: ClothingOuterSuitMonkey
- type: entity
parent: BaseCostumeBundle
@@ -295,8 +298,8 @@
components:
- type: Sprite
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-1
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#dfe1de"
- state: wrapper-fill
color: "#ffffff22"
@@ -306,13 +309,14 @@
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
- - id: ClothingHeadHatPirate
- - id: ClothingHeadBandRed
- - id: ClothingEyesEyepatch
- - id: ClothingUniformJumpsuitPirate
- - id: ClothingOuterCoatPirate
- - id: ClothingShoesBootsLaceup
- - id: FoamCutlass
+ children:
+ - id: ClothingHeadHatPirate
+ - id: ClothingHeadBandRed
+ - id: ClothingEyesEyepatch
+ - id: ClothingUniformJumpsuitPirate
+ - id: ClothingOuterCoatPirate
+ - id: ClothingShoesBootsLaceup
+ - id: FoamCutlass
- type: entity
parent: BaseCostumeBundle
@@ -321,8 +325,8 @@
components:
- type: Sprite
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-1
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#474f63"
- state: wrapper-fill
color: "#ffffff22"
@@ -332,9 +336,10 @@
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
- - id: ClothingUniformJumpskirtPerformer
- - id: ClothingShoesBootsPerformer
- - id: FoodMealMemoryleek
+ children:
+ - id: ClothingUniformJumpskirtPerformer
+ - id: ClothingShoesBootsPerformer
+ - id: FoodMealMemoryleek
- type: entity
parent: BaseCostumeBundle
@@ -343,8 +348,8 @@
components:
- type: Sprite
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-1
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#e48a1b"
- state: wrapper-fill
color: "#ffffff22"
@@ -354,8 +359,9 @@
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
- - id: ClothingHeadHatRedRacoon
- - id: ClothingOuterRedRacoon
+ children:
+ - id: ClothingHeadHatRedRacoon
+ - id: ClothingOuterRedRacoon
- type: entity
parent: BaseCostumeBundle
@@ -364,8 +370,8 @@
components:
- type: Sprite
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-1
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#d3bf86"
- state: wrapper-fill
color: "#ffffff22"
@@ -375,8 +381,9 @@
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
- - id: ClothingHeadSafari
- - id: ClothingUniformJumpsuitSafari
+ children:
+ - id: ClothingHeadSafari
+ - id: ClothingUniformJumpsuitSafari
# TODO: Port from Impstation
# - type: entity
@@ -386,8 +393,8 @@
# components:
# - type: Sprite
# layers:
-# - state: outfit
-# map: [ "enum.ToggleableVisuals.Layer" ]
+# - state: outfit-1
+# map: [ "enum.StorageFillLayers.Fill" ]
# color: "#dedbec"
# - state: wrapper-fill
# color: "#ffffff22"
@@ -397,10 +404,11 @@
# - type: EntityTableContainerFill
# containers:
# storagebase: !type:AllSelector
-# - id: ClothingHeadSailorCap
-# - id: ClothingNeckSailorAscot
-# - id: ClothingUniformSailorSuit
-# - id: ClothingShoesBootsLaceup
+# children:
+# - id: ClothingHeadSailorCap
+# - id: ClothingNeckSailorAscot
+# - id: ClothingUniformSailorSuit
+# - id: ClothingShoesBootsLaceup
- type: entity
parent: BaseCostumeBundle
@@ -409,8 +417,8 @@
components:
- type: Sprite
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-1
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#d73827"
- state: wrapper-fill
color: "#ffffff22"
@@ -420,8 +428,9 @@
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
- - id: ClothingHeadHatSantahat
- - id: ClothingOuterSanta
+ children:
+ - id: ClothingHeadHatSantahat
+ - id: ClothingOuterSanta
- type: entity
parent: BaseCostumeBundle
@@ -430,8 +439,8 @@
components:
- type: Sprite
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-1
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#ff1f24"
- state: wrapper-fill
color: "#ffffff22"
@@ -441,9 +450,10 @@
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
- - id: ClothingHeadHatShrineMaidenWig
- - id: ClothingOuterSuitShrineMaiden
- - id: Gohei
+ children:
+ - id: ClothingHeadHatShrineMaidenWig
+ - id: ClothingOuterSuitShrineMaiden
+ - id: Gohei
- type: entity
parent: BaseCostumeBundle
@@ -452,8 +462,8 @@
components:
- type: Sprite
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-1
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#fcd4d4"
- state: wrapper-fill
color: "#ffffff22"
@@ -473,8 +483,8 @@
components:
- type: Sprite
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-1
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#1b1b1b"
- state: wrapper-fill
color: "#ffffff22"
@@ -484,9 +494,10 @@
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
- - id: ClothingHeadHatWitch1
- - id: ClothingHeadHatWitch
- - id: ClothingOuterSuitWitchRobes
+ children:
+ - id: ClothingHeadHatWitch1
+ - id: ClothingHeadHatWitch
+ - id: ClothingOuterSuitWitchRobes
- type: entity
parent: BaseCostumeBundle
@@ -495,8 +506,8 @@
components:
- type: Sprite
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-1
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#ae2354"
- state: wrapper-fill
color: "#ffffff22"
@@ -506,6 +517,7 @@
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
- - id: ClothingUniformJumpsuitDameDane
- - id: ClothingOuterDameDane
- - id: ClothingShoesDameDane
+ children:
+ - id: ClothingUniformJumpsuitDameDane
+ - id: ClothingOuterDameDane
+ - id: ClothingShoesDameDane
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
index 1650804e268..e7212bca8c2 100644
--- a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
@@ -9,8 +9,8 @@
# components:
# - type: Sprite
# layers:
-# - state: outfit
-# map: [ "enum.ToggleableVisuals.Layer" ]
+# - state: outfit-1
+# map: [ "enum.StorageFillLayers.Fill" ]
# color: "#ffd85d"
# - state: wrapper-fill
# color: "#ffffff22"
@@ -22,11 +22,12 @@
# - type: EntityTableContainerFill
# containers:
# storagebase: !type:AllSelector
-# - id: ClothingHeadHatCircusClown
-# - id: ClothingMaskClownNose
-# - id: ClothingNeckRuffle
-# - id: ClothingUniformCircusClown
-# - id: ClothingShoesCircus
+# children:
+# - id: ClothingHeadHatCircusClown
+# - id: ClothingMaskClownNose
+# - id: ClothingNeckRuffle
+# - id: ClothingUniformCircusClown
+# - id: ClothingShoesCircus
- type: entity
parent: BaseCostumeBundle
@@ -35,8 +36,8 @@
components:
- type: Sprite
layers:
- - state: outfit
- map: [ "enum.ToggleableVisuals.Layer" ]
+ - state: outfit-1
+ map: [ "enum.StorageFillLayers.Fill" ]
color: "#dd1818"
- state: wrapper-fill
color: "#ffffff22"
@@ -48,12 +49,13 @@
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
- - id: ClothingHeadHatJester
- - id: ClothingHeadHatJesterAlt
- - id: ClothingUniformJumpsuitJester
- - id: ClothingUniformJumpsuitJesterAlt
- - id: ClothingShoesJester
- - id: ClothingShoesJester
+ children:
+ - id: ClothingHeadHatJester
+ - id: ClothingHeadHatJesterAlt
+ - id: ClothingUniformJumpsuitJester
+ - id: ClothingUniformJumpsuitJesterAlt
+ - id: ClothingShoesJester
+ - id: ClothingShoesJester
# TODO: Port from Impstation
# - type: entity
@@ -63,8 +65,8 @@
# components:
# - type: Sprite
# layers:
-# - state: outfit
-# map: [ "enum.ToggleableVisuals.Layer" ]
+# - state: outfit-1
+# map: [ "enum.StorageFillLayers.Fill" ]
# color: "#463c6a"
# - state: wrapper-fill
# color: "#ffffff22"
@@ -76,9 +78,10 @@
# - type: EntityTableContainerFill
# containers:
# storagebase: !type:AllSelector
-# - id: ClothingUniformMusicianSingerDress
-# - id: ClothingHandsMusicianSingerGloves
-# - id: ClothingNeckFeatherBoa
+# children:
+# - id: ClothingUniformMusicianSingerDress
+# - id: ClothingHandsMusicianSingerGloves
+# - id: ClothingNeckFeatherBoa
# TODO: Port from Impstation
# - type: entity
@@ -88,8 +91,8 @@
# components:
# - type: Sprite
# layers:
-# - state: outfit
-# map: [ "enum.ToggleableVisuals.Layer" ]
+# - state: outfit-1
+# map: [ "enum.StorageFillLayers.Fill" ]
# color: "#463c6a"
# - state: wrapper-fill
# color: "#ffffff22"
@@ -101,5 +104,6 @@
# - type: EntityTableContainerFill
# containers:
# storagebase: !type:AllSelector
-# - id: ClothingHeadHatMusicianShako
-# - id: ClothingUniformJumpsuitMusicianMarchingBand
+# children:
+# - id: ClothingHeadHatMusicianShako
+# - id: ClothingUniformJumpsuitMusicianMarchingBand
diff --git a/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/label.png b/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/label.png
index afeae01c718cd429500cf56ff1107aeef5109673..011b74a535dcc89a12cd472257feb095badbbce8 100644
GIT binary patch
delta 137
zcmdnPIE!(DWIZzj1B1(wu46!ou{g-xiDBJ2nU_EgPk>K|E08`hZ`RGD`~Ls`zizTl
z1CY;B666=m0OW7hb?5-{bv#`hLo9le6C_xh1q=*FVdQ&WS0Z2>{>6DvkgE
delta 171
zcmbQmxQB6qWIY=L14D6D)fXVeSRCZ;#IWw1%u67r%+tj&B%(DrL4tL0f=EwOpur_Z
z<&9kVa(BPW&s?AOv?KiQ+T`Do5F?ja*DpEo2Pni^666=m@E-_dE~tS_a`tp_46*2aJJFDjL4k)U`r-e4
zv&<~@jk~L~#n}w11^iR^Ca5Uz^jl2X`%q_{*aYVlOKU_{EsQP-l{x3}W$xL#@@H9=
XBrpjTG^%O=jbre1^>bP0l+XkK0USN)
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/outfit-2.png b/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/outfit-2.png
new file mode 100644
index 0000000000000000000000000000000000000000..3108e3c9cc40c9725620abdc87568360f4b7e6c8
GIT binary patch
literal 181
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GT!D1m
z%&l{_9lQA8>F?ja*DpEo2Pni^666=m@E-_dE~tS_a`tp_46*2aJJFDjL4k)U`r-e4
zv&<~@jk~L~#n}w11^iR^Ca5Uz^jl2X`%q_{*aYVlOKU_{EsQP-l{x3}W$xL#@@H9=
XBrpjTG^%O=jbre1^>bP0l+XkK0USN)
literal 0
HcmV?d00001
diff --git a/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/outfit.png b/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/outfit.png
deleted file mode 100644
index 792ff0027d3ad9cf9e71559bdcaef276b74d67b4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 239
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}D?MEtLn2y}
z6C_v{Cy4MEB&fIt-#xST|HqT&ORFcR>Rp@`U-RM1|D){w|NsB{E6sZN2&d(Qq|+C5
zk3ADel0E3MN_oqYqbnA*<*)}x_gE!dVPt;CAQogAQ~j%}k$Fe!WOu9?yQ*>_7n2;E%voOMz5
mk%i&1{Y`-eTyBh885yo-mw1)_)7uYpG=rzBpUXO@geCyMEnam1
diff --git a/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/wrapper-fill.png b/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/wrapper-fill.png
index 6d39a3edd9a076e0fd68e113ef7c487d371d4800..4d266e7eb900b0d4183bb47f84dddf76c4fea610 100644
GIT binary patch
delta 120
zcmeBW>|&fCS;)-5z~Hi^>llz?EDmyaVpw-h<|UBB7T^=&3Z(!4|G)I+{JTIFQ%R6t
zFvI`oiAr06JQYtD#}JF&b1*v~*&l7T_cj^U$G
Svlt6dJ%gvKpUXO@geCyTvLy)s
delta 123
zcmeBT>}8xFS;EG^z))OO^#w>V76-XIF|0c$^AgB$_jGX#iD-R$Z6hy(0uS@S8Gp;o
zv~P5@1N0
diff --git a/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/wrapper.png b/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/wrapper.png
index 690e4a40190042a24fd2e84bd705cf1d4ae7fe33..57282a81472d5354703f5cbf5336012ad23b52ac 100644
GIT binary patch
delta 134
zcmZ3$ID>J5WIZzj1B1(wu46!ou{g-xiDBJ2nU_EgTYyi9E08{S?wt5%@lQY&Q%R6t
zFvI`oiAr06JR?sR#}JF&i=-MhFt#)ODeKW%Fpp`;i(`Uw
gD|i)@4)&xlFf5qC;8}5*8)OxOr>mdKI;Vst0N4jBVE_OC
delta 143
zcmV;A0C4}90iXep8Gi-<0047(dh`GQ00DDSM?wIu&K&6g003G^L_t(oh3%HX4Zt7_
z#GvX#xBm=Tsf+-Y_(1LVaj|#=S`+y@ogS#FZzY!mcW)a`v#4;Tm}FlnlBCay$@OCa
xI$*}Lt4IL_6j0z;0lbQ@dydcgkch~Y4CwzXnRjkUzyJUM00>D%PDHLkV1o8iJF@@)
From 60b2a095a7e04d58f432096bcdeb5bdeac656819 Mon Sep 17 00:00:00 2001
From: portfiend <109661617+portfiend@users.noreply.github.com>
Date: Sat, 21 Mar 2026 11:46:41 -0500
Subject: [PATCH 15/17] remove redundant costume icons
---
.../Entities/Objects/Storage/costumes_job.yml | 8 --------
.../Storage/costume_bundle.rsi/icon-clown.png | Bin 373 -> 0 bytes
.../Storage/costume_bundle.rsi/icon-musician.png | Bin 376 -> 0 bytes
.../Objects/Storage/costume_bundle.rsi/meta.json | 6 ------
4 files changed, 14 deletions(-)
delete mode 100644 Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/icon-clown.png
delete mode 100644 Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/icon-musician.png
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
index e7212bca8c2..eaa97f8f70e 100644
--- a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes_job.yml
@@ -17,8 +17,6 @@
# - state: wrapper
# - state: label
# color: "#74ff33"
-# - type: Icon
-# state: icon-clown
# - type: EntityTableContainerFill
# containers:
# storagebase: !type:AllSelector
@@ -44,8 +42,6 @@
- state: wrapper
- state: label
color: "#74ff33"
- - type: Icon
- state: icon-clown
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
@@ -73,8 +69,6 @@
# - state: wrapper
# - state: label
# color: "#6f56b8"
-# - type: Icon
-# state: icon-musician
# - type: EntityTableContainerFill
# containers:
# storagebase: !type:AllSelector
@@ -99,8 +93,6 @@
# - state: wrapper
# - state: label
# color: "#6f56b8"
-# - type: Icon
-# state: icon-musician
# - type: EntityTableContainerFill
# containers:
# storagebase: !type:AllSelector
diff --git a/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/icon-clown.png b/Resources/Textures/_DEN/Objects/Storage/costume_bundle.rsi/icon-clown.png
deleted file mode 100644
index c80b2779eb8d334c2219537973bcb763e0fc2965..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 373
zcmV-*0gC>KP)Px$FG)l}R9J=Wma$92P!PsH#nvE%B4o*$!Tn__N~iuM!O6wRLC_(CLWfRWI!XSL
zPDSZ-w>!KwOF%-FfI?i%(7~5?HBhMUH-C5cPx$GD$>1R9J=WmN84iP!PxeN?U_air|nn`2zAXb?IWKd6eQb?M$O
zk*O|SI^E$Hcv&+D61oHw;$nslzPxJ#1%1Eye|P`fy_b7{!|~rak_He_WuuFt$SQY7
zT3jg=4o72c(ydp^kccW96V?Xm;>@fEeGdTOb+^OI&o2M~Gi#-kl?hP?hNH0_^gTR3
zO^mwxhes5fQqO18#+)Jp`1$H2Ng6eUWxivnfwr-}1y`3ZTc`i*{KBaJcz*)`EMD)7
zHCpRHo~6jMR2+Bk5wv0;&r_lZjpU8zb0sF4#zjt
W{AfnX9)7I=0000
Date: Sat, 21 Mar 2026 11:53:01 -0500
Subject: [PATCH 16/17] i ficked it
---
.../Prototypes/_DEN/Entities/Objects/Storage/costumes.yml | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
index 95e4b50dc40..a81607df40b 100644
--- a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
@@ -473,8 +473,9 @@
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
- - id: ClothingHeadHatSkub
- - id: ClothingOuterSkub
+ children:
+ - id: ClothingHeadHatSkub
+ - id: ClothingOuterSkub
- type: entity
parent: BaseCostumeBundle
From 26d44d74cc8d23ca9d1466492396a1ba726b924c Mon Sep 17 00:00:00 2001
From: portfiend <109661617+portfiend@users.noreply.github.com>
Date: Sat, 21 Mar 2026 11:55:47 -0500
Subject: [PATCH 17/17] add suffix to empty costume bundles
---
Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
index a81607df40b..4983f342a33 100644
--- a/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
+++ b/Resources/Prototypes/_DEN/Entities/Objects/Storage/costumes.yml
@@ -67,6 +67,7 @@
- type: entity
parent: BaseCostumeBundle
id: EmptyCostumeBundle
+ suffix: empty
description: A bag for storing assorted costume parts.
components:
- type: Sprite