From f660964006b014a1f730e9bf24d767665373c666 Mon Sep 17 00:00:00 2001 From: Mixelz <32188067+Mixelz@users.noreply.github.com> Date: Wed, 1 Oct 2025 18:11:26 -0500 Subject: [PATCH] Organized Head Locker Fills Feat. Circuit Totes. (#39868) * Initial Commit Added Circuit Totes, replaced Head Locker fills with Tote fills, also stamp boxes for relevant heads. * Craftable! Now craftable: Uses 1 cardboard and 1 cloth (gotta keep the circuits cushioned!) * Various Fixes Fixed indenting, added comments, fixed names, tried for 5 hours to get the table fill to work, failed. * test fail fix aaaaaaaa * TEST FAIL WHYYYY AAAAAAAAAAAAAAAAAAAAA * test fail fix 3 feat. iaada *mothscream.oog* * SURPLUS BOARD USES TOTE NOW THANK YOU IAADA * indent fix & storage base fix Fix for indents and also the storagebase bug * Master Merge Fix * Update meta.json * forgor the important part --- .../en-US/construction/recipes/crates.ftl | 1 + .../Prototypes/Catalog/Fills/Boxes/heads.yml | 143 ++++++++++++++++++ .../Catalog/Fills/Crates/engineering.yml | 4 +- .../Catalog/Fills/Lockers/heads.yml | 36 ++--- .../Prototypes/Entities/Objects/Misc/box.yml | 38 ++++- .../Crafting/Graphs/storage/cardboardbox.yml | 34 +++-- .../Prototypes/Recipes/Crafting/crates.yml | 9 ++ Resources/Prototypes/tags.yml | 3 + .../Objects/Storage/boxes.rsi/meta.json | 14 +- .../Objects/Storage/boxes.rsi/stamp.png | Bin 0 -> 1482 bytes .../Objects/Storage/boxes.rsi/tote-0.png | Bin 0 -> 1799 bytes .../Objects/Storage/boxes.rsi/tote-1.png | Bin 0 -> 1992 bytes .../Objects/Storage/boxes.rsi/tote-2.png | Bin 0 -> 2156 bytes 13 files changed, 241 insertions(+), 41 deletions(-) create mode 100644 Resources/Prototypes/Catalog/Fills/Boxes/heads.yml create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/stamp.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/tote-0.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/tote-1.png create mode 100644 Resources/Textures/Objects/Storage/boxes.rsi/tote-2.png diff --git a/Resources/Locale/en-US/construction/recipes/crates.ftl b/Resources/Locale/en-US/construction/recipes/crates.ftl index 393b7784a1..c5b2b47c32 100644 --- a/Resources/Locale/en-US/construction/recipes/crates.ftl +++ b/Resources/Locale/en-US/construction/recipes/crates.ftl @@ -1,3 +1,4 @@ construction-recipe-crate-freezer = crate freezer construction-recipe-big-box = large cardboard box construction-recipe-box-cardboard = small cardboard box +construction-recipe-box-tote = circuit tote diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/heads.yml b/Resources/Prototypes/Catalog/Fills/Boxes/heads.yml new file mode 100644 index 0000000000..122aecd27b --- /dev/null +++ b/Resources/Prototypes/Catalog/Fills/Boxes/heads.yml @@ -0,0 +1,143 @@ +- type: entity + name: circuit tote [QM] + parent: ToteBase + id: BoxQMCircuitboards + description: A Tote filled with QM's Circuit boards. + components: + - type: StorageFill + contents: + - id: CargoBountyComputerCircuitboard + - id: CargoRequestComputerCircuitboard + - id: CargoSaleComputerCircuitboard + - id: CargoShuttleConsoleCircuitboard + - id: SalvageMagnetMachineCircuitboard + - id: SalvageJobBoardComputerCircuitboard + - id: MailTeleporterMachineCircuitboard + +- type: entity + name: stamp box [QM] + parent: BoxCardboard + id: BoxQMStamps + description: A box filled with QM's Stamps. Stamped of course. + components: + - type: Item + size: Small + shape: + - 0,0,1,1 + - type: StorageFill + contents: + - id: RubberStampApproved + - id: RubberStampDenied + - id: RubberStampQm + - type: Storage + grid: + - 0,0,1,1 + whitelist: + components: + - Stamp + - type: Sprite + layers: + - state: box + - state: stamp + +- type: entity + name: circuit tote [HoP] + parent: ToteBase + id: BoxHoPCircuitboards + description: A Tote filled with HoP's Circuit boards. + components: + - type: StorageFill + contents: + - id: IDComputerCircuitboard + - id: FundingAllocationComputerCircuitboard + - id: CargoRequestServiceComputerCircuitboard + +- type: entity + name: stamp box [HoP] + parent: BoxCardboard + id: BoxHoPStamps + description: A box filled with HoP's Stamps. Stamped of course. + components: + - type: Item + size: Small + shape: + - 0,0,1,1 + - type: StorageFill + contents: + - id: RubberStampApproved + - id: RubberStampDenied + - id: RubberStampHop + - type: Storage + grid: + - 0,0,1,1 + whitelist: + components: + - Stamp + - type: Sprite + layers: + - state: box + - state: stamp + +- type: entity + name: circuit tote [CE] + parent: ToteBase + id: BoxCECircuitboards + description: A Tote filled with CE's Circuit boards. + components: + - type: StorageFill + contents: + - id: CargoRequestEngineeringComputerCircuitboard + - id: AlertsComputerCircuitboard + - id: AtmosMonitoringComputerCircuitboard + - id: PowerComputerCircuitboard + - id: SolarControlComputerCircuitboard + +- type: entity + name: circuit tote [Captain] + parent: ToteBase + id: BoxCaptainCircuitboards + description: A Tote filled with Captain's Circuit boards. + components: + - type: StorageFill + contents: + - id: CommsComputerCircuitboard + - id: StationRecordsComputerCircuitboard + +- type: entity + name: circuit tote [CMO] + parent: ToteBase + id: BoxCMOCircuitboards + description: A Tote filled with CMO's Circuit boards. + components: + - type: StorageFill + contents: + - id: MedicalTechFabCircuitboard + - id: CargoRequestMedicalComputerCircuitboard + +- type: entity + name: circuit tote [RD] + parent: ToteBase + id: BoxRDCircuitboards + description: A Tote filled with RD's Circuit boards. + components: + - type: StorageFill + contents: + - id: CircuitImprinterMachineCircuitboard + - id: ProtolatheMachineCircuitboard + - id: ResearchComputerCircuitboard + - id: CargoRequestScienceComputerCircuitboard + - id: RoboticsConsoleCircuitboard + - id: AnalysisComputerCircuitboard #Because sometimes round start artis just fucking explode on the pad. + - id: ArtifactAnalyzerMachineCircuitboard + - id: StationAiFixerCircuitboard + +- type: entity + name: circuit tote [HoS] + parent: ToteBase + id: BoxHoSCircuitboards + description: A Tote filled with HoS's Circuit boards. + components: + - type: StorageFill + contents: + - id: SecurityTechFabCircuitboard + - id: CargoRequestSecurityComputerCircuitboard diff --git a/Resources/Prototypes/Catalog/Fills/Crates/engineering.yml b/Resources/Prototypes/Catalog/Fills/Crates/engineering.yml index 7acb9cf8b1..51e6440a34 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/engineering.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/engineering.yml @@ -235,13 +235,13 @@ - type: entity id: CrateTechBoardRandom - parent: CrateEngineering + parent: ToteBase name: surplus boards description: Surplus boards from somewhere. components: - type: EntityTableContainerFill containers: - entity_storage: !type:NestedSelector + storagebase: !type:NestedSelector tableId: RandomTechBoardTable rolls: !type:RangeNumberSelector range: 6, 8 diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 37dd68e63a..cf5297220c 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -4,22 +4,14 @@ children: - id: BoxEncryptionKeyCargo - id: BoxFolderQmClipboard - - id: CargoBountyComputerCircuitboard - - id: CargoRequestComputerCircuitboard - - id: CargoSaleComputerCircuitboard - - id: CargoShuttleConsoleCircuitboard - - id: SalvageMagnetMachineCircuitboard - - id: SalvageJobBoardComputerCircuitboard + - id: BoxQMCircuitboards + - id: BoxQMStamps - id: CigPackGreen prob: 0.50 - id: ClothingHeadsetAltCargo - id: DoorRemoteCargo - - id: RubberStampApproved - - id: RubberStampDenied - - id: RubberStampQm - id: AstroNavCartridge - id: ClothingHandsKnuckleDustersQM - - id: MailTeleporterMachineCircuitboard - type: entity id: LockerQuarterMasterFilled @@ -42,7 +34,7 @@ - id: ClothingBeltSheathFilled - id: ClothingHeadsetAltCommand - id: ClothingOuterArmorCaptainCarapace - - id: CommsComputerCircuitboard + - id: BoxCaptainCircuitboards - id: DoorRemoteCustom - id: MedalCase - id: NukeDisk @@ -122,6 +114,8 @@ - id: BoxEncryptionKeyPassenger - id: BoxEncryptionKeyService - id: BoxHeadset + - id: BoxHoPCircuitboards + - id: BoxHoPStamps - id: BoxID - id: BoxPDA - id: CigarGoldCase @@ -134,12 +128,6 @@ - id: ClothingNeckGoldmedal - id: DoorRemoteService - id: HoPIDCard - - id: IDComputerCircuitboard - - id: FundingAllocationComputerCircuitboard - - id: CargoRequestServiceComputerCircuitboard - - id: RubberStampApproved - - id: RubberStampDenied - - id: RubberStampHop - id: WeaponDisabler - id: ClothingEyesHudCommand @@ -167,7 +155,7 @@ - id: ClothingHandsGlovesColorYellow - id: ClothingHeadsetAltEngineering - id: DoorRemoteEngineering - - id: CargoRequestEngineeringComputerCircuitboard + - id: BoxCECircuitboards - id: RCD - id: RCDAmmo - id: RubberStampCE @@ -226,8 +214,7 @@ - id: DoorRemoteMedical - id: HandheldCrewMonitor - id: Hypospray - - id: MedicalTechFabCircuitboard - - id: CargoRequestMedicalComputerCircuitboard + - id: BoxCMOCircuitboards - id: MedkitFilled - id: RubberStampCMO - id: MedTekCartridge @@ -274,15 +261,11 @@ children: - id: Intellicard - id: BoxEncryptionKeyScience - - id: CircuitImprinterMachineCircuitboard + - id: BoxRDCircuitboards - id: ClothingBeltUtilityFilled - id: ClothingHeadsetAltScience - id: DoorRemoteResearch - id: HandTeleporter - - id: ProtolatheMachineCircuitboard - - id: ResearchComputerCircuitboard - - id: CargoRequestScienceComputerCircuitboard - - id: StationAiFixerCircuitboard - id: RubberStampRd # Hardsuit table, used for suit storage as well @@ -339,8 +322,7 @@ - id: DoorRemoteSecurity - id: HoloprojectorSecurity - id: RubberStampHos - - id: SecurityTechFabCircuitboard - - id: CargoRequestSecurityComputerCircuitboard + - id: BoxHoSCircuitboards - id: WeaponDisabler - id: WeaponTaser - id: WantedListCartridge diff --git a/Resources/Prototypes/Entities/Objects/Misc/box.yml b/Resources/Prototypes/Entities/Objects/Misc/box.yml index edb1a81239..73d72e4fb0 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/box.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/box.yml @@ -21,9 +21,45 @@ graph: BoxCardboard node: boxcardboard containers: - - entity_storage + - storagebase - type: PhysicalComposition materialComposition: Cardboard: 100 - type: StaticPrice price: 10 + +- type: entity + name: circuit tote + id: ToteBase + parent: BoxBase + description: A large tote for carrying circuit boards. + components: + - type: Sprite + layers: + - state: tote-0 + map: ["enum.StorageFillLayers.Fill"] + - state: circuit + - type: Appearance + - type: StorageFillVisualizer + maxFillLevels: 3 + fillBaseName: tote + - type: Storage + maxItemSize: Small + grid: + - 0,0,5,2 + whitelist: + components: + - MachineBoard + - Circuitboard + - type: Construction + graph: ToteBase + node: totebase + - type: PhysicalComposition + materialComposition: + Cardboard: 75 + Cloth: 25 + - type: StaticPrice + price: 15 + - type: Tag + tags: + - ToteBase diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/storage/cardboardbox.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/storage/cardboardbox.yml index 527f6b5247..9cabb7e441 100644 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/storage/cardboardbox.yml +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/storage/cardboardbox.yml @@ -2,14 +2,28 @@ id: BoxCardboard start: start graph: - - node: start - edges: - - to: boxcardboard - steps: - - material: Cardboard - amount: 1 - doAfter: 4 + - node: start + edges: + - to: boxcardboard + steps: + - material: Cardboard + amount: 1 + doAfter: 4 + - node: boxcardboard + entity: BoxCardboard - - - node: boxcardboard - entity: BoxCardboard \ No newline at end of file +- type: constructionGraph + id: ToteBase + start: start + graph: + - node: start + edges: + - to: totebase + steps: + - material: Cardboard + amount: 1 + - material: Cloth + amount: 1 + doAfter: 4 + - node: totebase + entity: ToteBase diff --git a/Resources/Prototypes/Recipes/Crafting/crates.yml b/Resources/Prototypes/Recipes/Crafting/crates.yml index ebd0261b3a..0ba076b36b 100644 --- a/Resources/Prototypes/Recipes/Crafting/crates.yml +++ b/Resources/Prototypes/Recipes/Crafting/crates.yml @@ -57,6 +57,15 @@ category: construction-category-storage objectType: Item +- type: construction + id: ToteBase + name: construction-recipe-box-tote + graph: ToteBase + startNode: start + targetNode: totebase + category: construction-category-storage + objectType: Item + - type: construction id: FoodBoxPizza graph: FoodBoxPizza diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index fde9057d64..184daa337a 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1424,6 +1424,9 @@ - type: Tag id: Torch +- type: Tag + id: ToteBase + - type: Tag id: ToyRubberDuck diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/meta.json b/Resources/Textures/Objects/Storage/boxes.rsi/meta.json index 64c3fc85c1..000059bf90 100644 --- a/Resources/Textures/Objects/Storage/boxes.rsi/meta.json +++ b/Resources/Textures/Objects/Storage/boxes.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from vgstation at commit https://github.com/vgstation-coders/vgstation13/commit/ca674eff9d23e04357b7609ef7e07eadfc1a993f and modified by Flareguy (github), encryptokey was taken from Baystation12 at https://github.com/infinitystation/Baystation12/blob/073f678cdce92edb8fcd55f9ffc9f0523bf31506/icons/obj/radio.dmi and modified by lapatison. boxwidetoy, shelltoy, swab, flare, inflatable, trashbag, magazine, holo and forensic created by potato1234x (github) for ss14 based on toys.rsi, mouth_swab.rsi, flare.rsi, inflatable_wall.rsi, trashbag.rsi, caseless_pistol_mag.rsi, guardians.rsi and bureaucracy.rsi respectively, candle and darts created by TheShuEd for ss14, throwing_knives and vials was drawn by Ubaser, evidence_markers by moomoobeef, nitrogentank modified from extendedtank by Errant, agrichemkit by Cerol, modified by ps3moira (github). sechud renamed to secglasses, new sechud, sunglasses by K-Dynamic (github), trigger by IProduceWidgets, utensils by gentleman-bird (github).", + "copyright": "Taken from vgstation at commit https://github.com/vgstation-coders/vgstation13/commit/ca674eff9d23e04357b7609ef7e07eadfc1a993f and modified by Flareguy (github), encryptokey was taken from Baystation12 at https://github.com/infinitystation/Baystation12/blob/073f678cdce92edb8fcd55f9ffc9f0523bf31506/icons/obj/radio.dmi and modified by lapatison. boxwidetoy, shelltoy, swab, flare, inflatable, trashbag, magazine, holo and forensic created by potato1234x (github) for ss14 based on toys.rsi, mouth_swab.rsi, flare.rsi, inflatable_wall.rsi, trashbag.rsi, caseless_pistol_mag.rsi, guardians.rsi and bureaucracy.rsi respectively, candle and darts created by TheShuEd for ss14, throwing_knives and vials was drawn by Ubaser, evidence_markers by moomoobeef, nitrogentank modified from extendedtank by Errant, agrichemkit by Cerol, modified by ps3moira (github). sechud renamed to secglasses, new sechud, sunglasses by K-Dynamic (github), trigger by IProduceWidgets, utensils by gentleman-bird (github). stamp, totes modified from box by Mixelz.", "size": { "x": 32, "y": 32 @@ -136,6 +136,9 @@ { "name": "solution_trays" }, + { + "name": "stamp" + }, { "name": "sterile" }, @@ -182,6 +185,15 @@ "name": "hug-inhand-right", "directions": 4 }, + { + "name": "tote-0" + }, + { + "name": "tote-1" + }, + { + "name": "tote-2" + }, { "name": "shelltoy" }, diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/stamp.png b/Resources/Textures/Objects/Storage/boxes.rsi/stamp.png new file mode 100644 index 0000000000000000000000000000000000000000..812c721f20b47490aad4dc2a0e5faf5e9e609280 GIT binary patch literal 1482 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 a0)St^d04k?sm@pc0000 zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|ck|ZY#{O1%tLP9uzZ{XuQMOF87&&LZR`?4Ki{ud1aw;hucw&i#D;oJYpR!9j;x6~YR~NpYeCPfAqWa&HusEfjPTWGIa_IjN%Rvv_*Oi)Ic^3ykb)cKt^ ztkoSNI`SPW*v0PGFvFSi5~Dx}t&2C^0N>t={^P-a;HqFyH_RCutVcUlG^H2clFhSV zoT5HMh=Pqv0U*NK3S&sXz>!Fl5*@~DM8GkFpbE=bA~!HVsytvMN0G$AIJ2*fIYxUd zD<^g_aubM9M3aG=A{AuCsPG?)89r21G^%P+(;T#DO_E~Ll#(S+a@EA5sU6lQa?T~!!bOk+wWMMtmr`owP_a;ju8Q#$lEzJ1Y}!(@mRo7H!+m<}+Ecfld+BxX zkbyKY(y)<78Ff;a$P_b9ooU+4v&_2SYfDyKy3(?hS6TJW+QsUd_ZzIy#Tsv>e4O1` zgEW}kRFJ0=bs9Xi_kF#FNE+-bJWz9jy30+oYowIs7l;A<5_rHf165CPQ%S(ffNzImfmmwU|>X-Ni|K#eK(Uagp_f;|%c*j3%;3#-h{> ztM*F|?w&=ptth_iD6p^2S_yd6v5;Z%K-O$oagoqL!z2Kw5-DP%>Q~gS)yR5iofv8E zJ=qA*V*{YhHR4P?CKlwW<{V6R5JvLdl}ZJ9({EZQ_;lY{2Z6N*2Xqaf-P+1!&<3+E zWa3-_vM{#X9=2Re(>P~0oj`?7P{PX)+MqbXI2LlPtIoCggs58aoz!8NFW`k`re?F}Cr{B?W7?*RN*hmQ?D z)@J*l!63GeK|gDU=Z-@?77U^4ZUS#x0}gkV{&#gGTz+P9ec}+SNCo0^;;2p+B!1+& z?C=}svdsd|4C&eQJaLFvEcdY7!>pn!#M8v#f}&EskaM`ed5g1BYp~8e`3nO@btS`f znqx>{2}z_NLPi5s)L5$P9S=rze9Hd9!5FEkW zgHxnTj5SgQ28P-!sF6C9A*3xJVkZS<@h?S*o}c`G@7b{-Dk>^!WF;X~1O~bKy*mJir02a+_^V*ERKV7u&N$(D{=2FT*Wjp7PQsSJ$ z7?TX?!1nysG`(N!s{)wh+b@+K#<+sFyMj>g&Lv3huXo?4hXXIa$9M#A%w{uItJQD- zDJ4oNs;Xi>p9fW=wI9iNX$=C-`1Q;E_y9w9p zHP%|JwS?sUIe=0Mtu;ajuenm{$7$%hZ_*IT?-O^auIt@z>AQ%007+F<|8@&{H(^

cB literal 0 HcmV?d00001 -- 2.51.2