From db97317bbba82c9cd620fb9be6ef45a10fa295f4 Mon Sep 17 00:00:00 2001 From: PuroSlavKing <103608145+PuroSlavKing@users.noreply.github.com> Date: Sun, 15 Dec 2024 16:48:19 +0300 Subject: [PATCH] [Port] Displacement Maps (#165) * Displacement Map Visualizer QoL (#27392) * Update Displacement Map Visualizer.lua * Add files via upload * Fix background layer being offset This was caused by not taking the cel's own bounds into account. Aseprite doesn't make an image layer "full size" if it only covers a small part of the sprite. --------- Co-authored-by: Pieter-Jan Briers * Displacement maps now works on any layers (#27405) * try * pipupi * Update ClientClothingSystem.cs * Update vox.yml * Update ClientClothingSystem.cs * Fix Vox clothing in character creation menu (#29709) Update vox.yml * Vox displacement updates (#29824) * more vox displacement maps * A * remove vox insuls sprites * sci magboots * Update vox.yml * Update meta.json --------- Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com> * Displacement maps big update (#30093) * split logic into own system * add support for different size displacement maps * some clothes may not use displacement maps * displacement maps spport hand sprites * Update DisplacementMapSystem.cs * rename things * fuck stencilmask * fix bugs * no masks * Update jumpsuits.yml * fix species specific sprites * Update ClothingSystem.cs * shoes + ears displacement, some bugfix * Update DisplacementMapSystem.cs * Vox head displacement map (#30699) * head displacement for vox * fixe * fix index stepping to avoid pushing front layers into back layers (#32553) Co-authored-by: charlie * Mothroaches can now wear hamster-wearable clothes + pet inventory tweaks (#28956) * moth displacement + inventory tweaks * Fix off by 1 on the head sprites * Move files to main mothroach folder * Fix mask up a bit * Fix side mask sprites * Change format because it changed forever ago * fix mothroach spawner * remove nyano femaleMask --------- Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers Co-authored-by: Flareguy <78941145+Flareguy@users.noreply.github.com> Co-authored-by: Charlie Co-authored-by: charlie Co-authored-by: Verm <32827189+Vermidia@users.noreply.github.com> --- .../Clothing/ClientClothingSystem.cs | 114 +++++------------- .../DisplacementMap/DisplacementMapSystem.cs | 65 ++++++++++ Content.Client/Hands/Systems/HandsSystem.cs | 6 + .../Clothing/Components/ClothingComponent.cs | 12 -- .../Clothing/EntitySystems/ClothingSystem.cs | 1 - .../DisplacementMap/DisplacementData.cs | 14 +++ .../Hands/Components/HandsComponent.cs | 4 + .../Inventory/InventoryComponent.cs | 26 ++-- .../Catalog/Cargo/cargo_livestock.yml | 2 +- .../Entities/Clothing/Uniforms/jumpsuits.yml | 2 - .../Clothing/Uniforms/random_suit.yml | 2 - .../Prototypes/Entities/Mobs/NPCs/animals.yml | 37 +++++- .../Entities/Mobs/Species/arachnid.yml | 17 +-- .../Prototypes/Entities/Mobs/Species/base.yml | 20 +-- .../Entities/Mobs/Species/diona.yml | 20 ++- .../Entities/Mobs/Species/dwarf.yml | 15 +++ .../Entities/Mobs/Species/gingerbread.yml | 15 +++ .../Entities/Mobs/Species/human.yml | 15 +++ .../Prototypes/Entities/Mobs/Species/moth.yml | 24 ++-- .../Entities/Mobs/Species/reptilian.yml | 22 +++- .../Entities/Mobs/Species/skeleton.yml | 19 ++- .../Entities/Mobs/Species/slime.yml | 18 ++- .../Prototypes/Entities/Mobs/Species/vox.yml | 89 ++++++++++++-- .../hamster_inventory_template.yml | 7 +- .../pet_inventory_template.yml | 5 +- .../Entities/Clothing/Uniforms/costumes.yml | 13 -- .../Entities/Markers/Spawners/mobs.yml | 2 +- .../Color/yellow.rsi/equipped-HAND-vox.png | Bin 387 -> 0 bytes .../Hands/Gloves/Color/yellow.rsi/meta.json | 5 - .../equipped-OUTERCLOTHING-vox.png | Bin 671 -> 605 bytes .../open-equipped-OUTERCLOTHING-vox.png | Bin 672 -> 607 bytes .../equipped-OUTERCLOTHING-vox.png | Bin 699 -> 631 bytes .../open-equipped-OUTERCLOTHING-vox.png | Bin 699 -> 636 bytes .../equipped-OUTERCLOTHING-vox.png | Bin 661 -> 594 bytes .../open-equipped-OUTERCLOTHING-vox.png | Bin 658 -> 591 bytes .../equipped-OUTERCLOTHING-vox.png | Bin 699 -> 631 bytes .../open-equipped-OUTERCLOTHING-vox.png | Bin 699 -> 636 bytes .../equipped-OUTERCLOTHING-vox.png | Bin 699 -> 631 bytes .../open-equipped-OUTERCLOTHING-vox.png | Bin 699 -> 636 bytes .../equipped-OUTERCLOTHING-vox.png | Bin 699 -> 631 bytes .../open-equipped-OUTERCLOTHING-vox.png | Bin 699 -> 636 bytes .../combatboots.rsi/equipped-FEET-vox.png | Bin 0 -> 459 bytes .../Shoes/Boots/combatboots.rsi/meta.json | 56 +++++---- .../equipped-FEET-vox.png | Bin 0 -> 1164 bytes .../Boots/magboots-science.rsi/meta.json | 10 +- .../on-equipped-FEET-vox.png | Bin 0 -> 1201 bytes .../speedboots.rsi/equipped-FEET-vox.png | Bin 0 -> 1486 bytes .../Shoes/Boots/speedboots.rsi/meta.json | 10 +- .../speedboots.rsi/on-equipped-FEET-vox.png | Bin 0 -> 1491 bytes .../mothroach/displacement.rsi/eyes.png | Bin 0 -> 308 bytes .../mothroach/displacement.rsi/head.png | Bin 0 -> 703 bytes .../mothroach/displacement.rsi/mask.png | Bin 0 -> 731 bytes .../mothroach/displacement.rsi/meta.json | 35 ++++++ .../mothroach/displacement.rsi/neck.png | Bin 0 -> 324 bytes .../displacement.rsi/suitstorage.png | Bin 0 -> 672 bytes .../mothroach.rsi/0-equipped-HELMET.png | Bin .../{ => mothroach}/mothroach.rsi/icon.png | Bin .../mothroach.rsi/inhand-left.png | Bin .../mothroach.rsi/inhand-right.png | Bin .../{ => mothroach}/mothroach.rsi/meta.json | 0 .../mothroach.rsi/mothroach-moving.png | Bin .../mothroach.rsi/mothroach.png | Bin .../mothroach.rsi/mothroach_dead.png | Bin .../mothroach.rsi/mothroach_lazy.png | Bin .../mothroach.rsi/mothroach_sleep.png | Bin .../vox_parts.rsi/tail_stenciled.png | Bin 615 -> 297 bytes .../displacement.rsi/jumpsuit-female.png | Bin 0 -> 275 bytes .../Species/Human/displacement.rsi/meta.json | 18 +++ .../Species/Vox/displacement.rsi/back.png | Bin 0 -> 451 bytes .../Species/Vox/displacement.rsi/ears.png | Bin 0 -> 245 bytes .../Species/Vox/displacement.rsi/eyes.png | Bin 0 -> 508 bytes .../Species/Vox/displacement.rsi/hand.png | Bin 0 -> 483 bytes .../Species/Vox/displacement.rsi/head.png | Bin 0 -> 253 bytes .../Species/Vox/displacement.rsi/meta.json | 26 +++- .../Species/Vox/displacement.rsi/shoes.png | Bin 0 -> 341 bytes .../Mobs/Species/Vox/parts.rsi/torso.png | Bin 866 -> 955 bytes 76 files changed, 514 insertions(+), 232 deletions(-) create mode 100644 Content.Client/DisplacementMap/DisplacementMapSystem.cs create mode 100644 Content.Shared/DisplacementMap/DisplacementData.cs delete mode 100644 Resources/Textures/Clothing/Hands/Gloves/Color/yellow.rsi/equipped-HAND-vox.png create mode 100644 Resources/Textures/Clothing/Shoes/Boots/combatboots.rsi/equipped-FEET-vox.png create mode 100644 Resources/Textures/Clothing/Shoes/Boots/magboots-science.rsi/equipped-FEET-vox.png create mode 100644 Resources/Textures/Clothing/Shoes/Boots/magboots-science.rsi/on-equipped-FEET-vox.png create mode 100644 Resources/Textures/Clothing/Shoes/Boots/speedboots.rsi/equipped-FEET-vox.png create mode 100644 Resources/Textures/Clothing/Shoes/Boots/speedboots.rsi/on-equipped-FEET-vox.png create mode 100644 Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/eyes.png create mode 100644 Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/head.png create mode 100644 Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/mask.png create mode 100644 Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/meta.json create mode 100644 Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/neck.png create mode 100644 Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/suitstorage.png rename Resources/Textures/Mobs/Animals/{ => mothroach}/mothroach.rsi/0-equipped-HELMET.png (100%) rename Resources/Textures/Mobs/Animals/{ => mothroach}/mothroach.rsi/icon.png (100%) rename Resources/Textures/Mobs/Animals/{ => mothroach}/mothroach.rsi/inhand-left.png (100%) rename Resources/Textures/Mobs/Animals/{ => mothroach}/mothroach.rsi/inhand-right.png (100%) rename Resources/Textures/Mobs/Animals/{ => mothroach}/mothroach.rsi/meta.json (100%) rename Resources/Textures/Mobs/Animals/{ => mothroach}/mothroach.rsi/mothroach-moving.png (100%) rename Resources/Textures/Mobs/Animals/{ => mothroach}/mothroach.rsi/mothroach.png (100%) rename Resources/Textures/Mobs/Animals/{ => mothroach}/mothroach.rsi/mothroach_dead.png (100%) rename Resources/Textures/Mobs/Animals/{ => mothroach}/mothroach.rsi/mothroach_lazy.png (100%) rename Resources/Textures/Mobs/Animals/{ => mothroach}/mothroach.rsi/mothroach_sleep.png (100%) create mode 100644 Resources/Textures/Mobs/Species/Human/displacement.rsi/jumpsuit-female.png create mode 100644 Resources/Textures/Mobs/Species/Human/displacement.rsi/meta.json create mode 100644 Resources/Textures/Mobs/Species/Vox/displacement.rsi/back.png create mode 100644 Resources/Textures/Mobs/Species/Vox/displacement.rsi/ears.png create mode 100644 Resources/Textures/Mobs/Species/Vox/displacement.rsi/eyes.png create mode 100644 Resources/Textures/Mobs/Species/Vox/displacement.rsi/hand.png create mode 100644 Resources/Textures/Mobs/Species/Vox/displacement.rsi/head.png create mode 100644 Resources/Textures/Mobs/Species/Vox/displacement.rsi/shoes.png diff --git a/Content.Client/Clothing/ClientClothingSystem.cs b/Content.Client/Clothing/ClientClothingSystem.cs index dd69521f48..b3d6848915 100644 --- a/Content.Client/Clothing/ClientClothingSystem.cs +++ b/Content.Client/Clothing/ClientClothingSystem.cs @@ -1,9 +1,12 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; +using System.Numerics; +using Content.Client.DisplacementMap; using Content.Client.Inventory; using Content.Shared.Clothing; using Content.Shared.Clothing.Components; using Content.Shared.Clothing.EntitySystems; +using Content.Shared.DisplacementMap; using Content.Shared.Humanoid; using Content.Shared.Inventory; using Content.Shared.Inventory.Events; @@ -49,6 +52,7 @@ public sealed class ClientClothingSystem : ClothingSystem [Dependency] private readonly IResourceCache _cache = default!; [Dependency] private readonly ISerializationManager _serialization = default!; [Dependency] private readonly InventorySystem _inventorySystem = default!; + [Dependency] private readonly DisplacementMapSystem _displacement = default!; public override void Initialize() { @@ -63,15 +67,14 @@ public sealed class ClientClothingSystem : ClothingSystem private void OnAppearanceUpdate(EntityUid uid, InventoryComponent component, ref AppearanceChangeEvent args) { - // May need to update jumpsuit stencils if the sex changed. Also required to properly set the stencil on init + // May need to update displacement maps if the sex changed. Also required to properly set the stencil on init if (args.Sprite == null) return; - if (_inventorySystem.TryGetSlotEntity(uid, Jumpsuit, out var suit, component) - && TryComp(suit, out ClothingComponent? clothing)) + var enumerator = _inventorySystem.GetSlotEnumerator((uid, component)); + while (enumerator.NextItem(out var item, out var slot)) { - SetGenderedMask(uid, args.Sprite, clothing); - return; + RenderEquipment(uid, item, slot.Name, component); } // No clothing equipped -> make sure the layer is hidden, though this should already be handled by on-unequip. @@ -181,14 +184,6 @@ public sealed class ClientClothingSystem : ClothingSystem private void OnDidUnequip(EntityUid uid, SpriteComponent component, DidUnequipEvent args) { - // Hide jumpsuit mask layer. - if (args.Slot == Jumpsuit - && TryComp(uid, out SpriteComponent? sprite) - && sprite.LayerMapTryGet(HumanoidVisualLayers.StencilMask, out var maskLayer)) - { - sprite.LayerSetVisible(maskLayer, false); - } - if (!TryComp(uid, out InventorySlotsComponent? inventorySlots)) return; @@ -233,9 +228,6 @@ public sealed class ClientClothingSystem : ClothingSystem return; } - if (slot == Jumpsuit) - SetGenderedMask(equipee, sprite, clothingComponent); - if (!_inventorySystem.TryGetSlot(equipee, slot, out var slotDef, inventory)) return; @@ -267,7 +259,25 @@ public sealed class ClientClothingSystem : ClothingSystem // temporary, until layer draw depths get added. Basically: a layer with the key "slot" is being used as a // bookmark to determine where in the list of layers we should insert the clothing layers. bool slotLayerExists = sprite.LayerMapTryGet(slot, out var index); - var displacementData = inventory.Displacements.GetValueOrDefault(slot); + + // Select displacement maps + var displacementData = inventory.Displacements.GetValueOrDefault(slot); //Default unsexed map + + var equipeeSex = CompOrNull(equipee)?.Sex; + if (equipeeSex != null) + { + switch (equipeeSex) + { + case Sex.Male: + if (inventory.MaleDisplacements.Count > 0) + displacementData = inventory.MaleDisplacements.GetValueOrDefault(slot); + break; + case Sex.Female: + if (inventory.FemaleDisplacements.Count > 0) + displacementData = inventory.FemaleDisplacements.GetValueOrDefault(slot); + break; + } + } // add the new layers foreach (var (key, layerData) in ev.Layers) @@ -292,7 +302,7 @@ public sealed class ClientClothingSystem : ClothingSystem index = sprite.LayerMapReserveBlank(key); if (sprite[index] is not Layer layer) - return; + continue; // In case no RSI is given, use the item's base RSI as a default. This cuts down on a lot of unnecessary yaml entries. if (layerData.RsiPath == null @@ -303,78 +313,20 @@ public sealed class ClientClothingSystem : ClothingSystem layer.SetRsi(clothingSprite.BaseRSI); } - // Another "temporary" fix for clothing stencil masks. - // Sprite layer redactor when - // Sprite "redactor" just a week away. - if (slot == Jumpsuit) - layerData.Shader ??= "StencilDraw"; - sprite.LayerSetData(index, layerData); layer.Offset += slotDef.Offset; - if (displacementData != null) + if (displacementData is not null) { - if (displacementData.ShaderOverride != null) - sprite.LayerSetShader(index, displacementData.ShaderOverride); - - var displacementKey = $"{key}-displacement"; - if (!revealedLayers.Add(displacementKey)) - { - Log.Warning($"Duplicate key for clothing visuals DISPLACEMENT: {displacementKey}."); + //Checking that the state is not tied to the current race. In this case we don't need to use the displacement maps. + if (layerData.State is not null && inventory.SpeciesId is not null && layerData.State.EndsWith(inventory.SpeciesId)) continue; - } - var displacementLayer = _serialization.CreateCopy(displacementData.Layer, notNullableOverride: true); - displacementLayer.CopyToShaderParameters!.LayerKey = key; - - // Add before main layer for this item. - sprite.AddLayer(displacementLayer, index); - sprite.LayerMapSet(displacementKey, index); - - revealedLayers.Add(displacementKey); + if (_displacement.TryAddDisplacement(displacementData, sprite, index, key, revealedLayers)) + index++; } } RaiseLocalEvent(equipment, new EquipmentVisualsUpdatedEvent(equipee, slot, revealedLayers), true); } - - - /// - /// Sets a sprite's gendered mask based on gender (obviously). - /// - /// Sprite to modify - /// Humanoid, to get gender from - /// Clothing component, to get mask sprite type - private void SetGenderedMask(EntityUid uid, SpriteComponent sprite, ClothingComponent clothing) - { - if (!sprite.LayerMapTryGet(HumanoidVisualLayers.StencilMask, out var layer)) - return; - - ClothingMask mask; - string prefix; - - switch (CompOrNull(uid)?.Sex) - { - case Sex.Male: - mask = clothing.MaleMask; - prefix = "male_"; - break; - case Sex.Female: - mask = clothing.FemaleMask; - prefix = "female_"; - break; - default: - mask = clothing.UnisexMask; - prefix = "unisex_"; - break; - } - - sprite.LayerSetState(layer, mask switch - { - ClothingMask.NoMask => $"{prefix}none", - ClothingMask.UniformTop => $"{prefix}top", - _ => $"{prefix}full", - }); - sprite.LayerSetVisible(layer, true); - } } diff --git a/Content.Client/DisplacementMap/DisplacementMapSystem.cs b/Content.Client/DisplacementMap/DisplacementMapSystem.cs new file mode 100644 index 0000000000..6db164a09f --- /dev/null +++ b/Content.Client/DisplacementMap/DisplacementMapSystem.cs @@ -0,0 +1,65 @@ +using Content.Shared.DisplacementMap; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Shared.Serialization.Manager; + +namespace Content.Client.DisplacementMap; + +public sealed class DisplacementMapSystem : EntitySystem +{ + [Dependency] private readonly ISerializationManager _serialization = default!; + + public bool TryAddDisplacement(DisplacementData data, SpriteComponent sprite, int index, string key, HashSet revealedLayers) + { + if (data.ShaderOverride != null) + sprite.LayerSetShader(index, data.ShaderOverride); + + var displacementKey = $"{key}-displacement"; + if (!revealedLayers.Add(displacementKey)) + { + Log.Warning($"Duplicate key for DISPLACEMENT: {displacementKey}."); + return false; + } + + //allows you not to write it every time in the YML + foreach (var pair in data.SizeMaps) + { + pair.Value.CopyToShaderParameters??= new() + { + LayerKey = "dummy", + ParameterTexture = "displacementMap", + ParameterUV = "displacementUV", + }; + } + + if (!data.SizeMaps.ContainsKey(32)) + { + Log.Error($"DISPLACEMENT: {displacementKey} don't have 32x32 default displacement map"); + return false; + } + + // We choose a displacement map from the possible ones, matching the size with the original layer size. + // If there is no such a map, we use a standard 32 by 32 one + var displacementDataLayer = data.SizeMaps[EyeManager.PixelsPerMeter]; + var actualRSI = sprite.LayerGetActualRSI(index); + if (actualRSI is not null) + { + if (actualRSI.Size.X != actualRSI.Size.Y) + Log.Warning($"DISPLACEMENT: {displacementKey} has a resolution that is not 1:1, things can look crooked"); + + var layerSize = actualRSI.Size.X; + if (data.SizeMaps.ContainsKey(layerSize)) + displacementDataLayer = data.SizeMaps[layerSize]; + } + + var displacementLayer = _serialization.CreateCopy(displacementDataLayer, notNullableOverride: true); + displacementLayer.CopyToShaderParameters!.LayerKey = key; + + sprite.AddLayer(displacementLayer, index); + sprite.LayerMapSet(displacementKey, index); + + revealedLayers.Add(displacementKey); + + return true; + } +} diff --git a/Content.Client/Hands/Systems/HandsSystem.cs b/Content.Client/Hands/Systems/HandsSystem.cs index 7ea3b69de5..ba2d10bccb 100644 --- a/Content.Client/Hands/Systems/HandsSystem.cs +++ b/Content.Client/Hands/Systems/HandsSystem.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; +using Content.Client.DisplacementMap; using Content.Client.Examine; using Content.Client.Strip; using Content.Client.Verbs.UI; @@ -29,6 +30,7 @@ namespace Content.Client.Hands.Systems [Dependency] private readonly SharedContainerSystem _containerSystem = default!; [Dependency] private readonly StrippableSystem _stripSys = default!; [Dependency] private readonly ExamineSystem _examine = default!; + [Dependency] private readonly DisplacementMapSystem _displacement = default!; public event Action? OnPlayerAddHand; public event Action? OnPlayerRemoveHand; @@ -378,6 +380,10 @@ namespace Content.Client.Hands.Systems } sprite.LayerSetData(index, layerData); + + //Add displacement maps + if (handComp.HandDisplacement is not null) + _displacement.TryAddDisplacement(handComp.HandDisplacement, sprite, index, key, revealedLayers); } RaiseLocalEvent(held, new HeldVisualsUpdatedEvent(uid, revealedLayers), true); diff --git a/Content.Shared/Clothing/Components/ClothingComponent.cs b/Content.Shared/Clothing/Components/ClothingComponent.cs index 6d7226e767..1e2307b92b 100644 --- a/Content.Shared/Clothing/Components/ClothingComponent.cs +++ b/Content.Shared/Clothing/Components/ClothingComponent.cs @@ -54,18 +54,6 @@ public sealed partial class ClothingComponent : Component [DataField("sprite")] public string? RsiPath; - [ViewVariables(VVAccess.ReadWrite)] - [DataField("maleMask")] - public ClothingMask MaleMask = ClothingMask.UniformFull; - - [ViewVariables(VVAccess.ReadWrite)] - [DataField("femaleMask")] - public ClothingMask FemaleMask = ClothingMask.UniformFull; - - [ViewVariables(VVAccess.ReadWrite)] - [DataField("unisexMask")] - public ClothingMask UnisexMask = ClothingMask.UniformFull; - /// /// Name of the inventory slot the clothing is in. /// diff --git a/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs b/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs index 9e3f917e96..17129ce8b2 100644 --- a/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs +++ b/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs @@ -248,7 +248,6 @@ public abstract class ClothingSystem : EntitySystem clothing.ClothingVisuals = otherClothing.ClothingVisuals; clothing.EquippedPrefix = otherClothing.EquippedPrefix; clothing.RsiPath = otherClothing.RsiPath; - clothing.FemaleMask = otherClothing.FemaleMask; _itemSys.VisualsChanged(uid); Dirty(uid, clothing); diff --git a/Content.Shared/DisplacementMap/DisplacementData.cs b/Content.Shared/DisplacementMap/DisplacementData.cs new file mode 100644 index 0000000000..7bd5b580e1 --- /dev/null +++ b/Content.Shared/DisplacementMap/DisplacementData.cs @@ -0,0 +1,14 @@ +namespace Content.Shared.DisplacementMap; + +[DataDefinition] +public sealed partial class DisplacementData +{ + /// + /// allows you to attach different maps for layers of different sizes. + /// + [DataField(required: true)] + public Dictionary SizeMaps = new(); + + [DataField] + public string? ShaderOverride = "DisplacedStencilDraw"; +} diff --git a/Content.Shared/Hands/Components/HandsComponent.cs b/Content.Shared/Hands/Components/HandsComponent.cs index a7464e5bac..5fe6c61872 100644 --- a/Content.Shared/Hands/Components/HandsComponent.cs +++ b/Content.Shared/Hands/Components/HandsComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.DisplacementMap; using Content.Shared.Hands.EntitySystems; using Robust.Shared.Containers; using Robust.Shared.GameStates; @@ -77,6 +78,9 @@ public sealed partial class HandsComponent : Component /// [DataField, ViewVariables(VVAccess.ReadWrite)] public TimeSpan ThrowCooldown = TimeSpan.FromSeconds(0.5f); + + [DataField] + public DisplacementData? HandDisplacement; } [Serializable, NetSerializable] diff --git a/Content.Shared/Inventory/InventoryComponent.cs b/Content.Shared/Inventory/InventoryComponent.cs index edc8e6641c..db761ad693 100644 --- a/Content.Shared/Inventory/InventoryComponent.cs +++ b/Content.Shared/Inventory/InventoryComponent.cs @@ -1,4 +1,5 @@ -using Robust.Shared.Containers; +using Content.Shared.DisplacementMap; +using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; @@ -13,19 +14,22 @@ public sealed partial class InventoryComponent : Component [DataField("speciesId")] public string? SpeciesId { get; set; } - [DataField] public Dictionary Displacements = []; - public SlotDefinition[] Slots = Array.Empty(); public ContainerSlot[] Containers = Array.Empty(); - [DataDefinition] - public sealed partial class SlotDisplacementData - { - [DataField(required: true)] - public PrototypeLayerData Layer = default!; + [DataField] + public Dictionary Displacements = new(); - [DataField] - public string? ShaderOverride = "DisplacedStencilDraw"; - } + /// + /// Alternate displacement maps, which if available, will be selected for the player of the appropriate gender. + /// + [DataField] + public Dictionary FemaleDisplacements = new(); + + /// + /// Alternate displacement maps, which if available, will be selected for the player of the appropriate gender. + /// + [DataField] + public Dictionary MaleDisplacements = new(); } diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml b/Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml index 55e256c7bb..35a466ec50 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml @@ -231,7 +231,7 @@ - type: cargoProduct id: LivestockMothroach icon: - sprite: Mobs/Animals/mothroach.rsi + sprite: Mobs/Animals/mothroach/mothroach.rsi state: mothroach product: CrateNPCMothroach cost: 5000 diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml index 52a2f340ef..142619a0eb 100644 --- a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml @@ -296,7 +296,6 @@ sprite: Clothing/Uniforms/Jumpsuit/clown.rsi - type: Clothing sprite: Clothing/Uniforms/Jumpsuit/clown.rsi - femaleMask: UniformTop - type: Tag tags: - ClownSuit @@ -310,7 +309,6 @@ sprite: Clothing/Uniforms/Jumpsuit/clown_banana.rsi - type: Clothing sprite: Clothing/Uniforms/Jumpsuit/clown_banana.rsi - femaleMask: UniformTop - type: Construction graph: BananaClownJumpsuit node: jumpsuit diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/random_suit.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/random_suit.yml index e113f0ffc7..7d4dfc5990 100644 --- a/Resources/Prototypes/Entities/Clothing/Uniforms/random_suit.yml +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/random_suit.yml @@ -19,8 +19,6 @@ - state: mask_null map: [ "overlay" ] - type: Clothing - femaleMask: UniformTop - maleMask: UniformTop sprite: Clothing/Uniforms/procedural.rsi clothingVisuals: jumpsuit: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 6e369389a9..4837c83e94 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -468,7 +468,7 @@ insertingState: inserting_mothroach - type: MothAccent - type: Sprite - sprite: Mobs/Animals/mothroach.rsi + sprite: Mobs/Animals/mothroach/mothroach.rsi layers: - map: ["enum.DamageStateVisualLayers.Base", "movement"] state: mothroach @@ -483,7 +483,7 @@ size: Normal - type: Clothing quickEquip: false - sprite: Mobs/Animals/mothroach.rsi + sprite: Mobs/Animals/mothroach/mothroach.rsi equippedPrefix: 0 slots: - HEAD @@ -569,11 +569,44 @@ - type: FireVisuals sprite: Mobs/Effects/onfire.rsi normalState: Mouse_burning + - type: Strippable - type: SurgeryTarget - type: UserInterface interfaces: + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface enum.SurgeryUIKey.Key: type: SurgeryBui + - type: InventorySlots + - type: Inventory + speciesId: hamster + templateId: hamster + displacements: + head: + sizeMaps: + 32: + sprite: Mobs/Animals/mothroach/displacement.rsi + state: head + mask: + sizeMaps: + 32: + sprite: Mobs/Animals/mothroach/displacement.rsi + state: mask + suitstorage: + sizeMaps: + 32: + sprite: Mobs/Animals/mothroach/displacement.rsi + state: suitstorage + eyes: + sizeMaps: + 32: + sprite: Mobs/Animals/mothroach/displacement.rsi + state: eyes + neck: + sizeMaps: + 32: + sprite: Mobs/Animals/mothroach/displacement.rsi + state: neck # Note that the mallard duck is actually a male drake mallard, with the brown duck being the female variant of the same species, however ss14 lacks sex specific textures # The white duck is more akin to a pekin or call duck. diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml index 88822ab037..448812d48b 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml @@ -30,8 +30,6 @@ spawned: - id: FoodMeatSpider amount: 5 - - type: Inventory - templateId: arachnid - type: Reactive reactions: - reagents: [Water] @@ -85,16 +83,6 @@ - map: [ "enum.HumanoidVisualLayers.LArm" ] - map: [ "enum.HumanoidVisualLayers.RLeg" ] - map: [ "enum.HumanoidVisualLayers.LLeg" ] - - shader: StencilClear - sprite: Mobs/Species/Human/parts.rsi #PJB on stencil clear being on the left leg: "...this is 'fine'" -https://github.com/space-wizards/space-station-14/pull/12217#issuecomment-1291677115 - # its fine, but its still very stupid that it has to be done like this instead of allowing sprites to just directly insert a stencil clear. - # sprite refactor when - state: l_leg - - shader: StencilMask - map: ["enum.HumanoidVisualLayers.StencilMask"] - sprite: Mobs/Customization/masking_helpers.rsi - state: unisex_full - visible: false - map: ["jumpsuit"] - map: ["enum.HumanoidVisualLayers.LFoot"] - map: ["enum.HumanoidVisualLayers.RFoot"] @@ -132,6 +120,8 @@ - type: FootPrints leftBarePrint: "footprint-left-bare-spider" rightBarePrint: "footprint-right-bare-spider" + - type: Inventory + speciesId: arachnid - type: entity parent: BaseSpeciesDummy @@ -141,4 +131,5 @@ - type: HumanoidAppearance species: Arachnid -#88w88 + +#>88w88< diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index e425a3a87e..b2f696a44d 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -17,16 +17,6 @@ - map: [ "enum.HumanoidVisualLayers.LArm" ] - map: [ "enum.HumanoidVisualLayers.RLeg" ] - map: [ "enum.HumanoidVisualLayers.LLeg" ] - - shader: StencilClear - sprite: Mobs/Species/Human/parts.rsi #PJB on stencil clear being on the left leg: "...this is 'fine'" -https://github.com/space-wizards/space-station-14/pull/12217#issuecomment-1291677115 - # its fine, but its still very stupid that it has to be done like this instead of allowing sprites to just directly insert a stencil clear. - # sprite refactor when - state: l_leg - - shader: StencilMask - map: ["enum.HumanoidVisualLayers.StencilMask"] - sprite: Mobs/Customization/masking_helpers.rsi - state: unisex_full - visible: false - map: ["jumpsuit"] - map: ["enum.HumanoidVisualLayers.LFoot"] - map: ["enum.HumanoidVisualLayers.RFoot"] @@ -351,14 +341,6 @@ - map: [ "enum.HumanoidVisualLayers.LArm" ] - map: [ "enum.HumanoidVisualLayers.RLeg" ] - map: [ "enum.HumanoidVisualLayers.LLeg" ] - - shader: StencilClear - sprite: Mobs/Species/Human/parts.rsi - state: l_leg - - shader: StencilMask - map: ["enum.HumanoidVisualLayers.StencilMask"] - sprite: Mobs/Customization/masking_helpers.rsi - state: unisex_full - visible: false - map: ["jumpsuit"] - map: ["enum.HumanoidVisualLayers.LFoot"] - map: ["enum.HumanoidVisualLayers.RFoot"] @@ -396,4 +378,4 @@ - type: UserInterface interfaces: enum.HumanoidMarkingModifierKey.Key: # sure, this can go here too - type: HumanoidMarkingModifierBoundUserInterface + type: HumanoidMarkingModifierBoundUserInterface \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Species/diona.yml b/Resources/Prototypes/Entities/Mobs/Species/diona.yml index 530bfe49b2..aafbe78629 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/diona.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/diona.yml @@ -85,8 +85,6 @@ - MobMask layer: - MobLayer - - type: Inventory - templateId: diona - type: Speech speechVerb: Plant - type: Vocal @@ -123,13 +121,27 @@ - type: FootPrints leftBarePrint: "footprint-left-bare-diona" rightBarePrint: "footprint-right-bare-diona" + - type: Inventory + templateId: diona + femaleDisplacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Human/displacement.rsi + state: jumpsuit-female - type: entity parent: BaseSpeciesDummy id: MobDionaDummy categories: [ HideSpawnMenu ] components: - - type: Inventory - templateId: diona - type: HumanoidAppearance species: Diona + - type: Inventory + templateId: diona + femaleDisplacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Human/displacement.rsi + state: jumpsuit-female diff --git a/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml b/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml index bb2975e201..cfd3708036 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml @@ -64,8 +64,23 @@ - SolCommon - type: LightweightDrunk boozeStrengthMultiplier: 0.5 + - type: Inventory + femaleDisplacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Human/displacement.rsi + state: jumpsuit-female - type: entity parent: BaseSpeciesDummy id: MobDwarfDummy categories: [ HideSpawnMenu ] + components: + - type: Inventory + femaleDisplacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Human/displacement.rsi + state: jumpsuit-female diff --git a/Resources/Prototypes/Entities/Mobs/Species/gingerbread.yml b/Resources/Prototypes/Entities/Mobs/Species/gingerbread.yml index b0a43551c8..406aa920c1 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/gingerbread.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/gingerbread.yml @@ -40,6 +40,14 @@ - MobMask layer: - MobLayer + - type: Inventory + femaleDisplacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Human/displacement.rsi + state: jumpsuit-female + - type: entity parent: BaseSpeciesDummy @@ -48,3 +56,10 @@ components: - type: HumanoidAppearance species: Gingerbread + - type: Inventory + femaleDisplacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Human/displacement.rsi + state: jumpsuit-female diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml index 4310fb1c65..38d9261337 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml @@ -29,8 +29,23 @@ - TauCetiBasic - SolCommon - type: FootPrints + - type: Inventory + femaleDisplacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Human/displacement.rsi + state: jumpsuit-female - type: entity parent: BaseSpeciesDummy id: MobHumanDummy categories: [ HideSpawnMenu ] + components: + - type: Inventory + femaleDisplacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Human/displacement.rsi + state: jumpsuit-female diff --git a/Resources/Prototypes/Entities/Mobs/Species/moth.yml b/Resources/Prototypes/Entities/Mobs/Species/moth.yml index 2a4a157ecb..e75434e918 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/moth.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/moth.yml @@ -80,16 +80,6 @@ - map: [ "enum.HumanoidVisualLayers.LArm" ] - map: [ "enum.HumanoidVisualLayers.RLeg" ] - map: [ "enum.HumanoidVisualLayers.LLeg" ] - - shader: StencilClear - sprite: Mobs/Species/Human/parts.rsi #PJB on stencil clear being on the left leg: "...this is 'fine'" -https://github.com/space-wizards/space-station-14/pull/12217#issuecomment-1291677115 - # its fine, but its still very stupid that it has to be done like this instead of allowing sprites to just directly insert a stencil clear. - # sprite refactor when - state: l_leg - - shader: StencilMask - map: [ "enum.HumanoidVisualLayers.StencilMask" ] - sprite: Mobs/Customization/masking_helpers.rsi - state: unisex_full - visible: false - map: [ "jumpsuit" ] - map: [ "enum.HumanoidVisualLayers.LHand" ] - map: [ "enum.HumanoidVisualLayers.RHand" ] @@ -123,6 +113,13 @@ state: "creampie_moth" visible: false - type: FootPrints + - type: Inventory + femaleDisplacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Human/displacement.rsi + state: jumpsuit-female - type: entity parent: BaseSpeciesDummy @@ -131,3 +128,10 @@ components: - type: HumanoidAppearance species: Moth + - type: Inventory + femaleDisplacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Human/displacement.rsi + state: jumpsuit-female diff --git a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml index 45be82a448..1e70faeba4 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml @@ -23,8 +23,6 @@ spawned: - id: FoodMeatLizard amount: 5 - - type: Inventory - speciesId: reptilian - type: LizardAccent - type: Speech speechSounds: Lizard @@ -69,6 +67,14 @@ - type: FootPrints leftBarePrint: "footprint-left-bare-lizard" rightBarePrint: "footprint-right-bare-lizard" + - type: Inventory + speciesId: reptilian + femaleDisplacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Human/displacement.rsi + state: jumpsuit-female - type: entity parent: BaseSpeciesDummy @@ -78,5 +84,17 @@ components: - type: HumanoidAppearance species: Reptilian + hideLayersOnEquip: + - Snout + - HeadTop + - HeadSide + - type: Inventory + speciesId: reptilian + femaleDisplacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Human/displacement.rsi + state: jumpsuit-female #Weh diff --git a/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml b/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml index 96c6185693..0117def02d 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml @@ -104,11 +104,26 @@ - type: FireVisuals alternateState: Standing - type: FootPrints + - type: FlashImmunity + - type: Inventory + femaleDisplacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Human/displacement.rsi + state: jumpsuit-female - type: entity parent: BaseSpeciesDummy id: MobSkeletonPersonDummy categories: [ HideSpawnMenu ] components: - - type: HumanoidAppearance - species: Skeleton + - type: HumanoidAppearance + species: Skeleton + - type: Inventory + femaleDisplacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Human/displacement.rsi + state: jumpsuit-female diff --git a/Resources/Prototypes/Entities/Mobs/Species/slime.yml b/Resources/Prototypes/Entities/Mobs/Species/slime.yml index ba04b6e5fa..b237f3f747 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/slime.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/slime.yml @@ -122,11 +122,25 @@ - type: FootPrints leftBarePrint: "footprint-left-bare-slime" rightBarePrint: "footprint-right-bare-slime" + - type: Inventory + femaleDisplacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Human/displacement.rsi + state: jumpsuit-female - type: entity parent: MobHumanDummy id: MobSlimePersonDummy categories: [ HideSpawnMenu ] components: - - type: HumanoidAppearance - species: SlimePerson + - type: HumanoidAppearance + species: SlimePerson + - type: Inventory + femaleDisplacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Human/displacement.rsi + state: jumpsuit-female diff --git a/Resources/Prototypes/Entities/Mobs/Species/vox.yml b/Resources/Prototypes/Entities/Mobs/Species/vox.yml index 62e04b5578..f2cf77bb62 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/vox.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/vox.yml @@ -14,18 +14,6 @@ - type: HumanoidAppearance species: Vox #- type: VoxAccent # Not yet coded - - type: Inventory - speciesId: vox - displacements: - jumpsuit: - layer: - sprite: Mobs/Species/Vox/displacement.rsi - state: jumpsuit - copyToShaderParameters: - # Value required, provide a dummy. Gets overridden when applied. - layerKey: dummy - parameterTexture: displacementMap - parameterUV: displacementUV - type: Speech speechVerb: Vox speechSounds: Vox @@ -105,6 +93,44 @@ - type: FootPrints leftBarePrint: "footprint-left-bare-lizard" rightBarePrint: "footprint-right-bare-lizard" + - type: Inventory + speciesId: vox + displacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Vox/displacement.rsi + state: jumpsuit + eyes: + sizeMaps: + 32: + sprite: Mobs/Species/Vox/displacement.rsi + state: eyes + gloves: + sizeMaps: + 32: + sprite: Mobs/Species/Vox/displacement.rsi + state: hand + head: + sizeMaps: + 32: + sprite: Mobs/Species/Vox/displacement.rsi + state: head + back: + sizeMaps: + 32: + sprite: Mobs/Species/Vox/displacement.rsi + state: back + ears: + sizeMaps: + 32: + sprite: Mobs/Species/Vox/displacement.rsi + state: ears + shoes: + sizeMaps: + 32: + sprite: Mobs/Species/Vox/displacement.rsi + state: shoes - type: entity parent: BaseSpeciesDummy @@ -115,4 +141,41 @@ species: Vox - type: Body prototype: Vox - + - type: Inventory + speciesId: vox + displacements: + jumpsuit: + sizeMaps: + 32: + sprite: Mobs/Species/Vox/displacement.rsi + state: jumpsuit + eyes: + sizeMaps: + 32: + sprite: Mobs/Species/Vox/displacement.rsi + state: eyes + gloves: + sizeMaps: + 32: + sprite: Mobs/Species/Vox/displacement.rsi + state: hand + head: + sizeMaps: + 32: + sprite: Mobs/Species/Vox/displacement.rsi + state: head + back: + sizeMaps: + 32: + sprite: Mobs/Species/Vox/displacement.rsi + state: back + ears: + sizeMaps: + 32: + sprite: Mobs/Species/Vox/displacement.rsi + state: ears + shoes: + sizeMaps: + 32: + sprite: Mobs/Species/Vox/displacement.rsi + state: shoes diff --git a/Resources/Prototypes/InventoryTemplates/hamster_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/hamster_inventory_template.yml index 3170417d9d..f48ae94e69 100644 --- a/Resources/Prototypes/InventoryTemplates/hamster_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/hamster_inventory_template.yml @@ -15,7 +15,7 @@ slotTexture: neck slotFlags: NECK uiWindowPos: 0,1 - strippingWindowPos: 1,0 + strippingWindowPos: 0,1 displayName: Neck whitelist: tags: @@ -24,7 +24,7 @@ slotTexture: glasses slotFlags: EYES stripTime: 3 - uiWindowPos: 0,1 + uiWindowPos: 0,2 strippingWindowPos: 0,0 displayName: Eyes whitelist: @@ -33,9 +33,8 @@ - name: suitstorage slotTexture: suit_storage slotFlags: SUITSTORAGE - slotGroup: SecondHotbar stripTime: 3 - uiWindowPos: 2,0 + uiWindowPos: 1,0 strippingWindowPos: 2,5 displayName: Suit Storage whitelist: diff --git a/Resources/Prototypes/InventoryTemplates/pet_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/pet_inventory_template.yml index 1297b65d8d..e6c2984221 100644 --- a/Resources/Prototypes/InventoryTemplates/pet_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/pet_inventory_template.yml @@ -4,7 +4,7 @@ - name: mask slotTexture: mask slotFlags: MASK - uiWindowPos: 1,0 + uiWindowPos: 0,2 strippingWindowPos: 1,1 displayName: Mask whitelist: @@ -14,9 +14,8 @@ - name: suitstorage slotTexture: suit_storage slotFlags: SUITSTORAGE - slotGroup: SecondHotbar stripTime: 3 - uiWindowPos: 2,0 + uiWindowPos: 0,1 strippingWindowPos: 2,5 displayName: Suit Storage whitelist: diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Uniforms/costumes.yml b/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Uniforms/costumes.yml index 0ef1a5a85a..c5c7861db2 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Uniforms/costumes.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Uniforms/costumes.yml @@ -63,8 +63,6 @@ sprite: Nyanotrasen/Clothing/Uniforms/Costume/bunny.rsi - type: Clothing sprite: Nyanotrasen/Clothing/Uniforms/Costume/bunny.rsi - # TODO: Remove the line below when the sprite accounts for FemaleMask. - femaleMask: NoMask - type: entity parent: ClothingUniformSkirtBase @@ -109,8 +107,6 @@ sprite: Nyanotrasen/Clothing/Uniforms/Costume/rat.rsi - type: Clothing sprite: Nyanotrasen/Clothing/Uniforms/Costume/rat.rsi - # TODO: Remove the line below when the sprite accounts for FemaleMask. - femaleMask: NoMask - type: entity parent: ClothingUniformSkirtBase @@ -122,7 +118,6 @@ sprite: Nyanotrasen/Clothing/Uniforms/Costume/red_dress.rsi - type: Clothing sprite: Nyanotrasen/Clothing/Uniforms/Costume/red_dress.rsi - femaleMask: NoMask - type: entity parent: ClothingUniformSkirtBase @@ -134,7 +129,6 @@ sprite: Nyanotrasen/Clothing/Uniforms/Costume/swimsuit.rsi - type: Clothing sprite: Nyanotrasen/Clothing/Uniforms/Costume/swimsuit.rsi - femaleMask: UniformTop ## old schoolgirl uniforms @@ -341,7 +335,6 @@ sprite: Nyanotrasen/Clothing/Uniforms/Costume/gakuran.rsi - type: Clothing sprite: Nyanotrasen/Clothing/Uniforms/Costume/gakuran.rsi - femaleMask: NoMask ## mnk @@ -355,7 +348,6 @@ sprite: Nyanotrasen/Clothing/Misc/office_skirt.rsi - type: Clothing sprite: Nyanotrasen/Clothing/Misc/office_skirt.rsi - femaleMask: NoMask - type: entity parent: ClothingUniformSkirtBase @@ -378,7 +370,6 @@ sprite: Nyanotrasen/Clothing/Misc/gym_bra.rsi - type: Clothing sprite: Nyanotrasen/Clothing/Misc/gym_bra.rsi - femaleMask: NoMask - type: entity parent: ClothingUniformSkirtBase @@ -390,7 +381,6 @@ sprite: Nyanotrasen/Clothing/Misc/black_dress.rsi - type: Clothing sprite: Nyanotrasen/Clothing/Misc/black_dress.rsi - femaleMask: UniformTop - type: entity parent: ClothingUniformBase @@ -402,7 +392,6 @@ sprite: Nyanotrasen/Clothing/Misc/black_overall.rsi - type: Clothing sprite: Nyanotrasen/Clothing/Misc/black_overall.rsi - femaleMask: NoMask - type: entity parent: ClothingUniformSkirtBase @@ -414,7 +403,6 @@ sprite: Nyanotrasen/Clothing/Misc/exposed_shoulder.rsi - type: Clothing sprite: Nyanotrasen/Clothing/Misc/exposed_shoulder.rsi - femaleMask: UniformTop - type: entity parent: ClothingUniformBase @@ -426,4 +414,3 @@ sprite: Nyanotrasen/Clothing/Misc/tracksuit.rsi - type: Clothing sprite: Nyanotrasen/Clothing/Misc/tracksuit.rsi - femaleMask: NoMask diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/mobs.yml b/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/mobs.yml index 6bc5c8e878..9ff3915362 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/mobs.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/mobs.yml @@ -6,7 +6,7 @@ - type: Sprite layers: - state: green - - sprite: Mobs/Animals/mothroach.rsi + - sprite: Mobs/Animals/mothroach/mothroach.rsi state: mothroach - state: ai - type: ConditionalSpawner diff --git a/Resources/Textures/Clothing/Hands/Gloves/Color/yellow.rsi/equipped-HAND-vox.png b/Resources/Textures/Clothing/Hands/Gloves/Color/yellow.rsi/equipped-HAND-vox.png deleted file mode 100644 index b7f2122c19f5bb439cf0bb625613b5526410247e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 387 zcmV-}0et?6P)NklmZ0Zoi)+R&{1ZRto1s9U+%*3oL z|6i3N?}NviG!qd30000006aTv`>M;hp8{W$Zmz?&uL57}>j%Clm5GW%Pb*mzdP-$t z-9#7ldrdFIi7TVQL#Mus1`ml7S1abP>Q@dR@I}oQ#q;UfIHxD&`?E!nM=SVE>VL1F z%{RdI7_3)A?e#B3p{LfXq1_SK>^$x1mrmE7Y<8YeZ0UYE%Ve56Cb5%g?%XeDtNH){ z000000001JJSZaZ0 h2E3{s006+h_XW$Kw~dZe6Egq+002ovPDHLkV1hjUu0sF- diff --git a/Resources/Textures/Clothing/Hands/Gloves/Color/yellow.rsi/meta.json b/Resources/Textures/Clothing/Hands/Gloves/Color/yellow.rsi/meta.json index b6aeef7f36..7c5b9dfb2b 100644 --- a/Resources/Textures/Clothing/Hands/Gloves/Color/yellow.rsi/meta.json +++ b/Resources/Textures/Clothing/Hands/Gloves/Color/yellow.rsi/meta.json @@ -21,11 +21,6 @@ { "name": "inhand-right", "directions": 4 - }, - { - "name": "equipped-HAND-vox", - "directions": 4, - "delays": [[1.0], [1.0], [1.0], [1.0]] } ] } diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat.rsi/equipped-OUTERCLOTHING-vox.png index fa32996aa89b0b94751422eeed4206e6d123a2fa..a6546c4655791eb62a6a1dc791e48b35ce2c0d69 100644 GIT binary patch delta 502 zcmVFRYF_A$-e*x1;L_t(oh3%H%a)clZgf}5vk@tV#ZuG1uglnhM>HUxy zPjHj(B4JEWe>rdiZovBi@PY~Pan_p^pzB>RMo>>?md^Syr<{F-Oq1c?=Y6z6pw*28 z@Hb0OX#7w50m!sq47@lS0J7-QU0Z#hK@2oVpufVp5L~w{h;@bze~{q5!bruZ9l#$x z0Vn+nz^z3}@{mLkT_RRp_6=zCQ%3l9AEJXD++U;1!3DtZA2Le8Q&%U5MgZ!<2tQRss)m8lA+=z=~ZATHOs?4gtxq;9_vn z_b~)`a&g=Sgk!W%e}}d|7&qVs+PyJ8es%%#MsCzfj<`3f42$i0vBv!G>QO)IkaJKY}pKvyhMAjWRdRS^#N;q zi2#MA|0TfNgD{Px&j7G$d^Mgku^)7TR0Y0f}^88_g&gM}@$hPD_oOg^xbklf+0^!$1Gz|HUKLj!&Py;Sl z7Xp8orKQWr?-sEV0umu#NT(8v*R6?t|sx4Q@CD1~>tf|H2gt;O!ybZ}Q-PXH>wahz?SL0*k2o*LDX8ycAra z02BZX1So;m#eSweFyIwe1svv)9|i2B7dwCLk$?pl9SS6+g-!t-#_zZku+25E-DVik z&{hoBvERTW@CX(*#@v4( zXz!)@6AJpj*r?HbgRcOC7zUZ8`Df6A{%59Yi~iyKe@bF(|9 zSoHW32^6&cW_QdLU_6KfY=UTZ#~4exDjq@N3UCGx67RyQvT`o*Ni3OH(Nj_f;fPp1 z#R9Y`jL+!AY>L7{{0?y43|STtvj7Gj02O9tY002ovPDHLk FV1gCs^p5}l diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat.rsi/open-equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat.rsi/open-equipped-OUTERCLOTHING-vox.png index ce7c029026c8319d3be367415183c45fdfedfc96..2ecf1e68e01feba062c1a6211aeffa70f38d4e08 100644 GIT binary patch delta 504 zcmVXdaF_A$-e*x7=L_t(oh3%HnlEWYfMFFv<{{IK>#Wbx(u)DLfvwes& zZB*do8cl%eFB@He3-EaWdc!2PHrl%pk+iFjkAOX?Y8vgYKFrxhl;PsuJ|C?YLA_l; zApB>Z30?ePe*rQ)Qm*)+=KwOxBV2m>(IZxZL#l`u(n*5Zbr;cke>4FS5n^o#*}4~~iw^-Xq{r0< z9L)thH+Mb+Py5mOe_7Y}2kin}fD7<9fN${D5#%JbwZkddt7Ygdiry@B>nUUyaBew1 zP(dyAuM-QhW6~`GZ1`TEQ_~qBBwO$-F}aDQ@C5)#Dcc$&0HFjCjsenYgq4C;JV*#Y z-5@C;y?OB!(7s^8yCS0>`@tZop&_R=2k7T6;vH0_OAV z1dz1?c?)2<#|rMUR6tr4OIRtu65tf>LRG1pR|+y$(HZ~}N|1fT_wF%1M~K}|sb0I`n?{9y%=E=GR<32;bRa{vGizyJUazyWI3i3tDz z0r5#hK~z{r?Uw6ugdhxsLlRcY`#*3`5Ru4b+i8EaGoG1Na{COcyMfXV^#C4#>5l;p zW6q>t^6|zZ;(TQqBM=u=6(7IW2uHIhBIR&7QHZD7ChF4S3IgH3%P4BWJpZ- z!)kv3h=EHvxAAjDK?wf)_d0OB-(iq8oqg%_meLZeInfp8^n&a_wdQQ$s*~xcy6T z2>w&WV;bjvLl58qm>$6I1HQmpSI}UnIduu%B(({>7pv2bdT~FgHvk4hp7E0|Z0ZQF z2Mea7=spAN_`SZ5raOR%v4bH2&K=<;07EI-9%lf;5hTyAOKy#!g&V9o$cG0vx!ivm z=LQzRcq@*Z5D=W7aKI=IlUw8b#Wv!{1UNDKEoTNWLjxo6qd1)4+&E}oE&Bei+Y|S?f)KZzPN(;W znNfk0d=tbmq3th?9>4?megOKwBzEidW=16YQ)rHWo>VpU`Z>;$%x7dt@+3Zs9mb9R z2IQrffTf_I zk7Z(G9}WOt`~r0P8-Q0!De(_Z5NSAwUH<}fdUqlw{F7x!|J=p_Xcv12WMDBsoWK$R zpffVyi^r*}fWRU;|BwI>mWnF`fB@3~Knc38ejCoMkGa*UchIUAhgNq7mqS2O zTIu4@>4!}LezeF032;bRa{vGizyJUazyWI3i3tDz z0su)wK~z{r?Uw6ugfIw&fkez!egD_(A;xTC7Pp=DM?2%0aSZ{!#mfk^{ZKdH2AKXB zU^jdwv8ner7Lnw$&}#(zA;uVb|8qS_P_sybO#4=+N%Rmm{tB4pq!9$dZ<`hBCT`^s51Yd zmjHXXW|h+@a}<>w)9cu8=my*X(+&82z!!Me8I=3$g@%CM#OKKRYq18wrTA(UYgcEX zG2|Za5OTg;G?ppNs_2l;Ck@{;G+)&@waxzom}M-oDqoIMo082S#A= z0MIQvW+w$w0f9wye31YU&LzXc1AqWi2S7okW*~YvgNGg}0hhVesdLC!=iZ^!?WCK|(-#8^srF=YSE5z21lnFo;=;e;*UF-2yQmw=ZC!EO5M! z0NBjJI-D&VtAnJQ0rP(M0Fd(xogi)e8G zgdvDI=Hh2ia>NLwZGZ1e5UJPH{WjV;_(RrXgc!&AJ|Fj^`VW9F>7BTRxS83#00000 LNkvXXu0mjf{_60m delta 583 zcmV-N0=WJB1iJ;0F%1M~K}|sb0I`n?{9y%=E>eF032;bRa{vGi!2kdb!2!6DYwZ94 z0su)wK~z{r?Uvh)-5?A_jqMO7DgXbw-6oKOL&&shA6h9}ngQQd%()rLf2bGm0!;rH z;4tP)3ML=#EFvx|(>(%lQC0Er&wgQvW>FMg4wuuyu_<)%6R@l)DhP!CX&ng`Z|dVG zfD(TaBxd}@l=>zQA>LZxKHhc|)OwVRdS3MMN*!?xrM~Pw4{oavq1KKNZ94$WSphD7 z0`Ss;@Rh$%Uo5W@uK*YC6NyU)d@XMJ06IB9C>;#vZz48A@DJz=#I3t<$v8#IAOvQ0 zPpvCNh;MmA#tZ-gq!R#%a_N9|cn?e@_#l6mdg`Gix5+gHKrrvL<`uA|J~ zbPG7&-0?$j2>zz(G2Q3>hF-u6Fuj1k5BLS%a|M<8`k*1fo1`|O_i7E=Q7`T%^#Z_P zC^LT2g-spdhrzO>71L34p8;bqIKop0I0BMfQC&@xm2-$s z9mJ4XFGZ&ammt(z@vMWq6+%DX9n3FoQRe8Kol5B8k_E%x9d32a`L^IY{r7;Je*zIm VxScxd|3v@*002ovPDHLkV1gL!2cQ4| diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_cmo.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_cmo.rsi/equipped-OUTERCLOTHING-vox.png index 58b84263ac0a4649420ed65c9f2693fcffd3ccf4..eaef9455081cfe399e15427d15ab80aa699db32c 100644 GIT binary patch delta 499 zcmV$N`odhqFpXCz5Pn01W6BTwDNqrC8gRk7 z5vYGGo-Q;0vWS%sPzd=#x|CqN9z}HP{NvZXkmWKeWiuB6TXccI4*|SdDuo*tkmf~n z-UR|b2NIrcW4U>Q2Tp+rK>+19T&V!w9`fTRPY!rS1$>DZAQdREh=zalJ3!#2;YtOd z0B9mW1-x$dv+RKZuedAVFwgufU?;uVY0rNIEWqegpeSv02^cW`g1i zbjakBhHo00@3l2u1!OI9pg$m5_!|K5i|wE~O>nSf0YZV$|{q`Tq~B(DHx03rD<>?%9gmY>8{c^ADT4G@lqir1P zZUEa~hCpIV|H~#1-~s$RfPBLg^|solkqE{W5+i6YW>!}FSD)tUBdK%=Z(q+gi;&rF zBnbbj-U(CuV*dhEdX(DvV=n+y#XB6c{p^XF(4ln3L+mEO?e-Eee|mBQ6cNVy5~_D^ z0H1sV7W)UlM@z!d55|wt1>kl)AHZZ^b_7E~xCgIg-1guC(4ipMg7XGWP-FnwU7czo zK@21)VDUjB0NQ$^M+P8)%@TkV!%zUb?ZL}l27!mUL?>}LG>+TqFx&lA@c0x!LwR3g zz}Z5;XLIj|;A21Ae>@xd{y}>H58wg(8^CYy_7M^!wY|e7*_&tRl;K&U*d=5cXvKyw z;;~OG%#OT82B1K>rluO5t&^;|)3m8W%iS=J>0zfV delta 562 zcmV-20?qx;1d;`iF%1M~K}|sb0I`n?{9y%=E2_^`L8Tl&Kl|aAkMU>TbN);WMBvKqChTrGoDKhXkJ<^8F2(4g9Pw+#*hiDF{K;++FJx68N{g zAz}sq0kR1|qG_o>t$PNPM7+o)KeqlB5N&_Me)9pR;OAF?`BMNKv0i)8erO0dA8!8= z?1KGJwNT^OALs!*0O|q!J>VO>b%qR@no}3xw_@zjQwF<6bU&##02)K-@e@MH*L7n- zcf>7b02GMU=?Qm$3cJFPKs($^0Gd+b8K(e@AfTjj1d2><{907*qoM6N<$g32KE A<^TWy diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_gene.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_gene.rsi/equipped-OUTERCLOTHING-vox.png index fa9a53d3735ecc3d43093d6dcca23556af236b6d..03a4e52f7b9fb145ea77ab8dd02ca45bdb65bf03 100644 GIT binary patch delta 516 zcmV+f0{i{D1@{DyF_A$}e*xi1L_t(oh3%H%vYa3cg_95>E&Bei+Y|S?f)KZzPN(;W znNfk0d=tbmq3th?9>4?megOKwBzEidW=16YQ)rHWo>VpU`Z>;$%x7dt@+3Zs9mb9R z2IQrffTf_I zk7Z(G9}WOt`~r0P8-Q0!De(_Z5NSAwUH<}fdUqlw{F7x!|J=p_Xcv12WMDBsoWK$R zpffVyi^r*}fWRU;|BwI>mWnF`fB@3~Knc38ejCoMkGa*UchIUAhgNq7mqS2O zTIu4@>4!}LezeF032;bRa{vGizW@LZzX3P}QzQTY z0su)wK~z{r?Uw6ugfIw&fkez!egD_(A;xTC7Pp=DM?2%0aSZ{!#mfk^{ZKdH2AKXB zU^jdwv8ner7Lnw$&}#(zA;uVb|8qS_P_sybO#4=+N%Rmm{tB4pq!9$dZ<`hBCT`^s51Yd zmjHXXW|h+@a}<>w)9cu8=my*X(+&82z!!Me8I=3$g@%CM#OKKRYq18wrTA(UYgcEX zG2|Za5OTg;G?ppNs_2l;Ck@{;G+)&@waxzom}M-oDqoIMo082S#A= z0MIQvW+w$w0f9wye31YU&LzXc1AqWi2S7okW*~YvgNGg}0hhVesdLC!=iZ^!?WCK|(-#8^srF=YSE5z21lnFo;=;e;*UF-2yQmw=ZC!EO5M! z0NBjJI-D&VtAnJQ0rP(M0Fd(xogi)e8G zgdvDI=Hh2ia>NLwZGZ1e5UJPH{WjV;_(RrXgc!&AJ|Fj^`VW9F>7BTRxS83#00000 LNkvXXu0mjf{_60m delta 583 zcmV-N0=WJB1iJ;0F%1M~K}|sb0I`n?{9y%=E>eF032;bRa{vGizyJUazyWI3i3tDz z0su)wK~z{r?Uvh)-5?A_jqMO7DgXbw-6oKOL&&shA6h9}ngQQd%()rLf2bGm0!;rH z;4tP)3ML=#EFvx|(>(%lQC0Er&wgQvW>FMg4wuuyu_<)%6R@l)DhP!CX&ng`Z|dVG zfD(TaBxd}@l=>zQA>LZxKHhc|)OwVRdS3MMN*!?xrM~Pw4{oavq1KKNZ94$WSphD7 z0`Ss;@Rh$%Uo5W@uK*YC6NyU)d@XMJ06IB9C>;#vZz48A@DJz=#I3t<$v8#IAOvQ0 zPpvCNh;MmA#tZ-gq!R#%a_N9|cn?e@_#l6mdg`Gix5+gHKrrvL<`uA|J~ zbPG7&-0?$j2>zz(G2Q3>hF-u6Fuj1k5BLS%a|M<8`k*1fo1`|O_i7E=Q7`T%^#Z_P zC^LT2g-spdhrzO>71L34p8;bqIKop0I0BMfQC&@xm2-$s z9mJ4XFGZ&ammt(z@vMWq6+%DX9n3FoQRe8Kol5B8k_E%x9d32a`L^IY{r7;Je*zIm VxScxd|3v@*002ovPDHLkV1i!K2G0Nh diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_viro.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/labcoat_viro.rsi/equipped-OUTERCLOTHING-vox.png index e432bb2d017b96584e4944928588189c7b21988d..38b48d0a2d482a244bb52aee14ec16382dcf5a62 100644 GIT binary patch delta 516 zcmV+f0{i{D1@{DyF_A$}e*xi1L_t(oh3%H%vYa3cg_95>E&Bei+Y|S?f)KZzPN(;W znNfk0d=tbmq3th?9>4?megOKwBzEidW=16YQ)rHWo>VpU`Z>;$%x7dt@+3Zs9mb9R z2IQrffTf_I zk7Z(G9}WOt`~r0P8-Q0!De(_Z5NSAwUH<}fdUqlw{F7x!|J=p_Xcv12WMDBsoWK$R zpffVyi^r*}fWRU;|BwI>mWnF`fB@3~Knc38ejCoMkGa*UchIUAhgNq7mqS2O zTIu4@>4!}LezeF032;bRa{vGizW@LZzX3P}QzQTY z0su)wK~z{r?Uw6ugfIw&fkez!egD_(A;xTC7Pp=DM?2%0aSZ{!#mfk^{ZKdH2AKXB zU^jdwv8ner7Lnw$&}#(zA;uVb|8qS_P_sybO#4=+N%Rmm{tB4pq!9$dZ<`hBCT`^s51Yd zmjHXXW|h+@a}<>w)9cu8=my*X(+&82z!!Me8I=3$g@%CM#OKKRYq18wrTA(UYgcEX zG2|Za5OTg;G?ppNs_2l;Ck@{;G+)&@waxzom}M-oDqoIMo082S#A= z0MIQvW+w$w0f9wye31YU&LzXc1AqWi2S7okW*~YvgNGg}0hhVesdLC!=iZ^!?WCK|(-#8^srF=YSE5z21lnFo;=;e;*UF-2yQmw=ZC!EO5M! z0NBjJI-D&VtAnJQ0rP(M0Fd(xogi)e8G zgdvDI=Hh2ia>NLwZGZ1e5UJPH{WjV;_(RrXgc!&AJ|Fj^`VW9F>7BTRxS83#00000 LNkvXXu0mjf{_60m delta 583 zcmV-N0=WJB1iJ;0F%1M~K}|sb0I`n?{9y%=E>eF032;bRa{vGizyJUazyWI3i3tDz z0su)wK~z{r?Uvh)-5?A_jqMO7DgXbw-6oKOL&&shA6h9}ngQQd%()rLf2bGm0!;rH z;4tP)3ML=#EFvx|(>(%lQC0Er&wgQvW>FMg4wuuyu_<)%6R@l)DhP!CX&ng`Z|dVG zfD(TaBxd}@l=>zQA>LZxKHhc|)OwVRdS3MMN*!?xrM~Pw4{oavq1KKNZ94$WSphD7 z0`Ss;@Rh$%Uo5W@uK*YC6NyU)d@XMJ06IB9C>;#vZz48A@DJz=#I3t<$v8#IAOvQ0 zPpvCNh;MmA#tZ-gq!R#%a_N9|cn?e@_#l6mdg`Gix5+gHKrrvL<`uA|J~ zbPG7&-0?$j2>zz(G2Q3>hF-u6Fuj1k5BLS%a|M<8`k*1fo1`|O_i7E=Q7`T%^#Z_P zC^LT2g-spdhrzO>71L34p8;bqIKop0I0BMfQC&@xm2-$s z9mJ4XFGZ&ammt(z@vMWq6+%DX9n3FoQRe8Kol5B8k_E%x9d32a`L^IY{r7;Je*zIm VxScxd|3v@*002ovPDHLkV1i!K2G0Nh diff --git a/Resources/Textures/Clothing/OuterClothing/Coats/rndcoat.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Coats/rndcoat.rsi/equipped-OUTERCLOTHING-vox.png index 89369f8794c1aaa1c8dd4195a9a7f341591e5502..f99be74a5a952c6d3b1dad752e7686af7478cc02 100644 GIT binary patch delta 516 zcmV+f0{i{D1@{DyF_A$}e*xi1L_t(oh3%H%vYa3cg_95>E&Bei+Y|S?f)KZzPN(;W znNfk0d=tbmq3th?9>4?megOKwBzEidW=16YQ)rHWo>VpU`Z>;$%x7dt@+3Zs9mb9R z2IQrffTf_I zk7Z(G9}WOt`~r0P8-Q0!De(_Z5NSAwUH<}fdUqlw{F7x!|J=p_Xcv12WMDBsoWK$R zpffVyi^r*}fWRU;|BwI>mWnF`fB@3~Knc38ejCoMkGa*UchIUAhgNq7mqS2O zTIu4@>4!}LezeF032;bRa{vGizyJUazyWI3i3tDz z0su)wK~z{r?Uw6ugfIw&fkez!egD_(A;xTC7Pp=DM?2%0aSZ{!#mfk^{ZKdH2AKXB zU^jdwv8ner7Lnw$&}#(zA;uVb|8qS_P_sybO#4=+N%Rmm{tB4pq!9$dZ<`hBCT`^s51Yd zmjHXXW|h+@a}<>w)9cu8=my*X(+&82z!!Me8I=3$g@%CM#OKKRYq18wrTA(UYgcEX zG2|Za5OTg;G?ppNs_2l;Ck@{;G+)&@waxzom}M-oDqoIMo082S#A= z0MIQvW+w$w0f9wye31YU&LzXc1AqWi2S7okW*~YvgNGg}0hhVesdLC!=iZ^!?WCK|(-#8^srF=YSE5z21lnFo;=;e;*UF-2yQmw=ZC!EO5M! z0NBjJI-D&VtAnJQ0rP(M0Fd(xogi)e8G zgdvDI=Hh2ia>NLwZGZ1e5UJPH{WjV;_(RrXgc!&AJ|Fj^`VW9F>7BTRxS83#00000 LNkvXXu0mjf{_60m delta 583 zcmV-N0=WJB1iJ;0F%1M~K}|sb0I`n?{9y%=E>eF032;bRa{vGizyJUazyWI3i3tDz z0su)wK~z{r?Uvh)-5?A_jqMO7DgXbw-6oKOL&&shA6h9}ngQQd%()rLf2bGm0!;rH z;4tP)3ML=#EFvx|(>(%lQC0Er&wgQvW>FMg4wuuyu_<)%6R@l)DhP!CX&ng`Z|dVG zfD(TaBxd}@l=>zQA>LZxKHhc|)OwVRdS3MMN*!?xrM~Pw4{oavq1KKNZ94$WSphD7 z0`Ss;@Rh$%Uo5W@uK*YC6NyU)d@XMJ06IB9C>;#vZz48A@DJz=#I3t<$v8#IAOvQ0 zPpvCNh;MmA#tZ-gq!R#%a_N9|cn?e@_#l6mdg`Gix5+gHKrrvL<`uA|J~ zbPG7&-0?$j2>zz(G2Q3>hF-u6Fuj1k5BLS%a|M<8`k*1fo1`|O_i7E=Q7`T%^#Z_P zC^LT2g-spdhrzO>71L34p8;bqIKop0I0BMfQC&@xm2-$s z9mJ4XFGZ&ammt(z@vMWq6+%DX9n3FoQRe8Kol5B8k_E%x9d32a`L^IY{r7;Je*zIm VxScxd|3v@*002ovPDHLkV1i!K2G0Nh diff --git a/Resources/Textures/Clothing/Shoes/Boots/combatboots.rsi/equipped-FEET-vox.png b/Resources/Textures/Clothing/Shoes/Boots/combatboots.rsi/equipped-FEET-vox.png new file mode 100644 index 0000000000000000000000000000000000000000..77af7765e57afe2d0b804f60204b9a63c276f992 GIT binary patch literal 459 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zTRmMILn`LH zy=9np$UuVi!Sq#&F6--viPbQ5Z&JLHT+r4b?D9tN`$L5s-BX+iiH@B%Q;*7OxqEu4 zN_U2=cz-+RX61gF>P?JF$l#Tb;P-727J`LJk80vK|G)TYev2dhp$L59JnH} zW;4(4MIC>y_cd$0L8Uh+?D;hS^*IUmEh z=f-}^h1YET8Y5Wv_@l()iyRCaZoh5XFP*hBW>^3B@|rk3hK9or1JZxUe=?GIP-=F# zY&Y*YekqHYK2h4$Hgff6xFw5M??0!Gf3vBTi$>gTe~DWM4fH95vr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Shoes/Boots/combatboots.rsi/meta.json b/Resources/Textures/Clothing/Shoes/Boots/combatboots.rsi/meta.json index f5bb702feb..b0c4419dda 100644 --- a/Resources/Textures/Clothing/Shoes/Boots/combatboots.rsi/meta.json +++ b/Resources/Textures/Clothing/Shoes/Boots/combatboots.rsi/meta.json @@ -1,26 +1,30 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Made by @ninruB#7795, based off tgstation's jackboots at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-FEET", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by @ninruB#7795, based off tgstation's jackboots at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe. Vox state modified from jackboots.rsi by Flareguy", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-FEET", + "directions": 4 + }, + { + "name": "equipped-FEET-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Shoes/Boots/magboots-science.rsi/equipped-FEET-vox.png b/Resources/Textures/Clothing/Shoes/Boots/magboots-science.rsi/equipped-FEET-vox.png new file mode 100644 index 0000000000000000000000000000000000000000..dc22be4ac27c8b1e5023a512df3b885eb36a0423 GIT binary patch literal 1164 zcmV;71atd|P)Px(MoC0LRCt{2+D}YeMI6BK@2rhRpz^0hTcHG4+NH+CrlApbNt8lGAYh^`jR#pw zj7>11scmAaJ$R@zrY()cKRtNhZH<2*jR}!O6kEL%OenUErmX2>*9Sx??b`*HU}9xF zEIg@c%wU#_&gZguGn4uK=J#gbWd<}&(=<)fG)>bqP17_@(=<)f{wIX$z$X782_S?d zJu?OS<_$gwyeFRXx5&(_EM}tfEJzmuNx(RvJg;*6=0j3S!5Y^s)@Gy;i$)1_zAc)X zUy_+w>xkNONa+ILjB#8!{u-s={)6)IonF$?(gBFaXZYmfvj9w8k5RF+>b5>14oIW( zRMLv@eDi);Q(xme|2!EXI69VyKNV%i_J?`Ex5eofNU8b~lnU_e&}U3f{XjSzrmd|V zfQ5xW5}op|aj(DDLP4P$(==74Rd!3>ohU34i3^wf?Y8~}?jatZUF-*`zOmH`@Mvj0 zF7Z20);)_gISs(Z4LOUy4>CJ5%k0c7FSZe*OfCM2Z z-dae19~5sb#3kpMi_HTt{GAEhr97`v0RqMe(OF|i|NXfjAr=`Y>-shVK;_gUG|Vq> zUtSJEfN@>W+~-f~H{gtMTo^S0*|b>n*qBAn)gl14T`l0L^@7a8JP-n7Ds4sal?FC8 zHcEiGc$}*0Mlv!|Ie%`DfYC0R{0C*lP9L$EIR-xeh}5(+0J^%ml2(M}@pnD(G?8(O z=*>7rXS?t>AC#HvQpw-6i7&tSbj9&qDucY`b)=?jBx>87e)kxcE?*&FvF*MXmk=xBR)13heAcFC@n+j$s%!VK znmeFB*v%`i9^=;;8#5dMpg-8{=sEW;lW=M!1&b z+ab%fjlDsU+s(zP?YIl_F^ePg2fOJq+_*i7Hh>`KmFHa1n|iC`eQAaxn4uBp9Dc&G zC@HJrm&qTUaTAusg`uIO?gDRVsm#sGbDlTkY+-nCfTgy%c-$$%{?-?iV=LVcSYn0~ z6_46BUSBo4_wHk}$II~G027www3U=qtz=pyC1q9Y-n$R4ubK(VVt8Px(Ye_^wRCt{2+Fxu_RUE+a@2!i5ZLmN5mu(pxNVetWiMw+db#x_dDlz&%H0_fTAdhq9}@@D2k#eilQirqA1G$geE(%J+NBzE3)TfmHIqF7ezNAH~Hb0HjjW9R2b*0I|sgtJgF>)Te13LhtU( zTM=Ff?i9@%o9*Wt6A}7`N3;23ah_TE1PlGk?S2g*WM6_*0VZA7xGV|?hlknb-3CA= zb1&N|{uuXZxC?KEhuE@FnXuCCibu1BMIdnC5O*Hx&+r(jRC1;tg#5paKLWBIA@#))E5N#-672c7{1s zOVBjXCpCg!2lDz4IHK><^yZLgpDB7`)TB4O41n73QeK#+QC3q0nuZ=L&MCjtz_zwF z0gz6mXl!buw6utUQ-g%`gIarFmsq{VPhvVv|2JPyR9p-|Pft(Yitu3mb?Y|~88?Yf zrO>+%YJuP`Q8u@T>dH#K`}V7x^GkgKzJ?Zx3KtW%EDnG49v3cNBBUSG07Ci!?c${i z9R6@Gam!*>VFmRK8~@=_|C-;wj;Lu8w=BlYpY6p1=-mgjgq3D&rax+$`2B11nqN^A zMNt$*Q4~c{6h%=KMNt&xKOv{%tCkHL#Ju?)`&pkk9eU7?jy^K;RAg zjQZBiVNUe*<@bI7fZOdB^X7YKX>GCFO3DlE3H2QRUI4UhUi+^s9-ympulDCWJ397= zhKAMlm=nF=b{k@3WJGEn(vx+&-J-6pg_z60Tj3!b9cKB|lK?oERx`V#oStzVZ-s}> z;QRkd5jwix6yfMFZIuCjowhK>A^=>Od)c1T!mCb(hE5<`0O=j@R?XYAdNaUNl+LOI z*Lp%{CIDz%n1SDtJaT4p?yJf{?a>v~vVzuUlRyEz!`WLQhl1H1kSOqi7kVda35>K$ z#gs0<=bR)_m`!914PcC%=h~=2(}tHw6jo!5MKHAUTr-RumnHAr(RWzpbn;VdCC;VQ z7@i0x`;O70J8`OZcjFI#9IegSKSykW2FB4bnaZ%Ic?9fnN zKLcM~ov5g)vY!_%S^o-v7i9eoJL<%EAoeM3 P00000NkvXXu0mjfZD>iO literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Shoes/Boots/speedboots.rsi/equipped-FEET-vox.png b/Resources/Textures/Clothing/Shoes/Boots/speedboots.rsi/equipped-FEET-vox.png new file mode 100644 index 0000000000000000000000000000000000000000..ff5c3a05894c08d233f91a43833a7b7c4ca78afb GIT binary patch literal 1486 zcma)+X*ARe0LB0FFs30p)0r8|L~<-yvW$H<9Px%GWO<5b#t>3N)|q(`qLd~39wwBO zNS3VG#+D{a#4trnwkD0`;dvk5xA)=x?z#7z`}N+%I$};j;ZOhoPTJX8IUl>(zk+~| zSxpR`0{~DE(b5u2^z{V*rL?d#WBYEbM1pLfb(Ivqv=vgzKh)n`qQ{BNbS}s7wPz_h zxTBt->_kH)J(0Zp@83P|q?FV!tK}fca*Iprlc&W-8!S>7h~Sa#=#6M}Bu{B(kVM<2 zl7#)+{9N0B`kNeg&Uw);E8>|f9V3Ejq2t!ZUQ>nn$Nc!!?W4Bl8XZCuSo;-37?H{r zplg@A#9+26uhX3Rm*R!vS+#;nF;%3tuHTb6lH`lu9SOat@~D7a_(b58Qj_%pd10>1 zOP9Rt)s()6ue+6N(LW@55U>VS zFNdnEZ24rO|Og`6xWMn*d6g}V8f;f~_l7QZ^D8>HQT2cO58LD)j7E{TcVJV09 z&bP5F`aMI@pk7kllwTktj?U~@s3Eu6$V zil7AWoEDwX^VzfK_(gbxFD6dD1$Bfp0=7Ad@|9Jw{Gh}H(un@5kXzOnj~})%^MpnX zhjZD!$5eh~ag-fshp2PP1C>y|D8AibEpgo5AUPZkWFABDb5z&;WcMKiX-GRr3XjVK z4fIy__79h==uO>3!o|fEfE)T^m3Mi1vJ;Xhza%x~$r|m6o)g7^bcf%l2Y3PLO(S6g zG8dV6QM2#>pF-cexw7XB#wkDQ2=h9Z8Y@gS(Z3rs12pX#RpFAEo4cNBvv`#>NJ3&_ zG~S|x{G%65^NDI&(JfjQHH|scgW-t^VxV;Oh^p)oc5_5gA7fiZ0#iTLc%PUDrxNq> zf@Y561+Vto%aKjBGatczY#65gxMHxw2EV=pW6xzbM77BrP6oxUj4~JvVz`&x1VAg9NIN$zHh|66l<5!bH;UJG3@AA?c!hCl`MxkY1?hL1ri>u)vj zy3fT>$J4T#tDg!Z`B1#%`gcXFx;GjE9fPZI!&G`dthn7JC3Eau1%D^iwyv?cOO~d- zx%fVoSt8Kdg658gDQ4)W4ZnV&s#9roeA1K|#8AUgLymYG(k>wHFnOh&X@OffVwv3W@GEQ`~D7f^wX-{qr zlYdN=ZqR70cp!A0v%4AfSX&$qGMH8xj;FB{BDTIAriB^y88*lylFZ5qd3H+N%0qK_ zrkY*NARy$=Wmg%~rN^A*ij-UQ!$XsHlgO^K*|iD29$cs(+1Tboh{(|zj2uFMDd_*= zef40h&W{*u@?c~Cs*oAvFBTeLEUk|bPC-ylaLUHRkWO50!<6pxo4E z74bdYUj~nNg`d1JuEpk~oVp;xArP+SlIP^t^@vpWXJC=kZTMtZl}io42+&ziUG91j j9^TowreTDd89x&6eY%8&L5xO@e;Tl}cC@OsxN`d+GJ(20 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Shoes/Boots/speedboots.rsi/meta.json b/Resources/Textures/Clothing/Shoes/Boots/speedboots.rsi/meta.json index 3aa61e31c5..7c3599192c 100644 --- a/Resources/Textures/Clothing/Shoes/Boots/speedboots.rsi/meta.json +++ b/Resources/Textures/Clothing/Shoes/Boots/speedboots.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC0-1.0", - "copyright": "Created by EmoGarbage404", + "copyright": "Created by EmoGarbage404. Vox states made by Flareguy, modified from magboots.rsi", "size": { "x": 32, "y": 32 @@ -15,6 +15,14 @@ "name": "on-equipped-FEET", "directions": 4 }, + { + "name": "equipped-FEET-vox", + "directions": 4 + }, + { + "name": "on-equipped-FEET-vox", + "directions": 4 + }, { "name": "icon" }, diff --git a/Resources/Textures/Clothing/Shoes/Boots/speedboots.rsi/on-equipped-FEET-vox.png b/Resources/Textures/Clothing/Shoes/Boots/speedboots.rsi/on-equipped-FEET-vox.png new file mode 100644 index 0000000000000000000000000000000000000000..66ae1ee7e843910fe716687d850b1bc9a1914684 GIT binary patch literal 1491 zcma)+Z9EeQ0LHhrwxw&N72(Rub*)-UjFi;O$V)avWwn+{Ha3?_BV(H;u6BwXYUJ%~ z8Z`_lugkn;g_4*1DK@)HXR^>j6X!nOxBKus&+qsD@O*lH&kaAqk#z=U1^@tHotGy* zU?s8t3Ibp#?uyH=&QE!XPkmEWvM0XrsdfCsX=Swo*Eqgjd^6ZoTX(s zT?G~X#y~WFLLz*ca_)JCS6!YZ&DyVT!PB;7IUEc_-6u?IzdjMV_U9x`=$0Gn${fPt zAed^Hq4_P%S_P)~c>IxR(WMgq&i6@%NovV=$arydV+--->_+ynNkUk=RdHPSg4saC z5b}w;ime(cB0I9j{VA_6W?d8&GZj?_XtAUfz+wsWreYTQ8YSt09`v0w{NSz{=uRYmNA9Wvx8H88WS%7#GQ z9v^~@w&gSfJDD@4&JA?ap-~vZ)(WJM#B$CtfYR=C+2e1&Uepb zP@-4Yvy3wIANiw0MqzVrANbAz0AMRGylY@=?ni+ub@;eNJIBl%FMT0R-(l4&3avSe)(QQ{epOgsRfHs1~X5byDod1zvWH7VQ=eFr2D^0E#Z zbwu4gdOO2gxZ-`Iqqi6L3>wg7B<3n^ccH@Rmc0A4F`2m6-k#T|wQRO6*=Wuvo(P2B zSGyFwH0tCwb=9@@hSp954mtWRO*Rr(d$2dZ@PqRJ+Pfh9VZE_?>cDtyTGfoC+OKW( zP}x8laQJbdDrOi%J9gnqsY7>HeWC^$2SpgHj@gj_a!-9N>WnVGCAH56pAAEM%}pQ~ z`kwKCuaN7wLZOz6D^yB)2&;NUol7DY`ml(xyg4T<$BcIL{qx~Yi6N#J z>^85l%y{mZ9AfK`dv@~me)@2`^kIPxr0UN%BdoB3)94JvUq5h9qqk=&LYGNZIuHl4 z98vw*exBoDYV?>}u^y7N+mfCH3|R{^55W$tYWcr7XK;k;#^NnF$Gr3W%s33aWEXWk z#$jDh`d;5z;ZfPeux1uwfon1t`C=DUkbLY>B|{LqyShynnkU%gHh!2R%);VkW2WlJ zB&foNzZf-%>6z*Q>Cm5!v%fxFo{nAgbkr7V>h#1bz>x#?ova*1?$QS}HYWuDiDgvg zGgID9_4|h>fGiHb0=*f2Rg)hk)~%Z_8Jqq+Ra95?vSMW|9mLP`F{jQvObnK(k;4VZKC-jAe3`WOb?PRFa|1C2WfV z7+sGnt+Ud#$szNq8wI<+H3NClaq_Rar_WZ-8sOzlz)Nsvul)l>y3CmX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/eyes.png b/Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/eyes.png new file mode 100644 index 0000000000000000000000000000000000000000..2cb7e553b6ed9d0251cb83b4fbb88f2ed109889b GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|-g&w>hE&XX zdu=0Evw?`)!|a!L%=KJrUhBPmcS%A^Ui`nYrG$-Tr{d|?k@I&MnCmX^WI(|Nr*~c5 zl(+TG{QgZPyE*%OzMPm7#WExI?yCESQGb{=cbgckb8WaOYXG8*L3%Rzopr0FAnD4gdfE literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/head.png b/Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/head.png new file mode 100644 index 0000000000000000000000000000000000000000..d77878fdcc45e6870c6723d5fa0f58883e78eccd GIT binary patch literal 703 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV9d*Ob`Ho)PG(@xm{>Y-x3^QF z$Z`9uRQ|;a+dA5;BTO_r98KCB^{y>oi`1>EWwq1$uBEuv(YyJAz}7EPzxcCwqqv(E za41R5uGUrDUK|?WbpC1i`S$nkYxtkf^MuplUjq)TU*mRN)A)P4+Twyy*cJ{ zRF_Bw{J3`MacSLVi`eJ--CsR27~h2XtKL2IQ7p{3%CExf#@y4>t{k(uHhssWpHnwH zF|>Rv(Zcb-UD2=8caz9RuXCr*-TGZ)df$lkQ^z3=gf_KhalV|UcZ&b9Ow9f1T3%4WGC9b8 z%SZOtf*A~~sxLW#AKHk75G+7{BSmoMDo(|gy4PD1v zHwa#P`M6xvb;A4ky`HoDs=88|*ZJw6f6TCjp_lmrlL?;#_XP_E-4D9OVY4;|{oFZK zl+UkYMYrE>`;F8~OL$lJ$TCvsO7RP%{b10yJZ-&t;lxw_feDkr)78&qol`;+ E01W;zzW@LL literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/mask.png b/Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/mask.png new file mode 100644 index 0000000000000000000000000000000000000000..5eb6ea0163df86c6cbab0be09430e19b7656aa8e GIT binary patch literal 731 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV9d>Qb`Ho)PG(@xm{>Y-xA)-y zkz@7O)a}?sU1W?_SVRc0zSIzXvxskN)B2^onc6CbD!NMRn!242I+lDi{UQHCYljv` zlTwF;)$b^mM?05YQ2N$3`}5=7->v7=G+tP;GCJ<8L`2!S-s6jI-TBiL_TNdCw?t^6 z>B{PJSI)RJb-n)Frxluicvbk*>i_GOr5?V#aFt_4Nco*P8+;Bwi8>d!NB7Rc^vS0W zwI6C;$D>iR^h?Nr^IgV_`?br2KNfPVoENpMCpdLYdaQSa!;b4lpQ{SxzN(&Wv$a;< z8ePUOSD55-(PLsd>tvb4mD^Ij?azO4-TdsTijqp}HIKWLox}DtFM76gwW6u+F2(+n zyH5ShpBGn^V)5dhOzSQ6`}MDzf64yP`|;dZm9lW^+e>Sz}|pMRs0Kb zh0p1EM`ekh+rHrSLC;+$<5xzNY0PcA9-J|={hM?~49_O5dBsKioxDF?uW#7S|F>v= z?n`!4vkawezlwmt'?;uumf=j{wfz9s_^*67r?y`np|ald8~_ieuQ|FV_IK2IMX z7Hgk{O&`m6H6=RFo&V;M{`y6(<;KIGH5haq7Bg&N=w-UVWWwdZT@g85;Ckxr_owbh zcP_rmc}?cUo-6W~Q>5n|wA%gi+x;Y-Le7Y^E4$`vJ5=p0O4>00-`0xt?`QqJlkV{I z>^e;=hII_@H}y#*c9mdKI;Vst0QCGvIsgCw literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/meta.json b/Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/meta.json new file mode 100644 index 0000000000..30fcee2998 --- /dev/null +++ b/Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/meta.json @@ -0,0 +1,35 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by Vermidia", + "size": { + "x": 32, + "y": 32 + }, + "load": { + "srgb": false + }, + "states": [ + { + "name": "head", + "directions": 4 + }, + { + "name": "mask", + "directions": 4 + }, + { + "name": "suitstorage", + "directions": 4 + }, + { + "name": "eyes", + "directions": 4 + }, + { + "name": "neck", + "directions": 4 + } + ] +} + diff --git a/Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/neck.png b/Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/neck.png new file mode 100644 index 0000000000000000000000000000000000000000..c503f75e1d2e7ca9ee4a68d7f200d432ebec0060 GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|{&~7MhE&XX zJKd41*+787{Alw2J7OPiw|=`Iw`6+SVk4b%4G$D2opf=%{a0-L4Ts-yi*shxuZd{6)Y literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/suitstorage.png b/Resources/Textures/Mobs/Animals/mothroach/displacement.rsi/suitstorage.png new file mode 100644 index 0000000000000000000000000000000000000000..b37a81363fc85e7526f0d321a6fab397536be710 GIT binary patch literal 672 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV9d*Ob`Ho)PG(@xm{>Y-x3^QF z$Z`9uRQ|;a+dA5;BTO_r98KCB^{y>oi`1>EWwq1$uBEuv(YyJAz}7EPzxcCwqqv(E za41R5uGUrDUK|?WbpC1i`S$nkYxtkf^MuplUjq)TU*mRN)A)P4+Twyy*cJ{ zRF_Bw{J3`MacSLVi`eJ--CsR27~h2XtKL2IQ7p{3%CExf#@y4>t{k(uHhssWpHnwH zF|>Rv(Zcb-UD2=8caz9RuXCr*-TGZ)df$lkQ^z3=gf_KhalV|UcZ&b9Ow9f1T3%4WGC9b8 z%SZOtf*A~~sxLW#5%AX2#WAE}&fDo51)Cjs4*aonOPVV(vn5%G>)J`bCCfKuwls%a zEI9G#XZ5j7#{~JGxpH5SXb@Xq$e`ITMB|C#?}{0{gvz W8i6x^I~oB!&fw|l=d#Wzp$P!H-XfU* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Animals/mothroach.rsi/0-equipped-HELMET.png b/Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/0-equipped-HELMET.png similarity index 100% rename from Resources/Textures/Mobs/Animals/mothroach.rsi/0-equipped-HELMET.png rename to Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/0-equipped-HELMET.png diff --git a/Resources/Textures/Mobs/Animals/mothroach.rsi/icon.png b/Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/icon.png similarity index 100% rename from Resources/Textures/Mobs/Animals/mothroach.rsi/icon.png rename to Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/icon.png diff --git a/Resources/Textures/Mobs/Animals/mothroach.rsi/inhand-left.png b/Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/inhand-left.png similarity index 100% rename from Resources/Textures/Mobs/Animals/mothroach.rsi/inhand-left.png rename to Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/inhand-left.png diff --git a/Resources/Textures/Mobs/Animals/mothroach.rsi/inhand-right.png b/Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/inhand-right.png similarity index 100% rename from Resources/Textures/Mobs/Animals/mothroach.rsi/inhand-right.png rename to Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/inhand-right.png diff --git a/Resources/Textures/Mobs/Animals/mothroach.rsi/meta.json b/Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/meta.json similarity index 100% rename from Resources/Textures/Mobs/Animals/mothroach.rsi/meta.json rename to Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/meta.json diff --git a/Resources/Textures/Mobs/Animals/mothroach.rsi/mothroach-moving.png b/Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/mothroach-moving.png similarity index 100% rename from Resources/Textures/Mobs/Animals/mothroach.rsi/mothroach-moving.png rename to Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/mothroach-moving.png diff --git a/Resources/Textures/Mobs/Animals/mothroach.rsi/mothroach.png b/Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/mothroach.png similarity index 100% rename from Resources/Textures/Mobs/Animals/mothroach.rsi/mothroach.png rename to Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/mothroach.png diff --git a/Resources/Textures/Mobs/Animals/mothroach.rsi/mothroach_dead.png b/Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/mothroach_dead.png similarity index 100% rename from Resources/Textures/Mobs/Animals/mothroach.rsi/mothroach_dead.png rename to Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/mothroach_dead.png diff --git a/Resources/Textures/Mobs/Animals/mothroach.rsi/mothroach_lazy.png b/Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/mothroach_lazy.png similarity index 100% rename from Resources/Textures/Mobs/Animals/mothroach.rsi/mothroach_lazy.png rename to Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/mothroach_lazy.png diff --git a/Resources/Textures/Mobs/Animals/mothroach.rsi/mothroach_sleep.png b/Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/mothroach_sleep.png similarity index 100% rename from Resources/Textures/Mobs/Animals/mothroach.rsi/mothroach_sleep.png rename to Resources/Textures/Mobs/Animals/mothroach/mothroach.rsi/mothroach_sleep.png diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/tail_stenciled.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/tail_stenciled.png index 50627ac5220bfbc37e5b6f6516b5acacd1d75165..9072c9f4fc3184e3fda883e612f655c2a80f2a9a 100644 GIT binary patch delta 270 zcmV+p0rCFl1gQd$B!2;OQb$4nuFf3k0002vNkl;{Sm|aNRg6DWLu6L2><{90B}Fue+RIanfdmdQo39YhnbnT z)_m)=ARo)j+}*vD;;l6=rL6liMR@#VkiV_gst|&5&XS}Uqkkl6nkGr|BhTRy1u!!o zhCz~)b6(%QnR(y$r|$kbAKu@HF}@`qV^j!1wbr#8_PR^~B)ugsN%K4_gmC!IOBLYN zw*AL({Oob~oC4ePt){@z{=Td(rPST#53sc)eZRy30000000000000000NC#vunKoz URl)?F00000Ne4wvM6N<$fv<0QU!csPxvAmcDTOUXf&~Kv6)Jc?DUN+YReSs@BPmc_}qI@fKd<)RoF8{ zW=%T1Dd*1&{&wdgDL3QxAGhCL`%$mVV)X0q^E#!Lq?q;L?2N|o{*50j%OBR&goe&M znv{6%`R3?2z3F-P-hZDl%kZ`$C&P&kWxGq06z4f@+!wcA{pp9~OE>E)j5f)39hcH# zntCv+!gNUrgTsvZm0Wc;a(stwOcZGdSQ7tl_uY5(_xUQt6|+HD#lgSovgIG|I_LQRbkvJ&7pl{hox0dq z=Bj)X2?$=X^fTK>HlE`)=Z$S%?J8UM`fuI)(zv(xrA@SsoHI#s(0SM(c7%`jf>Uh7 zcg2$E2lXXZrV9^tm`Y5TefC)7M!?)?pf0ILJEFWLAXABJxX%*&{C_8s+ z=Dr%?olHjhW=F1k_))ZThTQExo{tw?Vr6kSSjM4vW3T9DcaEOF&yUTp`grEogn5mQ z3@aumM5uma3Org}So&LDzl~$Q>jN$)78eI7N)r0PB+chhU)FT(3j+{%y85}Sb4q9e E04!bnCIA2c diff --git a/Resources/Textures/Mobs/Species/Human/displacement.rsi/jumpsuit-female.png b/Resources/Textures/Mobs/Species/Human/displacement.rsi/jumpsuit-female.png new file mode 100644 index 0000000000000000000000000000000000000000..be9c1064fbda3a592a742e903076423536994ac9 GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|&U(5yhE&XX zd&`=y*+76H&|3ZbSx>=R3KRL)CoD5_rT2d{(m37S^fXL>1b54wbbU#!8h7E5cVP&`0N|wyo6}6#xou2-awBrc)I$z JtaD0e0su*-VqX9N literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Human/displacement.rsi/meta.json b/Resources/Textures/Mobs/Species/Human/displacement.rsi/meta.json new file mode 100644 index 0000000000..7ac587cad7 --- /dev/null +++ b/Resources/Textures/Mobs/Species/Human/displacement.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by TheShuEd", + "size": { + "x": 32, + "y": 32 + }, + "load": { + "srgb": false + }, + "states": [ + { + "name": "jumpsuit-female", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Species/Vox/displacement.rsi/back.png b/Resources/Textures/Mobs/Species/Vox/displacement.rsi/back.png new file mode 100644 index 0000000000000000000000000000000000000000..c300bba8a5ba9240ca02cb3fa28f619b4ba32b21 GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zYdu{YLn`LH zofTblM1hB;J;d(_t8V;-a3y)q+@)oInN)8}tlpn$+>`34IB8~A-Whh?1~r}qtQT4s zw=m2yXb^J{X1l)r*<29M!r;7W}Y{naeg}Ugvu9*ch z7}rkTap;MvW~}RrdO=g{mL)QvxM+de51;CuB}+}i=Q3{Ay*ux-KkuzS=}oHMoLQZJ z58l`(b>VQ~s$l1-jQW4~o#V-P>28*KAbA1Hvi)Cd%TDq8>aLealKf(l5dNM$N4IqH z$}fAkJTB!_em#C?*KPwBwu%DDgwK literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Vox/displacement.rsi/ears.png b/Resources/Textures/Mobs/Species/Vox/displacement.rsi/ears.png new file mode 100644 index 0000000000000000000000000000000000000000..0b163821447d9d1a608a25178981538db79416a8 GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|)_b}*hE&XX zduyX$g8|P02j_#=?xYrLBr@%Dcoh_Rap#w9*J3^=m+3ChY!JI3;=rB3wSd)x^#ao@ zrVK`3#w`uY7@{148SqMP-Yc)ZL)2oQoQ3i8s(*if^JyqqSPj=g&ux2! z<5hJgZe{)QZ`R~3BCR_V*RA=ytzpU3yVetR9Ntf!eoA%CJ*LgIwllYM2w&Z?cf06D z?Wi}w4o7U`q6MuUB=I{a#2)zLmcQ|rrpL2yKK5l<)z*1IJi4 zFmEtqe8Z6A!(h!IjZdgEtFP?t7UdEy6D2){zL~v~7MtzR*;D_iq$gSKYknA`>ip^Y zrt;@G?=Cob!*Cm0ZrJvHq6b7%wH|bRbz(grPzopr00vCgx&QzG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Vox/displacement.rsi/hand.png b/Resources/Textures/Mobs/Species/Vox/displacement.rsi/hand.png new file mode 100644 index 0000000000000000000000000000000000000000..4a0266dfd3733b7288b6690a682aa7dd518bed73 GIT binary patch literal 483 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z=X$z0hE&XX zJKHetumO*&{mXeC!F*3vF2A5@_0(Zz$>K?}O^epWDlTjKA#NalL37&AUjo(*Q$5xe z%#ldt-f)s3htW*3LHB?f^9I%%DGb{fX7d~nOPI`fgDJ;|A-chrt)imgUV_) z{KG-+=jtU6ylL{3W=XxyDa$(l)`GH|r8d?7Ug|e)zsD_Xm%!$*-dVj&S7zsIb^e7)z-;Wa;({}(wy(4h(FzTsglkiE0EQqkyz2)_dBqlOdz zJ0Ao+;7d55DRRjf}nh*2>gQu&X%Q~loCIFS~Qtki% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Vox/displacement.rsi/meta.json b/Resources/Textures/Mobs/Species/Vox/displacement.rsi/meta.json index 6ea6c552b9..002f826b3e 100644 --- a/Resources/Textures/Mobs/Species/Vox/displacement.rsi/meta.json +++ b/Resources/Textures/Mobs/Species/Vox/displacement.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Made by PJB3005", + "copyright": "jumpsuit state made by PJB3005. back, hand, head, and eyes states made by Flareguy, ears and shoes made by TheShuEd", "size": { "x": 32, "y": 32 @@ -13,6 +13,30 @@ { "name": "jumpsuit", "directions": 4 + }, + { + "name": "back", + "directions": 4 + }, + { + "name": "hand", + "directions": 4 + }, + { + "name": "head", + "directions": 4 + }, + { + "name": "ears", + "directions": 4 + }, + { + "name": "eyes", + "directions": 4 + }, + { + "name": "shoes", + "directions": 4 } ] } diff --git a/Resources/Textures/Mobs/Species/Vox/displacement.rsi/shoes.png b/Resources/Textures/Mobs/Species/Vox/displacement.rsi/shoes.png new file mode 100644 index 0000000000000000000000000000000000000000..107a7500bb94e7ef67fcf67965adbadf438b8dfb GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z`8{16Ln`LH zy?v0c$v~jx;k6(4a-VMH{i>j{LGHw~Yn`9!IoX?1jx+kTMii}B7#O?FI8Xgt==uNL zA`AEyxG}zB$Rd_ewyI%{^BYkY)A`m5z8=}KCH_ok$L!oCai8D2+uzW$)qMB;;^#`1 zD~wlWajke3*Ari7R&_34OJVun#~I(fV={CX;k(;kjo&OkV75 zJX!PDV*lnNUvD43VsL%0QOf^4-~Zh6;w#-8^6uQ@yf=w$HunAevCCfB{{OW4aJ#-o ygz206hc^7acl=N_Ynt)-ch#}~_!cmfGHew$HnU2Z|M|!TkX4?pelF{r5}E)WK$L_4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso.png index 841d40973517aa0f8b1b726d1eceeea783b927e0..3910fb39a676be4de9e10167029a740cc8b12c5f 100644 GIT binary patch delta 933 zcmV;W16usz2D=B4B!2;OQb$4nuFf3k000AZNklw|Jpq6{Pwi9{li zNF)-8N9guc+%906+)<0C&ACOOz6i(si9Voleg9vMgN`G);r9>w>pIPy|fVgu~&0X_`PO zU5)$Sdt+t$TYtgVCxjpe_zL*OQc73hxHr=@xd^cGpGMbp=6pUIt+o4{&u0@8ezEe6 zF;1@4C02e=4gfy9z1{1}vOMiBR8_T#02}^QRYk2A>;M2@j5&iTrC^Lj36J4;Jc3f{ z5~1CC$Kx?-y&wm0&JAM><2bGo-#Ct7j71kCAzUsO0Dri73fS>bf+N6s+$O$lM&6rc zS#Y^rT#6}H!)6#iU8o_4iG{hrF6~G)9Dn| zqJ9+H9=F|TDWyA~5KFKF+P2Mn4%~E zJl6@<_@XGFl=^huBetv@&~=@8eSLM;_T&cuvw!`gJsn~r!JE4~lu``Cu+m}c2)kVX zU>JtgxNplZ{|8DbUS3`@;Ll@@5OVj<3L(%mjf(`O6sBpq8!g|(ziS&`A3_L(5H~v7 zZL&SQ#W^>=6P&V~bF890A-`f@V8rt1kaYoc|5{ zNr+9;Aj`5{BfuDAgb=Xj6|MYxx_wfeu58>s25*#a+cuL@LMe4uP@dKE8w-@d)^S-aHPrl027OO!tpcR&y>wyiKUhYU*?W>at-p^_xJIVMMpxXPU2Bv zKIvdI0YQ~Y+<05Iz5k2d>h+hGyQlArsq3i!ANhClzWehuZ+vg~Qnh#0-MsL-dEf7S ztFXCu?s;*kh0Lm#C9hsxZtmBM`2BaE$?NaGpL)*xe{I>WzyH>)?uc7`RqK_7_HxDM zPhYF{?*IPf<<;1=VOJ9jH2AtXel4(5+HcdVH{H9i#6o6TnnnMLGrz-6C2ibsHf{6n z&l47C%!|V;(zdm{Yll^eAy;7rYJ~yV55G_=cze8v0mbN z;~ZhLQj=wuGYwP&bH1bjUrFRt1=0u1D8&mZrgS7 z^9pgV2@8aaiafjnRSbk&4%XQ5*GJ8_{J8%8Y}MI~2d2GXXi;KtkNhCu%9P^LTk&j1 zEk9dC*^`Z`R;E|i|dR1_DPG>fh0%xYGi zrAH$FxM<{Ma24>b3w*x+(i0`+2c|I+2~BH{Zdkdxa{bgTe~DWM4fCLDpr