From 27cfc0939cafcaf633adb36d645187048399e0eb Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Wed, 5 Mar 2025 10:14:01 +0100 Subject: [PATCH] Add undergarments & "Censor Nudity" toggle to options (#33185) * Initial commit * Attribution * Review changes * Added comment for upstream --- .../Humanoid/HumanoidAppearanceSystem.cs | 53 +++++ .../Options/UI/Tabs/AccessibilityTab.xaml | 5 + .../Options/UI/Tabs/AccessibilityTab.xaml.cs | 2 + Content.Shared/CCVar/CCVars.Accessibility.cs | 12 + .../Humanoid/HumanoidAppearanceComponent.cs | 9 + .../Humanoid/HumanoidVisualLayers.cs | 3 +- .../Humanoid/Markings/MarkingCategories.cs | 4 + .../Humanoid/Markings/MarkingColoring.cs | 6 +- .../en-US/escape-menu/ui/options-menu.ftl | 6 + .../Locale/en-US/markings/undergarment.ftl | 21 ++ .../en-US/preferences/ui/markings-picker.ftl | 2 + .../Customization/Markings/undergarments.yml | 223 ++++++++++++++++++ .../Entities/Mobs/Species/arachnid.yml | 2 + .../Prototypes/Entities/Mobs/Species/base.yml | 4 + .../Prototypes/Entities/Mobs/Species/moth.yml | 2 + .../Entities/Mobs/Species/reptilian.yml | 2 + .../Prototypes/Entities/Mobs/Species/vox.yml | 8 +- Resources/Prototypes/Species/arachnid.yml | 2 + Resources/Prototypes/Species/diona.yml | 8 + Resources/Prototypes/Species/human.yml | 8 + Resources/Prototypes/Species/moth.yml | 8 + Resources/Prototypes/Species/reptilian.yml | 8 + Resources/Prototypes/Species/slime.yml | 2 + Resources/Prototypes/Species/vox.yml | 8 + .../undergarments.rsi/binder.png | Bin 0 -> 18549 bytes .../undergarments.rsi/binder_vox.png | Bin 0 -> 18528 bytes .../undergarments.rsi/boxers.png | Bin 0 -> 16324 bytes .../undergarments.rsi/boxers_reptilian.png | Bin 0 -> 16324 bytes .../undergarments.rsi/boxers_vox.png | Bin 0 -> 17029 bytes .../undergarments.rsi/briefs.png | Bin 0 -> 16302 bytes .../undergarments.rsi/briefs_reptilian.png | Bin 0 -> 16290 bytes .../undergarments.rsi/briefs_vox.png | Bin 0 -> 16927 bytes .../undergarments.rsi/classic.png | Bin 0 -> 16315 bytes .../undergarments.rsi/classic_vox.png | Bin 0 -> 16701 bytes .../Customization/undergarments.rsi/meta.json | 79 +++++++ .../Customization/undergarments.rsi/satin.png | Bin 0 -> 15723 bytes .../undergarments.rsi/satin_reptilian.png | Bin 0 -> 15700 bytes .../undergarments.rsi/satin_vox.png | Bin 0 -> 15717 bytes .../undergarments.rsi/sports.png | Bin 0 -> 16337 bytes .../undergarments.rsi/sports_vox.png | Bin 0 -> 16821 bytes .../undergarments.rsi/tanktop.png | Bin 0 -> 18589 bytes .../undergarments.rsi/tanktop_vox.png | Bin 0 -> 18818 bytes 42 files changed, 483 insertions(+), 4 deletions(-) create mode 100644 Resources/Locale/en-US/markings/undergarment.ftl create mode 100644 Resources/Prototypes/Entities/Mobs/Customization/Markings/undergarments.yml create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/binder.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/binder_vox.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/boxers.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/boxers_reptilian.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/boxers_vox.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/briefs.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/briefs_reptilian.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/briefs_vox.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/classic.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/classic_vox.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/meta.json create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/satin.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/satin_reptilian.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/satin_vox.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/sports.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/sports_vox.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/tanktop.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/tanktop_vox.png diff --git a/Content.Client/Humanoid/HumanoidAppearanceSystem.cs b/Content.Client/Humanoid/HumanoidAppearanceSystem.cs index 6eb5dd9ec9..2d532968de 100644 --- a/Content.Client/Humanoid/HumanoidAppearanceSystem.cs +++ b/Content.Client/Humanoid/HumanoidAppearanceSystem.cs @@ -1,8 +1,10 @@ +using Content.Shared.CCVar; using Content.Shared.Humanoid; using Content.Shared.Humanoid.Markings; using Content.Shared.Humanoid.Prototypes; using Content.Shared.Preferences; using Robust.Client.GameObjects; +using Robust.Shared.Configuration; using Robust.Shared.Prototypes; using Robust.Shared.Utility; @@ -12,12 +14,15 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly MarkingManager _markingManager = default!; + [Dependency] private readonly IConfigurationManager _configurationManager = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnHandleState); + Subs.CVar(_configurationManager, CCVars.AccessibilityClientCensorNudity, OnCvarChanged, true); + Subs.CVar(_configurationManager, CCVars.AccessibilityServerCensorNudity, OnCvarChanged, true); } private void OnHandleState(EntityUid uid, HumanoidAppearanceComponent component, ref AfterAutoHandleStateEvent args) @@ -25,6 +30,15 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem UpdateSprite(component, Comp(uid)); } + private void OnCvarChanged(bool value) + { + var humanoidQuery = EntityManager.AllEntityQueryEnumerator(); + while (humanoidQuery.MoveNext(out var _, out var humanoidComp, out var spriteComp)) + { + UpdateSprite(humanoidComp, spriteComp); + } + } + private void UpdateSprite(HumanoidAppearanceComponent component, SpriteComponent sprite) { UpdateLayers(component, sprite); @@ -207,16 +221,30 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem // Really, markings should probably be a separate component altogether. ClearAllMarkings(humanoid, sprite); + var censorNudity = _configurationManager.GetCVar(CCVars.AccessibilityClientCensorNudity) || + _configurationManager.GetCVar(CCVars.AccessibilityServerCensorNudity); + // The reason we're splitting this up is in case the character already has undergarment equipped in that slot. + var applyUndergarmentTop = censorNudity; + var applyUndergarmentBottom = censorNudity; + foreach (var markingList in humanoid.MarkingSet.Markings.Values) { foreach (var marking in markingList) { if (_markingManager.TryGetMarking(marking, out var markingPrototype)) + { ApplyMarking(markingPrototype, marking.MarkingColors, marking.Visible, humanoid, sprite); + if (markingPrototype.BodyPart == HumanoidVisualLayers.UndergarmentTop) + applyUndergarmentTop = false; + else if (markingPrototype.BodyPart == HumanoidVisualLayers.UndergarmentBottom) + applyUndergarmentBottom = false; + } } } humanoid.ClientOldMarkings = new MarkingSet(humanoid.MarkingSet); + + AddUndergarments(humanoid, sprite, applyUndergarmentTop, applyUndergarmentBottom); } private void ClearAllMarkings(HumanoidAppearanceComponent humanoid, SpriteComponent sprite) @@ -264,6 +292,31 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem spriteComp.RemoveLayer(index); } } + + private void AddUndergarments(HumanoidAppearanceComponent humanoid, SpriteComponent sprite, bool undergarmentTop, bool undergarmentBottom) + { + if (undergarmentTop && humanoid.UndergarmentTop != null) + { + var marking = new Marking(humanoid.UndergarmentTop, new List { new Color() }); + if (_markingManager.TryGetMarking(marking, out var prototype)) + { + // Markings are added to ClientOldMarkings because otherwise it causes issues when toggling the feature on/off. + humanoid.ClientOldMarkings.Markings.Add(MarkingCategories.UndergarmentTop, new List{ marking }); + ApplyMarking(prototype, null, true, humanoid, sprite); + } + } + + if (undergarmentBottom && humanoid.UndergarmentBottom != null) + { + var marking = new Marking(humanoid.UndergarmentBottom, new List { new Color() }); + if (_markingManager.TryGetMarking(marking, out var prototype)) + { + humanoid.ClientOldMarkings.Markings.Add(MarkingCategories.UndergarmentBottom, new List{ marking }); + ApplyMarking(prototype, null, true, humanoid, sprite); + } + } + } + private void ApplyMarking(MarkingPrototype markingPrototype, IReadOnlyList? colors, bool visible, diff --git a/Content.Client/Options/UI/Tabs/AccessibilityTab.xaml b/Content.Client/Options/UI/Tabs/AccessibilityTab.xaml index 763fd995ca..5041b498a0 100644 --- a/Content.Client/Options/UI/Tabs/AccessibilityTab.xaml +++ b/Content.Client/Options/UI/Tabs/AccessibilityTab.xaml @@ -4,6 +4,8 @@ + diff --git a/Content.Client/Options/UI/Tabs/AccessibilityTab.xaml.cs b/Content.Client/Options/UI/Tabs/AccessibilityTab.xaml.cs index e1dead0b0e..f87cda746c 100644 --- a/Content.Client/Options/UI/Tabs/AccessibilityTab.xaml.cs +++ b/Content.Client/Options/UI/Tabs/AccessibilityTab.xaml.cs @@ -21,6 +21,8 @@ public sealed partial class AccessibilityTab : Control Control.AddOptionPercentSlider(CCVars.SpeechBubbleSpeakerOpacity, SpeechBubbleSpeakerOpacitySlider); Control.AddOptionPercentSlider(CCVars.SpeechBubbleBackgroundOpacity, SpeechBubbleBackgroundOpacitySlider); + Control.AddOptionCheckBox(CCVars.AccessibilityClientCensorNudity, CensorNudityCheckBox); + Control.Initialize(); } } diff --git a/Content.Shared/CCVar/CCVars.Accessibility.cs b/Content.Shared/CCVar/CCVars.Accessibility.cs index 14312363a1..3f752cbeea 100644 --- a/Content.Shared/CCVar/CCVars.Accessibility.cs +++ b/Content.Shared/CCVar/CCVars.Accessibility.cs @@ -60,5 +60,17 @@ public sealed partial class CCVars public static readonly CVarDef SpeechBubbleBackgroundOpacity = CVarDef.Create("accessibility.speech_bubble_background_opacity", 0.75f, CVar.CLIENTONLY | CVar.ARCHIVE); + /// + /// If enabled, censors character nudity by forcing clothes markings on characters, selected by the client. + /// Both this and AccessibilityServerCensorNudity must be false to display nudity on the client. + /// + public static readonly CVarDef AccessibilityClientCensorNudity = + CVarDef.Create("accessibility.censor_nudity", false, CVar.CLIENTONLY | CVar.ARCHIVE); + /// + /// If enabled, censors character nudity by forcing clothes markings on characters, selected by the server. + /// Both this and AccessibilityClientCensorNudity must be false to display nudity on the client. + /// + public static readonly CVarDef AccessibilityServerCensorNudity = + CVarDef.Create("accessibility.server_censor_nudity", false, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); } diff --git a/Content.Shared/Humanoid/HumanoidAppearanceComponent.cs b/Content.Shared/Humanoid/HumanoidAppearanceComponent.cs index 016ab64f1a..0bf11f5762 100644 --- a/Content.Shared/Humanoid/HumanoidAppearanceComponent.cs +++ b/Content.Shared/Humanoid/HumanoidAppearanceComponent.cs @@ -88,6 +88,15 @@ public sealed partial class HumanoidAppearanceComponent : Component /// [DataField] public HashSet HideLayersOnEquip = [HumanoidVisualLayers.Hair]; + + /// + /// Which markings the humanoid defaults to when nudity is toggled off. + /// + [DataField] + public ProtoId? UndergarmentTop = new ProtoId("UndergarmentTopTanktop"); + + [DataField] + public ProtoId? UndergarmentBottom = new ProtoId("UndergarmentBottomBoxers"); } [DataDefinition] diff --git a/Content.Shared/Humanoid/HumanoidVisualLayers.cs b/Content.Shared/Humanoid/HumanoidVisualLayers.cs index cecd8a1c13..ca78564bfd 100644 --- a/Content.Shared/Humanoid/HumanoidVisualLayers.cs +++ b/Content.Shared/Humanoid/HumanoidVisualLayers.cs @@ -10,6 +10,8 @@ namespace Content.Shared.Humanoid Tail, Hair, FacialHair, + UndergarmentTop, + UndergarmentBottom, Chest, Head, Snout, @@ -19,7 +21,6 @@ namespace Content.Shared.Humanoid RArm, LArm, RHand, - LHand, RLeg, LLeg, diff --git a/Content.Shared/Humanoid/Markings/MarkingCategories.cs b/Content.Shared/Humanoid/Markings/MarkingCategories.cs index db82fb1fd3..2551175096 100644 --- a/Content.Shared/Humanoid/Markings/MarkingCategories.cs +++ b/Content.Shared/Humanoid/Markings/MarkingCategories.cs @@ -13,6 +13,8 @@ namespace Content.Shared.Humanoid.Markings HeadSide, Snout, Chest, + UndergarmentTop, + UndergarmentBottom, Arms, Legs, Tail, @@ -33,6 +35,8 @@ namespace Content.Shared.Humanoid.Markings HumanoidVisualLayers.HeadSide => MarkingCategories.HeadSide, HumanoidVisualLayers.Snout => MarkingCategories.Snout, HumanoidVisualLayers.Chest => MarkingCategories.Chest, + HumanoidVisualLayers.UndergarmentTop => MarkingCategories.UndergarmentTop, + HumanoidVisualLayers.UndergarmentBottom => MarkingCategories.UndergarmentBottom, HumanoidVisualLayers.RArm => MarkingCategories.Arms, HumanoidVisualLayers.LArm => MarkingCategories.Arms, HumanoidVisualLayers.RHand => MarkingCategories.Arms, diff --git a/Content.Shared/Humanoid/Markings/MarkingColoring.cs b/Content.Shared/Humanoid/Markings/MarkingColoring.cs index a13481debf..fa47475a23 100644 --- a/Content.Shared/Humanoid/Markings/MarkingColoring.cs +++ b/Content.Shared/Humanoid/Markings/MarkingColoring.cs @@ -89,7 +89,7 @@ public static class MarkingColoring public sealed partial class LayerColoringDefinition { [DataField("type")] - public LayerColoringType Type = new SkinColoring(); + public LayerColoringType? Type = new SkinColoring(); /// /// Coloring types that will be used if main coloring type will return nil @@ -105,7 +105,9 @@ public sealed partial class LayerColoringDefinition public Color GetColor(Color? skin, Color? eyes, MarkingSet markingSet) { - var color = Type.GetColor(skin, eyes, markingSet); + Color? color = null; + if (Type != null) + color = Type.GetColor(skin, eyes, markingSet); if (color == null) { foreach (var type in FallbackTypes) diff --git a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl index e6b6a5250a..32a77f8b6b 100644 --- a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl +++ b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl @@ -279,15 +279,21 @@ cmd-options-help = Usage: options [tab] ## Accessibility menu +ui-options-accessability-header-visuals = Visuals +ui-options-accessability-header-content = Content + ui-options-enable-color-name = Add colors to character names ui-options-colorblind-friendly = Colorblind friendly mode ui-options-reduced-motion = Reduce motion of visual effects ui-options-screen-shake-intensity = Screen shake intensity + ui-options-chat-window-opacity = Chat window opacity ui-options-speech-bubble-text-opacity = Speech bubble text opacity ui-options-speech-bubble-speaker-opacity = Speech bubble speaker opacity ui-options-speech-bubble-background-opacity = Speech bubble background opacity +ui-options-censor-nudity = Censor character nudity + ## Admin menu ui-options-enable-classic-overlay = Revert antag overlay to classic mode diff --git a/Resources/Locale/en-US/markings/undergarment.ftl b/Resources/Locale/en-US/markings/undergarment.ftl new file mode 100644 index 0000000000..3740d0573d --- /dev/null +++ b/Resources/Locale/en-US/markings/undergarment.ftl @@ -0,0 +1,21 @@ +marking-UndergarmentTopTanktop = Tanktop +marking-UndergarmentTopBinder = Binder +marking-UndergarmentTopBra = Classic Bra +marking-UndergarmentTopSportsbra = Sports Bra + +marking-UndergarmentBottomBoxers = Boxers +marking-UndergarmentBottomBriefs = Briefs +marking-UndergarmentBottomSatin = Satin + +marking-UndergarmentTopTanktopVox = Tanktop +marking-UndergarmentTopBinderVox = Binder +marking-UndergarmentTopBraVox = Classic Bra +marking-UndergarmentTopSportsbraVox = Sports Bra + +marking-UndergarmentBottomBoxersVox = Boxers +marking-UndergarmentBottomBriefsVox = Briefs +marking-UndergarmentBottomSatinVox = Satin + +marking-UndergarmentBottomBoxersReptilian = Boxers +marking-UndergarmentBottomBriefsReptilian = Briefs +marking-UndergarmentBottomSatinReptilian = Satin diff --git a/Resources/Locale/en-US/preferences/ui/markings-picker.ftl b/Resources/Locale/en-US/preferences/ui/markings-picker.ftl index ba274ec9ca..af2e81ce3b 100644 --- a/Resources/Locale/en-US/preferences/ui/markings-picker.ftl +++ b/Resources/Locale/en-US/preferences/ui/markings-picker.ftl @@ -21,6 +21,8 @@ markings-category-Head = Head markings-category-HeadTop = Head (Top) markings-category-HeadSide = Head (Side) markings-category-Snout = Snout +markings-category-UndergarmentTop = Undergarment (Top) +markings-category-UndergarmentBottom = Undergarment (Bottom) markings-category-Chest = Chest markings-category-Arms = Arms markings-category-Legs = Legs diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/undergarments.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/undergarments.yml new file mode 100644 index 0000000000..b7f62290e1 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/undergarments.yml @@ -0,0 +1,223 @@ +# These options are kept very sparse to not put emphasis on nudity, and to provide a base for players to feel comfortable with. +# It's unlikely more will be added to upstream for cosmetic reasons. + +- type: marking + id: UndergarmentBottomBoxers + bodyPart: UndergarmentBottom + markingCategory: UndergarmentBottom + speciesRestriction: [Arachnid, Diona, Human, Dwarf, Moth, SlimePerson] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: boxers + +- type: marking + id: UndergarmentBottomBriefs + bodyPart: UndergarmentBottom + markingCategory: UndergarmentBottom + speciesRestriction: [Arachnid, Diona, Human, Dwarf, Moth, SlimePerson] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: briefs + +- type: marking + id: UndergarmentBottomSatin + bodyPart: UndergarmentBottom + markingCategory: UndergarmentBottom + speciesRestriction: [Arachnid, Diona, Human, Dwarf, Moth, SlimePerson] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: satin + +- type: marking + id: UndergarmentTopBra + bodyPart: UndergarmentTop + markingCategory: UndergarmentTop + speciesRestriction: [Arachnid, Diona, Human, Dwarf, Moth, Reptilian, SlimePerson] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: classic + +- type: marking + id: UndergarmentTopSportsbra + bodyPart: UndergarmentTop + markingCategory: UndergarmentTop + speciesRestriction: [Arachnid, Diona, Human, Dwarf, Moth, Reptilian, SlimePerson] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: sports + +- type: marking + id: UndergarmentTopBinder + bodyPart: UndergarmentTop + markingCategory: UndergarmentTop + speciesRestriction: [Arachnid, Diona, Human, Dwarf, Moth, Reptilian, SlimePerson] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: binder + +- type: marking + id: UndergarmentTopTanktop + bodyPart: UndergarmentTop + markingCategory: UndergarmentTop + speciesRestriction: [Arachnid, Diona, Human, Dwarf, Moth, Reptilian, SlimePerson] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: tanktop + +- type: marking + id: UndergarmentBottomBoxersVox # Voxers. + bodyPart: UndergarmentBottom + markingCategory: UndergarmentBottom + speciesRestriction: [Vox] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: boxers_vox + +- type: marking + id: UndergarmentBottomBriefsVox + bodyPart: UndergarmentBottom + markingCategory: UndergarmentBottom + speciesRestriction: [Vox] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: briefs_vox + +- type: marking + id: UndergarmentBottomSatinVox + bodyPart: UndergarmentBottom + markingCategory: UndergarmentBottom + speciesRestriction: [Vox] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: satin_vox + +- type: marking + id: UndergarmentTopBraVox + bodyPart: UndergarmentTop + markingCategory: UndergarmentTop + speciesRestriction: [Vox] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: classic_vox + +- type: marking + id: UndergarmentTopSportsbraVox + bodyPart: UndergarmentTop + markingCategory: UndergarmentTop + speciesRestriction: [Vox] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: sports_vox + +- type: marking + id: UndergarmentTopBinderVox + bodyPart: UndergarmentTop + markingCategory: UndergarmentTop + speciesRestriction: [Vox] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: binder_vox + +- type: marking + id: UndergarmentTopTanktopVox + bodyPart: UndergarmentTop + markingCategory: UndergarmentTop + speciesRestriction: [Vox] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: tanktop_vox + +- type: marking + id: UndergarmentBottomBoxersReptilian + bodyPart: UndergarmentBottom + markingCategory: UndergarmentBottom + speciesRestriction: [Reptilian] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: boxers_reptilian + +- type: marking + id: UndergarmentBottomBriefsReptilian + bodyPart: UndergarmentBottom + markingCategory: UndergarmentBottom + speciesRestriction: [Reptilian] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: briefs_reptilian + +- type: marking + id: UndergarmentBottomSatinReptilian + bodyPart: UndergarmentBottom + markingCategory: UndergarmentBottom + speciesRestriction: [Reptilian] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: satin_reptilian diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml index 66cf7ccfab..5391aec03f 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml @@ -81,6 +81,8 @@ - map: [ "enum.HumanoidVisualLayers.LArm" ] - map: [ "enum.HumanoidVisualLayers.RLeg" ] - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: [ "enum.HumanoidVisualLayers.UndergarmentBottom" ] + - map: [ "enum.HumanoidVisualLayers.UndergarmentTop" ] - map: ["jumpsuit"] - map: ["enum.HumanoidVisualLayers.LFoot"] - map: ["enum.HumanoidVisualLayers.RFoot"] diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index 67fb5f2303..364bd743d9 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -19,6 +19,8 @@ - map: [ "enum.HumanoidVisualLayers.LArm" ] - map: [ "enum.HumanoidVisualLayers.RLeg" ] - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: [ "enum.HumanoidVisualLayers.UndergarmentBottom" ] + - map: [ "enum.HumanoidVisualLayers.UndergarmentTop" ] - map: ["jumpsuit"] - map: ["enum.HumanoidVisualLayers.LFoot"] - map: ["enum.HumanoidVisualLayers.RFoot"] @@ -305,6 +307,8 @@ - map: [ "enum.HumanoidVisualLayers.LArm" ] - map: [ "enum.HumanoidVisualLayers.RLeg" ] - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: [ "enum.HumanoidVisualLayers.UndergarmentBottom" ] + - map: [ "enum.HumanoidVisualLayers.UndergarmentTop" ] - map: ["jumpsuit"] - map: ["enum.HumanoidVisualLayers.LFoot"] - map: ["enum.HumanoidVisualLayers.RFoot"] diff --git a/Resources/Prototypes/Entities/Mobs/Species/moth.yml b/Resources/Prototypes/Entities/Mobs/Species/moth.yml index 6d55596859..59e3d6a7a5 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/moth.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/moth.yml @@ -83,6 +83,8 @@ - map: [ "enum.HumanoidVisualLayers.LArm" ] - map: [ "enum.HumanoidVisualLayers.RLeg" ] - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: [ "enum.HumanoidVisualLayers.UndergarmentBottom" ] + - map: [ "enum.HumanoidVisualLayers.UndergarmentTop" ] - map: [ "jumpsuit" ] - map: [ "enum.HumanoidVisualLayers.LHand" ] - map: [ "enum.HumanoidVisualLayers.RHand" ] diff --git a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml index f172f631c1..efa4660032 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml @@ -11,6 +11,7 @@ - Snout - HeadTop - HeadSide + undergarmentBottom: UndergarmentBottomBoxersReptilian - type: Hunger - type: Puller needsHands: false @@ -90,6 +91,7 @@ - Snout - HeadTop - HeadSide + undergarmentBottom: UndergarmentBottomBoxersReptilian - type: Inventory speciesId: reptilian femaleDisplacements: diff --git a/Resources/Prototypes/Entities/Mobs/Species/vox.yml b/Resources/Prototypes/Entities/Mobs/Species/vox.yml index 50d224ec3b..8967e17574 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/vox.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/vox.yml @@ -11,8 +11,10 @@ - type: Body prototype: Vox requiredLegs: 2 - - type: HumanoidAppearance + - type: HumanoidAppearance species: Vox + undergarmentTop: UndergarmentTopTanktopVox + undergarmentBottom: UndergarmentBottomBoxersVox #- type: VoxAccent # Not yet coded - type: Speech speechVerb: Vox @@ -71,6 +73,8 @@ - map: [ "enum.HumanoidVisualLayers.LArm" ] - map: [ "enum.HumanoidVisualLayers.RLeg" ] - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - map: [ "enum.HumanoidVisualLayers.UndergarmentBottom" ] + - map: [ "enum.HumanoidVisualLayers.UndergarmentTop" ] - map: [ "jumpsuit" ] - map: [ "enum.HumanoidVisualLayers.LFoot" ] - map: [ "enum.HumanoidVisualLayers.RFoot" ] @@ -150,6 +154,8 @@ components: - type: HumanoidAppearance species: Vox + undergarmentTop: UndergarmentTopTanktopVox + undergarmentBottom: UndergarmentBottomBoxersVox - type: Body prototype: Vox - type: Inventory diff --git a/Resources/Prototypes/Species/arachnid.yml b/Resources/Prototypes/Species/arachnid.yml index 07a72cda17..9786b1da2e 100644 --- a/Resources/Prototypes/Species/arachnid.yml +++ b/Resources/Prototypes/Species/arachnid.yml @@ -19,6 +19,8 @@ sprites: Head: MobArachnidHead Snout: MobHumanoidAnyMarking + UndergarmentTop: MobHumanoidAnyMarking + UndergarmentBottom: MobHumanoidAnyMarking Chest: MobArachnidTorso HeadTop: MobHumanoidAnyMarking HeadSide: MobHumanoidAnyMarking diff --git a/Resources/Prototypes/Species/diona.yml b/Resources/Prototypes/Species/diona.yml index 19fafaa3e1..e0ba53e99c 100644 --- a/Resources/Prototypes/Species/diona.yml +++ b/Resources/Prototypes/Species/diona.yml @@ -19,6 +19,8 @@ Head: MobDionaHead HeadTop: MobHumanoidAnyMarking HeadSide: MobHumanoidAnyMarking + UndergarmentTop: MobHumanoidAnyMarking + UndergarmentBottom: MobHumanoidAnyMarking Chest: MobDionaTorso Eyes: MobDionaEyes LArm: MobDionaLArm @@ -43,6 +45,12 @@ HeadSide: points: 1 required: false + UndergarmentTop: + points: 1 + required: false + UndergarmentBottom: + points: 1 + required: false Chest: points: 1 required: false diff --git a/Resources/Prototypes/Species/human.yml b/Resources/Prototypes/Species/human.yml index 2549529606..9c95d87dcf 100644 --- a/Resources/Prototypes/Species/human.yml +++ b/Resources/Prototypes/Species/human.yml @@ -22,6 +22,8 @@ Hair: MobHumanoidAnyMarking FacialHair: MobHumanoidAnyMarking Snout: MobHumanoidAnyMarking + UndergarmentTop: MobHumanoidAnyMarking + UndergarmentBottom: MobHumanoidAnyMarking Chest: MobHumanTorso Eyes: MobHumanoidEyes HeadTop: MobHumanoidAnyMarking @@ -55,6 +57,12 @@ HeadTop: points: 1 required: false + UndergarmentTop: + points: 1 + required: false + UndergarmentBottom: + points: 1 + required: false Chest: points: 1 required: false diff --git a/Resources/Prototypes/Species/moth.yml b/Resources/Prototypes/Species/moth.yml index 4f587eb40e..22a5b978f1 100644 --- a/Resources/Prototypes/Species/moth.yml +++ b/Resources/Prototypes/Species/moth.yml @@ -17,6 +17,8 @@ sprites: Head: MobMothHead Snout: MobHumanoidAnyMarking + UndergarmentTop: MobHumanoidAnyMarking + UndergarmentBottom: MobHumanoidAnyMarking Chest: MobMothTorso HeadTop: MobHumanoidAnyMarking HeadSide: MobHumanoidAnyMarking @@ -64,6 +66,12 @@ Head: points: 1 required: false + UndergarmentTop: + points: 1 + required: false + UndergarmentBottom: + points: 1 + required: false Chest: points: 1 required: false diff --git a/Resources/Prototypes/Species/reptilian.yml b/Resources/Prototypes/Species/reptilian.yml index 321e01cfe7..18d43a5906 100644 --- a/Resources/Prototypes/Species/reptilian.yml +++ b/Resources/Prototypes/Species/reptilian.yml @@ -17,6 +17,8 @@ sprites: Head: MobReptilianHead Snout: MobHumanoidAnyMarking + UndergarmentTop: MobHumanoidAnyMarking + UndergarmentBottom: MobHumanoidAnyMarking Chest: MobReptilianTorso HeadTop: MobHumanoidAnyMarking HeadSide: MobHumanoidAnyMarking @@ -55,6 +57,12 @@ HeadSide: points: 1 required: false + UndergarmentTop: + points: 1 + required: false + UndergarmentBottom: + points: 1 + required: false Chest: points: 3 required: false diff --git a/Resources/Prototypes/Species/slime.yml b/Resources/Prototypes/Species/slime.yml index 8c42b4d7bf..5fd4a0f81e 100644 --- a/Resources/Prototypes/Species/slime.yml +++ b/Resources/Prototypes/Species/slime.yml @@ -15,6 +15,8 @@ Head: MobSlimeHead Hair: MobSlimeMarkingFollowSkin FacialHair: MobSlimeMarkingFollowSkin + UndergarmentTop: MobHumanoidAnyMarking + UndergarmentBottom: MobHumanoidAnyMarking Chest: MobSlimeTorso Eyes: MobHumanoidEyes LArm: MobSlimeLArm diff --git a/Resources/Prototypes/Species/vox.yml b/Resources/Prototypes/Species/vox.yml index 7419f3f277..29cc0583fc 100644 --- a/Resources/Prototypes/Species/vox.yml +++ b/Resources/Prototypes/Species/vox.yml @@ -21,6 +21,8 @@ Snout: MobHumanoidAnyMarking Hair: MobHumanoidAnyMarking FacialHair: MobHumanoidAnyMarking + UndergarmentTop: MobHumanoidAnyMarking + UndergarmentBottom: MobHumanoidAnyMarking Chest: MobVoxTorso Eyes: MobVoxEyes LArm: MobVoxLArm @@ -58,6 +60,12 @@ points: 4 required: true defaultMarkings: [ VoxLLegScales, VoxRLegScales, VoxRFootScales, VoxLFootScales ] + UndergarmentTop: + points: 1 + required: false + UndergarmentBottom: + points: 1 + required: false Chest: points: 1 required: false diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/binder.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/binder.png new file mode 100644 index 0000000000000000000000000000000000000000..e5a5a6c8d4fd13d4909ac81ca574f8ad0ca6d40f GIT binary patch literal 18549 zcmeI43p7;Q|GkP%{^9|0iiq9A~F)RfECScP2Iw!G~=4jwvQgJAoWo9--?N&y_{ zqGtGFBcLeR@2R>``K$wB6r!+104U2BFg1ijS~9@< zAToKSW~tmYK*qmex;#*7ms*Ni6h1QZl}Yjjnc%%LrJ`7U8~Nb5fKgzy$tl3dTqZaz zX{i&CF$LIC&2VoA*1&-+%XYnJ0D{xrC-0B})*sSPk;#Y!U~^azrhvyP;7r}xeP#d+ z1T(pE}7P4L*?jz^widek7)@t6$xp?{{dWsREJRo@iCImP0_x`&8kP)i_ zj<$cuzg8))wiX{bmTRrn`IlaA#eP0GzmIqM-U=U1Y(+;8n80yy0Woy;D3k zP0!di7{$(?X><|D=zikbFA%daJ9?m~sj0K02;BbK4ze`$U_j z?C-~%)QmJaxZplY2+=ubtoE*KzHX`PqOz$i zWz#=x!S6L$a--Zt*+hXEyvTRUiZi=SmWS1xQ`gyod|;%GD|PS)ixVgz%3Uri83<;6 zpv$M1EiVa~HpTds{2aQ*lL#62eKf6T`FY8q?={LSr_7F80=peC*Fn=JR?iacxX&5p zVyWI|;5&&JzQO!T?5bM;X7{JC5)1U9kbDP&2Z|S|MOlP}d(DqczsD4zQ({yzQt$a* zSZJ^xf3)jfj>pU=F%)VQs`TZ2IqVHD6r!@i=3ikY4|CACNTP9V@sMXZS`ZzEZCwYxLHr85vEPv>rlQ-GcL>K!qO|V{=PBa z9fJ<1S?X#%njJF-sk|eCdV{cJb|e+EtmwcbtMezE@6Wz(e&5?st6TSUD$a7DR^06; zOwW8d;vrqw%3GlwX&n_E*bcQ0jlT5?Y3@coC*C_fU+#EktM!6T~cKC z@oCmk=UI9&>r8Tw7CN4F2+x{>+m=GC*`sP@b29f>e8WPIc^-q@voA$gW<8BxygKoo z>;39(iJ*`8X^5VfGn8AU+9PU=dYnap>g z=@jbxsuFugA>KNEX}p>a()o1usqEJ5=`Q^))y^@eH#zOhGk3u{wV$5$AR)&kJ8jKt zCp9O|=~Y?b*_eMEha8L7SMhm0nQ5o4niac!3{f(!vR<}fnFS}Nc4}IeQCTT4ed+Xd6m4% z<4a|iYAm&}du7*~;%HZNYQ?ElwySKbYVOt?t9g{Hmui4+#B`;0r8cIvUD~qFf1Pe& zR^erqRes01Q*OP5CElUyh;AooF6%ZHnCGVDYCkH@EzX>kS+qKCbx!&tPQ|&mg|`b& zUs`ak^RaAmULmh=C!OOyk8|l}UPW)*)wrEkcK$YGAU7ktNhwEtoqCY)g6~|?T2gCD z?crX-oj2blbR#*mI_0{@*!IFX)hljr)0|QpEI9KxMZ!J(5mAvgyQ>k26hx|8<zdnm?$SxW>_PgQd6d5>zDL?A?PNkLrqylpT|()lTbHWsEBNV~ zL))mkv__aCfg|-mX0WylXL4kSame~fAKwT5s&PHqkkrijE5E77cz;Hbv5Ilb?%ds- zWw{z2xBfVgt1;M>R2y5%RSI1b^zzX?Irh<$jg@t>RQGH5&GFNYRtP9p zFXw0?>+$swkEt7U7O(EJ)UgXZ_(yDsUci!@*ps@QMSGW>K2Tyi!}e(^DP1*XJB)`h zAYDc8IT(Au$0S?BF0PRCit~cKz4{C*G=KP}chn{1;&{2+o&^WaOm%}R6q=lR>AY@v zqmEoYhvmw?UK4qTn2?jcvZm*5!JXy6b(bxUK< zMtd64t?eTHLs*&`MI~}y-rVMSi7LAuFK_YhR14?dxt`o|=)&oo8%4}I_I-Bui&l90 zdZmQy#21N5-ZPq>T$s_e_Cn9VUuMn7#G2*J#d`{=MaQp`FPE?~Z`anWGIT!S{LcA< zGrsr!(~I=R_ulorYCB5)!u|2Ed40*?5asr@W)~S3yNB$DtdCY73kD7IBD1^SCw$~> z%w5g%>8YB0fAWx=mQrD3(SwKT_YIsKV;-%1ZJ|{4%eCROH-7LL_!%z09j<(?B`^)> z=pLNbHn?~O>B;u}JI*|lYxrfmI!7J3)g+}a#XQw1<>Pwy^;higQtBVQY7P8k(frHI z!#J{AfOWs~ZSIrq-3@V^zPkNs@o77Q5P!F9X+BoCql;17wsj`|%@t+Qv-@TvQC+J_ zR@H9kyDaL?i)&4;K;LX8-Hr1y=zRQMctBafbmi6YA*q3a6XVhcdM130m&~W{5 z%i}jKySA44W%Sp#SPaUB?x`D&9f+Apof?xIQyn%V>~*?6g-CpE=sVQ?DU({qtXrBs zZ}`}7b>2KxWYGJEuN!OYlj@Hq_9ez$=lyze=vC?K1!tQp%PSXOyX}ufZ+f@(V^5i1 zi=XbcQEO1aoI`xZVbuZ;G#L!njNWO;`ww6@K_=`%%A7wEhPCHXpZ_Nf#>34q$X^%ipbMI(^%XfjApk6 zM&2)Zx~3ay7kVUbuA9D^m{P$V1%_W7krQ2@`#zDzdB z(bW8NbD(6P=^+vcNJylgpC7^xi{SfmkZ2;2h(uwK7z`Y&0T%{%i|GDvZ=u$hlP`Wu zSwe;{S0Li@yBD3vaPd<F7mV_W0y{V=LDD)QsiN{fU`aGiEj#3S%=w2IG%J z^<~jTd|zii--|L9W#jix;O&z*s$k1qx!z2^pKt{k2{jp??{RM|Q@V&n!JsfWI2sK{ z;hfQWBrJ}E!LCH1Nhs6=Cu21sKJ38QXVOLVA9%rGNI1eoFW=OK`r$LV?0|pdWxVFM zKJ4sBR^CDp-J8L(GNpiHM{v1J5*tGxxa+a#aCZWR4K6ku3Qj~5#Ahsb97+#O$LZ^h z4)R;`?_8Vm8Qa8x1iBtu_)I+7=_aD6B03;dUQCQh<0b= z2?P|;9s8w;AGrChDNC*pjHZAIQ3l4^Xy$QZ`FvaYMd8IA%^(80uaG5PmPJoa=dUnTFB$O2bJ%| z_qF3QSrjmX|ETzfR^V@@YsP*ur3f7@Okh@KR6Lr9$HOrQ^h7rk>P_$?zC0m;`vjP? z=%e`=wE3pZ>l5)P@P$N+zdxH!R6|YOB%4lDLrupmUA(y>3b>Jub`(-P z!Ag7$MH+?b1YYj5DB#ebMbO%7xc)3Jnkg6D<%Qzi3Xl7216BOc(Cuf26BM5f$HHmC zMfqrkA1ehf`N6vlC;(`E?EJ|@n<^$16aY2Ac7Nxi(^MPokxFA3zi&9*Y`9QQ% zTo53VMJX=Hd>~pWE(j3Gq7;{8J`k-G7X*l8QHo14ABa|p3j##4D8(h24@4`)1py*i zl;V=i2cnhYf&h^$N^wc%1JO!xL4ZgWrMM*XfoP?;AV4IGQe2YxK(ta^5FnC8DK5!; zAX+Id2oTAl6qjT^5Ums!1c+o&ic2ydh*pXV0z|SX#U+^!L@UJw0U}wH;*!hHxLh#S!U1u+Q*e0c|FsxbB@+f`L5?@n6azW>%> zdSgqFys>FVB?Y@>Ca`T|RC3wfjO?t}fv%YaJ6%GPdHEw7KbSP&99^X z0FoRVs7pA&Az+=k($nr4Xx5Y8aiq?kZRIJb@9;wsR^d+U0YXFYcwB!Y@ zvO)mc{Op_}?XMRXc&}4r`c(~L+wu-nV1nf|zTh0^N_bcYENfM;oJIQ0R{Zp~mDy_3 JJd-WE{{tzqbV>jK literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/binder_vox.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/binder_vox.png new file mode 100644 index 0000000000000000000000000000000000000000..e318b9925fa990f938ed577be60c779024b2a6dc GIT binary patch literal 18528 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 C%y9Vt literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/boxers.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/boxers.png new file mode 100644 index 0000000000000000000000000000000000000000..f7aadbe9eb2baa59994aeac0bd2d3950ee1ddec0 GIT binary patch literal 16324 zcmeI3cT^M47RQ&LPeoMhT`|TkhE0d8A&LY9HHZ`i`)0GiN|KGq0s$NL-h1!8_paD` z@4a{I73*)3K!^kE@g0Bfyz}1KoRf0r&iBsDXYSnH{ISEr!&;Q|sOo_rNXgI;bp-fs zW_!CA0-v+C^veWa#Y`cw76kD;V0*hw^7gETAWf!HQ87%6rZq;;1|M8UYe^rg!326E zh_b2GgcFG*!_$)Sl+mC6YR4WvkJ9<`+siaUjVX{!phD8jWMo=c6p@xlD0KX$Di5U< z0|5*qgY&Egz0rbM{rUE|82D{#M)^E@7bel4A7C4h7o!R11=41cC-adD2%+4U=d17$ z$$WjKzKwZep-6@bC8$Iw5KAzr5R-~|*)P7z1N>5&b#YjPIyiecVEOYC7{-L5Xi7?o zPm08cHpinPg+hS}#i&>;06hejR3n311x8D4N06L2YSKcODHB7{MxHG$uBDS0e?H$f zkn@$jE`!NAkkOLO4p2m`xCs^c2+{mRI>MI5l-2KjtMyhd!REdRRsX!zW2&GXXF(wpaGO4#vgb9T%K^#4y7#dnf#iizn zA;qK$OeArQ;nEY10nU#OXYk*O;@a0Gj*h_MXtM!lRFnaaCsC6zUWw*5y7Y8r6&6VA zX)~A>SiTa?uh~Uq&onI5Xkl<8L58YTpuvZtbeL2t6-wkHUx7#`_7iAzQmFvfDue=w zLMqpiQV}T@YV8m;8drIq&}y1UvYnRf&^i!Wq7?}VQsyflNn9w9Nu{K~PeMop62CZ^ zh>*w?GTbjGw2M4X=r(2wR61Pm(#JOYe|Ly{!sHn$gtCDAOm)dykiGU=7D@K_wKd0~ zr|dP!gqtm-?Zo->bB>&|h&gMNO=CZ~7*5!#nToI-2vVm+e`(E~mQ$H6qw;Rx?@@Nd zcaax7MoI!{WIIrfQ1)I02eHs`ObTu$1L8qW{LWc-MEz9;hgYJu>aVB%0~=w%lmBcR zd}R_+M#hN+GF&GYNW@Z^K!N*71%zCy&`RWlpIi!({ZF<5)FcrmR^-&A|K2v_W-*a~ z8{}7}3j)G! za=6&}Kwb_P1ccq>aIy1&yc{kF2)oJQV&?;SIb0ABc9X-!&Ij^xxF8_xCWnii59H-= zK|t6|4i`Hg$jjk^fUuh!E_ObUm%{}CVK+Hk?0g_EhYJG2ZgRNT`9NL{7X*ae?Vhcoe$*Ya6v%WO%4}3AIQt$f`G7_ z94>Y~ke9;+0bw^eTFHUjRH@RXOP48A zrfk`=<;s;SU%q^W3Kc3=tXQd1rOK5nSE*8^YSpUMs#U9Ay?TurHN3pMYSyd?mRYM- zEk2)LyLRn5b?VfuTen`ldiCqqZ_uDY!-fqTHEQJT?cKO>V}U^6NfV_~>F@8aQmL9YZQ86^vw(nr=FOW21_r9t z>Y$*Y;NajEEn0+xgoK8Mwrtt5RjXF5TesF|G+|+3ZQ8U64-aqKwrxa2L}X-SR8&-S zbacCR?b^3*9}^Q38ynl9Lx+wXJ9g^SsdMMfUAlDX+O=!9ZryMk*J`x{LFjZkk|g8e z;^O1u6A}_Ait66IdtzduUavP83`V1orfHMO)T2iav)OF1SQv&$N=iyjP6iJbTdmgA z)KoybXV0F!diCnvyLX>Hefsw8o1UKDuV26Z{re9XFks-ofrADO8a#OLkRd~c4jnpd z*s$TlhmROBV&uq?qehJyJ$m$*F=NJ#9XoE^xbfr1Pna-a;>3xQCQX_=dGeGgQ>IRx zI&Ipt>C>mrm@#AK%$c)h&6+)X_MAC$=FXivZ{EE5^XD&EuwdcBg^Ly~TD*Aik|j%) zE?v58*|O!!m#KIWyk*Ol zty{Nl+qP}{_U$`%?AW<;=dNA5cJJQ3XV0FDjEuc|_wL)bZ~y-N2M!!Kc<|t%Lx&C@ zK78cJk)ubC9y@mI`0?W>PMkP-^5m&gr%sTU<;s<-SFc{XcJ2E0>o;!PxOwyDty{Nl-@bk4&Yin=@7}w2@BaP!4<0;t`0(MQ zM~@yqe*EOglc!IgK701;`Sa(QnVBzMymMy;b!TG+g~$_rKe<` zx%{o>ndOZ>RD9AX`U4VPwne&xheQ_TFLmSfK(9B6d6ydE_Se7MOW%2rm9cq9Rt7I? z`_oTfuPyhQ-h4{tEw|uS)B7z#PWShsNkNABNR=3mw_`^mtKEclR`p+ L!qlsqckBN*bc<#1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/boxers_reptilian.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/boxers_reptilian.png new file mode 100644 index 0000000000000000000000000000000000000000..2b851f456c29c7d1dbcfbdb0a50c2dda1720fd5c GIT binary patch literal 16324 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/briefs.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/briefs.png new file mode 100644 index 0000000000000000000000000000000000000000..4874810d992a0da486d2a30a1395dcd7e47a016d GIT binary patch literal 16302 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/briefs_reptilian.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/briefs_reptilian.png new file mode 100644 index 0000000000000000000000000000000000000000..09e9d5fb11403a064b0a2d0ae7d0d84249411823 GIT binary patch literal 16290 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 a6gm06^Q`o>x4_;+kkH^T&8ntx{r(9BtXQ7_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/briefs_vox.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/briefs_vox.png new file mode 100644 index 0000000000000000000000000000000000000000..11e2744caf61470c409a5eba12edeb2bb39a1ae1 GIT binary patch literal 16927 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/classic.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/classic.png new file mode 100644 index 0000000000000000000000000000000000000000..d6b987b8d112d8be650d592871e11cb034e95936 GIT binary patch literal 16315 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 D(WGN* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/classic_vox.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/classic_vox.png new file mode 100644 index 0000000000000000000000000000000000000000..2323e312530f74cca4809846985d92e498c8bea8 GIT binary patch literal 16701 zcmeI3dsGuw8o&pE7V$}274=kOM8#^D$&+Ln0+^^ojUbN&jv`DZ6BtP{F$n~)B9K)} zyFIIJ!3S$?U1_b_T5EOJvRZ6mS9`iXs_Uy&i`v!|pT}b>KI+~{2niRQes5*Re;xw+Y%d-7=O z!MbW$^SXIynV*7&s_N?fvEz0rfp=TK&`@nfxjwmXXeik~G}M!lUh2IMVed;*R!BiR zuz5CBzhEk`3H3NDlc_o8ifOeqZ#6bH){rwQ)3;2qQw#MAY&&WS=Q}FrBv;Nc>K8-; zVO_}I{_r(W>9d>}SFqFd!>C4$q68IXoLXM?OPF8rL7%p+kIA#Jvr27xE`)fS7($jEt_zw?`^}y)ouBc-yHja z_DI&vSJJi|8PqmEYRJmH8{0PKw~VhHS)0Fd^NQF1pdMd`ibRX2yglnTc|X+8+wj*{ zAB1d zq0cfSN4w7#d=mEPLDjwH+T@uY_tJU&7Y{%5+?ZkXkRefdQBrAX>ersI-MX`zKDe~( zb@{vT$5fKZ66wzG%=uqXhj$*{9(yYD?)y1SFKhEB@eaEBgx(5Bu36Iu~NW6Bl|7&X>?%a1+zh+UzzK)v4 zS9L@G9M`dXva@4v-I%Sjw=c|XV)lN!%-S$Z!JJ<3q4oa2t?Tc*o35*xP|G8aN430i z6rDJ}@}*XNd&c*NVm3T1sr+*4wVBhm$IO4|UVO;VFxP$K`1y=|OD+)S$Q={zZ=m)K zE-$}X^3&W7_b`oYvE<={EA2Hm+7iPn*WWvK@9?chOOOG`Albe8TX_hg{*cbhapf3h z;Ur^?BTS5uiYv3)*^Py$6U*!bSxmVEMyimuB?xaceIgXlrUYTO+<+PETB?Xnsc=vk z6|*zRiege_5+-UQ)nzycV5MAypv-EqIq|Xtp*JoL?%8HkDDaxNiW7v%Y=?pzLz+O# zI4FTUP9Y*OMZ6$h6(^R*$IId;3nZ9Wj$%?&iisprT!!H?iJ%|>AGp1 z-2o{|L}ukeqIjSj}U{PL=MX#AR473T$DzFNn|3iScJ(k#S$Eo;S$*-OpIe# zP!OLb6vM!nXmfdw7)o5M#O0FU7(teB46uJpgo}8hD8aTtaZDs`W*k<+rJ=1vA%)s) zg=#d=7-ZSCs&Fl1VH{vslt!#Zdu#61OUIBU?6OX_k(3i8!x@w$kSg!SokA3LZ}lrI zw8mF9Obkhz@Ia>~nM^7sK?YQWQ3WzVnMF#anG`7%3bTTeP|A3zM2)hW7la6mi;e4T z?cQVXbhyT=4h#T1N2K{4BQ!e3C74doHn5(?1xE@p35ez|Afnf4Ktmi2 zCa0iCIXid}sZtUmQYn*(2qUOcDlsNe$)ySfrZjq&S9kXwq5Tu+3~d6T3Cu`fN|{2W zG*J?foRmpLO1TPjB2gMu(s+f+tRnrPgWP+BPIb`W3?M8)HtgvC(=K`m)1#{tnq4gA zQ0~}-W>5>ew+0rAw_4i?hm&G!QG(E4jJnD@Fzve3-kOFJBwOb-BwH#dlN#;T8WDIG6$Wr{|A}#?Zoai(O=4Y)=)M3 zh=qgt3u*!3t$W}o@6i@mGd}wqwvJj#y!I*u1};?0es{VCt6|q%Zr5Nn>>BXQve7OL zIL^HTg_?uB*yljsLrMmCWuY_*xm+q&qi{3qkw%wMmK+@o9#Wj_NuZE*`oM}_9djS& z7^LWQ^rb53<-&W6`C7rN3wUcnyIz}moN!&|&#!qCn9;8p6^g}o0s-L`d0gClAT5sz z0>UlwxVZU1S{@e!gj?isar1$+JT3?bx5(q-<^ySYTo4d$k;lc&2h#GmARyc#kBgfR zq~&ozK)6L77dIbB%j1H8aEm-HZa$Ef#{~i57I|FUd>}243j)F|^0>J9Kw2Ib1cY1U zadGp3v^*{d2)D@N;^qTsd0Y?>Zjr~u%?Hx*xF8_hB9Duk52WRBK|r`g9v3$sNXz4b zfN+aEE^a=Mmd6DF;TCyZ+2ne^xi7PVj zM`X$d{(bBQe=}}h|NI^B7i9sNl5Rkdig5^1oj27rq?BBmYunJ>TKkvSpQ{hUl*5B2Ssb!%M(uhF){X(EB3Jp~`~vMMP($ylExo*(*s zr8>es8wo>}NuKmaefh)ETW$}TlfByf|`E=#rm^G literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/meta.json b/Resources/Textures/Mobs/Customization/undergarments.rsi/meta.json new file mode 100644 index 0000000000..345c141ccd --- /dev/null +++ b/Resources/Textures/Mobs/Customization/undergarments.rsi/meta.json @@ -0,0 +1,79 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "sprites taken from https://github.com/cmss13-devs/cmss13/blob/884ab172389b6fc54ef063f5fbea5e8b0a0a2235/icons/mob/humans/underwear.dmi and https://github.com/cmss13-devs/cmss13/blob/884ab172389b6fc54ef063f5fbea5e8b0a0a2235/icons/mob/humans/undershirt.dmi, edited by SlamBamActionman", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "briefs", + "directions": 4 + }, + { + "name": "satin", + "directions": 4 + }, + { + "name": "boxers", + "directions": 4 + }, + { + "name": "classic", + "directions": 4 + }, + { + "name": "sports", + "directions": 4 + }, + { + "name": "binder", + "directions": 4 + }, + { + "name": "tanktop", + "directions": 4 + }, + { + "name": "briefs_vox", + "directions": 4 + }, + { + "name": "satin_vox", + "directions": 4 + }, + { + "name": "boxers_vox", + "directions": 4 + }, + { + "name": "classic_vox", + "directions": 4 + }, + { + "name": "sports_vox", + "directions": 4 + }, + { + "name": "binder_vox", + "directions": 4 + }, + { + "name": "tanktop_vox", + "directions": 4 + }, + { + "name": "briefs_reptilian", + "directions": 4 + }, + { + "name": "satin_reptilian", + "directions": 4 + }, + { + "name": "boxers_reptilian", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/satin.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/satin.png new file mode 100644 index 0000000000000000000000000000000000000000..3e1e6ec3ab01850adecf8e82a25194dfb030a53e GIT binary patch literal 15723 zcmeI3Yitx%6vwB&0u3~N(4az^WwC@>X6Lc5&bYgPU9b%#VpdlKG4G8^WLIR1A(D0>+NkPO)4Ua&O1PlbxNa6$H3l!9(dS{>0yW5*87^At9 z?9QJ1zvrAgzkBbQ*$=a|dDWA%D<7$(C~9_7W3UCDmztj$_rdRX)t=AbX=b9aL#L>! zkIYZSj=HM36!rKnwXNM~4?QKyTFfCSS{OLeu>|Z*QNAVVgd}$Z!xjdeYTR%Ce)O>2 zrYe5>T6c&IB^p4N+BlE|tplsttviP%{xUGE4p}F z?yv_c;V)lOiHI%16}fcK^4q%%BOx+ODwT4ioDMD7$#8-oFf7mTJPmu$dVk!I(sW#3 zkPVWL69l@PR1=1(#cgI>DXjGxe!JaFR5)_i6-yKn#q}IJNRdfP35Ij9OgSe-F8CyR zlhMr36qx~05Cd^ThkjgHzeJa2XnL16MaqIaWnwrdp->@r+406=WmD_M@;-+!HcKD5QXB=qW}3M-uywe&GZ|5sC#2~(1)QPtu4?6<62xOy|S ztQGW3Zp{l(HB*xkQc?%zj`Q2|Tdq*V3N^~~$?RNFlFe!skj)JN6dyCGwK%MTXU(33l?|2YHFXeOix?>>36^!jH8GvNo{c)$4Gr&O%<3Oi|AC3n zrM}yn1~vj*aNn?WL=phayIdYxQoLRoIDyw0mZW-jB$A)zzc&rACh?-PP}lywX(+B@ zxl4+70wuuYuPop2Uz)k;RlwWXK*-(Xe=u{|ojAEB=1X~L4fUB15+ba>uog&}y2tsL zlD6WS$@XtI>u9t$(_iqg@L)LeJLhVZQP&QS%nQPe;UMQwbU zqJI4Yp1+}}UY4T1T}M&kE{d9?4L*N#1w~banu5#P(ig5>II?vMd;j>4%n8rnzM4Jv zUTmE6_Sr45JzHvzT-`o+=pA35H2?VZ`4e9~v{`v!;ijRP``v!w{Tn}+FaDMu8(%$| zIz2XWZei0HyJ-BqZKI=afj1u=>PUY%@XV=>!HJVh({ZO;^wDsURhmnaOs8{ zvv#)JnsFDJ{(}&8YU1O|)t{f8Q#-H1qE=Twd-TkH`@uEgONU~;zde0*bp74GG}eyv z%o`bA#*H5s-aXW@cH7ePRg3oCn2xwveBRJdFy=iZ9BF1Q@ zNnf7%&-0(%-^@I_{je`~bv`k@>7gcyqNYbW!rkzDk^P=_AN<^>um2u?HD)^cO^Rwh zV!s=9%x`X?sK<8ey?s_+bh)e=DYv2-G2qUpGO#yA1sCQsiaH1^ItCJYy3KWE{IHAG zwKmr(G0H_V?O;If7|nv7(av6VbWjawu7#ndU|xm>DPSpdK9x+Ha=y(~@Ri|jyP0*- zg)Y`$n`^N>Al(=3qT7uuphdTjQ8}MPO93}8N|IMvKnol%vYdzYaE#!Qy`1b7=+es- zYJ$IlSuHMihnJRygHfAnz_Kzj%jR-9ch2KBvI&+C1OhB4u!6wA9*jAXwv;@RHd~7( zWuGuG)vTVebR$jMzDmp(vf5lOd!WjzbY7`UWuUZKVh1U*c_qX0ZjP;&q^Xsh%uqI2 zI5bUVK@y}u+A?7tUpFr^U|5DZU`#S(MV@qEI499)W$e1gn@ZIk+O(DoLj)zHbu-Q0 zkqltFfoTk7Rj_0jo=R)Iv$ynkb#f*+*~+BH4)XdWX|_^KD=dZL36J>&YTxy(Uj_ZSKUBZu|P=R1TVw$4Cn3T1)1~6JU^e~ zWsY;06ni2bQA5+?BNIJ*y&NYCqAUnb4@Xbb1MVM9v6LyfIQu$$G*ylp*_2|1^puhS zY$lxuveiaM&&sNj+l{1=g@*+~o*-MV*^yOPX>ufOT1r|4k#Gn$xOH8VV`5y80MMAY zBKaA~>y;Qq6D3H}4}3n+@ArFR1&Gn8Grh(-Y^X!_ZYf!7&{~xMAM*xyMv{P+k>Xy3 z@oTXd6A%J^QSop-9~UTFJJM^cpUmp8(kV$tAN%P4>JW8oYKH32O}IWs9P1XY-a;+w z0qZBWmW8BVs7V|9wiY_CeOJ{z?5Gmy*{{)B#8kYAbDbn;uqub@-*MsG>9@M$ev1F`}d}yx{B2S zC7l3Th%KL4x#7Pwb5pB;cf5gWuO|P4nJezZi8ZlY%4=(A(7ut7Vf}@*Kq=HcKFHRz zRo6_hf1h1PlS7660UrlnEN_37Qk^oI+K*3l%4ljeb46OWLPBXYq}h>W-|ZAH#Xa!G z9E5zL=n;b~+Kgs&>3NXs3+wQjY1&r;pSP5Q3Uw3vCrfk)rNrV?Ic}i~)w9?NZ_wd? z1Ge(#pr)`^u0MD4NA-;ErYqt_20?(}LxKy>2T=(w1PDGPxbS=smEb~v;6s87&j(Qn zE(8cZB)IT=5S8FUfZ#)d3(p5p2`&T(J|wvCd=Qo3LV(~yf(y?FQ3);t2tFjZ@O%)J z;6i}lLxKy>2T=(w1PDGPxbS=smEb~v;6s87&j(QnE(8cZB)IT=5S8FUfZ#)d3(p5p z2`&T(J|wvCd=Qo3LV(~yf(y?FQ3);t2tFjZ@O%)J;6i}lLxKy>2T=(w1PDGPxbS=s zmEb~v;6s87&j(QnE(8cZ#NukIK5h%r@EO}2e3*9h*Tfq5ATF(TbVn&_^bv}B?sJJ-U>l8hnxP;@pFiXWnl=_*?t>uQzP0a@z{Q8vSzq_%uDm{Uv-`6%iF=nGd0@k`$f3~I zUpCHr^YrSsPfT0B>)7GeSGsSGt-Sr7=breZxhrD_$DjS8`PK|7Q1QFYUgN1*LM}e% ST=!nPHL|2Ly#MiaoBsr`Y!s#d literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/satin_vox.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/satin_vox.png new file mode 100644 index 0000000000000000000000000000000000000000..e4c1178ab69b24781498c2d45e297672bcf5450d GIT binary patch literal 15717 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 ZKK2;t-Z$&PDQ1RHaA24!yH(HhzW}YaZy*2w literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/sports_vox.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/sports_vox.png new file mode 100644 index 0000000000000000000000000000000000000000..f95ec114f2d1added1d38d31e79e215fb1ca35ba GIT binary patch literal 16821 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 Iv-R8m170VF0{{R3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/tanktop_vox.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/tanktop_vox.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7c4e1c02025ced0c229ed3503f8be6d7bc7627 GIT binary patch literal 18818 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 literal 0 HcmV?d00001 -- 2.51.2