From 986ac589b44687fd2f3b71da00a52434db75abe3 Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Fri, 15 Mar 2024 10:37:12 +0300 Subject: [PATCH] Fashion is my profession - Procedural jumpsuit variants (#25888) * add color field to clothing layers * add support to randomsprite * bababa * finalize spriting work * add to game * fix * remove space * edit patelle, +1 decor variant * added only pants, some sprite fix * inflation * fix mixed * not tested commit * Revert "not tested commit" This reverts commit 4a904df3452263e87c9cb819ab5d8cf411ebe468. * naked human is fun * update * add new style * some sprite pixel tweak * Update meta.json --- .../Clothing/ClientClothingSystem.cs | 3 + Content.Client/Sprite/RandomSpriteSystem.cs | 27 ++- .../Clothing/EntitySystems/ClothingSystem.cs | 33 ++++ .../Catalog/Fills/Lockers/wardrobe_colors.yml | 50 ++---- .../Inventories/clothesmate.yml | 1 + .../Clothing/Uniforms/random_suit.yml | 169 ++++++++++++++++++ .../Entities/Clothing/Uniforms/specific.yml | 2 +- .../Entities/Structures/Furniture/dresser.yml | 12 ++ .../procedural.rsi/base_leg_short.png | Bin 0 -> 478 bytes .../procedural.rsi/base_leg_skirt.png | Bin 0 -> 388 bytes .../procedural.rsi/base_leg_skirt_long.png | Bin 0 -> 433 bytes .../procedural.rsi/base_leg_standart.png | Bin 0 -> 459 bytes .../procedural.rsi/base_torso_armless.png | Bin 0 -> 555 bytes .../procedural.rsi/base_torso_bra.png | Bin 0 -> 403 bytes .../procedural.rsi/base_torso_shirt.png | Bin 0 -> 624 bytes .../procedural.rsi/base_torso_standart.png | Bin 0 -> 698 bytes .../procedural.rsi/base_torso_standart2.png | Bin 0 -> 770 bytes .../procedural.rsi/decor_torso_armless1.png | Bin 0 -> 315 bytes .../procedural.rsi/decor_torso_armless10.png | Bin 0 -> 344 bytes .../procedural.rsi/decor_torso_armless2.png | Bin 0 -> 211 bytes .../procedural.rsi/decor_torso_armless3.png | Bin 0 -> 319 bytes .../procedural.rsi/decor_torso_armless4.png | Bin 0 -> 231 bytes .../procedural.rsi/decor_torso_armless5.png | Bin 0 -> 307 bytes .../procedural.rsi/decor_torso_armless6.png | Bin 0 -> 216 bytes .../procedural.rsi/decor_torso_armless7.png | Bin 0 -> 201 bytes .../procedural.rsi/decor_torso_armless8.png | Bin 0 -> 585 bytes .../procedural.rsi/decor_torso_armless9.png | Bin 0 -> 305 bytes .../procedural.rsi/decor_torso_bra1.png | Bin 0 -> 222 bytes .../procedural.rsi/decor_torso_bra2.png | Bin 0 -> 257 bytes .../procedural.rsi/decor_torso_bra3.png | Bin 0 -> 332 bytes .../procedural.rsi/decor_torso_bra4.png | Bin 0 -> 276 bytes .../procedural.rsi/decor_torso_bra5.png | Bin 0 -> 276 bytes .../procedural.rsi/decor_torso_shirt1.png | Bin 0 -> 310 bytes .../procedural.rsi/decor_torso_shirt2.png | Bin 0 -> 496 bytes .../procedural.rsi/decor_torso_shirt3.png | Bin 0 -> 319 bytes .../procedural.rsi/decor_torso_standart1.png | Bin 0 -> 455 bytes .../procedural.rsi/decor_torso_standart2.png | Bin 0 -> 488 bytes .../procedural.rsi/decor_torso_standart3.png | Bin 0 -> 484 bytes .../procedural.rsi/decor_torso_standart4.png | Bin 0 -> 619 bytes .../procedural.rsi/decor_torso_standart5.png | Bin 0 -> 303 bytes .../procedural.rsi/decor_torso_standart6.png | Bin 0 -> 343 bytes .../procedural.rsi/decor_torso_standart7.png | Bin 0 -> 346 bytes .../procedural.rsi/decor_torso_standart8.png | Bin 0 -> 427 bytes .../procedural.rsi/decor_torso_standart9.png | Bin 0 -> 385 bytes .../Uniforms/procedural.rsi/mask_null.png | Bin 0 -> 109 bytes .../Uniforms/procedural.rsi/meta.json | 159 ++++++++++++++++ 46 files changed, 412 insertions(+), 44 deletions(-) create mode 100644 Resources/Prototypes/Entities/Clothing/Uniforms/random_suit.yml create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/base_leg_short.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/base_leg_skirt.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/base_leg_skirt_long.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/base_leg_standart.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/base_torso_armless.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/base_torso_bra.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/base_torso_shirt.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/base_torso_standart.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/base_torso_standart2.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless1.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless10.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless2.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless3.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless4.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless5.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless6.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless7.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless8.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless9.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_bra1.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_bra2.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_bra3.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_bra4.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_bra5.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_shirt1.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_shirt2.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_shirt3.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart1.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart2.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart3.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart4.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart5.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart6.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart7.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart8.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart9.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/mask_null.png create mode 100644 Resources/Textures/Clothing/Uniforms/procedural.rsi/meta.json diff --git a/Content.Client/Clothing/ClientClothingSystem.cs b/Content.Client/Clothing/ClientClothingSystem.cs index ed95cf240a..fbe9d5ec5b 100644 --- a/Content.Client/Clothing/ClientClothingSystem.cs +++ b/Content.Client/Clothing/ClientClothingSystem.cs @@ -281,6 +281,9 @@ public sealed class ClientClothingSystem : ClothingSystem // note that every insertion requires reshuffling & remapping all the existing layers. sprite.AddBlankLayer(index); sprite.LayerMapSet(key, index); + + if (layerData.Color != null) + sprite.LayerSetColor(key, layerData.Color.Value); } else index = sprite.LayerMapReserveBlank(key); diff --git a/Content.Client/Sprite/RandomSpriteSystem.cs b/Content.Client/Sprite/RandomSpriteSystem.cs index 9b800b3c78..b9be2a44b4 100644 --- a/Content.Client/Sprite/RandomSpriteSystem.cs +++ b/Content.Client/Sprite/RandomSpriteSystem.cs @@ -1,3 +1,5 @@ +using Content.Client.Clothing; +using Content.Shared.Clothing.Components; using Content.Shared.Sprite; using Robust.Client.GameObjects; using Robust.Shared.GameStates; @@ -8,6 +10,7 @@ namespace Content.Client.Sprite; public sealed class RandomSpriteSystem : SharedRandomSpriteSystem { [Dependency] private readonly IReflectionManager _reflection = default!; + [Dependency] private readonly ClientClothingSystem _clothing = default!; public override void Initialize() { @@ -31,10 +34,29 @@ public sealed class RandomSpriteSystem : SharedRandomSpriteSystem component.Selected.Add(layer.Key, layer.Value); } - UpdateAppearance(uid, component); + UpdateSpriteComponentAppearance(uid, component); + UpdateClothingComponentAppearance(uid, component); } - private void UpdateAppearance(EntityUid uid, RandomSpriteComponent component, SpriteComponent? sprite = null) + private void UpdateClothingComponentAppearance(EntityUid uid, RandomSpriteComponent component, ClothingComponent? clothing = null) + { + if (!Resolve(uid, ref clothing, false)) + return; + + if (clothing.ClothingVisuals == null) + return; + + foreach (var slotPair in clothing.ClothingVisuals) + { + foreach (var keyColorPair in component.Selected) + { + _clothing.SetLayerColor(clothing, slotPair.Key, keyColorPair.Key, keyColorPair.Value.Color); + _clothing.SetLayerState(clothing, slotPair.Key, keyColorPair.Key, keyColorPair.Value.State); + } + } + } + + private void UpdateSpriteComponentAppearance(EntityUid uid, RandomSpriteComponent component, SpriteComponent? sprite = null) { if (!Resolve(uid, ref sprite, false)) return; @@ -55,7 +77,6 @@ public sealed class RandomSpriteSystem : SharedRandomSpriteSystem continue; } } - sprite.LayerSetState(index, layer.Value.State); sprite.LayerSetColor(index, layer.Value.Color ?? Color.White); } diff --git a/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs b/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs index 50a1d93a6c..f189db005b 100644 --- a/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs +++ b/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs @@ -217,5 +217,38 @@ public abstract class ClothingSystem : EntitySystem Dirty(uid, clothing); } + public void SetLayerColor(ClothingComponent clothing, string slot, string mapKey, Color? color) + { + if (clothing.ClothingVisuals == null) + return; + + foreach (var layer in clothing.ClothingVisuals[slot]) + { + if (layer.MapKeys == null) + return; + + if (!layer.MapKeys.Contains(mapKey)) + continue; + + layer.Color = color; + } + } + public void SetLayerState(ClothingComponent clothing, string slot, string mapKey, string state) + { + if (clothing.ClothingVisuals == null) + return; + + foreach (var layer in clothing.ClothingVisuals[slot]) + { + if (layer.MapKeys == null) + return; + + if (!layer.MapKeys.Contains(mapKey)) + continue; + + layer.State = state; + } + } + #endregion } diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/wardrobe_colors.yml b/Resources/Prototypes/Catalog/Fills/Lockers/wardrobe_colors.yml index 0c7661452a..2038ef0013 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/wardrobe_colors.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/wardrobe_colors.yml @@ -24,46 +24,6 @@ components: - type: StorageFill contents: - - id: ClothingUniformJumpsuitColorWhite - prob: 0.25 - - id: ClothingUniformJumpskirtColorWhite - prob: 0.25 - - id: ClothingUniformJumpsuitColorBlue - prob: 0.25 - - id: ClothingUniformJumpskirtColorBlue - prob: 0.25 - - id: ClothingUniformJumpsuitColorYellow - prob: 0.25 - - id: ClothingUniformJumpskirtColorYellow - prob: 0.25 - - id: ClothingUniformJumpsuitColorGreen - prob: 0.25 - - id: ClothingUniformJumpskirtColorGreen - prob: 0.25 - - id: ClothingUniformJumpsuitColorOrange - prob: 0.25 - - id: ClothingUniformJumpskirtColorOrange - prob: 0.25 - - id: ClothingUniformJumpsuitColorPink - prob: 0.25 - - id: ClothingUniformJumpskirtColorPink - prob: 0.25 - - id: ClothingUniformJumpsuitColorRed - prob: 0.25 - - id: ClothingUniformJumpskirtColorRed - prob: 0.25 - - id: ClothingUniformJumpsuitColorDarkBlue - prob: 0.25 - - id: ClothingUniformJumpskirtColorDarkBlue - prob: 0.25 - - id: ClothingUniformJumpsuitColorTeal - prob: 0.25 - - id: ClothingUniformJumpskirtColorTeal - prob: 0.25 - - id: ClothingUniformJumpsuitColorPurple - prob: 0.25 - - id: ClothingUniformJumpskirtColorPurple - prob: 0.25 - id: ClothingShoesColorBlack amount: 1 - id: ClothingShoesColorBrown @@ -74,6 +34,16 @@ prob: 0.4 - id: ClothingOuterCoatGentle prob: 0.3 + - id: ClothingUniformRandomShorts + amount: 3 + - id: ClothingUniformRandomArmless + amount: 5 + - id: ClothingUniformRandomStandart + amount: 5 + - id: ClothingUniformRandomBra + amount: 5 + - id: ClothingUniformRandomShirt + amount: 4 - type: entity id: WardrobeYellowFilled diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml index 51d031a435..6d387eb877 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml @@ -6,6 +6,7 @@ ClothingBackpackDuffel: 5 ClothingBackpackSatchel: 3 ClothingBackpackSatchelLeather: 2 + ClothingRandomSpawner: 8 ClothingHeadHatBeret: 4 ClothingHeadBandBlack: 2 ClothingHeadBandBlue: 2 diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/random_suit.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/random_suit.yml new file mode 100644 index 0000000000..88278077b5 --- /dev/null +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/random_suit.yml @@ -0,0 +1,169 @@ + +- type: entity + parent: ClothingUniformBase + id: ClothingUniformRandom + abstract: true + description: Generated by neural networks based on the latest fashion trends. + suffix: Random visual + components: + - type: SuitSensor + - type: Sprite + sprite: Clothing/Uniforms/procedural.rsi + layers: + - state: base_torso_standart + map: [ "torso" ] + - state: base_leg_standart + map: [ "leg" ] + - state: mask_null + map: [ "decor" ] + - state: mask_null + map: [ "overlay" ] + - type: Clothing + femaleMask: UniformTop + maleMask: UniformTop + sprite: Clothing/Uniforms/procedural.rsi + clothingVisuals: + jumpsuit: + - state: base_torso_standart + map: [ "torso" ] + - state: base_leg_standart + map: [ "leg" ] + - state: mask_null + map: [ "decor" ] + - state: mask_null + map: [ "overlay" ] + +- type: entity + parent: ClothingUniformRandom + id: ClothingRandomSpawner + name: random colorful costume + components: + - type: RandomSpawner + offset: 0 + prototypes: + - ClothingUniformRandomArmless + - ClothingUniformRandomStandart + - ClothingUniformRandomBra + - ClothingUniformRandomShorts + - ClothingUniformRandomShirt + +- type: entity + parent: ClothingUniformRandom + id: ClothingUniformRandomArmless + name: colorful hands-free costume + components: + - type: RandomSprite + available: + - torso: + base_torso_armless: Sixteen + leg: + base_leg_standart: Sixteen + base_leg_short: Sixteen + base_leg_skirt: Sixteen + base_leg_skirt_long: Sixteen + decor: + decor_torso_armless1: Sixteen + decor_torso_armless2: Sixteen + decor_torso_armless3: Sixteen + decor_torso_armless4: Sixteen + decor_torso_armless5: Sixteen + decor_torso_armless6: Sixteen + decor_torso_armless7: Sixteen + decor_torso_armless8: Sixteen + decor_torso_armless9: Sixteen + decor_torso_armless10: Sixteen + mask_null: "" + +- type: entity + parent: ClothingUniformRandom + id: ClothingUniformRandomStandart + name: colorful costume + components: + - type: RandomSprite + available: + - torso: + base_torso_standart: Sixteen + base_torso_standart2: Sixteen + leg: + base_leg_standart: Sixteen + base_leg_short: Sixteen + base_leg_skirt: Sixteen + base_leg_skirt_long: Sixteen + decor: + decor_torso_armless1: Sixteen + decor_torso_armless2: Sixteen + decor_torso_armless3: Sixteen + decor_torso_armless4: Sixteen + decor_torso_armless5: Sixteen + decor_torso_armless6: Sixteen + decor_torso_armless7: Sixteen + decor_torso_armless8: Sixteen + decor_torso_armless9: Sixteen + decor_torso_armless10: Sixteen + decor_torso_standart1: Sixteen + decor_torso_standart2: Sixteen + decor_torso_standart3: Sixteen + decor_torso_standart4: Sixteen + decor_torso_standart5: Sixteen + decor_torso_standart6: Sixteen + decor_torso_standart7: Sixteen + decor_torso_standart8: Sixteen + decor_torso_standart9: Sixteen + mask_null: "" + +- type: entity + parent: ClothingUniformRandom + id: ClothingUniformRandomBra + name: colorful bra + components: + - type: RandomSprite + available: + - torso: + base_torso_bra: Sixteen + leg: + base_leg_standart: Sixteen + base_leg_short: Sixteen + base_leg_skirt: Sixteen + base_leg_skirt_long: Sixteen + decor: + decor_torso_bra1: Sixteen + decor_torso_bra2: Sixteen + decor_torso_bra3: Sixteen + decor_torso_bra4: Sixteen + decor_torso_bra5: Sixteen + mask_null: "" + +- type: entity + parent: ClothingUniformRandom + id: ClothingUniformRandomShorts + name: colorful pants + components: + - type: RandomSprite + available: + - torso: + mask_null: "" + leg: + base_leg_standart: Sixteen + base_leg_short: Sixteen + base_leg_skirt: Sixteen + base_leg_skirt_long: Sixteen + +- type: entity + parent: ClothingUniformRandom + id: ClothingUniformRandomShirt + name: colorful costume + components: + - type: RandomSprite + available: + - torso: + base_torso_armless: Sixteen + mask_null: "" + leg: + base_leg_standart: Sixteen + base_leg_short: Sixteen + decor: + base_torso_shirt: Sixteen + overlay: + decor_torso_shirt1: Sixteen + decor_torso_shirt2: Sixteen + decor_torso_shirt3: Sixteen \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/specific.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/specific.yml index 19793f873f..d7a5e2b787 100644 --- a/Resources/Prototypes/Entities/Clothing/Uniforms/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/specific.yml @@ -20,4 +20,4 @@ - type: UserInterface interfaces: - key: enum.ChameleonUiKey.Key - type: ChameleonBoundUserInterface + type: ChameleonBoundUserInterface \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Structures/Furniture/dresser.yml b/Resources/Prototypes/Entities/Structures/Furniture/dresser.yml index 2caa4010ca..fa029c035a 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/dresser.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/dresser.yml @@ -53,6 +53,18 @@ components: - type: StorageFill contents: + - id: ClothingUniformRandomArmless + prob: 0.05 + orGroup: dressermainloot + - id: ClothingUniformRandomStandart + prob: 0.05 + orGroup: dressermainloot + - id: ClothingUniformRandomBra + prob: 0.05 + orGroup: dressermainloot + - id: ClothingUniformRandomShorts + prob: 0.05 + orGroup: dressermainloot - id: ClothingNeckLGBTPin prob: 0.06 orGroup: dressermainloot diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/base_leg_short.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/base_leg_short.png new file mode 100644 index 0000000000000000000000000000000000000000..e3b74ba7b652a7b4dd97d2c01b185906c403b8e5 GIT binary patch literal 478 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zXL!0ehE&XX zd&@Ad*+7KtfqiJXdt`)8t7fsSZKis8L&kKu=V=ihD3jUpD&TlS?hX7%@ zbNf4Y9bPEC`rzcQ-GzFg{Vx=v8nLC0>wgldb2=JTe`FLg+gahKt1*ZeW{ z?Z+K$?vLjSy>Iv+&)xX`$B%?aXTNHjZ1yd=v+o3ZJ@uKIyOvE!N$3}w&V%b)R;A5+ Q4~#GdPgg&ebxsLQ0M+f-GXMYp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/base_leg_skirt.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/base_leg_skirt.png new file mode 100644 index 0000000000000000000000000000000000000000..3341ff44181958d1c0505bab85055aacb21222c4 GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z?L1u^Ln`LH zy=B+CxR)WT;(SIFc)6wTSw*gHwjjFI*Igq6!A!o&{0Nj`q} ze>My6&-whGkC{7Q;NR5#8An4yTW!uSoZ=KY&EVLA_tj@U_vGGASbNmOH?aEHv+Je3 zrLhaA{3?=db2O39z0LMKrr=zwz@f`mEyZtb<4t<#^mD%9!>H_($g&?cr;Re!Dqdw- z`R6h(LxYKLeAPd#&OgDt6(#qp`%@$NuIrp;dcXHXxWdf(Uk563R&8bba3}Y@EklBg zJA=bz6Z<*=&!_I>$DVV0(3&2(#H`$t^RbZ&a}6KP=qix-Ma|^bL)&WMz$t_M1sFQzvr-K02TE zt+sc;r0<{Hb3QSf3fclL$;{bH(y6(OC&3p zvaI}bl$oJHfg^6$KdsI`uFMr?wf?U(C!DFbVvv8g{C4SGXTi0myVfy(_^X{`$@21# zYyO%0sx>?Kzp(z zo}Js9Z6^o^7aP~!$ij(3cnxX)#i>i!#j2jbte zdz4t5scQ&ncYX_E9;s_cX}=2;Er&1t*&%1jYe_ Mr>mdKI;Vst0MVkm%K!iX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/base_leg_standart.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/base_leg_standart.png new file mode 100644 index 0000000000000000000000000000000000000000..7140a3869c35f83f483a4e62161d3f9362777f39 GIT binary patch literal 459 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zTRmMILn`LH zy>+*@ML~f5!^a}u8%OsgCyA=i$&**iaJc}1$7B1_>P|C48r&A3~= z=ldj0*B-+!6*iwtjq}$n{pc#~;9|n#ET@0k$!leeZQtUOU0RxI#?L=)(g`i@G+)4T z?9A*X>jLshq^AF8>FmFyGGpeNt-d=s!vnmY9*xSDUiAD?c74Mu-XGc<7%#EcS>d&i literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/base_torso_armless.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/base_torso_armless.png new file mode 100644 index 0000000000000000000000000000000000000000..2864e1c04e7ffffc1201bf275f517c8af15615ad GIT binary patch literal 555 zcmV+`0@VG9P)Px$WTh%x|s_5!?XhTqmq=cptIzgUbsgTLk$v*ulm)a$^Qm$lO5KFmJKt+E)KnCO zpVB7%1+3TWD4#WGJl+(mpwwA|8X%?Ql%w%BV+;*F45Iu3UeSbDnS&ajl)8_m&*yWL zg1*CNIp+r7mJ`%~_F29x%eT~{@g{3+=f1$uD^Zj~AoUFrF*65W1~;1x5fSBiPFa=> tF6cY9+bwCW>2|v%$pZiY008)bJ^^l#YI1c*5!nC$002ovPDHLkV1i8;`RV`w literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/base_torso_bra.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/base_torso_bra.png new file mode 100644 index 0000000000000000000000000000000000000000..03c8d493fb88114d79435e21694863f72ae151b5 GIT binary patch literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zeLYl0)%G|Fh|-E9b3OufH^T|EuOHf6lyc{ZUc} zauXCZ{68uo>>l5e@$uWPImL(HGutS)2t@ZE>y+Yi|9Qc-(S*r8Vb(Y;@4b*()@#APQ)#M9N!Wt~$(695CdvhM%@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/base_torso_shirt.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/base_torso_shirt.png new file mode 100644 index 0000000000000000000000000000000000000000..b03f3942795950cc1eac9d8ec84ecf03a3286f8d GIT binary patch literal 624 zcmV-$0+0QPP)Px%DoI2^RCt{2n!%03AP_|-tG)Y3DsU=sH!g=V(gBsw0UW7d_OKd@B?KEAY-RPI zltXNs{}}^^{2>AW00000U=?dEGc)JzF*93hv-eu+=RAmZSA7vK8R%IA=NvOLJLeWH z!CK4l{pRAapopdB(lNdC<08mMCf`M0Yt7ENKO(6>Y*5B(t(%z8T5}H3NhdFC)xWI` zaL#cEfryBPVIZZ{?}NA7@~mtL?>)t1@Av!a@9)*mu}A-FOs}Dh=~3yFA)nN(BttqyzIB= z=h&lP+yW`an3~}qK~({WXgOqZ*LxO7mUl@%9=Db6J!Vo9?@aZgrQYThpta^{nuzFi zE6De0nyTNx)oea6;)%`k{PNt|{T9S8A%`)hTD#kc-HXx+>s5FF00000000000PvsK z^%s)lb*=KhBb@FfO<{9!`5EN;1SCT1My^lbiXz05KiZp6l?;vJNJR9K(2nDHYB&-? zSiA`0DZRc%RRQ9Or{PE`v}{eP6?=IXpEn`y#z?y}&fWs8d{k$HQeioHz4yhgjh@6_ z_EJ@V=krOqXew?^IfI;*T&qo}tK;!CBWH8e!=VDSFmSc@;Q|O}c8|2wYEpnJRzWMx zT^%AsuW#YZXnLOKTN;y>`UXl=7eFR{brzrMe_Ce>00000uIC3-C@;pA$AyCc0000< KMNUMnLSTZfaw3}m literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/base_torso_standart.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/base_torso_standart.png new file mode 100644 index 0000000000000000000000000000000000000000..1db1be4c6828dbf8fae63cde33ef4e3f72a0e29b GIT binary patch literal 698 zcmV;r0!96aP)Px%bV)=(RCt{2nlY}UFc60SU2RVlMY#eru0uhU(~ukF6i9Fij*tq8q;^9jQ2KyK z!wJ02juuS9VgfvA-+WSpurc3wAWoz)z%UHMFbuMJ8ZXG*tU(s;ehk`jN9#os;cmKJaD~U z7yBpZIF9l>4_TJMah%>UNfKmPwwRw`7=~dOhG7_nVHk#C80LFIMbWR0gLqZ4AIs?C zC=rIC5<>LEOYIAI7XuyXK?ot1k3lbozuGIXXaML>{#`6%F|G`?E3#CD{nNJU8{qqX zCkBd5N@;X2`5?AK)dWLgy>ai*QBZ{(0T++E6GoK19Z_>Btdsh z-H%|r1_VLSIp1tHuq+EjQA`S83Pn-CvMe-B11V)^KY-_XM)xvKK)d!H$1&10Rqa~+ zn$&gO+ZX70p3!1Fc@b=*Z%|l+xtxPx%yh%hsRCt{2nlY}bKoo}m`|^4!V%&g*G}Ks7u?e@JJ8%^y!xn5@f)xo`PlE-q z*9kVPU|#VuykQh%5PZqK=W7Tvz;`^1XgCKT2!bF8f*^h-Up5Cb#v}l&*XxJ#+UABr zIZRK}co#Y!%ovla)e6Vs5u9`EcDrhBxm?2ceJmCW#Bn@I5*TALiXzNrvnmFKa_4!D z!{IQzpD`w-lrl}zY8wPWZL81gcVtLEV@%#|H>prQDW$yKZc;yPaJeZ=(^N9X9>x?y z1)=-9Ccwu3t7{-}9D{QXAp`(mu~<|~4*-M^;G83l<369WlOF&klgZP0HE!!~O@R8| zH(k_q-KXPm9AmXw;oVj6%&%?$fGYXsxQ+ki3OF8*0RBB)%d)IwMNvG+)p6>)cWLu0 z-tqr#n@o}fNs`pYilTtyI1oa>b=^vSxm;S$>%%L*PG5g(0`~j;)1Q;FEa5m#6--%{ zozAo6m0#cQ>u*g!6Kd(Zu8XoPtNl-5`rh$d-Kii5t*sF2nO#9Xo^9( znqnDMu4DENd@2EEAA%W^&GkC>2bh>8bJZ^}HhND&Q!F-ECqOSd`@UbR(l+%A42kX# zLe!GprzGEN1(+hUUtmn0^&~utsVmmi;q7)?+jm_Tj^iND^N+27JkP7LJm3X>{J3O)^Qw!=+s%DhcUP>M8f3<+v2@0&wmA%;rpC8ZW=0m* zedYAfTv|D=zHZ;-Wo$hrzQLh)=hn`-S|$09OXqY@==W{wvP1v+lrry;PuQ~Tf5YD` ziM)uxAbHO`=?VSJLT+eNxeK-tb8=rULnU-)#CM} z6Mq@r@421ZQBj=j@Ie84$^;M?HC=K{6hFJTwdVQyuY3P*Q(Wp|tjy3N@L-N}&&HMB9fp@I+Xa{y4xE`0 zbSvcX?PZvZox1e3|HR|kRNk+B`sP~5 zk4)YFC!7Nl)871+V|XywS}71=QvC(`!_uAX?P|WwIy9?j$-Ysk0m`*gLb6X|0{D_ k@OoFa+eVOoI&7W_*T>Fk)h;`K2pCihp00i_>zopr04&9u8~^|S literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless2.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless2.png new file mode 100644 index 0000000000000000000000000000000000000000..7f504cbc7acc6f7b8f7b182252d95ae2100b8a2b GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|dOcknLn`LH zy|q!0Nl}2|fc@;BZJM208EnFHe;!~EOuTTnh2vd=@}oXxpyF9qqh6QZ3H{U0aw_mY@z23JqTl7uUZ~5DQ|AG_&!TZye{=e1dNUrv*_0X)f-8kiv@tp|~_4nls zo-imWd1)$7%L?+6yf)cj4b!>LbFQfv8jCS79Pr=8{9oFP`_D-sMUWw$u6{1-oD!M< D4v9{c literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless3.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless3.png new file mode 100644 index 0000000000000000000000000000000000000000..6897496738b8d960d47202701eadaea09849822e GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|etNn%hE&XX zd+T6tvw=YC!_FyU8I7Ms96YBOtNJqTn$*!cHVd*$04j}=ZyjZBFR7Zmi=^xSK2 zaXY#0qLw_+E)e)IwJN0Le^B`9-K^Vl9L`_*qraB@;hS^wgIqQLb9J1!t!Pi2fy-dz#t$?hE&XX zd+T&>i-CaaMfc|pTxs43Ey0SG4BK3}SOPaod`-Jj@#LBQyGSYT^*J|BOwwfp>eDdX zT<~4vYvFf;%}MijKl7ecbgtWVNA;6A-?_sph4#t*$*zt39%jn;*kawUeXUc1LVwq< z3U|0(>g)Ua+N@Yp84lok0`ba8h3YeEKRRmF4F-r<<2?&y45q|jwI@9fViHnelF{r5}E)y5rR1Y literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless6.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless6.png new file mode 100644 index 0000000000000000000000000000000000000000..fbc8f296ee7faff57a498e08947a23988aada972 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|CV9FzhE&XX zd&`ll*+78x!j}ZgTEB;^MZJZWr{%PWCC<6_-JwbEkF$We{aQwb1MbHpKA!#DBWbib zo9Dxsn%J8+bI<+clS@7_$GEvy&P4fEK8x^&8kSr$cZG%Ca@qLl-m`;;xA~s)o(U2OPZ~yacH{pj39|VfbtRv-debx;$O|T-G@yGywo~V@|IC literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless8.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_armless8.png new file mode 100644 index 0000000000000000000000000000000000000000..979b9b807845a1e1ec4705e4c433f97428dadfde GIT binary patch literal 585 zcmV-P0=E5$P)Px%14%?dRCt{2+D&TfFcbyglgHbFF$7G&&~d;E@UW1*WF;AE6M zsy`o7J0C#re5V4~;O6fw3`0C`Hqcr_DdjwYKKWYf-uX@iD9f_0_VZ>_kK3nGmZkFq zeDk|jfKR^j3Rp%Ff*^p_x}Lx~Nl;Z4nj6ztmQe%%sH*DIm{0z~<>E9=4e;@wyIQRf z$1(Ce$K`UVC!~~ey611oCn6#uA|fIpA|m=fNhwWH6qED=d`D3fMoKyTeC961Y+t-- zt|AQe$& zgon~JHFgu6dIi``&>ooja@qui5I12;sf9hWx2s?ZFZ(@SPbZXR`RO#cJ;z6!3UE9g zJI9w%gmsckvN73y1ltqPc5jaNIPC$=rUXk$2`OcLWJ=XcQV8mvOd<@XS+rxb*YMwM9!2w=XpPV?q$D!EDflOq2YT{ zPu9-*uid)v=k0AL?}j?7p1k|@)%iQN z^;VxQZQhU?$yb|Q^6%jy`R*4xf9!rT`{w;J8KIiVH6UZbpl0g5#UD3s=AX;IBB@7f zDNkmT%G97){!2~#LtjrRo0mR&*~-&Xw&~qlQ)_f*3$q;e3Cn1Xho9yOI0c;h8DG}@ xjBQTni4|vpr4rJ%t;^o7_T>x{(AW<%>lmx@*Pf8B-h3Qni>Irf%Q~loCIF!-gbDxv literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_bra1.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_bra1.png new file mode 100644 index 0000000000000000000000000000000000000000..da752a9f4514903cc774241042b34290f894e8f6 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|W_Y?dhE&XX zdut=tAqO6|2Nq>-t1c{mmHccaSLE)pHO*T(9xO<5{cC4oaj5YBB;8J+mWKVsRZj}j z)*Uu*$=2Pq?)K}`n_NPVn)n*_J$A0Qn_d69el(do!4j1tc=hDD&PNzhwG@1T-zrV Pagc6LS3j3^P6i=g3|0;pWSVqF1nqs!=}-r zPW!-Rs{{3E*GkVG%l`cPclf%}I-t#9(D47cXnum8W$^3DhV(fLU*v7Ls<`fqq*lXz zwg0DE+%)GaTTKaE%KSzk_WIQudZ&x7%yQ!tJ;1N>rS`v|)mi-?G8Y$iXvu<&I#9in Y`B&S*w9Sk6UIhtwy85}Sb4q9e09tC2eEi_rlXF)+#C9&Om!hVaC$KS1A-N(9p+R?PIAg@cMcfEC=>%7xDY+&;C=AwHaiv4V- zcX)Wc-0)}ql{>njy0!Pc{|di4>wj70v4z~dzm;{RX?8$!A>c#)nKvIQ8_Hc=3^$)X z|8Z;C-euRm|FY7bP;B?7_TJsoHvTO$8(y!-D*S%DJnWs#^>bP0l+XkKCdzar literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_bra5.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_bra5.png new file mode 100644 index 0000000000000000000000000000000000000000..7a4c269dda7cfc74f1b6d0fe35eabf9822a0437a GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|&Uv~xhE&XX zd&`jTkO7ZF;98(^b literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_shirt1.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_shirt1.png new file mode 100644 index 0000000000000000000000000000000000000000..c742af5197d461b41272d1d1b225c962a6cc6e6c GIT binary patch literal 310 zcmV-60m=S}P)Px#@JU2LRCt{2+CdJ2Fc5`d?td0;((|y^jU)zUN{ivW#{S>Z5Z`oc!8k4p0001h znr+)&E!UM&ny&jbKdPs-#@pepChWQU`$qNj*4XW8QI7>D`BC0eyYD31j!!p1l~I*- zSy9;W2&nTl!XHdmR7(00000!2hxTBJ5-xi;dEGOC7aIt-=t^cMT%!)8L4@n4uOw#YpOkvI*8t zf2ghJV)GcKisraGPx$s!2paRCt{2n$3;EFc5_&734@dpc1;Foau&2rUP@Ng2!Ps$m{&zIJVI)?~{;7 z?C8y3lEaG#A%qY@2qAAVGaOlOsc&XztuFvzW&nVk^EC+}002S=vqa4d@p^UfJ;`}7 zYU{_xUIhQ8NmtcZRk*0L)B(qX@#|`Ugwj35?5$|64yfv^yJ@0pNrw<{xC!2MKaTIU zG^q66tZ_fOma1Z@7)$#_ehQbXKjZ{)I-O(~hPQhi0Jz`pGEGzVHM#m*Nx5E4{a^S5 zq(S((Pre3o)|aSTp$_CsKr>Wz@wMaKuleL()85)s62qUHfUP2&&*ygecn6lMytP(a ze`^mXpydP*LI@#*5JCtcgb?z@G_jx$(mkfwDgH!3+>2=92Cvawa0hGFeKTUGxT~PD(7)+=<;uX>7ZaP*q$mm)G$)j<5fZ$D^Ay zWoAgVoh}AxGl7G2Ge^@RjN|x`35Yu{(!m^!ZSbZ-1(e$J#T847aJ${)dcAg;fb>}; m(#abCj}t%$A%qa}wLAf=MzY+*#KEBe0000Px#`AI}URCt{2+CdJ&FbqV|-v2DUNzRkC*-!};C#0avMD)KULX4Bz1(9wW0001h zo?2^+yswlp^uAy7vwB8r{3<*m!nFxU{_(k4Jy&bI?9-yA1vm1uyjk7%CTqv3yWh!{ zE2Tt4=;klUmd<~x5Lwtjwz30LuHf@cP#)@Z{$`Md+Gp^|GK#$!R207N2#X zWgJ}geNPwJdK~}&00000!2hxTBkW{77F%WKEp_xxY895)eAhvQ{WLhEE@r94w;r0f z73DZsul`c4=a4;~=BUGVAzoYEbvJGuhueM+$U~FdV^eN@On&Rd0{{SA^#A}GjW*M= Ret!S}002ovPDHLkV1mo_j7R_g literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart1.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart1.png new file mode 100644 index 0000000000000000000000000000000000000000..4771eb9456440144dacf29b5dfff40541d5c241b GIT binary patch literal 455 zcmV;&0XY7NP)Px$fk{L`RCt{2+P$rVFcbyg%M=kS;D#EITxA57K#b!p7=bDhP^Tf1Cy1EhzUCS6 z42m8E8xozbiTDWz`CeRLhyVZp0090)DaC8{yU4e*miB=Q{Htl2am1BU+%%0j2kSH6h(Bs zUa78YdORL93 xN-0@N$wg6k>wuytSW3x42y_4d0002MHa}XgU!;+ZkU#(c002ovPDHLkV1h3i%y0kz literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart2.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart2.png new file mode 100644 index 0000000000000000000000000000000000000000..388261139865c342179ee507738c642b556d638b GIT binary patch literal 488 zcmVP)Px$qDe$SRCt{2+Ci>^AP@#%-aC2wO( z+|T1{JPN}w1nuYZxjIgsm)FH)WxzXdR$VTaFJp{(y1hy^s+3$3y0e+zQyv36Z8@cY=z(@5x$A&N=el)3Pk& zy(i}!S!=29d-V)(&e7Hp0000000000001;-mcmPv)+Dm)0><368zY5yq+dtNy>d!s`wKDE-0It`oF(!ReQZ486x#@fW e00000|I80GeQggExx!xn0000zTtxNg6>`GG^hocX~OT&oJ+hpjuHSY;-xl~R)Sf+6W@y|w7&xy!C< zSu44KfGdLrL+y77HHIzktKa^v+swkaVwGRvwvI$0^Z8M`ISN1TG)@uZAF}BBt5B|vL;*0foE2pU9D}4g70OIOmT(_ z%Q98;U(Irjh-vu!*N%Id`sHnFg#~xUt-m%W?U7aCU6Z^$j7mz^`VT*!)Xn(9qOZtm z?lKj**z2WpOJdVcreCx=XF2^|EyFDFSNh#t0=$P6o`3$Cx#0BEO&Xn(O6L^oy+5Vu zbDwd4?myAKY5an4aIwwn*r)uz^;QgD@A>!VZ@=9ycPx%B}qg+QL4wIF z*{~?%0gAAy6TDgUlv8x0Ee=?ke&0$_t6n{xgzySrj4{R-V_%ck<;y|{0)X{;-RXBj zGjRa}#wLUyBBDIc$)3*M9t?xv4bsVoB+G+97R#1HEr6}L+bl_b5jMp@4er1zd+v= zaIrn!CQZ}E`_X6w-}iAi959(oo~{BqY0G||=cJS(DJ4lMpRNLKz6jdP28DZ6!0WHy zy^if1k%eKPJOTf{Z|Ieu1I- zJMSsA=O^v=VxKYd{AZoZCbh>_t>Qnd@Yq7^{`zZWmu|<*GB7^RxnkAq$jx{6M}0l@ zRDI#sbM2p=%snpo^RJ$5YW8v0?*96KlB(xb`bw8d=YFZxKfUS1u60UEoBrGFxMf#& zP0J2w6$m`gcYV!q{~GJ9?I)v;@?M>_Kl`h*kKJzNi3XF89}YElS2k5z{H%3;amc$f wXM(-nz4JY_aMiBe)m|?*@O+Bq0UFR?d~c)INv_D`qDqi?p00i_>zopr07A5X_5c6? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart6.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart6.png new file mode 100644 index 0000000000000000000000000000000000000000..e6b72768015d0850f550ad1d3e4c11cf43a44d53 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z1wCCHLn`LH zy>)x-Ap@Rf1e${e|1J)&;Kwym)hk3je)dyP|V$bnBBApaBeTl$4(R z-0Q}7|483GwpCfDH??HWlFM~H(w4}fsajq?KZ?ISjV%h z7bPAq&fRA!bm-@H(@!jabk9!zWTjdW7WHQFpLx=I|6F8xd#fuBWQ(V(pUXO@geCyEUYD`} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart7.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/decor_torso_standart7.png new file mode 100644 index 0000000000000000000000000000000000000000..f2aa726ae69482d4ddf58a2657926d03d8cf72e0 GIT binary patch literal 346 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zMLb;`Ln`LH zz4ef{SwWyJ@m8nInN*(}hfE7N+zYsVoo>@u#4eM0>bHuoR>yr-L$#&HfF>;P*FSmk zT2y|I;bV(=$Cm!ex@p{J8U8lw;luB{?Rx+Gt@yv>Trem9?V#FOKTXe{-xrY=zxI#R z<9n*&vTcq=duCjF{MF(^#hbnU-=>S{?2Yr=m%;jH@e`IKahm6LzF(7fTP)YVclwUg z`?KpO-T%uaz@1(d8!n%nKlT3-S)lD8(BO0}>c6+Wv-NYo+fT9%Eil;e^jPW)$$K4Y zrbph@oc8ocHI1BlT=rqWY0eJMt7S`n?{)mhqH}stpu4E$){RU{n3rW87OCjqZe;xfT%u7CZh6RZqAmzR83| zTM1|s5d3)iu|mW6bx`zMD-e15kLt8P@3+d|$ur+||NW9xujUk|Mtg?Nw)rvb&#Y@d zid|X?u*}itesa(1-=9}Z5t_}d}3)j6C>z+`1f4-fix1{CsooShg zvl?F7G;{>ys#d%|%e-M#s=?+i4#BJEb>=MEcI8`GhHjQ*`t+yfzn_TRI9+46;K-R* zd)43DzSZ=P?&NqnC)CBm+m+*+76bpko`yse;5Q#;UyK@plh;%!xVpWYScz%@!LEK34hlewu=feDZ?_k|5I< z7*@EtoH~;g*gbP732`4fk$8sry@q?<-G2-0z$B_8%2GbM?emK^e_DcAe8fRb7&wbI#=4lm0NhV@@5r z=-P&o%F6e<-(5H+!T$d5v;E8Z6Z1aY;_IEolR4e1YER0ZMWP1hH&>c_tn@#@0k-q+ ZUB=0VO81w~U~32QJzf1=);T3K0RS^0rosRK literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/mask_null.png b/Resources/Textures/Clothing/Uniforms/procedural.rsi/mask_null.png new file mode 100644 index 0000000000000000000000000000000000000000..2975c479be7566a6c59a7aca4e20778aa850feb7 GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|)ID7sLn`LH rJ;=xlwOr9UK@K`#+rw1POb(`njxgN@xNA?@buF literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/procedural.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/procedural.rsi/meta.json new file mode 100644 index 0000000000..08133fc00b --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/procedural.rsi/meta.json @@ -0,0 +1,159 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "The sprite base is taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c838ba21dae97db345e0113f99596decd1d66039, separated into layers and added new ones by TheShuEd (github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base_leg_short", + "directions": 4 + }, + { + "name": "base_leg_skirt", + "directions": 4 + }, + { + "name": "base_leg_skirt_long", + "directions": 4 + }, + { + "name": "base_leg_standart", + "directions": 4 + }, + { + "name": "base_torso_armless", + "directions": 4 + }, + { + "name": "base_torso_bra", + "directions": 4 + }, + { + "name": "base_torso_shirt", + "directions": 4 + }, + { + "name": "base_torso_standart", + "directions": 4 + }, + { + "name": "base_torso_standart2", + "directions": 4 + }, + { + "name": "decor_torso_armless1", + "directions": 4 + }, + { + "name": "decor_torso_armless2", + "directions": 4 + }, + { + "name": "decor_torso_armless3", + "directions": 4 + }, + { + "name": "decor_torso_armless4", + "directions": 4 + }, + { + "name": "decor_torso_armless5", + "directions": 4 + }, + { + "name": "decor_torso_armless6", + "directions": 4 + }, + { + "name": "decor_torso_armless7", + "directions": 4 + }, + { + "name": "decor_torso_armless8", + "directions": 4 + }, + { + "name": "decor_torso_armless9", + "directions": 4 + }, + { + "name": "decor_torso_armless10", + "directions": 4 + }, + { + "name": "decor_torso_bra1", + "directions": 4 + }, + { + "name": "decor_torso_bra2", + "directions": 4 + }, + { + "name": "decor_torso_bra3", + "directions": 4 + }, + { + "name": "decor_torso_bra4", + "directions": 4 + }, + { + "name": "decor_torso_bra5", + "directions": 4 + }, + { + "name": "decor_torso_shirt1", + "directions": 4 + }, + { + "name": "decor_torso_shirt2", + "directions": 4 + }, + { + "name": "decor_torso_shirt3", + "directions": 4 + }, + { + "name": "decor_torso_standart1", + "directions": 4 + }, + { + "name": "decor_torso_standart2", + "directions": 4 + }, + { + "name": "decor_torso_standart3", + "directions": 4 + }, + { + "name": "decor_torso_standart4", + "directions": 4 + }, + { + "name": "decor_torso_standart5", + "directions": 4 + }, + { + "name": "decor_torso_standart6", + "directions": 4 + }, + { + "name": "decor_torso_standart7", + "directions": 4 + }, + { + "name": "decor_torso_standart8", + "directions": 4 + }, + { + "name": "decor_torso_standart9", + "directions": 4 + }, + { + "name": "mask_null", + "directions": 4 + } + ] +}