diff --git a/Content.Client/GameObjects/Components/MagicMirrorBoundUserInterface.cs b/Content.Client/GameObjects/Components/MagicMirrorBoundUserInterface.cs new file mode 100644 index 0000000000..6e6de6e31b --- /dev/null +++ b/Content.Client/GameObjects/Components/MagicMirrorBoundUserInterface.cs @@ -0,0 +1,189 @@ +using System; +using Content.Shared.GameObjects.Components; +using Content.Shared.Preferences.Appearance; +using Robust.Client.GameObjects.Components.UserInterface; +using Robust.Client.Interfaces.ResourceManagement; +using Robust.Client.ResourceManagement; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.GameObjects.Components.Renderable; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Maths; +using Robust.Shared.Utility; + +namespace Content.Client.GameObjects.Components +{ + public class MagicMirrorBoundUserInterface : BoundUserInterface + { +#pragma warning disable 649 + [Dependency] private readonly IResourceCache _resourceCache; + [Dependency] private readonly ILocalizationManager _localization; +#pragma warning restore 649 + private MagicMirrorWindow _window; + + public MagicMirrorBoundUserInterface(ClientUserInterfaceComponent owner, object uiKey) : base(owner, uiKey) + { + } + + protected override void Open() + { + base.Open(); + + _window = new MagicMirrorWindow(this,_resourceCache, _localization); + _window.OnClose += Close; + _window.Open(); + } + + internal void HairSelected(string name, bool isFacialHair) + { + SendMessage(new SharedMagicMirrorComponent.HairSelectedMessage(name, isFacialHair)); + } + + internal void HairColorSelected(Color color, bool isFacialHair) + { + SendMessage(new SharedMagicMirrorComponent.HairColorSelectedMessage(color, isFacialHair)); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (disposing) + { + _window.Dispose(); + } + } + } + + public class FacialHairPickerWindow : HairPickerWindow + { + public FacialHairPickerWindow(IResourceCache resourceCache, ILocalizationManager localization) : base(resourceCache, localization) + { + Title = "Facial hair"; + } + + public override void Populate() + { + var humanFacialHairRSIPath = SharedSpriteComponent.TextureRoot / "Mob/human_facial_hair.rsi"; + var humanFacialHairRSI = ResourceCache.GetResource(humanFacialHairRSIPath).RSI; + foreach (var (styleName, styleState) in HairStyles.FacialHairStylesMap) + { + Items.AddItem(styleName, humanFacialHairRSI[styleState].Frame0); + } + } + } + + public class HairPickerWindow : SS14Window + { + public event Action OnHairColorPicked; + public event Action OnHairStylePicked; + + protected readonly IResourceCache ResourceCache; + protected readonly ItemList Items; + protected override Vector2? CustomSize => (300, 300); + public HairPickerWindow(IResourceCache resourceCache, ILocalizationManager localization) + { + Title = "Hair"; + ResourceCache = resourceCache; + var vBox = new VBoxContainer(); + Contents.AddChild(vBox); + + var colorHBox = new HBoxContainer(); + vBox.AddChild(colorHBox); + + var colorLabel = new Label + { + Text = localization.GetString("Color: ") + }; + colorHBox.AddChild(colorLabel); + + var colorEdit = new LineEdit + { + SizeFlagsHorizontal = SizeFlags.FillExpand + }; + colorEdit.OnTextChanged += args => + { + var color = Color.TryFromHex(args.Text); + if (color.HasValue) + { + OnHairColorPicked?.Invoke(color.Value); + } + }; + colorHBox.AddChild(colorEdit); + + Items = new ItemList + { + SizeFlagsVertical = SizeFlags.FillExpand, + }; + vBox.AddChild(Items); + Items.OnItemSelected += ItemSelected; + } + + public virtual void Populate() + { + var humanHairRSIPath = SharedSpriteComponent.TextureRoot / "Mob/human_hair.rsi"; + var humanHairRSI = ResourceCache.GetResource(humanHairRSIPath).RSI; + foreach (var (styleName, styleState) in HairStyles.HairStylesMap) + { + Items.AddItem(styleName, humanHairRSI[styleState].Frame0); + } + } + + private void ItemSelected(ItemList.ItemListSelectedEventArgs args) + { + OnHairStylePicked?.Invoke(Items[args.ItemIndex].Text); + } + } + + public class MagicMirrorWindow : SS14Window + { + private readonly HairPickerWindow _hairPickerWindow; + private readonly FacialHairPickerWindow _facialHairPickerWindow; + + public MagicMirrorWindow(MagicMirrorBoundUserInterface owner, IResourceCache resourceCache, ILocalizationManager localization) + { + Title = "Magic Mirror"; + + _hairPickerWindow = new HairPickerWindow(resourceCache, localization); + _hairPickerWindow.Populate(); + _hairPickerWindow.OnHairStylePicked += newStyle => owner.HairSelected(newStyle, false); + _hairPickerWindow.OnHairColorPicked += newColor => owner.HairColorSelected(newColor, false); + + _facialHairPickerWindow = new FacialHairPickerWindow(resourceCache, localization); + _facialHairPickerWindow.Populate(); + _facialHairPickerWindow.OnHairStylePicked += newStyle => owner.HairSelected(newStyle, true); + _facialHairPickerWindow.OnHairColorPicked += newColor => owner.HairColorSelected(newColor, true); + + var vBox = new VBoxContainer(); + Contents.AddChild(vBox); + + var hairButton = new Button + { + Text = localization.GetString("Customize hair") + }; + hairButton.OnPressed += args => _hairPickerWindow.Open(); + vBox.AddChild(hairButton); + + var facialHairButton = new Button + { + Text = localization.GetString("Customize facial hair") + }; + facialHairButton.OnPressed += args => _facialHairPickerWindow.Open(); + vBox.AddChild(facialHairButton); + + Size = CombinedMinimumSize; + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (disposing) + { + _hairPickerWindow.Dispose(); + _facialHairPickerWindow.Dispose(); + } + } + } +} diff --git a/Content.Client/GameObjects/Components/Mobs/HairComponent.cs b/Content.Client/GameObjects/Components/Mobs/HairComponent.cs new file mode 100644 index 0000000000..5a929da39b --- /dev/null +++ b/Content.Client/GameObjects/Components/Mobs/HairComponent.cs @@ -0,0 +1,100 @@ +using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.Preferences.Appearance; +using Robust.Client.GameObjects; +using Robust.Client.Graphics.Shaders; +using Robust.Client.Interfaces.GameObjects.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Maths; +using Robust.Shared.Prototypes; + +namespace Content.Client.GameObjects.Components.Mobs +{ + [RegisterComponent] + public sealed class HairComponent : SharedHairComponent + { + private const string HairShaderName = "hair"; + private const string HairColorParameter = "hairColor"; + +#pragma warning disable 649 + [Dependency] private readonly IPrototypeManager _prototypeManager; +#pragma warning restore 649 + + private ShaderInstance _facialHairShader; + private ShaderInstance _hairShader; + + public override void Initialize() + { + base.Initialize(); + + var shaderProto = _prototypeManager.Index(HairShaderName); + + _facialHairShader = shaderProto.InstanceUnique(); + _hairShader = shaderProto.InstanceUnique(); + } + + protected override void Startup() + { + base.Startup(); + + if (Owner.TryGetComponent(out ISpriteComponent sprite)) + { + sprite.LayerSetShader(HumanoidVisualLayers.Hair, _hairShader); + sprite.LayerSetShader(HumanoidVisualLayers.FacialHair, _facialHairShader); + } + } + + public override string FacialHairStyleName + { + get => base.FacialHairStyleName; + set + { + base.FacialHairStyleName = value; + UpdateHairStyle(); + } + } + + public override string HairStyleName + { + get => base.HairStyleName; + set + { + base.HairStyleName = value; + UpdateHairStyle(); + } + } + + public override Color HairColor + { + get => base.HairColor; + set + { + base.HairColor = value; + UpdateHairStyle(); + } + } + + public override Color FacialHairColor + { + get => base.FacialHairColor; + set + { + base.FacialHairColor = value; + UpdateHairStyle(); + } + } + + private void UpdateHairStyle() + { + var sprite = Owner.GetComponent(); + + _hairShader?.SetParameter(HairColorParameter, HairColor); + _facialHairShader?.SetParameter(HairColorParameter, FacialHairColor); + + sprite.LayerSetState(HumanoidVisualLayers.Hair, + HairStyles.HairStylesMap[HairStyleName ?? HairStyles.DefaultHairStyle]); + sprite.LayerSetState(HumanoidVisualLayers.FacialHair, + HairStyles.FacialHairStylesMap[FacialHairStyleName ?? HairStyles.DefaultFacialHairStyle]); + } + } +} diff --git a/Content.Server/GameObjects/Components/MagicMirrorComponent.cs b/Content.Server/GameObjects/Components/MagicMirrorComponent.cs new file mode 100644 index 0000000000..317cbe2012 --- /dev/null +++ b/Content.Server/GameObjects/Components/MagicMirrorComponent.cs @@ -0,0 +1,70 @@ +using Content.Server.GameObjects.Components.Mobs; +using Content.Server.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Components; +using Content.Shared.Preferences.Appearance; +using Robust.Server.GameObjects.Components.UserInterface; +using Robust.Server.Interfaces.GameObjects; +using Robust.Shared.GameObjects; + +namespace Content.Server.GameObjects.Components +{ + [RegisterComponent] + [ComponentReference(typeof(IActivate))] + public class MagicMirrorComponent : SharedMagicMirrorComponent, IActivate + { + private BoundUserInterface _userInterface; + + public override void Initialize() + { + base.Initialize(); + _userInterface = Owner.GetComponent() + .GetBoundUserInterface(MagicMirrorUiKey.Key); + _userInterface.OnReceiveMessage += OnUiReceiveMessage; + } + + private static void OnUiReceiveMessage(ServerBoundUserInterfaceMessage obj) + { + var hair = obj.Session.AttachedEntity.GetComponent(); + switch (obj.Message) + { + case HairSelectedMessage msg: + var map = + msg.IsFacialHair ? HairStyles.FacialHairStylesMap : HairStyles.HairStylesMap; + if (!map.ContainsKey(msg.HairName)) + return; + + if (msg.IsFacialHair) + { + hair.FacialHairStyleName = msg.HairName; + } + else + { + hair.HairStyleName = msg.HairName; + } + + break; + case HairColorSelectedMessage msg: + if (msg.IsFacialHair) + { + hair.FacialHairColor = msg.HairColor; + } + else + { + hair.HairColor = msg.HairColor; + } + + break; + } + } + + public void Activate(ActivateEventArgs eventArgs) + { + if (!eventArgs.User.TryGetComponent(out IActorComponent actor)) + { + return; + } + + _userInterface.Open(actor.playerSession); + } + } +} diff --git a/Content.Server/GameObjects/Components/Mobs/HairComponent.cs b/Content.Server/GameObjects/Components/Mobs/HairComponent.cs new file mode 100644 index 0000000000..fc1ec345e1 --- /dev/null +++ b/Content.Server/GameObjects/Components/Mobs/HairComponent.cs @@ -0,0 +1,11 @@ +using Content.Shared.GameObjects.Components.Mobs; +using Robust.Shared.GameObjects; + +namespace Content.Server.GameObjects.Components.Mobs +{ + [RegisterComponent] + public sealed class HairComponent : SharedHairComponent + { + + } +} diff --git a/Content.Shared/GameObjects/Components/Mobs/SharedHairComponent.cs b/Content.Shared/GameObjects/Components/Mobs/SharedHairComponent.cs new file mode 100644 index 0000000000..9f455f5fd1 --- /dev/null +++ b/Content.Shared/GameObjects/Components/Mobs/SharedHairComponent.cs @@ -0,0 +1,96 @@ +using System; +using Robust.Shared.GameObjects; +using Robust.Shared.Maths; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; + +namespace Content.Shared.GameObjects.Components.Mobs +{ + public abstract class SharedHairComponent : Component + { + private string _facialHairStyleName; + private string _hairStyleName; + private Color _hairColor; + private Color _facialHairColor; + + public sealed override string Name => "Hair"; + public sealed override uint? NetID => ContentNetIDs.HAIR; + public sealed override Type StateType => typeof(HairComponentState); + + [ViewVariables(VVAccess.ReadWrite)] + public virtual string HairStyleName + { + get => _hairStyleName; + set + { + _hairStyleName = value; + Dirty(); + } + } + + [ViewVariables(VVAccess.ReadWrite)] + public virtual string FacialHairStyleName + { + get => _facialHairStyleName; + set + { + _facialHairStyleName = value; + Dirty(); + } + } + + [ViewVariables(VVAccess.ReadWrite)] + public virtual Color HairColor + { + get => _hairColor; + set + { + _hairColor = value; + Dirty(); + } + } + + [ViewVariables(VVAccess.ReadWrite)] + public virtual Color FacialHairColor + { + get => _facialHairColor; + set + { + _facialHairColor = value; + Dirty(); + } + } + + public override ComponentState GetComponentState() + { + return new HairComponentState(HairStyleName, FacialHairStyleName, HairColor, FacialHairColor); + } + + public override void HandleComponentState(ComponentState curState, ComponentState nextState) + { + var cast = (HairComponentState) curState; + + HairStyleName = cast.HairStyleName; + FacialHairStyleName = cast.FacialHairStyleName; + HairColor = cast.HairColor; + FacialHairColor = cast.FacialHairColor; + } + + [Serializable, NetSerializable] + private sealed class HairComponentState : ComponentState + { + public string HairStyleName { get; } + public string FacialHairStyleName { get; } + public Color HairColor { get; } + public Color FacialHairColor { get; } + + public HairComponentState(string hairStyleName, string facialHairStyleName, Color hairColor, Color facialHairColor) : base(ContentNetIDs.HAIR) + { + HairStyleName = hairStyleName; + FacialHairStyleName = facialHairStyleName; + HairColor = hairColor; + FacialHairColor = facialHairColor; + } + } + } +} diff --git a/Content.Shared/GameObjects/Components/SharedMagicMirrorComponent.cs b/Content.Shared/GameObjects/Components/SharedMagicMirrorComponent.cs new file mode 100644 index 0000000000..ee4cef3e50 --- /dev/null +++ b/Content.Shared/GameObjects/Components/SharedMagicMirrorComponent.cs @@ -0,0 +1,45 @@ +using System; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.Maths; +using Robust.Shared.Serialization; + +namespace Content.Shared.GameObjects.Components +{ + public class SharedMagicMirrorComponent : Component + { + public override string Name => "MagicMirror"; + + [Serializable, NetSerializable] + public enum MagicMirrorUiKey + { + Key + } + + [Serializable, NetSerializable] + public class HairSelectedMessage : BoundUserInterfaceMessage + { + public readonly string HairName; + public readonly bool IsFacialHair; + + public HairSelectedMessage(string name, bool isFacialHair) + { + HairName = name; + IsFacialHair = isFacialHair; + } + } + + [Serializable, NetSerializable] + public class HairColorSelectedMessage : BoundUserInterfaceMessage + { + public readonly Color HairColor; + public readonly bool IsFacialHair; + + public HairColorSelectedMessage(Color color, bool isFacialHair) + { + HairColor = color; + IsFacialHair = isFacialHair; + } + } + } +} diff --git a/Content.Shared/GameObjects/ContentNetIDs.cs b/Content.Shared/GameObjects/ContentNetIDs.cs index 7fd98c5eb2..b909a664c8 100644 --- a/Content.Shared/GameObjects/ContentNetIDs.cs +++ b/Content.Shared/GameObjects/ContentNetIDs.cs @@ -34,5 +34,6 @@ public const uint ITEMCOOLDOWN = 1029; public const uint CARGO_ORDER_DATABASE = 1030; public const uint GALACTIC_MARKET = 1031; + public const uint HAIR = 1032; } } diff --git a/Content.Shared/Preferences/Appearance/HairStyles.cs b/Content.Shared/Preferences/Appearance/HairStyles.cs new file mode 100644 index 0000000000..6ee6b29957 --- /dev/null +++ b/Content.Shared/Preferences/Appearance/HairStyles.cs @@ -0,0 +1,192 @@ +using System.Collections; +using System.Collections.Generic; + +namespace Content.Shared.Preferences.Appearance +{ + public static class HairStyles + { + public const string DefaultHairStyle = "Bald"; + public const string DefaultFacialHairStyle = "Shaved"; + + public static readonly Dictionary HairStylesMap = new Dictionary + { + {"Bald", "bald"}, + {"Afro", "afro"}, + {"Big Afro", "bigafro"}, + {"Afro 2", "afro2"}, + {"Asymmetrical Bob", "asymmbob"}, + {"Balding Hair", "balding"}, + {"Bedhead", "bedhead"}, + {"Bedhead 2", "bedheadv2"}, + {"Bedhead 3", "bedheadv3"}, + {"Beehive", "beehive"}, + {"Beehive 2", "beehive2"}, + {"Birdnest", "birdnest"}, + {"Birdnest 2", "birdnest2"}, + {"Mercenary", "blackswordsman"}, + {"Bob", "bobcut"}, + {"Bobcurl", "bobcurl"}, + {"Bowl 1", "bowlcut1"}, + {"Bowl 2", "bowlcut2"}, + {"Floorlength Braid", "braid"}, + {"Long Braid", "hbraid"}, + {"Business Hair", "business"}, + {"Business Hair 2", "business2"}, + {"Business Hair 3", "business3"}, + {"Business Hair 4", "business4"}, + {"Bun", "bun"}, + {"Casual Bun", "bunalt"}, + {"Bun 2", "bun2"}, + {"Bun 3", "bun3"}, + {"Buzzcut", "buzzcut"}, + {"Chop", "chop"}, + {"CIA", "cia"}, + {"Combover", "combover"}, + {"Coffee House", "coffeehouse"}, + {"Crewcut", "crewcut"}, + {"Chrono", "toriyama"}, + {"Curls", "curls"}, + {"Cut Hair", "cuthair"}, + {"Dandy Pompadour", "dandypompadour"}, + {"Devil Lock", "devilock"}, + {"Double-Bun", "doublebun"}, + {"Dreadlocks", "dreads"}, + {"80's", "80s"}, + {"Emo", "emo"}, + {"Flow Hair", "flowhair"}, + {"The Family Man", "thefamilyman"}, + {"Father", "father"}, + {"Feather", "feather"}, + {"Cut Hair Alt", "femc"}, + {"Flaired Hair", "flair"}, + {"Emo Fringe", "emofringe"}, + {"Fringetail", "fringetail"}, + {"Gelled Back", "gelled"}, + {"Gentle", "gentle"}, + {"Half-banged Hair", "halfbang"}, + {"Half-banged Hair Alt", "halfbang_alt"}, + {"Half-Shaved", "halfshaved"}, + {"Half-Shaved Emo", "halfshaved_emo"}, + {"Hamaski Hair", "hamasaki"}, + {"Combed Hair", "hbangs"}, + {"Combed Hair Alt", "hbangs_alt"}, + {"High Ponytail", "highponytail"}, + {"Hime Cut", "himecut"}, + {"Hime Cut Alt", "himecut_alt"}, + {"Hitop", "hitop"}, + {"Adam Jensen Hair", "jensen"}, + {"Joestar", "joestar"}, + {"Pigtails", "kagami"}, + {"Kare", "kare"}, + {"Kusanagi Hair", "kusanagi"}, + {"Ladylike", "ladylike"}, + {"Ladylike alt", "ladylike2"}, + {"Long Emo", "emolong"}, + {"Long Hair", "vlong"}, + {"Long Hair Alt", "longeralt2"}, + {"Very Long Hair", "longest"}, + {"Longer Fringe", "vlongfringe"}, + {"Long Fringe", "longfringe"}, + {"Overeye Long", "longovereye"}, + {"Man Bun", "manbun"}, + {"Drillruru", "drillruru"}, + {"Medium Braid", "shortbraid"}, + {"Medium Braid Alt", "mediumbraid"}, + {"Messy Bun", "messybun"}, + {"Modern", "modern"}, + {"Mohawk", "mohawk"}, + {"Mulder", "mulder"}, + {"Nia", "nia"}, + {"Nitori", "nitori"}, + {"Odango", "odango"}, + {"Ombre", "ombre"}, + {"Oxton", "oxton"}, + {"Parted", "parted"}, + {"Pixie", "pixie"}, + {"Pompadour", "pompadour"}, + {"Ponytail 1", "ponytail"}, + {"Ponytail 2", "ponytail2"}, + {"Ponytail 3", "ponytail3"}, + {"Ponytail 4", "ponytail4"}, + {"Ponytail 5", "ponytail5"}, + {"Ponytail 6", "ponytail6"}, + {"Ponytail 7", "ponytail7"}, + {"Poofy", "poofy"}, + {"Poofy Alt", "poofy2"}, + {"Quiff", "quiff"}, + {"Ramona", "ramona"}, + {"Reverse Mohawk", "reversemohawk"}, + {"Ronin", "ronin"}, + {"Rows", "rows1"}, + {"Rows Alt", "rows2"}, + {"Rows Bun", "rows3"}, + {"Flat Top", "sargeant"}, + {"Scully", "scully"}, + {"Shaved Mohawk", "shavedmohawk"}, + {"Shaved Part", "shavedpart"}, + {"Short Hair", "short"}, + {"Short Hair 2", "short2"}, + {"Short Hair 3", "short3"}, + {"Short Bangs", "shortbangs"}, + {"Overeye Short", "shortovereye"}, + {"Shoulder-length Hair", "shoulderlen"}, + {"Sidepart Hair", "sidepart"}, + {"Side Ponytail", "stail"}, + {"One Shoulder", "oneshoulder"}, + {"Tress Shoulder", "tressshoulder"}, + {"Side Ponytail 2", "ponytailf"}, + {"Side Swipe", "sideswipe"}, + {"Skinhead", "skinhead"}, + {"Messy Hair", "smessy"}, + {"Sleeze", "sleeze"}, + {"Spiky", "spikey"}, + {"Stylo", "stylo"}, + {"Spiky Ponytail", "spikyponytail"}, + {"Top Knot", "topknot"}, + {"Thinning", "thinning"}, + {"Thinning Rear", "thinningrear"}, + {"Thinning Front", "thinningfront"}, + {"Undercut", "undercut"}, + {"Unkept", "unkept"}, + {"Updo", "updo"}, + {"Vegeta", "toriyama2"}, + {"Overeye Very Short", "veryshortovereye"}, + {"Overeye Very Short, Alternate", "veryshortovereyealternate"}, + {"Volaju", "volaju"}, + {"Wisp", "wisp"}, + {"Zieglertail", "ziegler"}, + {"Zone Braid", "zone"}, + }; + + public static readonly Dictionary FacialHairStylesMap = new Dictionary() + { + {"Shaved", "shaved"}, + {"Watson Mustache", "watson"}, + {"Hulk Hogan Mustache", "hogan"}, + {"Van Dyke Mustache", "vandyke"}, + {"Square Mustache", "chaplin"}, + {"Selleck Mustache", "selleck"}, + {"Neckbeard", "neckbeard"}, + {"Full Beard", "fullbeard"}, + {"Long Beard", "longbeard"}, + {"Very Long Beard", "wise"}, + {"Elvis Sideburns", "elvis"}, + {"Abraham Lincoln Beard", "abe"}, + {"Chinstrap", "chin"}, + {"Hipster Beard", "hip"}, + {"Goatee", "gt"}, + {"Adam Jensen Beard", "jensen"}, + {"Volaju", "volaju"}, + {"Dwarf Beard", "dwarf"}, + {"3 O'clock Shadow", "3oclock"}, + {"3 O'clock Shadow and Moustache", "3oclockmoustache"}, + {"5 O'clock Shadow", "5oclock"}, + {"5 O'clock Shadow and Moustache", "5oclockmoustache"}, + {"7 O'clock Shadow", "7oclock"}, + {"7 O'clock Shadow and Moustache", "7oclockmoustache"}, + {"Mutton Chops", "mutton"}, + {"Mutton Chops and Moustache", "muttonmu"}, + {"Walrus Moustache", "walrus"}, + }; + } +} diff --git a/Content.Shared/Preferences/Appearance/HumanoidCharacterAppearance.cs b/Content.Shared/Preferences/Appearance/HumanoidCharacterAppearance.cs new file mode 100644 index 0000000000..f7defbecc2 --- /dev/null +++ b/Content.Shared/Preferences/Appearance/HumanoidCharacterAppearance.cs @@ -0,0 +1,11 @@ +using System; +using Robust.Shared.Serialization; + +namespace Content.Shared.Preferences.Appearance +{ + public enum HumanoidVisualLayers + { + Hair, + FacialHair, + } +} diff --git a/Resources/Prototypes/Entities/buildings/mirror.yml b/Resources/Prototypes/Entities/buildings/mirror.yml new file mode 100644 index 0000000000..4fd2196cb7 --- /dev/null +++ b/Resources/Prototypes/Entities/buildings/mirror.yml @@ -0,0 +1,26 @@ +- type: entity + id: mirror + name: Mirror + components: + - type: Sprite + sprite: Buildings/mirror.rsi + state: mirror + - type: Icon + sprite: Buildings/mirror.rsi + state: mirror + - type: Collidable + shapes: + - !type:PhysShapeAabb + mask: 19 + layer: 16 + - type: Clickable + - type: Physics + mass: 25 + Anchored: true + - type: SnapGrid + offset: Center + - type: MagicMirror + - type: UserInterface + interfaces: + - key: enum.MagicMirrorUiKey.Key + type: MagicMirrorBoundUserInterface diff --git a/Resources/Prototypes/Entities/mobs/human.yml b/Resources/Prototypes/Entities/mobs/human.yml index 88afb8dacc..c899b07a20 100644 --- a/Resources/Prototypes/Entities/mobs/human.yml +++ b/Resources/Prototypes/Entities/mobs/human.yml @@ -12,7 +12,7 @@ - type: Thirst # Organs - type: Stomach - + - type: Inventory - type: Constructor - type: Clickable @@ -23,6 +23,12 @@ layers: - sprite: Mob/human.rsi state: male + - map: ["enum.HumanoidVisualLayers.Hair"] + state: bald + sprite: Mob/human_hair.rsi + - map: ["enum.HumanoidVisualLayers.FacialHair"] + state: shaved + sprite: Mob/human_facial_hair.rsi - map: ["enum.Slots.INNERCLOTHING"] - map: ["enum.Slots.IDCARD"] - map: ["enum.Slots.SHOES"] @@ -47,7 +53,7 @@ - type: Collidable shapes: - !type:PhysShapeAabb - bounds: "-0.5,-0.25,-0.05,0.25" + bounds: "-0.5,-0.25,-0.05,0.25" mask: 19 layer: 2 @@ -75,4 +81,4 @@ - type: Examiner - type: CharacterInfo - type: FootstepSound - + - type: Hair diff --git a/Resources/Prototypes/Shaders/hair.yml b/Resources/Prototypes/Shaders/hair.yml new file mode 100644 index 0000000000..a8d03e4421 --- /dev/null +++ b/Resources/Prototypes/Shaders/hair.yml @@ -0,0 +1,6 @@ +- type: shader + id: hair + kind: source + path: "/Shaders/hair.swsl" + params: + hairColor: "#000000" diff --git a/Resources/Shaders/hair.swsl b/Resources/Shaders/hair.swsl new file mode 100644 index 0000000000..50d8c736d0 --- /dev/null +++ b/Resources/Shaders/hair.swsl @@ -0,0 +1,8 @@ +// Additively blends the hair color onto the hair sprite. + +uniform vec4 hairColor; + +void fragment() { + COLOR = texture(TEXTURE, UV); + COLOR.rgb += hairColor.rgb; +} diff --git a/Resources/Textures/Buildings/mirror.rsi/meta.json b/Resources/Textures/Buildings/mirror.rsi/meta.json new file mode 100644 index 0000000000..fc8db81682 --- /dev/null +++ b/Resources/Textures/Buildings/mirror.rsi/meta.json @@ -0,0 +1 @@ +{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "mirror", "directions": 1, "delays": [[1.0]]}, {"name": "mirror_broke", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file diff --git a/Resources/Textures/Buildings/mirror.rsi/mirror.png b/Resources/Textures/Buildings/mirror.rsi/mirror.png new file mode 100644 index 0000000000..6411d2f12b Binary files /dev/null and b/Resources/Textures/Buildings/mirror.rsi/mirror.png differ diff --git a/Resources/Textures/Buildings/mirror.rsi/mirror_broke.png b/Resources/Textures/Buildings/mirror.rsi/mirror_broke.png new file mode 100644 index 0000000000..53a7cf64ee Binary files /dev/null and b/Resources/Textures/Buildings/mirror.rsi/mirror_broke.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/3oclock.png b/Resources/Textures/Mob/human_facial_hair.rsi/3oclock.png new file mode 100644 index 0000000000..0ac6a7faac Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/3oclock.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/3oclockmoustache.png b/Resources/Textures/Mob/human_facial_hair.rsi/3oclockmoustache.png new file mode 100644 index 0000000000..899bc7f1f3 Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/3oclockmoustache.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/5oclock.png b/Resources/Textures/Mob/human_facial_hair.rsi/5oclock.png new file mode 100644 index 0000000000..8a0f99a3fa Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/5oclock.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/5oclockmoustache.png b/Resources/Textures/Mob/human_facial_hair.rsi/5oclockmoustache.png new file mode 100644 index 0000000000..cc68970e47 Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/5oclockmoustache.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/7oclock.png b/Resources/Textures/Mob/human_facial_hair.rsi/7oclock.png new file mode 100644 index 0000000000..7bc937751e Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/7oclock.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/7oclockmoustache.png b/Resources/Textures/Mob/human_facial_hair.rsi/7oclockmoustache.png new file mode 100644 index 0000000000..e36912affc Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/7oclockmoustache.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/abe.png b/Resources/Textures/Mob/human_facial_hair.rsi/abe.png new file mode 100644 index 0000000000..b74e1e64a8 Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/abe.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/chaplin.png b/Resources/Textures/Mob/human_facial_hair.rsi/chaplin.png new file mode 100644 index 0000000000..c106cdab00 Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/chaplin.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/chin.png b/Resources/Textures/Mob/human_facial_hair.rsi/chin.png new file mode 100644 index 0000000000..4726209455 Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/chin.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/dwarf.png b/Resources/Textures/Mob/human_facial_hair.rsi/dwarf.png new file mode 100644 index 0000000000..3afa080da0 Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/dwarf.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/elvis.png b/Resources/Textures/Mob/human_facial_hair.rsi/elvis.png new file mode 100644 index 0000000000..903d9a404f Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/elvis.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/fullbeard.png b/Resources/Textures/Mob/human_facial_hair.rsi/fullbeard.png new file mode 100644 index 0000000000..c775a03c4c Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/fullbeard.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/gt.png b/Resources/Textures/Mob/human_facial_hair.rsi/gt.png new file mode 100644 index 0000000000..32d373d4ec Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/gt.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/hip.png b/Resources/Textures/Mob/human_facial_hair.rsi/hip.png new file mode 100644 index 0000000000..4cbce91a14 Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/hip.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/hogan.png b/Resources/Textures/Mob/human_facial_hair.rsi/hogan.png new file mode 100644 index 0000000000..6d158e1cc3 Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/hogan.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/jensen.png b/Resources/Textures/Mob/human_facial_hair.rsi/jensen.png new file mode 100644 index 0000000000..ead7203789 Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/jensen.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/longbeard.png b/Resources/Textures/Mob/human_facial_hair.rsi/longbeard.png new file mode 100644 index 0000000000..3ba7690ea7 Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/longbeard.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/meta.json b/Resources/Textures/Mob/human_facial_hair.rsi/meta.json new file mode 100644 index 0000000000..6a116f56dc --- /dev/null +++ b/Resources/Textures/Mob/human_facial_hair.rsi/meta.json @@ -0,0 +1 @@ +{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "3oclock", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "3oclockmoustache", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "5oclock", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "5oclockmoustache", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "7oclock", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "7oclockmoustache", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "abe", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "chaplin", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "chin", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "dwarf", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "elvis", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "fullbeard", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "gt", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "hip", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "hogan", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "jensen", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "longbeard", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "mutton", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "muttonmu", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "neckbeard", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "selleck", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "shaved", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "vandyke", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "volaju", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "walrus", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "watson", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "wise", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}]} \ No newline at end of file diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/mutton.png b/Resources/Textures/Mob/human_facial_hair.rsi/mutton.png new file mode 100644 index 0000000000..c0386bb5af Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/mutton.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/muttonmu.png b/Resources/Textures/Mob/human_facial_hair.rsi/muttonmu.png new file mode 100644 index 0000000000..551a9eef49 Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/muttonmu.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/neckbeard.png b/Resources/Textures/Mob/human_facial_hair.rsi/neckbeard.png new file mode 100644 index 0000000000..0ce30b70ae Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/neckbeard.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/selleck.png b/Resources/Textures/Mob/human_facial_hair.rsi/selleck.png new file mode 100644 index 0000000000..90422d2bb2 Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/selleck.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/shaved.png b/Resources/Textures/Mob/human_facial_hair.rsi/shaved.png new file mode 100644 index 0000000000..0858c19f05 Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/shaved.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/vandyke.png b/Resources/Textures/Mob/human_facial_hair.rsi/vandyke.png new file mode 100644 index 0000000000..78a4f1f770 Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/vandyke.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/volaju.png b/Resources/Textures/Mob/human_facial_hair.rsi/volaju.png new file mode 100644 index 0000000000..51d7e580b6 Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/volaju.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/walrus.png b/Resources/Textures/Mob/human_facial_hair.rsi/walrus.png new file mode 100644 index 0000000000..a6041edbb5 Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/walrus.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/watson.png b/Resources/Textures/Mob/human_facial_hair.rsi/watson.png new file mode 100644 index 0000000000..d1f00e0cfd Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/watson.png differ diff --git a/Resources/Textures/Mob/human_facial_hair.rsi/wise.png b/Resources/Textures/Mob/human_facial_hair.rsi/wise.png new file mode 100644 index 0000000000..8885ae2fcb Binary files /dev/null and b/Resources/Textures/Mob/human_facial_hair.rsi/wise.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/.png b/Resources/Textures/Mob/human_hair.rsi/.png new file mode 100644 index 0000000000..be6b27ce8a Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/80s.png b/Resources/Textures/Mob/human_hair.rsi/80s.png new file mode 100644 index 0000000000..d7e1975642 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/80s.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/afro.png b/Resources/Textures/Mob/human_hair.rsi/afro.png new file mode 100644 index 0000000000..798d396289 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/afro.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/afro2.png b/Resources/Textures/Mob/human_hair.rsi/afro2.png new file mode 100644 index 0000000000..21805063e3 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/afro2.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/asymmbob.png b/Resources/Textures/Mob/human_hair.rsi/asymmbob.png new file mode 100644 index 0000000000..92017a8c45 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/asymmbob.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/bald.png b/Resources/Textures/Mob/human_hair.rsi/bald.png new file mode 100644 index 0000000000..0858c19f05 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/bald.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/balding.png b/Resources/Textures/Mob/human_hair.rsi/balding.png new file mode 100644 index 0000000000..a2a78fe168 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/balding.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/bedhead.png b/Resources/Textures/Mob/human_hair.rsi/bedhead.png new file mode 100644 index 0000000000..6ae1caaa44 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/bedhead.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/bedheadv2.png b/Resources/Textures/Mob/human_hair.rsi/bedheadv2.png new file mode 100644 index 0000000000..027ce6fef3 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/bedheadv2.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/bedheadv3.png b/Resources/Textures/Mob/human_hair.rsi/bedheadv3.png new file mode 100644 index 0000000000..9c6df10e38 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/bedheadv3.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/beehive.png b/Resources/Textures/Mob/human_hair.rsi/beehive.png new file mode 100644 index 0000000000..9455a29184 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/beehive.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/beehive2.png b/Resources/Textures/Mob/human_hair.rsi/beehive2.png new file mode 100644 index 0000000000..4f06b5d8f0 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/beehive2.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/bigafro.png b/Resources/Textures/Mob/human_hair.rsi/bigafro.png new file mode 100644 index 0000000000..b5321b9a15 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/bigafro.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/birdnest.png b/Resources/Textures/Mob/human_hair.rsi/birdnest.png new file mode 100644 index 0000000000..c62eccbf6d Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/birdnest.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/birdnest2.png b/Resources/Textures/Mob/human_hair.rsi/birdnest2.png new file mode 100644 index 0000000000..addfdaa893 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/birdnest2.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/blackswordsman.png b/Resources/Textures/Mob/human_hair.rsi/blackswordsman.png new file mode 100644 index 0000000000..7db06423c5 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/blackswordsman.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/bobcurl.png b/Resources/Textures/Mob/human_hair.rsi/bobcurl.png new file mode 100644 index 0000000000..8d3d9ee6f1 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/bobcurl.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/bobcut.png b/Resources/Textures/Mob/human_hair.rsi/bobcut.png new file mode 100644 index 0000000000..ce5507e1e6 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/bobcut.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/bowlcut1.png b/Resources/Textures/Mob/human_hair.rsi/bowlcut1.png new file mode 100644 index 0000000000..c073f15e46 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/bowlcut1.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/bowlcut2.png b/Resources/Textures/Mob/human_hair.rsi/bowlcut2.png new file mode 100644 index 0000000000..5f6e0bc38c Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/bowlcut2.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/braid.png b/Resources/Textures/Mob/human_hair.rsi/braid.png new file mode 100644 index 0000000000..b16f731bca Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/braid.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/bun.png b/Resources/Textures/Mob/human_hair.rsi/bun.png new file mode 100644 index 0000000000..a369cd046c Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/bun.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/bun2.png b/Resources/Textures/Mob/human_hair.rsi/bun2.png new file mode 100644 index 0000000000..50151dd301 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/bun2.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/bun3.png b/Resources/Textures/Mob/human_hair.rsi/bun3.png new file mode 100644 index 0000000000..19f24283ec Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/bun3.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/bunalt.png b/Resources/Textures/Mob/human_hair.rsi/bunalt.png new file mode 100644 index 0000000000..93641aaf9c Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/bunalt.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/business.png b/Resources/Textures/Mob/human_hair.rsi/business.png new file mode 100644 index 0000000000..5bf6ed2ff7 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/business.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/business2.png b/Resources/Textures/Mob/human_hair.rsi/business2.png new file mode 100644 index 0000000000..105de919ba Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/business2.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/business3.png b/Resources/Textures/Mob/human_hair.rsi/business3.png new file mode 100644 index 0000000000..c725fe8b20 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/business3.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/business4.png b/Resources/Textures/Mob/human_hair.rsi/business4.png new file mode 100644 index 0000000000..9e7bf0b70d Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/business4.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/buzzcut.png b/Resources/Textures/Mob/human_hair.rsi/buzzcut.png new file mode 100644 index 0000000000..c1b5722cf1 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/buzzcut.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/chop.png b/Resources/Textures/Mob/human_hair.rsi/chop.png new file mode 100644 index 0000000000..b43bdb92a8 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/chop.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/cia.png b/Resources/Textures/Mob/human_hair.rsi/cia.png new file mode 100644 index 0000000000..c725fe8b20 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/cia.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/coffeehouse.png b/Resources/Textures/Mob/human_hair.rsi/coffeehouse.png new file mode 100644 index 0000000000..e887182a4e Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/coffeehouse.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/combover.png b/Resources/Textures/Mob/human_hair.rsi/combover.png new file mode 100644 index 0000000000..9d8a46bdd1 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/combover.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/crewcut.png b/Resources/Textures/Mob/human_hair.rsi/crewcut.png new file mode 100644 index 0000000000..06ef84b67e Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/crewcut.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/curls.png b/Resources/Textures/Mob/human_hair.rsi/curls.png new file mode 100644 index 0000000000..4b3fb1ef3e Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/curls.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/cuthair.png b/Resources/Textures/Mob/human_hair.rsi/cuthair.png new file mode 100644 index 0000000000..e05f2def6f Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/cuthair.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/dandypompadour.png b/Resources/Textures/Mob/human_hair.rsi/dandypompadour.png new file mode 100644 index 0000000000..5faa1dd3d4 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/dandypompadour.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/devilock.png b/Resources/Textures/Mob/human_hair.rsi/devilock.png new file mode 100644 index 0000000000..87a28c5e3e Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/devilock.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/doublebun.png b/Resources/Textures/Mob/human_hair.rsi/doublebun.png new file mode 100644 index 0000000000..8ecdba10dd Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/doublebun.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/dreads.png b/Resources/Textures/Mob/human_hair.rsi/dreads.png new file mode 100644 index 0000000000..a986b30226 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/dreads.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/drillruru.png b/Resources/Textures/Mob/human_hair.rsi/drillruru.png new file mode 100644 index 0000000000..ff8b39f659 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/drillruru.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/emo.png b/Resources/Textures/Mob/human_hair.rsi/emo.png new file mode 100644 index 0000000000..2d20151168 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/emo.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/emofringe.png b/Resources/Textures/Mob/human_hair.rsi/emofringe.png new file mode 100644 index 0000000000..244f8f206d Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/emofringe.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/emolong.png b/Resources/Textures/Mob/human_hair.rsi/emolong.png new file mode 100644 index 0000000000..0afc0d2d89 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/emolong.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/father.png b/Resources/Textures/Mob/human_hair.rsi/father.png new file mode 100644 index 0000000000..f1f576c2d7 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/father.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/feather.png b/Resources/Textures/Mob/human_hair.rsi/feather.png new file mode 100644 index 0000000000..62326b8ebd Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/feather.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/femc.png b/Resources/Textures/Mob/human_hair.rsi/femc.png new file mode 100644 index 0000000000..8da9aa39f1 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/femc.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/flair.png b/Resources/Textures/Mob/human_hair.rsi/flair.png new file mode 100644 index 0000000000..1c00579ee0 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/flair.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/flowhair.png b/Resources/Textures/Mob/human_hair.rsi/flowhair.png new file mode 100644 index 0000000000..ecf91c18da Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/flowhair.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/fringetail.png b/Resources/Textures/Mob/human_hair.rsi/fringetail.png new file mode 100644 index 0000000000..007d17a000 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/fringetail.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/gelled.png b/Resources/Textures/Mob/human_hair.rsi/gelled.png new file mode 100644 index 0000000000..6c91e7d0fe Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/gelled.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/gentle.png b/Resources/Textures/Mob/human_hair.rsi/gentle.png new file mode 100644 index 0000000000..e11d9615e0 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/gentle.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/halfbang.png b/Resources/Textures/Mob/human_hair.rsi/halfbang.png new file mode 100644 index 0000000000..f91bc945f1 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/halfbang.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/halfbang_alt.png b/Resources/Textures/Mob/human_hair.rsi/halfbang_alt.png new file mode 100644 index 0000000000..f04d188283 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/halfbang_alt.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/halfshaved.png b/Resources/Textures/Mob/human_hair.rsi/halfshaved.png new file mode 100644 index 0000000000..19bded3f61 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/halfshaved.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/halfshaved_emo.png b/Resources/Textures/Mob/human_hair.rsi/halfshaved_emo.png new file mode 100644 index 0000000000..02d2d73948 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/halfshaved_emo.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/hamasaki.png b/Resources/Textures/Mob/human_hair.rsi/hamasaki.png new file mode 100644 index 0000000000..c0de6e809b Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/hamasaki.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/hbangs.png b/Resources/Textures/Mob/human_hair.rsi/hbangs.png new file mode 100644 index 0000000000..91d9decc28 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/hbangs.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/hbangs_alt.png b/Resources/Textures/Mob/human_hair.rsi/hbangs_alt.png new file mode 100644 index 0000000000..9010ced8f8 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/hbangs_alt.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/hbraid.png b/Resources/Textures/Mob/human_hair.rsi/hbraid.png new file mode 100644 index 0000000000..d02772467e Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/hbraid.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/highponytail.png b/Resources/Textures/Mob/human_hair.rsi/highponytail.png new file mode 100644 index 0000000000..8821d69b0e Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/highponytail.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/himecut.png b/Resources/Textures/Mob/human_hair.rsi/himecut.png new file mode 100644 index 0000000000..107a004681 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/himecut.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/himecut_alt.png b/Resources/Textures/Mob/human_hair.rsi/himecut_alt.png new file mode 100644 index 0000000000..247c6a7553 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/himecut_alt.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/hitop.png b/Resources/Textures/Mob/human_hair.rsi/hitop.png new file mode 100644 index 0000000000..66f41857d6 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/hitop.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/jensen.png b/Resources/Textures/Mob/human_hair.rsi/jensen.png new file mode 100644 index 0000000000..286988bd12 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/jensen.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/joestar.png b/Resources/Textures/Mob/human_hair.rsi/joestar.png new file mode 100644 index 0000000000..8c370d1169 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/joestar.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/kagami.png b/Resources/Textures/Mob/human_hair.rsi/kagami.png new file mode 100644 index 0000000000..58e2ba64cb Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/kagami.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/kare.png b/Resources/Textures/Mob/human_hair.rsi/kare.png new file mode 100644 index 0000000000..897ddfb8d7 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/kare.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/kusanagi.png b/Resources/Textures/Mob/human_hair.rsi/kusanagi.png new file mode 100644 index 0000000000..77f372828e Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/kusanagi.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/ladylike.png b/Resources/Textures/Mob/human_hair.rsi/ladylike.png new file mode 100644 index 0000000000..7824bfbcaf Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/ladylike.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/ladylike2.png b/Resources/Textures/Mob/human_hair.rsi/ladylike2.png new file mode 100644 index 0000000000..8685747db6 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/ladylike2.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/longeralt2.png b/Resources/Textures/Mob/human_hair.rsi/longeralt2.png new file mode 100644 index 0000000000..3de1224d89 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/longeralt2.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/longest.png b/Resources/Textures/Mob/human_hair.rsi/longest.png new file mode 100644 index 0000000000..abf2834b4c Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/longest.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/longfringe.png b/Resources/Textures/Mob/human_hair.rsi/longfringe.png new file mode 100644 index 0000000000..09724948b4 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/longfringe.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/longovereye.png b/Resources/Textures/Mob/human_hair.rsi/longovereye.png new file mode 100644 index 0000000000..96d9181266 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/longovereye.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/manbun.png b/Resources/Textures/Mob/human_hair.rsi/manbun.png new file mode 100644 index 0000000000..c4f2a541c8 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/manbun.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/mediumbraid.png b/Resources/Textures/Mob/human_hair.rsi/mediumbraid.png new file mode 100644 index 0000000000..4ae94a079d Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/mediumbraid.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/messybun.png b/Resources/Textures/Mob/human_hair.rsi/messybun.png new file mode 100644 index 0000000000..d452eee756 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/messybun.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/meta.json b/Resources/Textures/Mob/human_hair.rsi/meta.json new file mode 100644 index 0000000000..577f448d0a --- /dev/null +++ b/Resources/Textures/Mob/human_hair.rsi/meta.json @@ -0,0 +1 @@ +{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "", "directions": 1, "delays": [[1.0]]}, {"name": "80s", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "afro", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "afro2", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "asymmbob", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "bald", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "balding", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "bedhead", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "bedheadv2", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "bedheadv3", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "beehive", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "beehive2", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "bigafro", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "birdnest", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "birdnest2", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "blackswordsman", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "bobcurl", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "bobcut", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "bowlcut1", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "bowlcut2", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "braid", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "bun", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "bun2", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "bun3", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "bunalt", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "business", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "business2", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "business3", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "business4", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "buzzcut", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "chop", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "cia", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "coffeehouse", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "combover", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "crewcut", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "curls", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "cuthair", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "dandypompadour", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "devilock", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "doublebun", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "dreads", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "drillruru", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "emo", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "emofringe", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "emolong", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "father", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "feather", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "femc", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "flair", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "flowhair", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "fringetail", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "gelled", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "gentle", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "halfbang", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "halfbang_alt", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "halfshaved", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "halfshaved_emo", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "hamasaki", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "hbangs", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "hbangs_alt", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "hbraid", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "highponytail", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "himecut", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "himecut_alt", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "hitop", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "jensen", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "joestar", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "kagami", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "kare", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "kusanagi", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "ladylike", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "ladylike2", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "longeralt2", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "longest", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "longfringe", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "longovereye", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "manbun", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "mediumbraid", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "messybun", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "modern", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "mohawk", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "mulder", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "nia", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "nitori", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "odango", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "ombre", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "oneshoulder", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "oxton", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "parted", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "pixie", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "pompadour", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "ponytail", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "ponytail2", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "ponytail3", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "ponytail4", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "ponytail5", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "ponytail6", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "ponytail7", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "ponytailf", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "poofy", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "poofy2", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "quiff", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "ramona", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "reversemohawk", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "ronin", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "rows1", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "rows2", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "rows3", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "sargeant", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "scully", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "shavedmohawk", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "shavedpart", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "short", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "short2", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "short3", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "shortbangs", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "shortbraid", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "shortovereye", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "shoulderlen", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "sidepart", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "sideswipe", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "skinhead", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "sleeze", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "smessy", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "spikey", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "spikyponytail", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "stail", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "stylo", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "thefamilyman", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "thinning", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "thinningfront", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "thinningrear", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "topknot", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "toriyama", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "toriyama2", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "tressshoulder", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "undercut", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "unkept", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "updo", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "veryshortovereye", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "veryshortovereyealternate", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "vlong", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "vlongfringe", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "volaju", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "wisp", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "ziegler", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "zone", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}]} \ No newline at end of file diff --git a/Resources/Textures/Mob/human_hair.rsi/modern.png b/Resources/Textures/Mob/human_hair.rsi/modern.png new file mode 100644 index 0000000000..48148436ef Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/modern.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/mohawk.png b/Resources/Textures/Mob/human_hair.rsi/mohawk.png new file mode 100644 index 0000000000..daad7eb400 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/mohawk.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/mulder.png b/Resources/Textures/Mob/human_hair.rsi/mulder.png new file mode 100644 index 0000000000..9e7bf0b70d Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/mulder.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/nia.png b/Resources/Textures/Mob/human_hair.rsi/nia.png new file mode 100644 index 0000000000..b767aeb932 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/nia.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/nitori.png b/Resources/Textures/Mob/human_hair.rsi/nitori.png new file mode 100644 index 0000000000..0aab20e2aa Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/nitori.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/odango.png b/Resources/Textures/Mob/human_hair.rsi/odango.png new file mode 100644 index 0000000000..8c63074ec3 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/odango.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/ombre.png b/Resources/Textures/Mob/human_hair.rsi/ombre.png new file mode 100644 index 0000000000..0a29c9f471 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/ombre.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/oneshoulder.png b/Resources/Textures/Mob/human_hair.rsi/oneshoulder.png new file mode 100644 index 0000000000..0224a26c35 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/oneshoulder.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/oxton.png b/Resources/Textures/Mob/human_hair.rsi/oxton.png new file mode 100644 index 0000000000..26affcfdc9 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/oxton.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/parted.png b/Resources/Textures/Mob/human_hair.rsi/parted.png new file mode 100644 index 0000000000..bcce316b8c Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/parted.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/pixie.png b/Resources/Textures/Mob/human_hair.rsi/pixie.png new file mode 100644 index 0000000000..d2fc226a1c Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/pixie.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/pompadour.png b/Resources/Textures/Mob/human_hair.rsi/pompadour.png new file mode 100644 index 0000000000..e9bbce8843 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/pompadour.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/ponytail.png b/Resources/Textures/Mob/human_hair.rsi/ponytail.png new file mode 100644 index 0000000000..a3f0ce3723 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/ponytail.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/ponytail2.png b/Resources/Textures/Mob/human_hair.rsi/ponytail2.png new file mode 100644 index 0000000000..1694107e9c Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/ponytail2.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/ponytail3.png b/Resources/Textures/Mob/human_hair.rsi/ponytail3.png new file mode 100644 index 0000000000..002fb4d149 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/ponytail3.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/ponytail4.png b/Resources/Textures/Mob/human_hair.rsi/ponytail4.png new file mode 100644 index 0000000000..8aaa4ca74d Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/ponytail4.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/ponytail5.png b/Resources/Textures/Mob/human_hair.rsi/ponytail5.png new file mode 100644 index 0000000000..01517619e6 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/ponytail5.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/ponytail6.png b/Resources/Textures/Mob/human_hair.rsi/ponytail6.png new file mode 100644 index 0000000000..8babc38d79 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/ponytail6.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/ponytail7.png b/Resources/Textures/Mob/human_hair.rsi/ponytail7.png new file mode 100644 index 0000000000..0ba07ede46 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/ponytail7.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/ponytailf.png b/Resources/Textures/Mob/human_hair.rsi/ponytailf.png new file mode 100644 index 0000000000..c0a5be266a Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/ponytailf.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/poofy.png b/Resources/Textures/Mob/human_hair.rsi/poofy.png new file mode 100644 index 0000000000..14b16a509c Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/poofy.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/poofy2.png b/Resources/Textures/Mob/human_hair.rsi/poofy2.png new file mode 100644 index 0000000000..fb9b9070ee Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/poofy2.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/quiff.png b/Resources/Textures/Mob/human_hair.rsi/quiff.png new file mode 100644 index 0000000000..664816f1fb Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/quiff.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/ramona.png b/Resources/Textures/Mob/human_hair.rsi/ramona.png new file mode 100644 index 0000000000..e0e758a03e Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/ramona.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/reversemohawk.png b/Resources/Textures/Mob/human_hair.rsi/reversemohawk.png new file mode 100644 index 0000000000..00d179a53e Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/reversemohawk.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/ronin.png b/Resources/Textures/Mob/human_hair.rsi/ronin.png new file mode 100644 index 0000000000..f244ffa783 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/ronin.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/rows1.png b/Resources/Textures/Mob/human_hair.rsi/rows1.png new file mode 100644 index 0000000000..b272991aaa Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/rows1.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/rows2.png b/Resources/Textures/Mob/human_hair.rsi/rows2.png new file mode 100644 index 0000000000..f6990cbbed Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/rows2.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/rows3.png b/Resources/Textures/Mob/human_hair.rsi/rows3.png new file mode 100644 index 0000000000..c546a1c407 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/rows3.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/sargeant.png b/Resources/Textures/Mob/human_hair.rsi/sargeant.png new file mode 100644 index 0000000000..f40150553f Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/sargeant.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/scully.png b/Resources/Textures/Mob/human_hair.rsi/scully.png new file mode 100644 index 0000000000..cc75326c32 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/scully.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/shavedmohawk.png b/Resources/Textures/Mob/human_hair.rsi/shavedmohawk.png new file mode 100644 index 0000000000..6f7fd83e60 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/shavedmohawk.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/shavedpart.png b/Resources/Textures/Mob/human_hair.rsi/shavedpart.png new file mode 100644 index 0000000000..72dad8dcd1 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/shavedpart.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/short.png b/Resources/Textures/Mob/human_hair.rsi/short.png new file mode 100644 index 0000000000..9f730a6fd7 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/short.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/short2.png b/Resources/Textures/Mob/human_hair.rsi/short2.png new file mode 100644 index 0000000000..f2ce9e45e9 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/short2.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/short3.png b/Resources/Textures/Mob/human_hair.rsi/short3.png new file mode 100644 index 0000000000..d7c69538b1 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/short3.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/shortbangs.png b/Resources/Textures/Mob/human_hair.rsi/shortbangs.png new file mode 100644 index 0000000000..b9f9976490 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/shortbangs.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/shortbraid.png b/Resources/Textures/Mob/human_hair.rsi/shortbraid.png new file mode 100644 index 0000000000..6aeecb7c09 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/shortbraid.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/shortovereye.png b/Resources/Textures/Mob/human_hair.rsi/shortovereye.png new file mode 100644 index 0000000000..9251ef8a68 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/shortovereye.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/shoulderlen.png b/Resources/Textures/Mob/human_hair.rsi/shoulderlen.png new file mode 100644 index 0000000000..029bb69279 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/shoulderlen.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/sidepart.png b/Resources/Textures/Mob/human_hair.rsi/sidepart.png new file mode 100644 index 0000000000..622c2ee23a Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/sidepart.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/sideswipe.png b/Resources/Textures/Mob/human_hair.rsi/sideswipe.png new file mode 100644 index 0000000000..da43aa0dd5 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/sideswipe.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/skinhead.png b/Resources/Textures/Mob/human_hair.rsi/skinhead.png new file mode 100644 index 0000000000..d41090b6dd Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/skinhead.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/sleeze.png b/Resources/Textures/Mob/human_hair.rsi/sleeze.png new file mode 100644 index 0000000000..8b5505dbad Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/sleeze.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/smessy.png b/Resources/Textures/Mob/human_hair.rsi/smessy.png new file mode 100644 index 0000000000..25d5e49efd Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/smessy.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/spikey.png b/Resources/Textures/Mob/human_hair.rsi/spikey.png new file mode 100644 index 0000000000..46475174a5 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/spikey.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/spikyponytail.png b/Resources/Textures/Mob/human_hair.rsi/spikyponytail.png new file mode 100644 index 0000000000..c283e49468 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/spikyponytail.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/stail.png b/Resources/Textures/Mob/human_hair.rsi/stail.png new file mode 100644 index 0000000000..d6f5ce28b4 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/stail.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/stylo.png b/Resources/Textures/Mob/human_hair.rsi/stylo.png new file mode 100644 index 0000000000..e221a46e86 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/stylo.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/thefamilyman.png b/Resources/Textures/Mob/human_hair.rsi/thefamilyman.png new file mode 100644 index 0000000000..6e0de02ac3 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/thefamilyman.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/thinning.png b/Resources/Textures/Mob/human_hair.rsi/thinning.png new file mode 100644 index 0000000000..2819475f8a Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/thinning.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/thinningfront.png b/Resources/Textures/Mob/human_hair.rsi/thinningfront.png new file mode 100644 index 0000000000..53ab7b8d89 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/thinningfront.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/thinningrear.png b/Resources/Textures/Mob/human_hair.rsi/thinningrear.png new file mode 100644 index 0000000000..dd40f75e87 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/thinningrear.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/topknot.png b/Resources/Textures/Mob/human_hair.rsi/topknot.png new file mode 100644 index 0000000000..d75299912e Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/topknot.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/toriyama.png b/Resources/Textures/Mob/human_hair.rsi/toriyama.png new file mode 100644 index 0000000000..d922272919 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/toriyama.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/toriyama2.png b/Resources/Textures/Mob/human_hair.rsi/toriyama2.png new file mode 100644 index 0000000000..1363ff73fc Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/toriyama2.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/tressshoulder.png b/Resources/Textures/Mob/human_hair.rsi/tressshoulder.png new file mode 100644 index 0000000000..60e92702f7 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/tressshoulder.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/undercut.png b/Resources/Textures/Mob/human_hair.rsi/undercut.png new file mode 100644 index 0000000000..515c902f26 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/undercut.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/unkept.png b/Resources/Textures/Mob/human_hair.rsi/unkept.png new file mode 100644 index 0000000000..2936f40214 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/unkept.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/updo.png b/Resources/Textures/Mob/human_hair.rsi/updo.png new file mode 100644 index 0000000000..6253390a6d Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/updo.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/veryshortovereye.png b/Resources/Textures/Mob/human_hair.rsi/veryshortovereye.png new file mode 100644 index 0000000000..7a4a136161 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/veryshortovereye.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/veryshortovereyealternate.png b/Resources/Textures/Mob/human_hair.rsi/veryshortovereyealternate.png new file mode 100644 index 0000000000..b166fa1580 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/veryshortovereyealternate.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/vlong.png b/Resources/Textures/Mob/human_hair.rsi/vlong.png new file mode 100644 index 0000000000..86631fba6f Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/vlong.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/vlongfringe.png b/Resources/Textures/Mob/human_hair.rsi/vlongfringe.png new file mode 100644 index 0000000000..9bd8f4c096 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/vlongfringe.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/volaju.png b/Resources/Textures/Mob/human_hair.rsi/volaju.png new file mode 100644 index 0000000000..a905e8edee Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/volaju.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/wisp.png b/Resources/Textures/Mob/human_hair.rsi/wisp.png new file mode 100644 index 0000000000..ddacb26468 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/wisp.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/ziegler.png b/Resources/Textures/Mob/human_hair.rsi/ziegler.png new file mode 100644 index 0000000000..0702c72a4a Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/ziegler.png differ diff --git a/Resources/Textures/Mob/human_hair.rsi/zone.png b/Resources/Textures/Mob/human_hair.rsi/zone.png new file mode 100644 index 0000000000..ce4d8ac354 Binary files /dev/null and b/Resources/Textures/Mob/human_hair.rsi/zone.png differ