From 937326460f8471692b9d61ee9f958a412b587c43 Mon Sep 17 00:00:00 2001 From: Sparlight Date: Sat, 14 Jun 2025 10:09:05 -0600 Subject: [PATCH] Add pet bag - wearable backpack for pets (#37440) * Add pet bag * Trailing whitespace moment * make the linter happy * Fix trailing whitespace concern. * Fix Construction component oopsy-daisy * yml guideline moment * remove weird extra whitespace * make the maintainer happy * Adjusted bag visuals based on feedback * Allow the fox aghost admin to use pet bags --- Resources/Locale/en-US/recipes/tags.ftl | 3 ++ .../Entities/Clothing/Back/backpacks.yml | 4 +++ .../Entities/Clothing/Back/specific.yml | 23 ++++++++++++++++ .../arachnid_inventory_template.yml | 5 +++- .../diona_inventory_template.yml | 5 +++- .../human_inventory_template.yml | 5 +++- .../smartcorgi_inventory_template.yml | 12 ++++++++ .../Crafting/Graphs/improvised/petbag.yml | 19 +++++++++++++ .../Recipes/Crafting/improvised.yml | 8 ++++++ Resources/Prototypes/tags.yml | 6 ++++ .../Specific/petbag.rsi/equipped-BACKPACK.png | Bin 0 -> 822 bytes .../Back/Specific/petbag.rsi/icon.png | Bin 0 -> 1211 bytes .../Back/Specific/petbag.rsi/inhand-left.png | Bin 0 -> 1026 bytes .../Back/Specific/petbag.rsi/inhand-right.png | Bin 0 -> 1028 bytes .../Back/Specific/petbag.rsi/meta.json | 26 ++++++++++++++++++ 15 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 Resources/Prototypes/Recipes/Crafting/Graphs/improvised/petbag.yml create mode 100644 Resources/Textures/Clothing/Back/Specific/petbag.rsi/equipped-BACKPACK.png create mode 100644 Resources/Textures/Clothing/Back/Specific/petbag.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Back/Specific/petbag.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Specific/petbag.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Back/Specific/petbag.rsi/meta.json diff --git a/Resources/Locale/en-US/recipes/tags.ftl b/Resources/Locale/en-US/recipes/tags.ftl index 74b58d9278..11722a6f5a 100644 --- a/Resources/Locale/en-US/recipes/tags.ftl +++ b/Resources/Locale/en-US/recipes/tags.ftl @@ -145,3 +145,6 @@ construction-graph-tag-fire-helmet = fire helmet # salvage construction-graph-tag-spationaut-hardsuit = spationaut hardsuit + +# clothing +construction-graph-tag-backpack = backpack diff --git a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml index e2d3c209ea..4d406e9508 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml @@ -30,6 +30,10 @@ delay: 0.5 - type: ExplosionResistance damageCoefficient: 0.9 + - type: Tag + tags: + - WhitelistChameleon + - Backpack - type: entity parent: ClothingBackpack diff --git a/Resources/Prototypes/Entities/Clothing/Back/specific.yml b/Resources/Prototypes/Entities/Clothing/Back/specific.yml index 9ff6871b3c..ff06b93bbf 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/specific.yml @@ -75,3 +75,26 @@ solution: tank - type: ExaminableSolution solution: tank + +- type: entity + parent: ClothingBackpack + id: ClothingBagPet + name: pet bag + description: A small bag designed for use by pets and small animals. + components: + - type: Sprite + sprite: Clothing/Back/Specific/petbag.rsi + - type: Storage + grid: + - 1,0,2,0 + - 0,1,2,3 + - 6,0,7,0 + - 6,1,8,3 + - type: Tag + tags: + - WhitelistChameleon + - CorgiWearable + - PetOnly + - type: Construction + graph: ClothingBagPet + node: bagPet diff --git a/Resources/Prototypes/InventoryTemplates/arachnid_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/arachnid_inventory_template.yml index e3ac371ebd..88af532759 100644 --- a/Resources/Prototypes/InventoryTemplates/arachnid_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/arachnid_inventory_template.yml @@ -1,4 +1,4 @@ -- type: inventoryTemplate +- type: inventoryTemplate id: arachnid slots: - name: shoes @@ -81,6 +81,9 @@ uiWindowPos: 3,0 strippingWindowPos: 0,5 displayName: Back + blacklist: + tags: + - PetOnly - name: pocket4 slotTexture: web diff --git a/Resources/Prototypes/InventoryTemplates/diona_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/diona_inventory_template.yml index 619aefddc3..b1e9253729 100644 --- a/Resources/Prototypes/InventoryTemplates/diona_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/diona_inventory_template.yml @@ -1,4 +1,4 @@ -#human but no shoes +#human but no shoes - type: inventoryTemplate id: diona slots: @@ -115,3 +115,6 @@ uiWindowPos: 3,0 strippingWindowPos: 0,5 displayName: Back + blacklist: + tags: + - PetOnly diff --git a/Resources/Prototypes/InventoryTemplates/human_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/human_inventory_template.yml index ff1447931f..ed7b4e0dc1 100644 --- a/Resources/Prototypes/InventoryTemplates/human_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/human_inventory_template.yml @@ -1,4 +1,4 @@ -- type: inventoryTemplate +- type: inventoryTemplate id: human slots: - name: shoes @@ -121,3 +121,6 @@ uiWindowPos: 3,0 strippingWindowPos: 0,5 displayName: Back + blacklist: + tags: + - PetOnly diff --git a/Resources/Prototypes/InventoryTemplates/smartcorgi_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/smartcorgi_inventory_template.yml index 069637800a..a775b6373b 100644 --- a/Resources/Prototypes/InventoryTemplates/smartcorgi_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/smartcorgi_inventory_template.yml @@ -74,3 +74,15 @@ whitelist: tags: - CorgiWearable + - name: back + slotTexture: back + fullTextureName: template_small + slotFlags: BACK + slotGroup: SecondHotbar + stripTime: 6 + uiWindowPos: 3,0 + strippingWindowPos: 0,5 + displayName: Back + whitelist: + tags: + - CorgiWearable diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/petbag.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/petbag.yml new file mode 100644 index 0000000000..61f43e5834 --- /dev/null +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/petbag.yml @@ -0,0 +1,19 @@ +- type: constructionGraph + id: ClothingBagPet + start: start + graph: + - node: start + edges: + - to: bagPet + steps: + - tag: Backpack + name: construction-graph-tag-backpack + icon: + sprite: Clothing/Back/Backpacks/backpack.rsi + state: icon + doAfter: 1 + - material: Cable + amount: 10 + doAfter: 1 + - node: bagPet + entity: ClothingBagPet diff --git a/Resources/Prototypes/Recipes/Crafting/improvised.yml b/Resources/Prototypes/Recipes/Crafting/improvised.yml index dd4393b77c..d7e03c5257 100644 --- a/Resources/Prototypes/Recipes/Crafting/improvised.yml +++ b/Resources/Prototypes/Recipes/Crafting/improvised.yml @@ -173,3 +173,11 @@ targetNode: scraphelmet category: construction-category-clothing objectType: Item + +- type: construction + id: ClothingBagPet + graph: ClothingBagPet + startNode: start + targetNode: bagPet + category: construction-category-clothing + objectType: Item diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index ab2aebc490..c10eb51486 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -42,6 +42,9 @@ - type: Tag id: ATVKeys +- type: Tag + id: Backpack + - type: Tag id: Balloon @@ -1037,6 +1040,9 @@ - type: Tag id: PercussionInstrument +- type: Tag + id: PetOnly + - type: Tag id: PetWearable diff --git a/Resources/Textures/Clothing/Back/Specific/petbag.rsi/equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Specific/petbag.rsi/equipped-BACKPACK.png new file mode 100644 index 0000000000000000000000000000000000000000..7e5ad06cd24ef66ab0bcc61426a7be19d81bb32d GIT binary patch literal 822 zcmV-61Ihe}P)EX>4Tx04R}tkv&MmKpe$iQ%gl!L@XlWkfFM07Zq_VRV;#q(pG5I!Q|2}Xws0h zxHt-~1qVMCs}3&Cx;nTDg5U>;yWphgA|?JWDYS_3;J6>}?mh0_0YbCFRI?`vs9McP z#baVNw<`Ky;llue7{Y|aOg)ia%)oVg-NVDzy9m#6KlkSdDtVIu9+5c8bfZSRK|H%z z(>d=GhgeBch|h^94Z0xlBiChz-#8a-7I1zHWu`aZU-)(PN!2ClS@zuE-mK1pwM zwD1wozYSbmcQknqxZDATpLEHPY{^SgC=`JAGy0|+Fn9~}tvS85_i_3FWT>m<8{ps& z7%x)xy34zJyLQ3sFd00006VoOIv00000008+zyMF)x010qNS#tmY z6iomC6ioq?%8f4o000McNliru=>-)FHU!X|a=HKj02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{009n3L_t(|+U?XmYr`-Uh2iUvEsHlp#?BW(cl{^t{(W6V zz3Vut;@B5QU+k@QJKRx+tZDYcX`|GtLy_v z&|z&#-)yC6n&WbsL`3#^KY>IYR+j8TaMyJg>zq<`Fb!b(8n=w&c(KkYRR`0#Rn=J6 z^>IDVvkb$K^&gO`L$##9;X3!rm(&3O004j0Cj^Cz(xRM)3IG5A07*qoM6N<$f?nZh Ar2qf` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Specific/petbag.rsi/icon.png b/Resources/Textures/Clothing/Back/Specific/petbag.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b0b2649334afd6509891c75ee635d02fc6d32387 GIT binary patch literal 1211 zcmV;s1VsCZP)EX>4Tx04R}tkv&MmKpe$iQ%gl!L@XlWkfFM07Zq_VRV;#q(pG5I!Q|2}Xws0h zxHt-~1qVMCs}3&Cx;nTDg5U>;yWphgA|?JWDYS_3;J6>}?mh0_0YbCFRI?`vs9McP z#baVNw<`Ky;llue7{Y|aOg)ia%)oVg-NVDzy9m#6KlkSdDtVIu9+5c8bfZSRK|H%z z(>d=GhgeBch|h^94Z0xlBiChz-#8a-7I1zHWu`aZU-)(PN!2ClS@zuE-mK1pwM zwD1wozYSbmcQknqxZDATpLEHPY{^SgC=`JAGy0|+Fn9~}tvS85_i_3FWT>m<8{ps& z7%x)xy34zJyLQ3sFd00006VoOIv00000008+zyMF)x010qNS#tmY z6iomC6ioq?%8f4o000McNliru=>-)FHZ~YbBRT*802y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00NUqL_t(o!|hhPirYXGJzgA;onqXL32dXn(}-X-3V}s+ zK&AgcKcR2%Pv{R^x?jXLQ6m*<#>F;)fICgIE7(FQvUf6i*p|J9G`@`(ap&H1&p9&^ zaEn{~=NMh9(1UB&=K3jn9#ngLje-xZT?-*FolF1#FR!lvP!9nyKBr*$Htj7U#618Y z%X0vLyIjIuE(d`)$iQ?mX%rMfKuU?P-+!R0Dp;1KbCV>&?9+?MQcZhKff)Bq?=F|f z@*LcD!5Bl9J<>$Fc~wsS zvftX2i^T$InxZUA^zHvQ4Dhq~g>TON`6lF?|D7IyQVQI5k>wcxAWc*FzOQrJrtCNA zKmfDZtg+tj_u!m&HWE0-m^NkmdB~(EP1qM<7=qibHX9jGDTS)4^yKtBWzv%p91Gv~ zb+a^0A%xJ3kbF`~c%BCUuq+Enl3WfT3`4|mtfw(G_Iu!oPX>FSD2fpst@h?H47Ev3Z7DAZ0?g-gok#B}w{7mD z3`i+Ex|%EqA;1_znx>r#i5Mb)p65X+b&!n?07IkNG*w>^^+}Q-iXyDnYeZ4hG3rHM zLjvMBPThCSDy6j6p66k;T4@lQ&8Cre5r7^>I#(?Poe1;T4UM~V&cA6=GlC$%cDsdT zS=es32!f!KQEX>4Tx04R}tkv&MmKpe$iKcpfR2P=q(WT>KG7Zq_VRV;#q(pG5I!Q|2}Xws0R zxHt-~1qVMCs}3&Cx;nTDg5U>;yWphgA|?JWDYS_3;J6>}?mh0_0p3Q1DTY4^D5|Na z;xQqcTNMJY@M8o67{`Rj3@wpf%)oVg-NVDzy9m#6KlkV8mGcGzJOXi)X}U?gK|H%@ zYMl3pL#!mq#OK75I$esb!v*z^H+Q;bwkfE-YZ-9eC zV5~^l>n`u^?(FT~Gp+u902DHE=P+&IPyhe`24YJ`L;(K)$^exwdI+un000SaNLh0L z02ECC02ECDl*)}S00007bV*G`2k8Y40SgM(Lqbac000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0005mNklZq}6b9g*D3ut!v3IB!gp`G;LfyGV zF2NamiQFKg_X>5&l7%H6y0h6!<&6$4C{vQKF@Q+aXftHy~l31L(??T*er4PhKJP? z;y8x)9%lcHm;GxrcLNr4h8bhvy+>J=9|vvBukxI8XxkRfxnQeyG1t`>LLkes;iQc* z$g&JVh*6`^X92+Ba2Q^pEawhPk_1|7BuO$k!&-|xfBH5~FZA|fIpA|fIpBD#oB zJGtl78C!et-!B#$zy|ztv+uZEYDec(ohh}KAr7wJDF)DmXu|PsbiXA(wRVsZ@ZQ6F z52aL)tFM$AYW%i#kOmlI;GBcj8d~dFe-mh}JFPXGb0_~aF}8N_n_yK{SIax+yFnY! ww(Zq&&#fKgCTOjNwKm9;;4`ngM(sc89V-_Rk?;DYz5oCK07*qoM6N<$f;39YbpQYW literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Specific/petbag.rsi/inhand-right.png b/Resources/Textures/Clothing/Back/Specific/petbag.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..25a0debc5da48560d62c9b55f0f558ed2d0df8e9 GIT binary patch literal 1028 zcmV+f1pE7mP)EX>4Tx04R}tkv&MmKpe$iKcpfR2P=q(WT>KG7Zq_VRV;#q(pG5I!Q|2}Xws0R zxHt-~1qVMCs}3&Cx;nTDg5U>;yWphgA|?JWDYS_3;J6>}?mh0_0p3Q1DTY4^D5|Na z;xQqcTNMJY@M8o67{`Rj3@wpf%)oVg-NVDzy9m#6KlkV8mGcGzJOXi)X}U?gK|H%@ zYMl3pL#!mq#OK75I$esb!v*z^H+Q;bwkfE-YZ-9eC zV5~^l>n`u^?(FT~Gp+u902DHE=P+&IPyhe`24YJ`L;(K)$^exwdI+un000SaNLh0L z02ECC02ECDl*)}S00007bV*G`2k8Y40Sp$51Bk-_000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0005oNklbWv$O?M%z!4l{7V$Fp!t4M3J9_vw%-HE07OJYL_|bH zL_|acD5YwpRQ>gM4RQZ`eZGkK>v5M&-_7rKJ48{`o(m!1bUL9d%gxdU;N|rVQ4}GB z0Q>tF+@Bx4ac}z?veqJmfGo>C8nSjZtJiyvs;c0iUKv5KM&Mm$M z^ri0P8laS_(==_DQl97SQcBZw@hNa^>h=~vAq1q9&{{)E2_eL4(%_oZ?R^XafRys0 zunaAwCE4%y_2F>9@pv4Kdo%PR)KwqW^dh&$xQU2}h=_=Yh=^!Gx^`N}c3 z)_RuNAL{!d17M7)jWO`vcYY^it%dg<#uyl5?)t1A>-!-Ckmvd2#;&>cf3$aV3RG2f ymuqe@SG$vo;Adg$UE0n$IOk@m&|`hm9lQhUAPz-`bP}-u0000