From a996bf3bee8bcd80d408da61ed62fd5a5e5a3ba3 Mon Sep 17 00:00:00 2001 From: PuroSlavKing <103608145+PuroSlavKing@users.noreply.github.com> Date: Sun, 1 Sep 2024 12:36:32 +0300 Subject: [PATCH] [Port] Xenowears (#12) * Xenowears (#519) Add a bit of clothing specie related and some tiny misc changes. Normally i wanted to add the spooders changes here but with the other spider specie coming in il hold myself for now. --- - [x] Add clothings - [x] Loadouts/Vending machines ---

Media

![image](https://github.com/Simple-Station/Einstein-Engines/assets/45297731/47865d65-754d-4b70-9c10-19bc9aa55ac6)

--- :cl: - add: Xenowears! new non-human related clothings. --------- Signed-off-by: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com> Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> Co-authored-by: VMSolidus * ooopsie --------- Signed-off-by: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com> Co-authored-by: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com> Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> Co-authored-by: VMSolidus --- .../Components/EmitsSoundOnMoveComponent.cs | 35 +++++++ .../EntitySystems/EmitsSoundOnMoveSystem.cs | 96 ++++++++++++++++++ .../Inventories/clothesmate.yml | 1 + .../VendingMachines/Inventories/theater.yml | 2 + .../Entities/Clothing/Neck/mantles.yml | 22 ++++ .../Entities/Clothing/Neck/misc.yml | 14 +++ .../Entities/Clothing/OuterClothing/misc.yml | 11 ++ .../Entities/Clothing/clothwarps.yml | 38 +++++++ .../Graphs/clothing/clothwarp.yml | 13 +++ .../Recipes/Construction/clothing.yml | 11 ++ .../Misc/bellcollar.rsi/equipped-NECK.png | Bin 0 -> 4691 bytes .../Neck/Misc/bellcollar.rsi/icon.png | Bin 0 -> 4596 bytes .../Neck/Misc/bellcollar.rsi/inhand-left.png | Bin 0 -> 5166 bytes .../Neck/Misc/bellcollar.rsi/inhand-right.png | Bin 0 -> 5175 bytes .../Neck/Misc/bellcollar.rsi/meta.json | 26 +++++ .../mantles/oldmantle.rsi/equipped-NECK.png | Bin 0 -> 568 bytes .../Neck/mantles/oldmantle.rsi/icon.png | Bin 0 -> 671 bytes .../Neck/mantles/oldmantle.rsi/meta.json | 18 ++++ .../unathimantle.rsi/equipped-NECK.png | Bin 0 -> 1076 bytes .../Neck/mantles/unathimantle.rsi/icon.png | Bin 0 -> 537 bytes .../Neck/mantles/unathimantle.rsi/meta.json | 18 ++++ .../unathirobe.rsi/equipped-OUTERCLOTHING.png | Bin 0 -> 1400 bytes .../Misc/unathirobe.rsi/icon.png | Bin 0 -> 582 bytes .../Misc/unathirobe.rsi/meta.json | 18 ++++ .../Misc/clothWrap.rsi/equipped-FEET.png | Bin 0 -> 315 bytes .../Misc/clothWrap.rsi/equipped-HAND.png | Bin 0 -> 469 bytes .../Shoes/Misc/clothWrap.rsi/icon.png | Bin 0 -> 704 bytes .../Shoes/Misc/clothWrap.rsi/meta.json | 22 ++++ 28 files changed, 345 insertions(+) create mode 100644 Content.Shared/Clothing/Components/EmitsSoundOnMoveComponent.cs create mode 100644 Content.Shared/Clothing/EntitySystems/EmitsSoundOnMoveSystem.cs create mode 100644 Resources/Prototypes/Entities/Clothing/clothwarps.yml create mode 100644 Resources/Prototypes/Recipes/Construction/Graphs/clothing/clothwarp.yml create mode 100644 Resources/Textures/Clothing/Neck/Misc/bellcollar.rsi/equipped-NECK.png create mode 100644 Resources/Textures/Clothing/Neck/Misc/bellcollar.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Neck/Misc/bellcollar.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Neck/Misc/bellcollar.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Neck/Misc/bellcollar.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Neck/mantles/oldmantle.rsi/equipped-NECK.png create mode 100644 Resources/Textures/Clothing/Neck/mantles/oldmantle.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Neck/mantles/oldmantle.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Neck/mantles/unathimantle.rsi/equipped-NECK.png create mode 100644 Resources/Textures/Clothing/Neck/mantles/unathimantle.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Neck/mantles/unathimantle.rsi/meta.json create mode 100644 Resources/Textures/Clothing/OuterClothing/Misc/unathirobe.rsi/equipped-OUTERCLOTHING.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Misc/unathirobe.rsi/icon.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Misc/unathirobe.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Shoes/Misc/clothWrap.rsi/equipped-FEET.png create mode 100644 Resources/Textures/Clothing/Shoes/Misc/clothWrap.rsi/equipped-HAND.png create mode 100644 Resources/Textures/Clothing/Shoes/Misc/clothWrap.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Shoes/Misc/clothWrap.rsi/meta.json diff --git a/Content.Shared/Clothing/Components/EmitsSoundOnMoveComponent.cs b/Content.Shared/Clothing/Components/EmitsSoundOnMoveComponent.cs new file mode 100644 index 0000000000..095b0daf38 --- /dev/null +++ b/Content.Shared/Clothing/Components/EmitsSoundOnMoveComponent.cs @@ -0,0 +1,35 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Map; + +namespace Content.Shared.Clothing.Components; + +/// +/// Indicates that the clothing entity emits sound when it moves. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class EmitsSoundOnMoveComponent : Component +{ + [ViewVariables(VVAccess.ReadWrite)] + [DataField(required: true), AutoNetworkedField] + public SoundSpecifier SoundCollection = default!; + + [ViewVariables(VVAccess.ReadWrite)] + [DataField("requiresGravity"), AutoNetworkedField] + public bool RequiresGravity = true; + + [ViewVariables(VVAccess.ReadOnly)] + public EntityCoordinates LastPosition = EntityCoordinates.Invalid; + + /// + /// The distance moved since the played sound. + /// + [ViewVariables(VVAccess.ReadOnly)] + public float SoundDistance = 0f; + + /// + /// Whether this item is equipped in a inventory item slot. + /// + [ViewVariables(VVAccess.ReadOnly)] + public bool IsSlotValid = true; +} diff --git a/Content.Shared/Clothing/EntitySystems/EmitsSoundOnMoveSystem.cs b/Content.Shared/Clothing/EntitySystems/EmitsSoundOnMoveSystem.cs new file mode 100644 index 0000000000..3224b5bca3 --- /dev/null +++ b/Content.Shared/Clothing/EntitySystems/EmitsSoundOnMoveSystem.cs @@ -0,0 +1,96 @@ +using System.Numerics; +using Content.Shared.Clothing.Components; +using Content.Shared.Gravity; +using Content.Shared.Inventory; +using Content.Shared.Inventory.Events; +using Content.Shared.Mobs.Components; +using Content.Shared.Movement.Components; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Physics.Components; +using Robust.Shared.Timing; + +namespace Content.Shared.Clothing.Systems; + +public sealed class EmitsSoundOnMoveSystem : EntitySystem +{ + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedMapSystem _grid = default!; + [Dependency] private readonly SharedGravitySystem _gravity = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + private EntityQuery _moverQuery; + private EntityQuery _physicsQuery; + private EntityQuery _clothingQuery; + + public override void Initialize() + { + _moverQuery = GetEntityQuery(); + _physicsQuery = GetEntityQuery(); + _clothingQuery = GetEntityQuery(); + + SubscribeLocalEvent(OnEquipped); + SubscribeLocalEvent(OnUnequipped); + } + + private void OnEquipped(EntityUid uid, EmitsSoundOnMoveComponent component, GotEquippedEvent args) + { + component.IsSlotValid = !args.SlotFlags.HasFlag(SlotFlags.POCKET); + } + + private void OnUnequipped(EntityUid uid, EmitsSoundOnMoveComponent component, GotUnequippedEvent args) + { + component.IsSlotValid = true; + } + + public override void Update(float frameTime) + { + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var comp)) + { + UpdateSound(uid, comp); + } + query.Dispose(); + } + + private void UpdateSound(EntityUid uid, EmitsSoundOnMoveComponent component) + { + if (!_physicsQuery.TryGetComponent(uid, out var physics)) + return; + + // Space does not transmit sound + if (Transform(uid).GridUid == null) + return; + + if (component.RequiresGravity && _gravity.IsWeightless(uid, physics, Transform(uid))) + return; + + var parent = Transform(uid).ParentUid; + + var isWorn = parent is { Valid: true } && + _clothingQuery.TryGetComponent(uid, out var clothing) + && clothing.InSlot != null + && component.IsSlotValid; + // If this entity is worn by another entity, use that entity's coordinates + var coordinates = isWorn ? Transform(parent).Coordinates : Transform(uid).Coordinates; + var distanceNeeded = (isWorn && _moverQuery.TryGetComponent(parent, out var mover) && mover.Sprinting) + ? 1.5f // The parent is a mob that is currently sprinting + : 2f; // The parent is not a mob or is not sprinting + + if (!coordinates.TryDistance(EntityManager, component.LastPosition, out var distance) || distance > distanceNeeded) + component.SoundDistance = distanceNeeded; + else + component.SoundDistance += distance; + + component.LastPosition = coordinates; + if (component.SoundDistance < distanceNeeded) + return; + component.SoundDistance -= distanceNeeded; + + var sound = component.SoundCollection; + var audioParams = sound.Params + .WithVolume(sound.Params.Volume) + .WithVariation(sound.Params.Variation ?? 0f); + + _audio.PlayPredicted(sound, uid, uid, audioParams); + } +} diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml index 6d387eb877..97dd0eafa6 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml @@ -89,6 +89,7 @@ ClothingHandsGlovesColorPurple: 2 ClothingEyesGlassesCheapSunglasses: 3 # DO NOT ADD MORE, USE UNIFORM DYING + ClothingClothWrap: 4 contrabandInventory: ClothingMaskNeckGaiter: 2 ClothingUniformJumpsuitTacticool: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml index 8ef72f557c..348eab7f05 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml @@ -56,6 +56,8 @@ ClothingShoesBootsCowboyBlack: 1 ClothingShoesBootsCowboyWhite: 1 ClothingMaskNeckGaiterRed: 2 + ClothingNeckBellCollar: 2 + ClothingOuterUnathiRobe: 1 emaggedInventory: ClothingShoesBling: 1 ClothingShoesBootsCowboyFancy: 1 diff --git a/Resources/Prototypes/Entities/Clothing/Neck/mantles.yml b/Resources/Prototypes/Entities/Clothing/Neck/mantles.yml index 6844177d77..f6caae659d 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/mantles.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/mantles.yml @@ -85,3 +85,25 @@ sprite: Clothing/Neck/mantles/mantle.rsi - type: Clothing sprite: Clothing/Neck/mantles/mantle.rsi + +- type: entity + parent: ClothingNeckBase + id: ClothingNeckOldMantle + name: old wrap + description: A tattered fabric wrap, faded over the years. Smells faintly of cigars. + components: + - type: Sprite + sprite: Clothing/Neck/mantles/oldmantle.rsi + - type: Clothing + sprite: Clothing/Neck/mantles/oldmantle.rsi + +- type: entity + parent: ClothingNeckBase + id: ClothingNeckUnathiMantle + name: hide mantle + description: A rather grisly selection of cured hides and skin, sewn together to form a ragged mantle. + components: + - type: Sprite + sprite: Clothing/Neck/mantles/unathimantle.rsi + - type: Clothing + sprite: Clothing/Neck/mantles/unathimantle.rsi diff --git a/Resources/Prototypes/Entities/Clothing/Neck/misc.yml b/Resources/Prototypes/Entities/Clothing/Neck/misc.yml index 8dfc709bc4..63a9ff3fb9 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/misc.yml @@ -78,3 +78,17 @@ event: !type:StethoscopeActionEvent checkCanInteract: false priority: -1 + +- type: entity + parent: ClothingNeckBase + id: ClothingNeckBellCollar + name: bell collar + description: A way to inform others about your presence, or just to annoy everyone around you! + components: + - type: Sprite + sprite: Clothing/Neck/Misc/bellcollar.rsi + - type: Clothing + sprite: Clothing/Neck/Misc/bellcollar.rsi + - type: EmitsSoundOnMove + soundCollection: + collection: FootstepJester diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml index 112637cdd3..0b5e2c112b 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml @@ -384,3 +384,14 @@ sprite: Clothing/OuterClothing/Misc/red_racoon.rsi - type: Clothing sprite: Clothing/OuterClothing/Misc/red_racoon.rsi + +- type: entity + parent: ClothingOuterBase + id: ClothingOuterUnathiRobe + name: roughspun robes + description: A traditional Unathi garment. + components: + - type: Sprite + sprite: Clothing/OuterClothing/Misc/unathirobe.rsi + - type: Clothing + sprite: Clothing/OuterClothing/Misc/unathirobe.rsi diff --git a/Resources/Prototypes/Entities/Clothing/clothwarps.yml b/Resources/Prototypes/Entities/Clothing/clothwarps.yml new file mode 100644 index 0000000000..eadeaa0b28 --- /dev/null +++ b/Resources/Prototypes/Entities/Clothing/clothwarps.yml @@ -0,0 +1,38 @@ +- type: entity + parent: Clothing + id: ClothingClothWrap + name: cloth wraps + description: A roll of treated canvas used for wrapping claws or paws. + components: + - type: Item + size: Small + storedRotation: -90 + - type: Sprite + state: icon + sprite: Clothing/Shoes/Misc/clothWrap.rsi + - type: Clothing + slots: + - gloves + - FEET + sprite: Clothing/Shoes/Misc/clothWrap.rsi + - type: Construction + graph: ClothingClothWrap + node: shoes + - type: Butcherable + butcheringType: Knife + spawned: + - id: MaterialCloth1 + amount: 1 + - type: Food + requiresSpecialDigestion: true + - type: SolutionContainerManager + solutions: + food: + maxVol: 10 + reagents: + - ReagentId: Fiber + Quantity: 10 + - type: Tag + tags: + - ClothMade + - WhitelistChameleon diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/clothing/clothwarp.yml b/Resources/Prototypes/Recipes/Construction/Graphs/clothing/clothwarp.yml new file mode 100644 index 0000000000..864d8f18d2 --- /dev/null +++ b/Resources/Prototypes/Recipes/Construction/Graphs/clothing/clothwarp.yml @@ -0,0 +1,13 @@ +- type: constructionGraph + id: ClothingClothWrap + start: start + graph: + - node: start + edges: + - to: shoes + steps: + - material: Cloth + amount: 2 + doAfter: 1 + - node: shoes + entity: ClothingClothWrap diff --git a/Resources/Prototypes/Recipes/Construction/clothing.yml b/Resources/Prototypes/Recipes/Construction/clothing.yml index 420f38aab8..3ec11c36e0 100644 --- a/Resources/Prototypes/Recipes/Construction/clothing.yml +++ b/Resources/Prototypes/Recipes/Construction/clothing.yml @@ -118,3 +118,14 @@ description: Can hold up to 15 arrows, and fits snug around your waist. icon: { sprite: Clothing/Belt/quiver.rsi, state: icon } objectType: Item + +- type: construction + name: cloth wraps + id: ClothingClothWrap + graph: ClothingClothWrap + startNode: start + targetNode: shoes + category: construction-category-clothing + description: A roll of treated canvas used for wrapping claws or paws. + icon: { sprite: Clothing/Shoes/Misc/clothWrap.rsi, state: icon } + objectType: Item diff --git a/Resources/Textures/Clothing/Neck/Misc/bellcollar.rsi/equipped-NECK.png b/Resources/Textures/Clothing/Neck/Misc/bellcollar.rsi/equipped-NECK.png new file mode 100644 index 0000000000000000000000000000000000000000..2190dc844dba0dffd0b5b4050a7c3043c64205a0 GIT binary patch literal 4691 zcmeHLdsGzH8J`7>1Ou@x8hkX)88E1v*?H`XnX)|GMcByd78b!O>g>$y?&$8$usgtl zl{DHI`%q((iZP_NYSWWPQy;NSMM{fujEymzCZS10-GZ8EqUcFZ(U@rO%r48)=A0f* z>wgUAa=&};cYpW$e&2ULnE8=oacNrWj8q7M(rjhc3eXoRE#*G&`z4|79O!!Z8k^f@ zn-8Uc0npS;fHaB@Xqp5$Ns|mEgSkzheG|xvj?!jmCaV2Ufjl!NKLg~sF&$+Op-F<$ zK;H%$3FHjWzXY1_Wb~{*0aj-eZ=9eQDDM(8)9mjxu8wHESVY66ZDJZ%H9}hv{w)NZ1WygwUb+4-YH8OQluCwk9 z$Mc`=LAHMH3B;Llc)`o*kF>TFKfNityZgHmns@U+O}$jt``%xwrc5X-T2b4UQM>Q> z-8oN8BOabLG;p@##M$o@d7V4m^=~EZ3Osk2TX5>q((azzuFNiY&*s0LA}?jnn|S_4 z{WfUTV1NFbcl&nlUGmoQ2U0d4KXeNB_oww=wx5X{T{4TAvusX5&cmk58;);VQJvp1 zutHuIdG;H+r+<;Nb;?h=)0fgae_p;N{NubA*3cIxFWXjidU@O7N4Fflc5+qb=}&Us zT=5%fL-w=-6YfVc-gPXTXzYLO%D$SicUrnm6n^@}oZ!3*^EYm1HC5iHY71}9{_(gKV+nGCSl6T(9?l{-$DlNKel&+XLe$h41ZKWkolb>MT&8;NFBhCOa*e&5W<|f2;Y1g&4f`b}UQm8vSYp_$bI9d`G8c3ud70wTGZo0y{Fa`leX2dJY5{+Sv zjg8tyomLEbFoL2e3@0&?M1ckxY6{3q7!8E76o@E>l@GB&L6QYA04tb`ORSg82m;pO zVf*}&-5!SzgkmfJKCmz&VT2aP{C+HPM@TMd03b1gzII2**(C8;1s@XYgDhXtzz5{4 zLq#Ss*jJc3_RodV>II*eoEdQyGRr|NJl#`}0b01W~Ah*A2o;2t4slx@n2>Q15| z;J7&cDD7e2Rb`-Mx6@XUtyd1USkK-|pd%=fFyINhm-4|7NH_&kt&r+= zj-?j@LOAm;wgh=b7K2Vv^qG-((Ty+L!FA#o znXxi54^E4hVdroe&c$_f%rXVeE^>mq>Az_!mj})V`XJ*9Yu#e zLA^>atX>M5VWTdDm60Xzb(Kzgcwpy0V`1m}&`ZuIg>cmQE2L87GI ziIX5_Xgw7p47>L(>R7#z*O>^^$mLO}-laF7l*>SY3&V1pku>2rLyk83e{#|I?>P~3 zF&|UP;&4#&vHu8rR3V{`0&1djpgx0gkHzbKj583Dd-=rD?Oq-M!{djHiQjR$#_1Xp z17lJi&#rO0#>Bvwl*hB{|3+8p$QvUc0RQMUg7?9xmkYOmcgg!)i%PBPTP1YM(*78b z?w87zg&=71x0I%VcC}@K$w{)!UNY&U2c}P*K09msft%oaLAuRa>`Jj5PX5({}UnHe}(ARe*`}Ieci>);o#WOlg z-oc?mm-<3?CGzSc8D_mEGNR>uUf0svST4 zS-~eATi^AhZW=iGs_pdtVqa(3-aCJUsvkN(b8F73svT{UiQn#c+eMQ@cP7hNZQkyV zOk4B1^~RM2e}1g)z2x%q)h(UpI$8^(?n2NHs_9nkD+e$9Ay@AC-Glu{`wrJ#pTDRe zJ1u=^+h+%FtbfH=dgjRY{Zi=SYvQx*?n603hxuBwx2vJ$QnD{cHtQl^m4oju;Q9M) Z&51>e_Fs3;cu^VJN)}sRU9ft?zX0;DP$K{U literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Neck/Misc/bellcollar.rsi/icon.png b/Resources/Textures/Clothing/Neck/Misc/bellcollar.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1790484039767872acd61f6aa8c7c32bde7b8669 GIT binary patch literal 4596 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Neck/Misc/bellcollar.rsi/meta.json b/Resources/Textures/Clothing/Neck/Misc/bellcollar.rsi/meta.json new file mode 100644 index 0000000000..464e2e4a35 --- /dev/null +++ b/Resources/Textures/Clothing/Neck/Misc/bellcollar.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by mnemotechnician (GitHub)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-NECK", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Neck/mantles/oldmantle.rsi/equipped-NECK.png b/Resources/Textures/Clothing/Neck/mantles/oldmantle.rsi/equipped-NECK.png new file mode 100644 index 0000000000000000000000000000000000000000..d317412c9dd1a52e5f283dce4e6a55af629aa8bc GIT binary patch literal 568 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|VnL zPZ!6KiaBp*IeHxq5NNAE_~=knRJXS7BSse6Ht~Q9Tb1%+A_cB1U70E^7_0q))uye< zJs>dZQs~)<4y$kvs0TNTFjsSE>3@1*WHf?6VGbbDKRcrzp7Am??*<< z@%8K9e>idIXJV22)wvILl+E15a&P)aiRJPliaXUr1+^2(t8EhwCe3`D@vxotL zbK}#$eR0+LJoD7ksw8harsAjH_13*h`s``KtkMu&vCx27ZF1^Ey&#e4GE4uf9TNQ{ zzL9Cx+4CDNggrl5?Bf==qx(pitAV-F&SQew4f>}0Y8ILIs~Kd?U|+sFy5iFG!bPeR zp3b)AowVj_-HrbY8pl~2EY%oJ88V`K6jwWFyEfe^e*5%i>5IKiX0GB|pKY(p z$<5z$yCRM$;?Jd|rPX@UsyF7QHc#q3x#oAr8O1kY literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Neck/mantles/oldmantle.rsi/icon.png b/Resources/Textures/Clothing/Neck/mantles/oldmantle.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4cf647611dcfd9c7110ec2321da9c381e628dc06 GIT binary patch literal 671 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Shoes/Misc/clothWrap.rsi/equipped-HAND.png b/Resources/Textures/Clothing/Shoes/Misc/clothWrap.rsi/equipped-HAND.png new file mode 100644 index 0000000000000000000000000000000000000000..b78a810df85f2ed9659b419c1dd8f095848db8f9 GIT binary patch literal 469 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R5b zr;B4q#hkaZ4)!)12)NcSd8??tYeDZ4u1jtLTPB7usup^Q>exrE|CVATv3A10`sq&| ze4LTKf!{b@;5d^)AFG25cY}o(L!l1CqX>p08yPw#ix%v^|9sV|g57uhE_TZIAGh%p z{XR)1jDSqO(qu`kBeE%syllJG{zPd4zaZZZN@$DTPGUqLh>F;h| zd!_WRb-c;{`#)qN8SflaQ9Sgs=GfCB%{pcaca!p_!k+l#uL4h8uD>?@!dvvmfXA52 zlWB1}!|~5NKT?=CF>RBv>s+yA@8^1{*VzJ4XC*V@a4$r{FM`4QeC+jyTN;=R^*6}K zy>;i{OgLzG^{(ckB|j7WcZjX)lnxHPDzj3v?S8`*{R2Wj0u$s9y#9JC#EYNPBlYM_33+4a$43qcAz-t c6VpD%CkzX$9mdKI;Vst0A&@vMgRZ+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Shoes/Misc/clothWrap.rsi/icon.png b/Resources/Textures/Clothing/Shoes/Misc/clothWrap.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8f531e890c1a5d777b5a5ad2569bff2e68ba72d0 GIT binary patch literal 704 zcmV;x0zdtUP)Ox2pG(>|7;mh!O_z=dpGHQ%5RtX_ud_M@`Q7lLs zGzMs)mv-)47se&_5=`o%XFuosW-{l@h-@}XBg1HD^(LSRXafERfIM!3T<)!HgP|qW z-rf;?)b-+DO~TFf50x;~4j=$}Qo|z3x?`Qd_u@iM7=|mQY#Yg3ccruu0=$+4*{Aoz zD2T{_wbj=-X-bO4t+Rl*ICRg>S~CVTs($eV}^SXfx?vmG1H z^?;Dl?oU$bG#w{9F$@FS_7E5tritgp=sJ_)TmD_$Q-}n3^x$qdHg=svq7@-vduN;V z{2EJ(Ul=%l1!*}5@w<-J0a|N@E?=cs$k)wX7x3`Gov+tMM_E}}MyUYXu?Ry*#N(7o zB|-#B)u>i|0tJN$iO_WmDj?4bu9z%(V6Ws&Y5U}^DF zl-kh%p$=<1J3GW;F8TadGMNlohs@5*qIHedcngjfBbn@^H#LCkw$Rp|WPUCisSP6y zq9>2Y)+Eremx)_w}lZQ<3+XR3POo8775NMk-y7wqnq zDHIA!Ox~tcE|br%<2VlI`uj*E+F4%uveI_ruAFNo?Cj z1sWj)Qc6~rJ{OZ+m(Coe=%Ik=>1ktXYUXGf1n9y0-At^1AYOYhxx)Z$>N*<0000