From 0dc798210955f5a15a894840e54e61c9a78c0292 Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Sat, 28 Sep 2024 18:09:30 +0300 Subject: [PATCH] Footprints + Mop + Force undersky liquid evaporation (#469) * all evaporation under sky * footprints system * puddle footprints * split to holder and trailer * mop added * mop finish --- .../EntitySystems/PuddleSystem.Evaporation.cs | 25 ++- .../Fluids/EntitySystems/PuddleSystem.cs | 2 +- .../FootStep/CP14DecalCleanerComponent.cs | 20 +++ .../FootStep/CP14FootprintHolderComponent.cs | 33 ++++ .../FootStep/CP14FootprintTrailerComponent.cs | 15 ++ .../_CP14/FootStep/CP14FootprintsSystem.cs | 157 ++++++++++++++++++ .../Fluids/Components/EvaporationComponent.cs | 6 + .../Fluids/SharedPuddleSystem.Evaporation.cs | 2 +- Content.Shared/Maps/ContentTileDefinition.cs | 6 + Resources/Audio/_CP14/Items/attributions.yml | 7 +- Resources/Audio/_CP14/Items/broom1.ogg | Bin 0 -> 7326 bytes Resources/Audio/_CP14/Items/broom2.ogg | Bin 0 -> 6647 bytes Resources/Audio/_CP14/Items/broom3.ogg | Bin 0 -> 6488 bytes .../Prototypes/Entities/Effects/puddle.yml | 1 + .../_CP14/Decal/bricktile_stone.yml | 17 -- .../Prototypes/_CP14/Decal/footprints.yml | 13 ++ .../_CP14/Entities/Clothing/Shoes/shoes.yml | 1 + .../_CP14/Entities/Effects/visual_effect.yml | 16 ++ .../_CP14/Entities/Mobs/Species/base.yml | 3 + .../Objects/Weapons/Melee/Tools/mop.yml | 34 ++++ .../_CP14/Recipes/Workbench/workbench.yml | 11 +- .../_CP14/SoundCollections/misc.yml | 9 +- Resources/Prototypes/_CP14/Tiles/base.yml | 1 + Resources/Prototypes/_CP14/Tiles/natural.yml | 5 + .../Prototypes/_CP14/Tiles/woodplanks.yml | 4 + .../_CP14/Decals/footprints.rsi/boots.png | Bin 0 -> 258 bytes .../_CP14/Decals/footprints.rsi/footprint.png | Bin 0 -> 273 bytes .../_CP14/Decals/footprints.rsi/meta.json | 17 ++ .../Textures/_CP14/Effects/dust.rsi/dust.png | Bin 0 -> 934 bytes .../Textures/_CP14/Effects/dust.rsi/meta.json | 22 +++ .../_CP14/Objects/Tools/mop.rsi/icon.png | Bin 0 -> 432 bytes .../Objects/Tools/mop.rsi/inhand-left.png | Bin 0 -> 745 bytes .../Objects/Tools/mop.rsi/inhand-right.png | Bin 0 -> 830 bytes .../_CP14/Objects/Tools/mop.rsi/meta.json | 30 ++++ .../Tools/mop.rsi/wielded-inhand-left.png | Bin 0 -> 661 bytes .../Tools/mop.rsi/wielded-inhand-right.png | Bin 0 -> 642 bytes 36 files changed, 434 insertions(+), 23 deletions(-) create mode 100644 Content.Server/_CP14/FootStep/CP14DecalCleanerComponent.cs create mode 100644 Content.Server/_CP14/FootStep/CP14FootprintHolderComponent.cs create mode 100644 Content.Server/_CP14/FootStep/CP14FootprintTrailerComponent.cs create mode 100644 Content.Server/_CP14/FootStep/CP14FootprintsSystem.cs create mode 100644 Resources/Audio/_CP14/Items/broom1.ogg create mode 100644 Resources/Audio/_CP14/Items/broom2.ogg create mode 100644 Resources/Audio/_CP14/Items/broom3.ogg create mode 100644 Resources/Prototypes/_CP14/Decal/footprints.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/Tools/mop.yml create mode 100644 Resources/Textures/_CP14/Decals/footprints.rsi/boots.png create mode 100644 Resources/Textures/_CP14/Decals/footprints.rsi/footprint.png create mode 100644 Resources/Textures/_CP14/Decals/footprints.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Effects/dust.rsi/dust.png create mode 100644 Resources/Textures/_CP14/Effects/dust.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Objects/Tools/mop.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Objects/Tools/mop.rsi/inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/Tools/mop.rsi/inhand-right.png create mode 100644 Resources/Textures/_CP14/Objects/Tools/mop.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Objects/Tools/mop.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/_CP14/Objects/Tools/mop.rsi/wielded-inhand-right.png diff --git a/Content.Server/Fluids/EntitySystems/PuddleSystem.Evaporation.cs b/Content.Server/Fluids/EntitySystems/PuddleSystem.Evaporation.cs index d9605c775c..148306d7b3 100644 --- a/Content.Server/Fluids/EntitySystems/PuddleSystem.Evaporation.cs +++ b/Content.Server/Fluids/EntitySystems/PuddleSystem.Evaporation.cs @@ -1,16 +1,33 @@ using Content.Shared.Chemistry.Components; using Content.Shared.FixedPoint; using Content.Shared.Fluids.Components; +using Content.Shared.Maps; +using Robust.Shared.Map; +using Robust.Shared.Map.Components; namespace Content.Server.Fluids.EntitySystems; public sealed partial class PuddleSystem { + [Dependency] private readonly SharedMapSystem _maps = default!; //CP14 + [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!; //CP14 private static readonly TimeSpan EvaporationCooldown = TimeSpan.FromSeconds(1); private void OnEvaporationMapInit(Entity entity, ref MapInitEvent args) { entity.Comp.NextTick = _timing.CurTime + EvaporationCooldown; + + + //CP14 Force evaporation under sky + var xform = Transform(entity); + if (TryComp(xform.GridUid, out var mapGrid)) + { + var tileRef = _maps.GetTileRef(xform.GridUid.Value, mapGrid, xform.Coordinates); + var tileDef = (ContentTileDefinition) _tileDefManager[tileRef.Tile.TypeId]; + + entity.Comp.CP14ForceEvaporation = tileDef.Weather; + } + //CP14 End force evaporation under sky } private void UpdateEvaporation(EntityUid uid, Solution solution) @@ -46,7 +63,13 @@ public sealed partial class PuddleSystem continue; var reagentTick = evaporation.EvaporationAmount * EvaporationCooldown.TotalSeconds; - puddleSolution.SplitSolutionWithOnly(reagentTick, EvaporationReagents); + + //CP14 Force evaporation + if (!evaporation.CP14ForceEvaporation) + puddleSolution.SplitSolutionWithOnly(reagentTick, EvaporationReagents); + else + puddleSolution.SplitSolution(reagentTick); + //CP14 end force evaporation // Despawn if we're done if (puddleSolution.Volume == FixedPoint2.Zero) diff --git a/Content.Server/Fluids/EntitySystems/PuddleSystem.cs b/Content.Server/Fluids/EntitySystems/PuddleSystem.cs index 3889be1174..259a2d31eb 100644 --- a/Content.Server/Fluids/EntitySystems/PuddleSystem.cs +++ b/Content.Server/Fluids/EntitySystems/PuddleSystem.cs @@ -341,7 +341,7 @@ public sealed partial class PuddleSystem : SharedPuddleSystem _deletionQueue.Remove(entity); UpdateSlip(entity, entity.Comp, args.Solution); UpdateSlow(entity, args.Solution); - UpdateEvaporation(entity, args.Solution); + //UpdateEvaporation(entity, args.Solution); //CP14 Force evaporation under sky via YML UpdateAppearance(entity, entity.Comp); } diff --git a/Content.Server/_CP14/FootStep/CP14DecalCleanerComponent.cs b/Content.Server/_CP14/FootStep/CP14DecalCleanerComponent.cs new file mode 100644 index 0000000000..299e510604 --- /dev/null +++ b/Content.Server/_CP14/FootStep/CP14DecalCleanerComponent.cs @@ -0,0 +1,20 @@ +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; + +namespace Content.Server._CP14.FootStep; + +/// +/// +/// +[RegisterComponent, Access(typeof(CP14FootprintsSystem))] +public sealed partial class CP14DecalCleanerComponent : Component +{ + [DataField] + public SoundSpecifier Sound = new SoundCollectionSpecifier("CP14Broom"); + + [DataField] + public EntProtoId? SpawnEffect = "CP14DustEffect"; + + [DataField] + public float Range = 1.5f; +} diff --git a/Content.Server/_CP14/FootStep/CP14FootprintHolderComponent.cs b/Content.Server/_CP14/FootStep/CP14FootprintHolderComponent.cs new file mode 100644 index 0000000000..49d748ba99 --- /dev/null +++ b/Content.Server/_CP14/FootStep/CP14FootprintHolderComponent.cs @@ -0,0 +1,33 @@ +using Content.Shared.Decals; +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; + +namespace Content.Server._CP14.FootStep; + +/// +/// stores the type of footprints and their settings. +/// +[RegisterComponent, Access(typeof(CP14FootprintsSystem))] +public sealed partial class CP14FootprintHolderComponent : Component +{ + [DataField] + public ProtoId DecalProto = "CP14FootprintsBoots"; + + [DataField] + public float DecalDistance = 1f; + + [DataField] + public float DistanceTraveled = 0f; + + [DataField] + public Color DecalColor = Color.White; + + [DataField] + public float Intensity = 0f; + + [DataField] + public FixedPoint2 PickSolution = 1f; + + [DataField] + public float DistanceIntensityCost = 0.2f; +} diff --git a/Content.Server/_CP14/FootStep/CP14FootprintTrailerComponent.cs b/Content.Server/_CP14/FootStep/CP14FootprintTrailerComponent.cs new file mode 100644 index 0000000000..1367f39f71 --- /dev/null +++ b/Content.Server/_CP14/FootStep/CP14FootprintTrailerComponent.cs @@ -0,0 +1,15 @@ + +namespace Content.Server._CP14.FootStep; + +/// +/// allows an entity to leave footprints on the tiles +/// +[RegisterComponent, Access(typeof(CP14FootprintsSystem))] +public sealed partial class CP14FootprintTrailerComponent : Component +{ + /// + /// Source and type of footprint + /// + [DataField] + public CP14FootprintHolderComponent? holder = null; +} diff --git a/Content.Server/_CP14/FootStep/CP14FootprintsSystem.cs b/Content.Server/_CP14/FootStep/CP14FootprintsSystem.cs new file mode 100644 index 0000000000..2dd0ad1003 --- /dev/null +++ b/Content.Server/_CP14/FootStep/CP14FootprintsSystem.cs @@ -0,0 +1,157 @@ +using System.Numerics; +using Content.Server.Decals; +using Content.Shared.Fluids; +using Content.Shared.Fluids.Components; +using Content.Shared.Interaction; +using Content.Shared.Inventory.Events; +using Content.Shared.Maps; +using Robust.Server.GameObjects; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Map; +using Robust.Shared.Map.Components; +using Robust.Shared.Physics.Events; +using Robust.Shared.Prototypes; + +namespace Content.Server._CP14.FootStep; + +public sealed class CP14FootprintsSystem : EntitySystem +{ + [Dependency] private readonly DecalSystem _decal = default!; + [Dependency] private readonly SharedMapSystem _maps = default!; + [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnTrailerMove); + SubscribeLocalEvent(OnTrailerCollide); + + SubscribeLocalEvent(OnHolderEquipped); + SubscribeLocalEvent(OnHolderUnequipped); + + SubscribeLocalEvent(OnBeforeInteract); + } + + private void OnBeforeInteract(Entity ent, ref BeforeRangedInteractEvent args) + { + if (!args.CanReach) + return; + + // Remove old decals + var gridUid = Transform(ent).GridUid; + if (gridUid is null) + return; + + if (!TryComp(gridUid, out var map)) + return; + + var vec = _transform.GetGridOrMapTilePosition(ent); + var tileCenterVec = vec + map.TileSizeHalfVector; + + var oldDecals = _decal.GetDecalsInRange(gridUid.Value, tileCenterVec, ent.Comp.Range); + + if (oldDecals.Count > 0) + { + _audio.PlayPvs(ent.Comp.Sound, args.ClickLocation); + SpawnAtPosition(ent.Comp.SpawnEffect, args.ClickLocation); + } + + foreach (var (id, decal) in oldDecals) + { + if (decal.Cleanable) + _decal.RemoveDecal(gridUid.Value, id); + } + } + + private void OnHolderUnequipped(Entity ent, ref GotUnequippedEvent args) + { + if (!TryComp(args.Equipee, out var trailer)) + return; + + trailer.holder = null; + + if (TryComp(args.Equipee, out var selfHolder)) + { + trailer.holder = selfHolder; + } + } + + private void OnHolderEquipped(Entity ent, ref GotEquippedEvent args) + { + if (!TryComp(args.Equipee, out var trailer)) + return; + + trailer.holder = ent.Comp; + } + + private void OnTrailerCollide(Entity ent, ref StartCollideEvent args) + { + if (ent.Comp.holder is null) + return; + var footprint = ent.Comp.holder; + + if (!TryComp(args.OtherEntity, out var puddle)) + return; + + if (puddle.Solution is null) + return; + + var sol = puddle.Solution; + + var splittedSol = sol.Value.Comp.Solution.SplitSolutionWithout(footprint.PickSolution, SharedPuddleSystem.EvaporationReagents); + + if (splittedSol.Volume > 0) + UpdateFootprint(footprint, splittedSol.GetColor(_proto)); + } + + private void UpdateFootprint(CP14FootprintHolderComponent comp, Color color) + { + comp.DecalColor = color; + comp.Intensity = 1f; + } + + private void OnTrailerMove(Entity ent, ref MoveEvent args) + { + if (ent.Comp.holder is null) + return; + var footprint = ent.Comp.holder; + + var distance = Vector2.Distance(args.OldPosition.Position, args.NewPosition.Position); + + footprint.DistanceTraveled += distance; + + if (footprint.DistanceTraveled < footprint.DecalDistance) + return; + + footprint.DistanceTraveled = 0f; + + var xform = Transform(ent); + if (!TryComp(xform.GridUid, out var mapGrid)) + return; + + var tileRef = _maps.GetTileRef(xform.GridUid.Value, mapGrid, xform.Coordinates); + var tileDef = (ContentTileDefinition)_tileDefManager[tileRef.Tile.TypeId]; + + if (tileDef.Weather && tileDef.Color is not null) + { + UpdateFootprint(footprint, tileDef.Color.Value); + return; + } + + if (footprint.Intensity <= 0) + return; + + _decal.TryAddDecal(footprint.DecalProto, + xform.Coordinates.Offset(new Vector2(-0.5f, -0.5f)), + out var decal, + footprint.DecalColor.WithAlpha(footprint.Intensity), + xform.LocalRotation, + cleanable: true); + + footprint.Intensity = MathF.Max(0, footprint.Intensity - footprint.DistanceIntensityCost); + } +} diff --git a/Content.Shared/Fluids/Components/EvaporationComponent.cs b/Content.Shared/Fluids/Components/EvaporationComponent.cs index f2ed3a6186..dad2af800c 100644 --- a/Content.Shared/Fluids/Components/EvaporationComponent.cs +++ b/Content.Shared/Fluids/Components/EvaporationComponent.cs @@ -22,4 +22,10 @@ public sealed partial class EvaporationComponent : Component /// [DataField("evaporationAmount")] public FixedPoint2 EvaporationAmount = FixedPoint2.New(0.3); + + /// + /// forcibly vaporizes ALL the chemicals + /// + [DataField] + public bool CP14ForceEvaporation = false; } diff --git a/Content.Shared/Fluids/SharedPuddleSystem.Evaporation.cs b/Content.Shared/Fluids/SharedPuddleSystem.Evaporation.cs index 023d024a05..21e1713425 100644 --- a/Content.Shared/Fluids/SharedPuddleSystem.Evaporation.cs +++ b/Content.Shared/Fluids/SharedPuddleSystem.Evaporation.cs @@ -6,7 +6,7 @@ namespace Content.Shared.Fluids; public abstract partial class SharedPuddleSystem { [ValidatePrototypeId] - private const string Water = "Water"; + private const string Water = "CP14Water"; //CP14 Water public static readonly string[] EvaporationReagents = [Water]; diff --git a/Content.Shared/Maps/ContentTileDefinition.cs b/Content.Shared/Maps/ContentTileDefinition.cs index cf121ffd9c..47abb40439 100644 --- a/Content.Shared/Maps/ContentTileDefinition.cs +++ b/Content.Shared/Maps/ContentTileDefinition.cs @@ -129,5 +129,11 @@ namespace Content.Shared.Maps /// [DataField] public ProtoId? BurnedTile { get; private set; } = null; + + /// + /// CP14 - color for footprints + /// + [DataField] + public Color? Color; } } diff --git a/Resources/Audio/_CP14/Items/attributions.yml b/Resources/Audio/_CP14/Items/attributions.yml index 34d5c92d6d..bff67cf737 100644 --- a/Resources/Audio/_CP14/Items/attributions.yml +++ b/Resources/Audio/_CP14/Items/attributions.yml @@ -51,4 +51,9 @@ - files: ["sawing1.ogg", "sawing2.ogg", "sawing3.ogg", "sawing4.ogg", "sawing5.ogg"] license: "CC0-1.0" copyright: 'by deleted_user_7146007 of Freesound.org. Cropped and mixed from stereo to mono.' - source: "https://freesound.org/people/deleted_user_7146007/sounds/383725/" \ No newline at end of file + source: "https://freesound.org/people/deleted_user_7146007/sounds/383725/" + +- files: ["broom1.ogg", "broom2.ogg", "broom3.ogg"] + license: "CC-BY-4.0" + copyright: 'by F.M.Audio of Freesound.org. Cropped by TheShuEd.' + source: "https://freesound.org/people/F.M.Audio/sounds/552056/" \ No newline at end of file diff --git a/Resources/Audio/_CP14/Items/broom1.ogg b/Resources/Audio/_CP14/Items/broom1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d2acfd0b39ae1be6b42dff7a6365facbf2d1bb30 GIT binary patch literal 7326 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/_CP14/Items/broom3.ogg b/Resources/Audio/_CP14/Items/broom3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0023861ac8b5b1cca2d63f3b8c817ee4593ec3a9 GIT binary patch literal 6488 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 G5}E*8gl3ok literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Decals/footprints.rsi/footprint.png b/Resources/Textures/_CP14/Decals/footprints.rsi/footprint.png new file mode 100644 index 0000000000000000000000000000000000000000..0f2e6f86d41fa97b2e900e4d6a04747d288bb767 GIT binary patch literal 273 zcmV+s0q*{ZP)Px#%Sl8*R9J=Wmaz?lFbqY%qjOrMtU<*Tw-O_;1cNXQHBBVq4mVevkmyK|4~om{ zt^f6H=^Ln242dx|F~+83hAhRIc>n-a?L!D_&YZIrC!&s-htecWOr(@X5m`#aO%ebA zW*(e#EfLKn3B0TfsA_*S^Vkh|@28`g+t?$&{rD=C%71aC@6X8o2d?)08ChMhixW`? ze9PvMz88@tr8HWKmnJYf=h}T07G(VcA%s;#ux;DhN_Z#xA5hiadp`jW-2hNKzw#SC X7gKbt)Z=QC00000NkvXXu0mjfI*M(_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Decals/footprints.rsi/meta.json b/Resources/Textures/_CP14/Decals/footprints.rsi/meta.json new file mode 100644 index 0000000000..b8c8b3dfee --- /dev/null +++ b/Resources/Textures/_CP14/Decals/footprints.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CLA", + "copyright": "Created by TheShuEd", + "states": [ + { + "name": "boots" + }, + { + "name": "footprint" + } + ] +} diff --git a/Resources/Textures/_CP14/Effects/dust.rsi/dust.png b/Resources/Textures/_CP14/Effects/dust.rsi/dust.png new file mode 100644 index 0000000000000000000000000000000000000000..897defe4a60b80ad1b8db7157090329b0214ba59 GIT binary patch literal 934 zcmV;X16lluP)Px&U`a$lRCt{2nmcaeFc60ST`YtER6{jx=t`G}t`T5W<`4mN3IcnAR4KiHuc5sJ zE2~i>HWU!3+9ITvmLH;I`H}2=fD4NRIT{X!)XV?`K@bE%5XAq&AUYh4vZQOz;-CxSDoGSY zOaJAaFlm~?Jy%MtIOiFFS+{~x3MUl5w=ha6FvgYu{tS&BYypP^>I;>oDWWJ^P8stE z6+X;)XKwp~IZi0LZQD)A1i=dEx^CkpKd~CKV*N?U7|Y$<4-XG70J64ioxiF4_7LUx z1S>#mT>*GG)ki4>V@&9fK@>$%wQXDC<0Q!5-`{_yXd!0@$+x&p~BHQ4H?Ab9jAyeN2+1^sMp4$`yS4If9*_#qG(J?~y%%P467Ku3PrD z;x7Pbnr5^E9_0kxp2Rycj%iB>o=K=N>t!fCDu_*YfaJW5@>xt##?|?I}miJu@mfs+2<4b#qpL+?*i` zaL#Re2M8@anG3fK0U$||*|*CP`9WV(h_tz)(8ezn5RiIdaak zrfHBQ$?RjFl^*XEC9`+`(yOCK#vL^juCZT zSI^JSS2KVAYxA62=UEEy9OSKVF@edPx$YDq*vR9J=Gm9b01Kp4fJA{m?tLYERK)S=eNL9jT85X@``XS4Ya_z$>dir^?N zos*@73PMLgCxymP6hcFWCPYHT!7S$>Ek!JC@4FDzqfHyyY7bn>PR7yq21t~j#OdZfQmA#L?aPPdXWCB2u5CC5Lg#l0`1c0{zLd5$5 zjzxBWGJhceRQvNELh1-eIy>57_39>f0D-)ZKt%uZ?SO~?asyC)!9oB;)o&pH(^AME zA^`wDmg|~I>il0?o3~(m`^Og#UYuYW;%V?f2ACTl(^9Z5ow8u`2>@sr2D~_dT#&H4 zB~R9!-`sMAaUp<%{Yw^xL%6Pwa=C&Oe&hyfGDt;)9bP*uvw?wWKOTkI_>7tAtgN`zkvWC42P(09|}7+ ab$tV0-lBZn)#D`q0000f literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/Tools/mop.rsi/inhand-left.png b/Resources/Textures/_CP14/Objects/Tools/mop.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..1b2e5c5448c25b5f6b1a1a47866248af8df1d8ff GIT binary patch literal 745 zcmVPx%qe(XOMBQt%=$0*fG=!FY?tfRX29$nMSk8#2hd(cF%m zGst@gWKaYdFV{hwa2;8drMt^rxeq+b();e+JK6668jVJy(MZAN zX^V{dJtFd+A4J_~)bEkY)0WWSiXcot5w7o_jECnKBC|k3di8HUf9F;VrOp5#$%4sZ#qC7kBEb9f z(U5)bQR&Xz|i8#&vAMIt!#Pf_bozQAq%g{hkM{1waz~kDtFW zeY~sm43z}3S_m~*rLYd&{&urx- zuo#U|RszepAmt?R7>ZIx0?&ys=_QC5hm%@@s98X%C5XaxY%PIDyR0yx`vJSCBH_RJ zXLWNi_UTS5-5k|qkhdMOwruVephw!~m}}OT$Tkq+IyPxHYWQ;VEq(5+Sb&@@5RSWu zmunmy9;AKvO|uv0x9LYVwnu6PUWXhV9w1(>-z?xx0j=XJ;s--a7ArK(dOG^13Y!v| zW*w8o3Vtv|>-g%g?XgpUb8==_mI*%?B8+Bensu}rHU3Y|kanYnrddZA&2~0ab5DUR z393L>J}-Enz%jTjK?P{R`&aP59xp<)HT`S-HN8g00th4mSkDmvNF=<+NK6^RaaXs} bH3j$s;+TE1fNrWd00000NkvXXu0mjfu(M2G literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/Tools/mop.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/Tools/mop.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..5b1a2604d53ade1e529edc454aab0987b8824b27 GIT binary patch literal 830 zcmV-E1Ht@>P)Px%_(?=TRCt{2nlWe^Q5eVn7fOUeq*!psksug?HA8SHm@yzaCxc|Ho1IGuC4+Vp zac;M+lHr^i0*(eU1P7BF6hx_8i`1zuuS0qEJU#F3-CewQzTc*v-249D|K4|Z-v%QJ$9u4yt?4#%TLSe4V(jt*%WCHCYG`f zSP-D4cBSn5*Y?W@Cs=lXSvm0oH2Zeyz9j*y+DWiRirExlaVgiEpc~c6kpS!57t~IZ z{QCW8CW75-pW;Y>QmyRd@64#3Ch7NoU^t#aD*_8l0w|3Pltu=zn9O=!M_W}U_MTo^@B#ur45tD7yPSf{y zsse#PAP@)yn}g9*#wwnBNW-)HX4;m%xZIThYws0lL!(|9k+*O5@bTMsKJV*UGOvf* zaUC~;r*J2No554K5y6Y#DZUrM%it-#72!F8r{vQ~LSM+bg`+Z4E#%l|a2U}C@3d{l z+!t^(faD@h-M}OOOBdEloQPm60PTs^-7#JkG|QT}ZjQRaf&fN#DrQrp`l(OO&u-VA zeZYFQ%`T4x0qT{}LRs_MHE)DI*nB!k>Xni8K}n^N!Eii9BpjM`T>Tt8b)(h|+I2_5 zAq>aUl`fbQAbEI2O0_cDg9+kt)YriqLC5;yaun^s1f^OT$-^r{7t9HuZ96Ni9^!Ho z$NM|pui8b9_jeGNqflBslxk(ue&NC%uuKG=1|{tT4;Yj|y$Ha+4aI}?x{jUT0h1dc zeeeC^a#!+03Dl$APx%Pf0{URCt{2+A(X}Koke?ze^#5K|=}}qDA1PBy{i=x)qF6=+sg|hh$JD^#hbb zARi#;12kKPcnGD~lfeyzY^7U=kdh^!MS%$7LEypDb#U)c9a)xa-ARt$4?I}1@7~?L zlf<0>LI@#*5JCtcL@L*6vVO14uCFc_KX!d}!TP;6bFC&z`>!ldRaVw8bcE3m@B?wo z_XC8{5Di0D8H(^kb%nZChiMw(yJ;HGwYuss1f>}OU}^@GMRdUA92`U=eE7Uk1Ay}{ z_Y4@P@J$ek-|)2M$KvO$kI!lVaCUUd0AO8P1CX2n@B`fai(wFr#5rF7A|~rUKL7n+ znG08thif(2OUH$-)$#hxZVdqXy*3M@A%315KL{>Or`t+B|L*ONOyww_0@E@eudEH6 zMQH~NqS4fAKs@zTTKT&`DJCC;%8Z2&LI@#*5JCtcq%g~}&>>|>%yVq!`@vFlLgCBe ze1D-~=y>sd52k70`PM6?%kOze32bM3ldWrOOVJ5Zroh)&Z$LR9gDXKgjq%Di{ zb^ancLFU%Ev?&0LGa)`5KAn7@yFSmc8Gwb#P=Yr;uE-Je9J{oaDN=ck&G;xKnYEcY zPkn_JxQMcXajhmx$~a}Jl8(wdq0?9)itNm{JAuc*9|qW0&D#A7=nllxR89QW%NxIccrgDHX_eAFD}H_2+1`BcZem>JM{^#0 vz_N_|qw9b?jeoRerTt1+>BbX6NLGIV!_p?MzesqS00000NkvXXu0mjf5<)Rj literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/Tools/mop.rsi/wielded-inhand-right.png b/Resources/Textures/_CP14/Objects/Tools/mop.rsi/wielded-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..05b0db197a740073e373c6fafc6c1db4d659d0de GIT binary patch literal 642 zcmV-|0)737P)Px%JV``BRCt{2+A(X}Kor37zd|5`!9xlfs>R^Vn>N!q$c0YrU^;a1rhb6X4^Sus ze}HCchI$C4B$L4n1#hKWhvMR;phbZi>OtVa({(Us6h}6Weaflv`+>o>Kz{f1^d##J zgb+dqA%qY@?5N?OuX^2%3Iku+jwNql;HzG@qlSaN0@w$LqL@)Kq3XGIqq_%H&t;TM zAc_Il1E^Fy+;YikVE4%_m#9=cV4(tbMY;m^VO9Y|F@KnyBjaQWz{@v}9e}I%e-+Hi z=XX3pzX#@@7qC)hAy0|=Ax&6iSuWRos41D#Z72=jlJbm`cxlsW{b(aCIV`&f2rT37Hlc`(< z(iH&AZiMWGW5+IzSqLG75JCtcgb@FcJRe@{<+Wo|hJ(I}qL_B8kxLQ^_Xs>q5B}%p zkMsEk(~s>7n}Ef^kCQ2%zW*{FZy`^CtRtVt;33BZY&zARHTXQ|D~xAVH>=~bFB|W> z-D;?G**EJo1^HEh5n;<2YwECkK-F{S-Mm?^DZOID^nASuIstc$?N$Qxb@;>E zcjzSKc_(I?K6qQ*GV67Ny2)8@I2%~EIWNu9VkLn2KO#l2azMM1gq6~#gY8(Xk>w;p c2=PGu1DX6muGY}|i2wiq07*qoM6N<$g2>P^4*&oF literal 0 HcmV?d00001