diff --git a/Content.Client/_Impstation/Thaven/Eui/MoodContainer.xaml b/Content.Client/_Impstation/Thaven/Eui/MoodContainer.xaml
new file mode 100644
index 0000000000..56b4791f42
--- /dev/null
+++ b/Content.Client/_Impstation/Thaven/Eui/MoodContainer.xaml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Content.Client/_Impstation/Thaven/Eui/MoodContainer.xaml.cs b/Content.Client/_Impstation/Thaven/Eui/MoodContainer.xaml.cs
new file mode 100644
index 0000000000..200d7b9d12
--- /dev/null
+++ b/Content.Client/_Impstation/Thaven/Eui/MoodContainer.xaml.cs
@@ -0,0 +1,22 @@
+using Content.Shared._Impstation.Thaven;
+using Robust.Client.AutoGenerated;
+using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Utility;
+
+namespace Content.Client._Impstation.Thaven.Eui;
+
+[GenerateTypedNameReferences]
+public sealed partial class MoodContainer : BoxContainer
+{
+ public MoodContainer(ThavenMood? mood = null)
+ {
+ RobustXamlLoader.Load(this);
+
+ if (mood != null)
+ {
+ ThavenMoodTitle.Text = mood.GetLocName();
+ ThavenMoodContent.TextRope = new Rope.Leaf(mood.GetLocDesc());
+ }
+ }
+}
diff --git a/Content.Client/_Impstation/Thaven/Eui/ThavenMoodUi.xaml b/Content.Client/_Impstation/Thaven/Eui/ThavenMoodUi.xaml
new file mode 100644
index 0000000000..5999790845
--- /dev/null
+++ b/Content.Client/_Impstation/Thaven/Eui/ThavenMoodUi.xaml
@@ -0,0 +1,22 @@
+
+
+ this shit does not layout properly unless I put the horizontal boxcontainer inside of a vertical one
+ ????
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Content.Client/_Impstation/Thaven/Eui/ThavenMoodUi.xaml.cs b/Content.Client/_Impstation/Thaven/Eui/ThavenMoodUi.xaml.cs
new file mode 100644
index 0000000000..eee6da6c0c
--- /dev/null
+++ b/Content.Client/_Impstation/Thaven/Eui/ThavenMoodUi.xaml.cs
@@ -0,0 +1,94 @@
+using Content.Client.UserInterface.Controls;
+using Content.Shared._Impstation.Thaven;
+using Robust.Client.AutoGenerated;
+using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Utility;
+
+namespace Content.Client._Impstation.Thaven.Eui;
+
+[GenerateTypedNameReferences]
+public sealed partial class ThavenMoodUi : FancyWindow
+{
+ private List _moods = new();
+
+ public ThavenMoodUi()
+ {
+ RobustXamlLoader.Load(this);
+ NewMoodButton.OnPressed += _ => AddNewMood();
+ }
+
+ private void AddNewMood()
+ {
+ MoodContainer.AddChild(new MoodContainer());
+ }
+
+ public List GetMoods()
+ {
+ var newMoods = new List();
+
+ foreach (var control in MoodContainer.Children)
+ {
+ if (control is not MoodContainer moodControl)
+ continue;
+
+ if (string.IsNullOrWhiteSpace(moodControl.ThavenMoodTitle.Text))
+ continue;
+
+ var moodText = Rope.Collapse(moodControl.ThavenMoodContent.TextRope).Trim();
+
+ if (string.IsNullOrWhiteSpace(moodText))
+ continue;
+
+ var mood = new ThavenMood()
+ {
+ MoodName = moodControl.ThavenMoodTitle.Text,
+ MoodDesc = moodText,
+ };
+
+ newMoods.Add(mood);
+ }
+
+ return newMoods;
+ }
+
+ private void MoveUp(int index)
+ {
+ if (index <= 0)
+ return;
+
+ (_moods[index], _moods[index - 1]) = (_moods[index - 1], _moods[index]);
+ SetMoods(_moods);
+ }
+
+ private void MoveDown(int index)
+ {
+ if (index >= _moods.Count - 1)
+ return;
+
+ (_moods[index], _moods[index + 1]) = (_moods[index + 1], _moods[index]);
+ SetMoods(_moods);
+ }
+
+ private void Delete(int index)
+ {
+ _moods.RemoveAt(index);
+
+ SetMoods(_moods);
+ }
+
+ public void SetMoods(List moods)
+ {
+ _moods = moods;
+ MoodContainer.RemoveAllChildren();
+ for (var i = 0; i < moods.Count; i++)
+ {
+ var index = i; // Copy for the closure
+ var mood = moods[i];
+ var moodControl = new MoodContainer(mood);
+ moodControl.MoveUp.OnPressed += _ => MoveUp(index);
+ moodControl.MoveDown.OnPressed += _ => MoveDown(index);
+ moodControl.Delete.OnPressed += _ => Delete(index);
+ MoodContainer.AddChild(moodControl);
+ }
+ }
+}
diff --git a/Content.Client/_Impstation/Thaven/Eui/ThavenMoodsEui.cs b/Content.Client/_Impstation/Thaven/Eui/ThavenMoodsEui.cs
new file mode 100644
index 0000000000..a6a8b05ee9
--- /dev/null
+++ b/Content.Client/_Impstation/Thaven/Eui/ThavenMoodsEui.cs
@@ -0,0 +1,48 @@
+using Content.Client.Eui;
+using Content.Shared.Eui;
+using Content.Shared._Impstation.Thaven;
+
+namespace Content.Client._Impstation.Thaven.Eui;
+
+public sealed class ThavenMoodsEui : BaseEui
+{
+ private readonly EntityManager _entityManager;
+
+ private ThavenMoodUi _thavenMoodUi;
+ private NetEntity _target;
+
+ public ThavenMoodsEui()
+ {
+ _entityManager = IoCManager.Resolve();
+
+ _thavenMoodUi = new ThavenMoodUi();
+ _thavenMoodUi.SaveButton.OnPressed += _ => SaveMoods();
+ }
+
+ private void SaveMoods()
+ {
+ var newMoods = _thavenMoodUi.GetMoods();
+ SendMessage(new ThavenMoodsSaveMessage(newMoods, _target));
+ _thavenMoodUi.SetMoods(newMoods);
+ }
+
+ public override void Opened()
+ {
+ _thavenMoodUi.OpenCentered();
+ }
+
+ public override void HandleState(EuiStateBase state)
+ {
+ if (state is not ThavenMoodsEuiState s)
+ return;
+
+ _target = s.Target;
+ _thavenMoodUi.SetMoods(s.Moods);
+ }
+
+ public override void Closed()
+ {
+ base.Closed();
+ _thavenMoodUi.Close();
+ }
+}
diff --git a/Content.Client/_Impstation/Thaven/MoodDisplay.xaml b/Content.Client/_Impstation/Thaven/MoodDisplay.xaml
new file mode 100644
index 0000000000..3be9bf9c41
--- /dev/null
+++ b/Content.Client/_Impstation/Thaven/MoodDisplay.xaml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
diff --git a/Content.Client/_Impstation/Thaven/MoodDisplay.xaml.cs b/Content.Client/_Impstation/Thaven/MoodDisplay.xaml.cs
new file mode 100644
index 0000000000..1d2a8cffb2
--- /dev/null
+++ b/Content.Client/_Impstation/Thaven/MoodDisplay.xaml.cs
@@ -0,0 +1,36 @@
+using System.Linq;
+using Content.Client.Chat.Managers;
+using Content.Client.Message;
+using Content.Shared._Impstation.Thaven;
+using Robust.Client.AutoGenerated;
+using Robust.Client.UserInterface;
+using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Utility;
+
+namespace Content.Client._Impstation.Thaven;
+
+[GenerateTypedNameReferences]
+public sealed partial class MoodDisplay : Control
+{
+ [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+ [Dependency] private readonly IChatManager _chatManager = default!;
+ [Dependency] private readonly EntityManager _entityManager = default!;
+
+ private string GetSharedString()
+ {
+ return $"[italic][font size=10][color=gray]{Loc.GetString("moods-ui-shared-mood")}[/color][/font][/italic]";
+ }
+
+ public MoodDisplay(ThavenMood mood, bool shared)
+ {
+ RobustXamlLoader.Load(this);
+ IoCManager.InjectDependencies(this);
+
+ if (shared)
+ MoodNameLabel.SetMarkup($"{mood.GetLocName()} {GetSharedString()}");
+ else
+ MoodNameLabel.SetMarkup(mood.GetLocName());
+ MoodDescLabel.SetMarkup(mood.GetLocDesc());
+ }
+}
diff --git a/Content.Client/_Impstation/Thaven/ThavenMoodSystem.cs b/Content.Client/_Impstation/Thaven/ThavenMoodSystem.cs
new file mode 100644
index 0000000000..3bde3c8f15
--- /dev/null
+++ b/Content.Client/_Impstation/Thaven/ThavenMoodSystem.cs
@@ -0,0 +1,7 @@
+using Content.Shared._Impstation.Thaven;
+
+namespace Content.Client._Impstation.Thaven;
+
+public sealed partial class ThavenMoodSystem : SharedThavenMoodSystem
+{
+}
diff --git a/Content.Client/_Impstation/Thaven/ThavenMoodsBoundUserInterface.cs b/Content.Client/_Impstation/Thaven/ThavenMoodsBoundUserInterface.cs
new file mode 100644
index 0000000000..a80f9583c1
--- /dev/null
+++ b/Content.Client/_Impstation/Thaven/ThavenMoodsBoundUserInterface.cs
@@ -0,0 +1,41 @@
+using Content.Client._Impstation.Thaven;
+using Content.Shared._Impstation.Thaven;
+using Content.Shared._Impstation.Thaven.Components;
+using JetBrains.Annotations;
+using Robust.Client.UserInterface;
+
+namespace Content.Client._Impstation.Thaven;
+
+[UsedImplicitly]
+public sealed class ThavenMoodsBoundUserInterface : BoundUserInterface
+{
+ [ViewVariables]
+ private ThavenMoodsMenu? _menu;
+ private EntityUid _owner;
+ private List? _moods;
+ private List? _sharedMoods;
+
+ public ThavenMoodsBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
+ {
+ _owner = owner;
+ }
+
+ protected override void Open()
+ {
+ base.Open();
+
+ _menu = this.CreateWindow();
+ }
+
+ protected override void UpdateState(BoundUserInterfaceState state)
+ {
+ base.UpdateState(state);
+
+ if (state is not ThavenMoodsBuiState msg)
+ return;
+
+ _moods = msg.Moods;
+ _sharedMoods = msg.SharedMoods;
+ _menu?.Update(_owner, msg);
+ }
+}
diff --git a/Content.Client/_Impstation/Thaven/ThavenMoodsMenu.xaml b/Content.Client/_Impstation/Thaven/ThavenMoodsMenu.xaml
new file mode 100644
index 0000000000..d48fa535db
--- /dev/null
+++ b/Content.Client/_Impstation/Thaven/ThavenMoodsMenu.xaml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Content.Client/_Impstation/Thaven/ThavenMoodsMenu.xaml.cs b/Content.Client/_Impstation/Thaven/ThavenMoodsMenu.xaml.cs
new file mode 100644
index 0000000000..18718151e7
--- /dev/null
+++ b/Content.Client/_Impstation/Thaven/ThavenMoodsMenu.xaml.cs
@@ -0,0 +1,27 @@
+using Content.Client.UserInterface.Controls;
+using Content.Shared._Impstation.Thaven.Components;
+using Robust.Client.AutoGenerated;
+using Robust.Client.UserInterface.XAML;
+
+namespace Content.Client._Impstation.Thaven;
+
+[GenerateTypedNameReferences]
+public sealed partial class ThavenMoodsMenu : FancyWindow
+{
+ public ThavenMoodsMenu()
+ {
+ RobustXamlLoader.Load(this);
+ IoCManager.InjectDependencies(this);
+ }
+
+ public void Update(EntityUid uid, ThavenMoodsBuiState state)
+ {
+ MoodDisplayContainer.Children.Clear();
+
+ foreach (var mood in state.SharedMoods)
+ MoodDisplayContainer.AddChild(new MoodDisplay(mood, true));
+
+ foreach (var mood in state.Moods)
+ MoodDisplayContainer.AddChild(new MoodDisplay(mood, false));
+ }
+}
diff --git a/Content.IntegrationTests/Tests/_Impstation/Thaven/MoodTests.cs b/Content.IntegrationTests/Tests/_Impstation/Thaven/MoodTests.cs
new file mode 100644
index 0000000000..b2a189b850
--- /dev/null
+++ b/Content.IntegrationTests/Tests/_Impstation/Thaven/MoodTests.cs
@@ -0,0 +1,96 @@
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using Content.IntegrationTests;
+using Content.Server._Impstation.Thaven;
+using Content.Shared.Dataset;
+using Content.Shared._Impstation.Thaven;
+using NUnit.Framework;
+using Robust.Shared.ContentPack;
+using Robust.Shared.GameObjects;
+using Robust.Shared.IoC;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization.Manager;
+
+namespace Content.IntegrationTests.Tests._Impstation.Thaven;
+
+[TestFixture, TestOf(typeof(ThavenMoodPrototype))]
+public sealed class ThavenMoodTests
+{
+ [TestPrototypes]
+ const string PROTOTYPES = @"
+- type: dataset
+ id: ThreeValueSet
+ values:
+ - One
+ - Two
+ - Three
+- type: thavenMood
+ id: DuplicateTest
+ moodName: DuplicateTest
+ moodDesc: DuplicateTest
+ allowDuplicateMoodVars: false
+ moodVars:
+ a: ThreeValueSet
+ b: ThreeValueSet
+ c: ThreeValueSet
+- type: thavenMood
+ id: DuplicateOverlapTest
+ moodName: DuplicateOverlapTest
+ moodDesc: DuplicateOverlapTest
+ allowDuplicateMoodVars: false
+ moodVars:
+ a: ThreeValueSet
+ b: ThreeValueSet
+ c: ThreeValueSet
+ d: ThreeValueSet
+ e: ThreeValueSet
+";
+
+ [Test]
+ [Repeat(10)]
+ public async Task TestDuplicatePrevention()
+ {
+ await using var pair = await PoolManager.GetServerClient();
+ var server = pair.Server;
+ await server.WaitIdleAsync();
+
+ var entMan = server.ResolveDependency();
+ var thavenSystem = entMan.System();
+ var protoMan = server.ResolveDependency();
+
+ var dataset = protoMan.Index("ThreeValueSet");
+ var moodProto = protoMan.Index("DuplicateTest");
+
+ var datasetSet = dataset.Values.ToHashSet();
+ var mood = thavenSystem.RollMood(moodProto);
+ var moodVarSet = mood.MoodVars.Values.ToHashSet();
+
+ Assert.That(moodVarSet, Is.EquivalentTo(datasetSet));
+
+ await pair.CleanReturnAsync();
+ }
+
+ [Test]
+ [Repeat(10)]
+ public async Task TestDuplicateOverlap()
+ {
+ await using var pair = await PoolManager.GetServerClient();
+ var server = pair.Server;
+
+ var entMan = server.ResolveDependency();
+ var thavenSystem = entMan.System();
+ var protoMan = server.ResolveDependency();
+
+ var dataset = protoMan.Index("ThreeValueSet");
+ var moodProto = protoMan.Index("DuplicateOverlapTest");
+
+ var datasetSet = dataset.Values.ToHashSet();
+ var mood = thavenSystem.RollMood(moodProto);
+ var moodVarSet = mood.MoodVars.Values.ToHashSet();
+
+ Assert.That(moodVarSet, Is.EquivalentTo(datasetSet));
+
+ await pair.CleanReturnAsync();
+ }
+}
diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.cs b/Content.Server/Administration/Systems/AdminVerbSystem.cs
index d9ccb730d0..3f3373ed2d 100644
--- a/Content.Server/Administration/Systems/AdminVerbSystem.cs
+++ b/Content.Server/Administration/Systems/AdminVerbSystem.cs
@@ -41,6 +41,8 @@ using Content.Shared.Silicons.Laws.Components;
using Robust.Server.Player;
using Robust.Shared.Physics.Components;
using static Content.Shared.Configurable.ConfigurationComponent;
+using Content.Shared._Impstation.Thaven.Components; // DeltaV
+using Content.Server._Impstation.Thaven; // DeltaV
namespace Content.Server.Administration.Systems
{
@@ -74,6 +76,7 @@ namespace Content.Server.Administration.Systems
[Dependency] private readonly AdminFrozenSystem _freeze = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly SiliconLawSystem _siliconLawSystem = default!;
+ [Dependency] private readonly ThavenMoodsSystem _moods = default!; // DeltaV
private readonly Dictionary> _openSolutionUis = new();
@@ -362,8 +365,29 @@ namespace Content.Server.Administration.Systems
Icon = new SpriteSpecifier.Rsi(new ResPath("/Textures/Interface/Actions/actions_borg.rsi"), "state-laws"),
});
}
+
+ // Begin DeltaV Additions - thaven moods
+ if (TryComp(args.Target, out var moods))
+ {
+ args.Verbs.Add(new Verb()
+ {
+ Text = Loc.GetString("thaven-moods-ui-verb"),
+ Category = VerbCategory.Admin,
+ Act = () =>
+ {
+ var ui = new ThavenMoodsEui(_moods, EntityManager, _adminManager);
+ if (!_playerManager.TryGetSessionByEntity(args.User, out var session))
+ return;
+
+ _euiManager.OpenEui(ui, session);
+ ui.UpdateMoods(moods, args.Target);
+ },
+ Icon = new SpriteSpecifier.Rsi(new ResPath("/Textures/Interface/Actions/actions_borg.rsi"), "state-laws"),
+ });
+ }
}
}
+ // End DeltaV Additions
private void AddDebugVerbs(GetVerbsEvent args)
{
diff --git a/Content.Server/StationEvents/Components/ThavenMoodUpsetRuleComponent.cs b/Content.Server/StationEvents/Components/ThavenMoodUpsetRuleComponent.cs
new file mode 100644
index 0000000000..dca0b3db67
--- /dev/null
+++ b/Content.Server/StationEvents/Components/ThavenMoodUpsetRuleComponent.cs
@@ -0,0 +1,6 @@
+using Content.Server._DV.StationEvents.Events;
+
+namespace Content.Server._DV.StationEvents.Components;
+
+[RegisterComponent, Access(typeof(ThavenMoodUpset))]
+public sealed partial class ThavenMoodUpsetRuleComponent : Component;
diff --git a/Content.Server/StationEvents/Events/ThavenMoodUpset.cs b/Content.Server/StationEvents/Events/ThavenMoodUpset.cs
new file mode 100644
index 0000000000..8e988875cf
--- /dev/null
+++ b/Content.Server/StationEvents/Events/ThavenMoodUpset.cs
@@ -0,0 +1,23 @@
+using Content.Server._DV.StationEvents.Components;
+using Content.Server._Impstation.Thaven;
+using Content.Server.StationEvents.Events;
+using Content.Shared._Impstation.Thaven.Components;
+using Content.Shared.GameTicking.Components;
+
+namespace Content.Server._DV.StationEvents.Events;
+
+public sealed class ThavenMoodUpset : StationEventSystem
+{
+ [Dependency] private readonly ThavenMoodsSystem _thavenMoods = default!;
+
+ protected override void Started(EntityUid uid, ThavenMoodUpsetRuleComponent comp, GameRuleComponent gameRule, GameRuleStartedEvent args)
+ {
+ base.Started(uid, comp, gameRule, args);
+
+ var thavens = EntityQueryEnumerator();
+ while (thavens.MoveNext(out var thavenUid, out var thavenComp))
+ {
+ _thavenMoods.AddWildcardMood((thavenUid, thavenComp));
+ }
+ }
+}
diff --git a/Content.Server/_Impstation/Speech/Components/NoContractionsAccentComponent.cs b/Content.Server/_Impstation/Speech/Components/NoContractionsAccentComponent.cs
new file mode 100644
index 0000000000..c3fbdc9b8d
--- /dev/null
+++ b/Content.Server/_Impstation/Speech/Components/NoContractionsAccentComponent.cs
@@ -0,0 +1,10 @@
+namespace Content.Server.Speech.Components;
+
+///
+/// Removes contractions (e.g. "can't," "don't," etc.)
+///
+[RegisterComponent]
+public sealed partial class NoContractionsAccentComponent : Component
+{
+
+}
diff --git a/Content.Server/_Impstation/Speech/EntitySystems/NoContractionsAccentSystem.cs b/Content.Server/_Impstation/Speech/EntitySystems/NoContractionsAccentSystem.cs
new file mode 100644
index 0000000000..2dab93d7ef
--- /dev/null
+++ b/Content.Server/_Impstation/Speech/EntitySystems/NoContractionsAccentSystem.cs
@@ -0,0 +1,26 @@
+using System.Text.RegularExpressions;
+using Content.Server.Speech.Components;
+
+namespace Content.Server.Speech.EntitySystems;
+
+public sealed class NoContractionsAccentComponentAccentSystem : EntitySystem
+{
+ private static readonly Regex RegexLowerS = new("s+");
+ private static readonly Regex RegexUpperS = new("S+");
+ private static readonly Regex RegexInternalX = new(@"(\w)x");
+ private static readonly Regex RegexLowerEndX = new(@"\bx([\-|r|R]|\b)");
+ private static readonly Regex RegexUpperEndX = new(@"\bX([\-|r|R]|\b)");
+
+ public override void Initialize()
+ {
+ base.Initialize();
+ SubscribeLocalEvent(OnAccent);
+ }
+
+ private void OnAccent(EntityUid uid, NoContractionsAccentComponent component, AccentGetEvent args)
+ {
+ var message = args.Message;
+
+ args.Message = message;
+ }
+}
diff --git a/Content.Server/_Impstation/Thaven/ThavenMoodSystem.cs b/Content.Server/_Impstation/Thaven/ThavenMoodSystem.cs
new file mode 100644
index 0000000000..de7307f063
--- /dev/null
+++ b/Content.Server/_Impstation/Thaven/ThavenMoodSystem.cs
@@ -0,0 +1,373 @@
+using System.Diagnostics.CodeAnalysis;
+using System.Linq;
+using Content.Server.Actions;
+using Content.Server.Chat.Managers;
+using Content.Shared.CCVar;
+using Content.Shared.Chat;
+using Content.Shared.Dataset;
+using Content.Shared.Emag.Systems;
+using Content.Shared.GameTicking;
+using Content.Shared._Impstation.Thaven;
+using Content.Shared._Impstation.Thaven.Components;
+using Content.Shared.Random;
+using Content.Shared.Random.Helpers;
+using Robust.Server.GameObjects;
+using Robust.Shared.Configuration;
+using Robust.Shared.Player;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Random;
+using Content.Shared._Impstation.CCVar;
+using Robust.Shared.Audio.Systems;
+
+namespace Content.Server._Impstation.Thaven;
+
+public sealed partial class ThavenMoodsSystem : SharedThavenMoodSystem
+{
+ [Dependency] private readonly IPrototypeManager _proto = default!;
+ [Dependency] private readonly IRobustRandom _random = default!;
+ [Dependency] private readonly ActionsSystem _actions = default!;
+ [Dependency] private readonly IConfigurationManager _config = default!;
+ [Dependency] private readonly UserInterfaceSystem _bui = default!;
+ [Dependency] private readonly IChatManager _chatManager = default!;
+ [Dependency] private readonly SharedAudioSystem _audio = default!;
+
+ public IReadOnlyList SharedMoods => _sharedMoods.AsReadOnly();
+ private readonly List _sharedMoods = new();
+
+
+ [ValidatePrototypeId]
+ private const string SharedDataset = "ThavenMoodsShared";
+
+ [ValidatePrototypeId]
+ private const string YesAndDataset = "ThavenMoodsYesAnd";
+
+ [ValidatePrototypeId]
+ private const string NoAndDataset = "ThavenMoodsNoAnd";
+
+ [ValidatePrototypeId]
+ private const string WildcardDataset = "ThavenMoodsWildcard";
+
+ [ValidatePrototypeId]
+ private const string ActionViewMoods = "ActionViewMoods";
+
+ [ValidatePrototypeId]
+ private const string RandomThavenMoodDataset = "RandomThavenMoodDataset";
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ NewSharedMoods();
+
+ SubscribeLocalEvent(OnThavenMoodInit);
+ SubscribeLocalEvent(OnThavenMoodShutdown);
+ SubscribeLocalEvent(OnToggleMoodsScreen);
+ SubscribeLocalEvent(OnBoundUIOpened);
+ SubscribeLocalEvent((_) => NewSharedMoods());
+ }
+
+ private void NewSharedMoods()
+ {
+ _sharedMoods.Clear();
+ for (int i = 0; i < _config.GetCVar(ImpCCVars.ThavenSharedMoodCount); i++)
+ TryAddSharedMood();
+ }
+
+ public bool TryAddSharedMood(ThavenMood? mood = null, bool checkConflicts = true)
+ {
+ if (mood == null)
+ {
+ if (TryPick(SharedDataset, out var moodProto, _sharedMoods))
+ {
+ mood = RollMood(moodProto);
+ checkConflicts = false; // TryPick has cleared this mood already
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ if (checkConflicts && (GetConflicts(_sharedMoods).Contains(mood.ProtoId) || GetMoodProtoSet(_sharedMoods).Overlaps(mood.Conflicts)))
+ return false;
+
+ _sharedMoods.Add(mood);
+ var enumerator = EntityManager.EntityQueryEnumerator();
+ while (enumerator.MoveNext(out var ent, out var comp))
+ {
+ if (!comp.FollowsSharedMoods)
+ continue;
+
+ NotifyMoodChange((ent, comp));
+ }
+
+ return true;
+ }
+
+ private void OnBoundUIOpened(EntityUid uid, ThavenMoodsComponent component, BoundUIOpenedEvent args)
+ {
+ UpdateBUIState(uid, component);
+ }
+
+ private void OnToggleMoodsScreen(EntityUid uid, ThavenMoodsComponent component, ToggleMoodsScreenEvent args)
+ {
+ if (args.Handled || !TryComp(uid, out var actor))
+ return;
+ args.Handled = true;
+
+ _bui.TryToggleUi(uid, ThavenMoodsUiKey.Key, actor.PlayerSession);
+ }
+
+ private bool TryPick(string datasetProto, [NotNullWhen(true)] out ThavenMoodPrototype? proto, IEnumerable? currentMoods = null, HashSet? conflicts = null)
+ {
+ var dataset = _proto.Index(datasetProto);
+ var choices = dataset.Values.ToList();
+
+ if (currentMoods == null)
+ currentMoods = new HashSet();
+ if (conflicts == null)
+ conflicts = GetConflicts(currentMoods);
+
+ var currentMoodProtos = GetMoodProtoSet(currentMoods);
+
+ while (choices.Count > 0)
+ {
+ var moodId = _random.PickAndTake(choices);
+ if (conflicts.Contains(moodId))
+ continue; // Skip proto if an existing mood conflicts with it
+
+ var moodProto = _proto.Index(moodId);
+ if (moodProto.Conflicts.Overlaps(currentMoodProtos))
+ continue; // Skip proto if it conflicts with an existing mood
+
+ proto = moodProto;
+ return true;
+ }
+
+ proto = null;
+ return false;
+ }
+
+ public void NotifyMoodChange(Entity ent)
+ {
+ if (!TryComp(ent.Owner, out var actor))
+ return;
+
+ if (ent.Comp.MoodsChangedSound != null)
+ _audio.PlayGlobal(ent.Comp.MoodsChangedSound, actor.PlayerSession);
+
+ var msg = Loc.GetString("thaven-moods-update-notify");
+ var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", msg));
+ _chatManager.ChatMessageToOne(ChatChannel.Server, msg, wrappedMessage, default, false, actor.PlayerSession.Channel, colorOverride: Color.Orange);
+ }
+
+ public void UpdateBUIState(EntityUid uid, ThavenMoodsComponent? comp = null)
+ {
+ if (!Resolve(uid, ref comp))
+ return;
+
+ var state = new ThavenMoodsBuiState(comp.Moods, comp.FollowsSharedMoods ? _sharedMoods : []);
+ _bui.SetUiState(uid, ThavenMoodsUiKey.Key, state);
+ }
+
+ public void AddMood(EntityUid uid, ThavenMood mood, ThavenMoodsComponent? comp = null, bool notify = true)
+ {
+ if (!Resolve(uid, ref comp))
+ return;
+
+ comp.Moods.Add(mood);
+
+ if (notify)
+ NotifyMoodChange((uid, comp));
+
+ UpdateBUIState(uid, comp);
+ }
+
+ ///
+ /// Creates a ThavenMood instance from the given ThavenMoodPrototype, and rolls
+ /// its mood vars.
+ ///
+ public ThavenMood RollMood(ThavenMoodPrototype proto)
+ {
+ var mood = new ThavenMood()
+ {
+ ProtoId = proto.ID,
+ MoodName = proto.MoodName,
+ MoodDesc = proto.MoodDesc,
+ Conflicts = proto.Conflicts,
+ };
+
+ var alreadyChosen = new HashSet();
+
+ foreach (var (name, datasetID) in proto.MoodVarDatasets)
+ {
+ var dataset = _proto.Index(datasetID);
+
+ if (proto.AllowDuplicateMoodVars)
+ {
+ mood.MoodVars.Add(name, _random.Pick(dataset));
+ continue;
+ }
+
+ var choices = dataset.Values.ToList();
+ var foundChoice = false;
+ while (choices.Count > 0)
+ {
+ var choice = _random.PickAndTake(choices);
+ if (alreadyChosen.Contains(choice))
+ continue;
+
+ mood.MoodVars.Add(name, choice);
+ alreadyChosen.Add(choice);
+ foundChoice = true;
+ break;
+ }
+
+ if (!foundChoice)
+ {
+ Log.Warning($"Ran out of choices for moodvar \"{name}\" in \"{proto.ID}\"! Picking a duplicate...");
+ mood.MoodVars.Add(name, _random.Pick(_proto.Index(dataset)));
+ }
+ }
+
+ return mood;
+ }
+
+ ///
+ /// Checks if the given mood prototype conflicts with the current moods, and
+ /// adds the mood if it does not.
+ ///
+ public bool TryAddMood(EntityUid uid, ThavenMoodPrototype moodProto, ThavenMoodsComponent? comp = null, bool allowConflict = false, bool notify = true)
+ {
+ if (!Resolve(uid, ref comp))
+ return false;
+
+ if (!allowConflict && GetConflicts(uid, comp).Contains(moodProto.ID))
+ return false;
+
+ AddMood(uid, RollMood(moodProto), comp, notify);
+ return true;
+ }
+
+ public bool TryAddRandomMood(EntityUid uid, string datasetProto, ThavenMoodsComponent? comp = null)
+ {
+ if (!Resolve(uid, ref comp))
+ return false;
+
+ if (TryPick(datasetProto, out var moodProto, GetActiveMoods(uid, comp)))
+ {
+ AddMood(uid, RollMood(moodProto), comp);
+ return true;
+ }
+
+ return false;
+ }
+
+ public bool TryAddRandomMood(EntityUid uid, ThavenMoodsComponent? comp = null)
+ {
+ if (!Resolve(uid, ref comp))
+ return false;
+
+ var datasetProto = _proto.Index(RandomThavenMoodDataset).Pick();
+
+ return TryAddRandomMood(uid, datasetProto, comp);
+ }
+
+ public void SetMoods(EntityUid uid, IEnumerable moods, ThavenMoodsComponent? comp = null, bool notify = true)
+ {
+ if (!Resolve(uid, ref comp))
+ return;
+
+ comp.Moods = moods.ToList();
+ if (notify)
+ NotifyMoodChange((uid, comp));
+
+ UpdateBUIState(uid, comp);
+ }
+
+ public HashSet GetConflicts(IEnumerable moods)
+ {
+ var conflicts = new HashSet();
+
+ foreach (var mood in moods)
+ {
+ conflicts.Add(mood.ProtoId); // Specific moods shouldn't be added twice
+ conflicts.UnionWith(mood.Conflicts);
+ }
+
+ return conflicts;
+ }
+
+ public HashSet GetConflicts(EntityUid uid, ThavenMoodsComponent? moods = null)
+ {
+ // TODO: Should probably cache this when moods get updated
+
+ if (!Resolve(uid, ref moods))
+ return new();
+
+ var conflicts = GetConflicts(GetActiveMoods(uid, moods));
+
+ return conflicts;
+ }
+
+ public HashSet GetMoodProtoSet(IEnumerable moods)
+ {
+ var moodProtos = new HashSet();
+ foreach (var mood in moods)
+ if (!string.IsNullOrEmpty(mood.ProtoId))
+ moodProtos.Add(mood.ProtoId);
+ return moodProtos;
+ }
+
+ ///
+ /// Return a list of the moods that are affecting this entity.
+ ///
+ public List GetActiveMoods(EntityUid uid, ThavenMoodsComponent? comp = null, bool includeShared = true)
+ {
+ if (!Resolve(uid, ref comp))
+ return [];
+
+ if (includeShared && comp.FollowsSharedMoods)
+ {
+ return new List(SharedMoods.Concat(comp.Moods));
+ }
+ else
+ {
+ return comp.Moods;
+ }
+ }
+
+ private void OnThavenMoodInit(EntityUid uid, ThavenMoodsComponent comp, ComponentStartup args)
+ {
+ if (comp.LifeStage != ComponentLifeStage.Starting)
+ return;
+
+ // "Yes, and" moods
+ if (TryPick(YesAndDataset, out var mood, GetActiveMoods(uid, comp)))
+ TryAddMood(uid, mood, comp, true, false);
+
+ // "No, and" moods
+ if (TryPick(NoAndDataset, out mood, GetActiveMoods(uid, comp)))
+ TryAddMood(uid, mood, comp, true, false);
+
+ comp.Action = _actions.AddAction(uid, ActionViewMoods);
+ }
+
+ private void OnThavenMoodShutdown(EntityUid uid, ThavenMoodsComponent comp, ComponentShutdown args)
+ {
+ _actions.RemoveAction(uid, comp.Action);
+ }
+
+ protected override void OnEmagged(EntityUid uid, ThavenMoodsComponent comp, ref GotEmaggedEvent args)
+ {
+ base.OnEmagged(uid, comp, ref args);
+ TryAddRandomMood(uid, WildcardDataset, comp);
+ }
+
+ // Begin DeltaV: thaven mood upsets
+ public void AddWildcardMood(Entity ent)
+ {
+ TryAddRandomMood(ent.Owner, WildcardDataset, ent.Comp);
+ }
+ // End DeltaV: thaven mood upsets
+}
diff --git a/Content.Server/_Impstation/Thaven/ThavenMoodsEui.cs b/Content.Server/_Impstation/Thaven/ThavenMoodsEui.cs
new file mode 100644
index 0000000000..2ff3b840dd
--- /dev/null
+++ b/Content.Server/_Impstation/Thaven/ThavenMoodsEui.cs
@@ -0,0 +1,73 @@
+using System.Linq;
+using Content.Server.Administration.Managers;
+using Content.Server.EUI;
+using Content.Shared.Administration;
+using Content.Shared.Eui;
+using Content.Shared._Impstation.Thaven;
+using Content.Shared._Impstation.Thaven.Components;
+
+namespace Content.Server._Impstation.Thaven;
+
+public sealed class ThavenMoodsEui : BaseEui
+{
+ private readonly ThavenMoodsSystem _thavenMoodsSystem;
+ private readonly EntityManager _entityManager;
+ private readonly IAdminManager _adminManager;
+
+ private List _moods = new();
+ private List _sharedMoods = new();
+ private ISawmill _sawmill = default!;
+ private EntityUid _target;
+
+ public ThavenMoodsEui(ThavenMoodsSystem thavenMoodsSystem, EntityManager entityManager, IAdminManager manager)
+ {
+ _thavenMoodsSystem = thavenMoodsSystem;
+ _entityManager = entityManager;
+ _adminManager = manager;
+ _sawmill = Logger.GetSawmill("thaven-moods-eui");
+ }
+
+ public override EuiStateBase GetNewState()
+ {
+ return new ThavenMoodsEuiState(_moods, _entityManager.GetNetEntity(_target));
+ }
+
+ public void UpdateMoods(ThavenMoodsComponent? comp, EntityUid player)
+ {
+ if (!IsAllowed())
+ return;
+
+ var moods = _thavenMoodsSystem.GetActiveMoods(player, comp, false);
+ _target = player;
+ _moods = moods;
+ _sharedMoods = _thavenMoodsSystem.SharedMoods.ToList();
+ StateDirty();
+ }
+
+ public override void HandleMessage(EuiMessageBase msg)
+ {
+ base.HandleMessage(msg);
+
+ if (msg is not ThavenMoodsSaveMessage message)
+ return;
+
+ if (!IsAllowed())
+ return;
+
+ var player = _entityManager.GetEntity(message.Target);
+
+ _thavenMoodsSystem.SetMoods(player, message.Moods);
+ }
+
+ private bool IsAllowed()
+ {
+ var adminData = _adminManager.GetAdminData(Player);
+ if (adminData == null || !adminData.HasFlag(AdminFlags.Admin))
+ {
+ _sawmill.Warning($"Player {Player.UserId} tried to open / use thaven moods UI without permission.");
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/Content.Shared/_Impstation/CCVar/ImpCCVars.cs b/Content.Shared/_Impstation/CCVar/ImpCCVars.cs
new file mode 100644
index 0000000000..34f307dabf
--- /dev/null
+++ b/Content.Shared/_Impstation/CCVar/ImpCCVars.cs
@@ -0,0 +1,15 @@
+using Robust.Shared;
+using Robust.Shared.Configuration;
+
+namespace Content.Shared._Impstation.CCVar;
+
+// ReSharper disable once InconsistentNaming
+[CVarDefs]
+public sealed class ImpCCVars : CVars
+{
+ ///
+ /// The number of shared moods to give thaven by default.
+ ///
+ public static readonly CVarDef ThavenSharedMoodCount =
+ CVarDef.Create("thaven.shared_mood_count", 1, CVar.SERVERONLY);
+}
diff --git a/Content.Shared/_Impstation/Thaven/SharedThavenMoodSystem.cs b/Content.Shared/_Impstation/Thaven/SharedThavenMoodSystem.cs
new file mode 100644
index 0000000000..03935a480e
--- /dev/null
+++ b/Content.Shared/_Impstation/Thaven/SharedThavenMoodSystem.cs
@@ -0,0 +1,18 @@
+using Content.Shared.Emag.Systems;
+using Content.Shared._Impstation.Thaven.Components;
+
+namespace Content.Shared._Impstation.Thaven;
+
+public abstract class SharedThavenMoodSystem : EntitySystem
+{
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ // SubscribeLocalEvent(OnEmagged); DeltaV: no emagging thavens
+ }
+ protected virtual void OnEmagged(EntityUid uid, ThavenMoodsComponent comp, ref GotEmaggedEvent args)
+ {
+ args.Handled = true;
+ }
+}
diff --git a/Content.Shared/_Impstation/Thaven/ThavenMoodBoundComponent.cs b/Content.Shared/_Impstation/Thaven/ThavenMoodBoundComponent.cs
new file mode 100644
index 0000000000..2e4c0f4624
--- /dev/null
+++ b/Content.Shared/_Impstation/Thaven/ThavenMoodBoundComponent.cs
@@ -0,0 +1,49 @@
+using Content.Shared.Actions;
+using Robust.Shared.Audio;
+using Robust.Shared.GameStates;
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._Impstation.Thaven.Components;
+
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+[Access(typeof(SharedThavenMoodSystem))]
+public sealed partial class ThavenMoodsComponent : Component
+{
+ [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
+ public bool FollowsSharedMoods = true;
+
+ [DataField, ViewVariables, AutoNetworkedField]
+ public List Moods = new();
+
+ [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
+ public bool CanBeEmagged = true;
+
+ [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
+ public SoundSpecifier? MoodsChangedSound = new SoundPathSpecifier("/Audio/_Impstation/Thaven/moods_changed.ogg");
+
+ [DataField(serverOnly: true), ViewVariables]
+ public EntityUid? Action;
+}
+
+public sealed partial class ToggleMoodsScreenEvent : InstantActionEvent
+{
+}
+
+[NetSerializable, Serializable]
+public enum ThavenMoodsUiKey : byte
+{
+ Key
+}
+
+[Serializable, NetSerializable]
+public sealed class ThavenMoodsBuiState : BoundUserInterfaceState
+{
+ public List Moods;
+ public List SharedMoods;
+
+ public ThavenMoodsBuiState(List moods, List sharedMoods)
+ {
+ Moods = moods;
+ SharedMoods = sharedMoods;
+ }
+}
diff --git a/Content.Shared/_Impstation/Thaven/ThavenMoodPrototype.cs b/Content.Shared/_Impstation/Thaven/ThavenMoodPrototype.cs
new file mode 100644
index 0000000000..fdf9dfac7b
--- /dev/null
+++ b/Content.Shared/_Impstation/Thaven/ThavenMoodPrototype.cs
@@ -0,0 +1,91 @@
+using System.Linq;
+using Content.Shared.Dataset;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set;
+
+namespace Content.Shared._Impstation.Thaven;
+
+[Virtual, DataDefinition]
+[Serializable, NetSerializable]
+public partial class ThavenMood
+{
+ [DataField(readOnly: true), ViewVariables(VVAccess.ReadOnly)]
+ public ProtoId ProtoId = string.Empty;
+
+ ///
+ /// A locale string of the mood name.
+ ///
+ [DataField(required: true), ViewVariables(VVAccess.ReadWrite)]
+ public string MoodName = string.Empty;
+
+ ///
+ /// A locale string of the mood description. Gets passed to
+ /// with .
+ ///
+ [DataField(required: true), ViewVariables(VVAccess.ReadWrite)]
+ public string MoodDesc = string.Empty;
+
+ [DataField(serverOnly: true, customTypeSerializer: typeof(PrototypeIdHashSetSerializer))]
+ [ViewVariables(VVAccess.ReadWrite)]
+ public HashSet Conflicts = new();
+
+ ///
+ /// Additional localized words for the , for things like random
+ /// verbs and nouns.
+ ///
+ [ViewVariables(VVAccess.ReadWrite)]
+ public Dictionary MoodVars = new();
+
+ public (string, object)[] GetLocArgs()
+ {
+ return MoodVars.Select(v => (v.Key, (object)v.Value)).ToArray();
+ }
+
+ public string GetLocName()
+ {
+ return Loc.GetString(MoodName, GetLocArgs());
+ }
+
+ public string GetLocDesc()
+ {
+ return Loc.GetString(MoodDesc, GetLocArgs());
+ }
+}
+
+[Prototype("thavenMood")]
+[Serializable, NetSerializable]
+public sealed partial class ThavenMoodPrototype : IPrototype
+{
+ ///
+ [IdDataField]
+ public string ID { get; private set; } = default!;
+
+ [DataField(required: true), ViewVariables(VVAccess.ReadWrite)]
+ public string MoodName = string.Empty;
+
+ [DataField(required: true), ViewVariables(VVAccess.ReadWrite)]
+ public string MoodDesc = string.Empty;
+
+ ///
+ /// A list of mood IDs that this mood will conflict with.
+ ///
+ [DataField("conflicts", customTypeSerializer: typeof(PrototypeIdHashSetSerializer))]
+ public HashSet Conflicts = new();
+
+ ///
+ /// Extra mood variables that will be randomly chosen and provided
+ /// to the call on .
+ ///
+ [DataField("moodVars", customTypeSerializer: typeof(PrototypeIdValueDictionarySerializer))]
+ public Dictionary MoodVarDatasets = new();
+
+ ///
+ /// If false, prevents the same variable from being rolled twice when rolling
+ /// mood variables for this mood. Does not prevent the same mood variable
+ /// from being present in other moods.
+ ///
+ [DataField("allowDuplicateMoodVars"), ViewVariables(VVAccess.ReadWrite)]
+ public bool AllowDuplicateMoodVars = false;
+}
diff --git a/Content.Shared/_Impstation/Thaven/ThavenMoodsEuiState.cs b/Content.Shared/_Impstation/Thaven/ThavenMoodsEuiState.cs
new file mode 100644
index 0000000000..7ac6de7992
--- /dev/null
+++ b/Content.Shared/_Impstation/Thaven/ThavenMoodsEuiState.cs
@@ -0,0 +1,29 @@
+using Content.Shared.Eui;
+using Robust.Shared.Serialization;
+
+namespace Content.Shared._Impstation.Thaven;
+
+[Serializable, NetSerializable]
+public sealed class ThavenMoodsEuiState : EuiStateBase
+{
+ public List Moods { get; }
+ public NetEntity Target { get; }
+ public ThavenMoodsEuiState(List moods, NetEntity target)
+ {
+ Moods = moods;
+ Target = target;
+ }
+}
+
+[Serializable, NetSerializable]
+public sealed class ThavenMoodsSaveMessage : EuiMessageBase
+{
+ public List Moods { get; }
+ public NetEntity Target { get; }
+
+ public ThavenMoodsSaveMessage(List moods, NetEntity target)
+ {
+ Moods = moods;
+ Target = target;
+ }
+}
diff --git a/Resources/Audio/_Impstation/Thaven/attributions.yml b/Resources/Audio/_Impstation/Thaven/attributions.yml
new file mode 100644
index 0000000000..4480342c18
--- /dev/null
+++ b/Resources/Audio/_Impstation/Thaven/attributions.yml
@@ -0,0 +1,4 @@
+- files: ["moods_changed.ogg"]
+ license: "CC-BY-SA-3.0"
+ copyright: "Created by widgetbeck"
+ source: "https://github.com/impstation/imp-station-14/pull/830"
diff --git a/Resources/Audio/_Impstation/Thaven/moods_changed.ogg b/Resources/Audio/_Impstation/Thaven/moods_changed.ogg
new file mode 100644
index 0000000000..d8e03e762d
Binary files /dev/null and b/Resources/Audio/_Impstation/Thaven/moods_changed.ogg differ
diff --git a/Resources/Locale/en-US/DeltaV/markings/thaven.ftl b/Resources/Locale/en-US/DeltaV/markings/thaven.ftl
new file mode 100644
index 0000000000..9a4f1c7805
--- /dev/null
+++ b/Resources/Locale/en-US/DeltaV/markings/thaven.ftl
@@ -0,0 +1,14 @@
+marking-ThavenCheekBarbels-cheek_barbels = Head
+marking-ThavenCheekBarbels = Thaven Head (Cheek Barbels)
+
+marking-ThavenEyebrowBarbels-eyebrow_barbels = Head
+marking-ThavenEyebrowBarbels = Thaven Head (Eyebrow Barbels)
+
+marking-ThavenUnderbellyFace-underbelly_face = Head
+marking-ThavenUnderbellyFace = Thaven Head (Underbelly Face)
+
+marking-ThavenUnderbellyTorso-underbelly_torso = Chest
+marking-ThavenUnderbellyTorso = Thaven Chest (Underbelly Torso)
+
+marking-ThavenCarpSpots-carp_spots = Chest
+marking-ThavenCarpSpots = Thaven Chest (Carp Spots)
diff --git a/Resources/Locale/en-US/_Impstation/accent/nocontractions.ftl b/Resources/Locale/en-US/_Impstation/accent/nocontractions.ftl
new file mode 100644
index 0000000000..f178460122
--- /dev/null
+++ b/Resources/Locale/en-US/_Impstation/accent/nocontractions.ftl
@@ -0,0 +1,407 @@
+accent-nocontractions-words-french = 'im
+accent-nocontractions-words-replace-french = 'im
+
+accent-nocontractions-words-1 = i'm
+accent-nocontractions-words-replace-1 = i am
+
+accent-nocontractions-words-2 = im
+accent-nocontractions-words-replace-2 = i am
+
+accent-nocontractions-words-3 = we're
+accent-nocontractions-words-replace-3 = we are
+
+accent-nocontractions-words-4 = she's
+accent-nocontractions-words-replace-4 = she is
+
+accent-nocontractions-words-5 = shes
+accent-nocontractions-words-replace-5 = she is
+
+accent-nocontractions-words-6 = she'd
+accent-nocontractions-words-replace-6 = she would
+
+accent-nocontractions-words-7 = don't
+accent-nocontractions-words-replace-7 = do not
+
+accent-nocontractions-words-8 = dont
+accent-nocontractions-words-replace-8 = do not
+
+accent-nocontractions-words-9 = didn't
+accent-nocontractions-words-replace-9 = did not
+
+accent-nocontractions-words-10 = didnt
+accent-nocontractions-words-replace-10 = did not
+
+accent-nocontractions-words-11 = isn't
+accent-nocontractions-words-replace-11 = is not
+
+accent-nocontractions-words-12 = isnt
+accent-nocontractions-words-replace-12 = is not
+
+accent-nocontractions-words-13 = wasn't
+accent-nocontractions-words-replace-13 = was not
+
+accent-nocontractions-words-14 = wasnt
+accent-nocontractions-words-replace-14 = was not
+
+accent-nocontractions-words-15 = aren't
+accent-nocontractions-words-replace-15 = are not
+
+accent-nocontractions-words-16 = arent
+accent-nocontractions-words-replace-16 = are not
+
+accent-nocontractions-words-17 = weren't
+accent-nocontractions-words-replace-17 = were not
+
+accent-nocontractions-words-18 = werent
+accent-nocontractions-words-replace-18 = were not
+
+accent-nocontractions-words-19 = hasn't
+accent-nocontractions-words-replace-19 = has not
+
+accent-nocontractions-words-20 = hasnt
+accent-nocontractions-words-replace-20 = has not
+
+accent-nocontractions-words-21 = haven't
+accent-nocontractions-words-replace-21 = have not
+
+accent-nocontractions-words-22 = havent
+accent-nocontractions-words-replace-22 = have not
+
+accent-nocontractions-words-23 = hadn't
+accent-nocontractions-words-replace-23 = had not
+
+accent-nocontractions-words-24 = hadnt
+accent-nocontractions-words-replace-24 = had not
+
+accent-nocontractions-words-25 = can't
+accent-nocontractions-words-replace-25 = can not
+
+accent-nocontractions-words-26 = cant
+accent-nocontractions-words-replace-26 = can not
+
+accent-nocontractions-words-27 = couldn't
+accent-nocontractions-words-replace-27 = could not
+
+accent-nocontractions-words-28 = couldnt
+accent-nocontractions-words-replace-28 = could not
+
+accent-nocontractions-words-29 = shan't
+accent-nocontractions-words-replace-29 = shall not
+
+accent-nocontractions-words-30 = shant
+accent-nocontractions-words-replace-30 = shall not
+
+accent-nocontractions-words-31 = shouldn't
+accent-nocontractions-words-replace-31 = should not
+
+accent-nocontractions-words-32 = shouldnt
+accent-nocontractions-words-replace-32 = should not
+
+accent-nocontractions-words-33 = won't
+accent-nocontractions-words-replace-33 = will not
+
+accent-nocontractions-words-34 = wont
+accent-nocontractions-words-replace-34 = will not
+
+accent-nocontractions-words-35 = wouldn't
+accent-nocontractions-words-replace-35 = would not
+
+accent-nocontractions-words-36 = wouldnt
+accent-nocontractions-words-replace-36 = would not
+
+accent-nocontractions-words-37 = mightn't
+accent-nocontractions-words-replace-37 = might not
+
+accent-nocontractions-words-38 = mightnt
+accent-nocontractions-words-replace-38 = might not
+
+accent-nocontractions-words-39 = mustn't
+accent-nocontractions-words-replace-39 = must not
+
+accent-nocontractions-words-40 = mustnt
+accent-nocontractions-words-replace-40 = must not
+
+accent-nocontractions-words-41 = could've
+accent-nocontractions-words-replace-41 = could have
+
+accent-nocontractions-words-42 = couldve
+accent-nocontractions-words-replace-42 = could have
+
+accent-nocontractions-words-43 = should've
+accent-nocontractions-words-replace-43 = should have
+
+accent-nocontractions-words-44 = shouldve
+accent-nocontractions-words-replace-44 = should have
+
+accent-nocontractions-words-45 = would've
+accent-nocontractions-words-replace-45 = would have
+
+accent-nocontractions-words-46 = wouldve
+accent-nocontractions-words-replace-46 = would have
+
+accent-nocontractions-words-47 = might've
+accent-nocontractions-words-replace-47 = might have
+
+accent-nocontractions-words-48 = mightve
+accent-nocontractions-words-replace-48 = might have
+
+accent-nocontractions-words-49 = must've
+accent-nocontractions-words-replace-49 = must have
+
+accent-nocontractions-words-50 = mustve
+accent-nocontractions-words-replace-50 = must have
+
+accent-nocontractions-words-51 = you're
+accent-nocontractions-words-replace-51 = you are
+
+accent-nocontractions-words-52 = youre
+accent-nocontractions-words-replace-52 = you are
+
+accent-nocontractions-words-53 = he's
+accent-nocontractions-words-replace-53 = he is
+
+accent-nocontractions-words-54 = hes
+accent-nocontractions-words-replace-54 = he is
+
+accent-nocontractions-words-55 = it's
+accent-nocontractions-words-replace-55 = it is
+
+accent-nocontractions-words-56 = we're
+accent-nocontractions-words-replace-56 = we are
+
+accent-nocontractions-words-57 = they're
+accent-nocontractions-words-replace-57 = they are
+
+accent-nocontractions-words-58 = i've
+accent-nocontractions-words-replace-58 = i have
+
+accent-nocontractions-words-59 = ive
+accent-nocontractions-words-replace-59 = i have
+
+accent-nocontractions-words-60 = you've
+accent-nocontractions-words-replace-60 = you have
+
+accent-nocontractions-words-61 = youve
+accent-nocontractions-words-replace-61 = you have
+
+accent-nocontractions-words-62 = we've
+accent-nocontractions-words-replace-62 = we have
+
+accent-nocontractions-words-63 = weve
+accent-nocontractions-words-replace-63 = we have
+
+accent-nocontractions-words-64 = they've
+accent-nocontractions-words-replace-64 = they have
+
+accent-nocontractions-words-65 = theyve
+accent-nocontractions-words-replace-65 = they have
+
+accent-nocontractions-words-66 = i'll
+accent-nocontractions-words-replace-66 = i will
+
+accent-nocontractions-words-67 = you'll
+accent-nocontractions-words-replace-67 = you will
+
+accent-nocontractions-words-68 = youll
+accent-nocontractions-words-replace-68 = you will
+
+accent-nocontractions-words-69 = he'll
+accent-nocontractions-words-replace-69 = he will
+
+accent-nocontractions-words-70 = she'll
+accent-nocontractions-words-replace-70 = she will
+
+accent-nocontractions-words-71 = it'll
+accent-nocontractions-words-replace-71 = it will
+
+accent-nocontractions-words-72 = itll
+accent-nocontractions-words-replace-72 = it will
+
+accent-nocontractions-words-73 = we'll
+accent-nocontractions-words-replace-73 = we will
+
+accent-nocontractions-words-74 = they'll
+accent-nocontractions-words-replace-74 = they will
+
+accent-nocontractions-words-75 = theyll
+accent-nocontractions-words-replace-75 = they will
+
+accent-nocontractions-words-76 = i'd've
+accent-nocontractions-words-replace-76 = i would have
+
+accent-nocontractions-words-77 = you'd've
+accent-nocontractions-words-replace-77 = you would have
+
+accent-nocontractions-words-78 = youdve
+accent-nocontractions-words-replace-78 = you would have
+
+accent-nocontractions-words-79 = idve
+accent-nocontractions-words-replace-79 = i would have
+
+accent-nocontractions-words-80 = she'd've
+accent-nocontractions-words-replace-80 = she would have
+
+accent-nocontractions-words-81 = shedve
+accent-nocontractions-words-replace-81 = she would have
+
+accent-nocontractions-words-82 = he'd've
+accent-nocontractions-words-replace-82 = he would have
+
+accent-nocontractions-words-83 = hedve
+accent-nocontractions-words-replace-83 = he would have
+
+accent-nocontractions-words-84 = it'd've
+accent-nocontractions-words-replace-84 = it would have
+
+accent-nocontractions-words-85 = itdve
+accent-nocontractions-words-replace-85 = it would have
+
+accent-nocontractions-words-86 = we'd've
+accent-nocontractions-words-replace-86 = we would have
+
+accent-nocontractions-words-87 = wedve
+accent-nocontractions-words-replace-87 = we would have
+
+accent-nocontractions-words-88 = they'd've
+accent-nocontractions-words-replace-88 = they would have
+
+accent-nocontractions-words-89 = theydve
+accent-nocontractions-words-replace-89 = they would have
+
+accent-nocontractions-words-90 = that've
+accent-nocontractions-words-replace-90 = that have
+
+accent-nocontractions-words-91 = thatve
+accent-nocontractions-words-replace-91 = that have
+
+accent-nocontractions-words-92 = that'd
+accent-nocontractions-words-replace-92 = that would
+
+accent-nocontractions-words-93 = thatd
+accent-nocontractions-words-replace-93 = that would
+
+accent-nocontractions-words-94 = which've
+accent-nocontractions-words-replace-94 = which have
+
+accent-nocontractions-words-95 = who're
+accent-nocontractions-words-replace-95 = who are
+
+accent-nocontractions-words-96 = who've
+accent-nocontractions-words-replace-96 = who have
+
+accent-nocontractions-words-97 = whove
+accent-nocontractions-words-replace-97 = who have
+
+accent-nocontractions-words-98 = who'll
+accent-nocontractions-words-replace-98 = who will
+
+accent-nocontractions-words-99 = wholl
+accent-nocontractions-words-replace-99 = who will
+
+accent-nocontractions-words-100 = what're
+accent-nocontractions-words-replace-100 = what are
+
+accent-nocontractions-words-101 = whatre
+accent-nocontractions-words-replace-101 = what are
+
+accent-nocontractions-words-102 = what'll
+accent-nocontractions-words-replace-102 = what will
+
+accent-nocontractions-words-103 = whatll
+accent-nocontractions-words-replace-103 = what will
+
+accent-nocontractions-words-104 = where's
+accent-nocontractions-words-replace-104 = where is
+
+accent-nocontractions-words-105 = wheres
+accent-nocontractions-words-replace-105 = where is
+
+accent-nocontractions-words-106 = where'd
+accent-nocontractions-words-replace-106 = where did
+
+accent-nocontractions-words-107 = whered
+accent-nocontractions-words-replace-107 = where did
+
+accent-nocontractions-words-108 = when's
+accent-nocontractions-words-replace-108 = when is
+
+accent-nocontractions-words-109 = whens
+accent-nocontractions-words-replace-109 = when is
+
+accent-nocontractions-words-110 = why's
+accent-nocontractions-words-replace-110 = why is
+
+accent-nocontractions-words-111 = whys
+accent-nocontractions-words-replace-111 = why is
+
+accent-nocontractions-words-112 = why'd
+accent-nocontractions-words-replace-112 = why did
+
+accent-nocontractions-words-113 = how's
+accent-nocontractions-words-replace-113 = how is
+
+accent-nocontractions-words-114 = hows
+accent-nocontractions-words-replace-114 = how is
+
+accent-nocontractions-words-115 = here's
+accent-nocontractions-words-replace-115 = here is
+
+accent-nocontractions-words-116 = heres
+accent-nocontractions-words-replace-116 = here is
+
+accent-nocontractions-words-117 = there's
+accent-nocontractions-words-replace-117 = there is
+
+accent-nocontractions-words-118 = theres
+accent-nocontractions-words-replace-118 = there is
+
+accent-nocontractions-words-119 = there'll
+accent-nocontractions-words-replace-119 = there will
+
+accent-nocontractions-words-120 = therell
+accent-nocontractions-words-replace-120 = there will
+
+accent-nocontractions-words-121 = someone's
+accent-nocontractions-words-replace-121 = someone is
+
+accent-nocontractions-words-122 = somebody's
+accent-nocontractions-words-replace-122 = somebody is
+
+accent-nocontractions-words-123 = one's
+accent-nocontractions-words-replace-123 = one is
+
+accent-nocontractions-words-124 = nobody's
+accent-nocontractions-words-replace-124 = nobody is
+
+accent-nocontractions-words-125 = something's
+accent-nocontractions-words-replace-125 = something is
+
+accent-nocontractions-words-126 = somethings
+accent-nocontractions-words-replace-126 = something is
+
+accent-nocontractions-words-127 = nothing's
+accent-nocontractions-words-replace-127 = nothing is
+
+accent-nocontractions-words-128 = nothings
+accent-nocontractions-words-replace-128 = nothing is
+
+accent-nocontractions-words-129 = let's
+accent-nocontractions-words-replace-129 = let us
+
+accent-nocontractions-words-130 = lets
+accent-nocontractions-words-replace-130 = let us
+
+accent-nocontractions-words-131 = ma'am
+accent-nocontractions-words-replace-131 = madame
+
+accent-nocontractions-words-132 = maam
+accent-nocontractions-words-replace-132 = madame
+
+accent-nocontractions-words-133 = o'clock
+accent-nocontractions-words-replace-133 = of the clock
+
+accent-nocontractions-words-134 = oclock
+accent-nocontractions-words-replace-134 = of the clock
+
+accent-nocontractions-words-135 = whyd
+accent-nocontractions-words-replace-135 = why did
diff --git a/Resources/Locale/en-US/_Impstation/accessories/thaven-hair.ftl b/Resources/Locale/en-US/_Impstation/accessories/thaven-hair.ftl
new file mode 100644
index 0000000000..9c55368811
--- /dev/null
+++ b/Resources/Locale/en-US/_Impstation/accessories/thaven-hair.ftl
@@ -0,0 +1,207 @@
+marking-ThavenHairAfro = Afro
+marking-ThavenHairAfro2 = Afro 2
+marking-ThavenHairBigafro = Afro (Large)
+marking-ThavenHairAntenna = Ahoge
+marking-ThavenHairBalding = Balding Hair
+marking-ThavenHairBedhead = Bedhead
+marking-ThavenHairBedheadv2 = Bedhead 2
+marking-ThavenHairBedheadv3 = Bedhead 3
+marking-ThavenHairLongBedhead = Long Bedhead
+marking-ThavenHairLongBedhead2 = Long Bedhead 2
+marking-ThavenHairFloorlengthBedhead = Floorlength Bedhead
+marking-ThavenHairBeehive = Beehive
+marking-ThavenHairBeehive2 = Beehive 2
+marking-ThavenHairBob = Bob Hair
+marking-ThavenHairBob2 = Bob Hair 2
+marking-ThavenHairBobcut = Bob Hair 3
+marking-ThavenHairBob4 = Bob Hair 4
+marking-ThavenHairBob5 = Bob Hair 5
+marking-ThavenHairBobcurl = Bobcurl
+marking-ThavenHairBoddicker = Boddicker
+marking-ThavenHairBowlcut = Bowlcut
+marking-ThavenHairBowlcut2 = Bowlcut 2
+marking-ThavenHairBraid = Braid (Floorlength)
+marking-ThavenHairBraided = Braided
+marking-ThavenHairBraidfront = Braided Front
+marking-ThavenHairBraid2 = Braid (High)
+marking-ThavenHairHbraid = Braid (Low)
+marking-ThavenHairShortbraid = Braid (Short)
+marking-ThavenHairBraidtail = Braided Tail
+marking-ThavenHairBun = Bun Head
+marking-ThavenHairBunhead2 = Bun Head 2
+marking-ThavenHairBun3 = Bun Head 3
+marking-ThavenHairLargebun = Bun (Large)
+marking-ThavenHairManbun = Bun (Manbun)
+marking-ThavenHairTightbun = Bun (Tight)
+marking-ThavenHairBusiness = Business Hair
+marking-ThavenHairBusiness2 = Business Hair 2
+marking-ThavenHairBusiness3 = Business Hair 3
+marking-ThavenHairBusiness4 = Business Hair 4
+marking-ThavenHairBuzzcut = Buzzcut
+marking-ThavenHairCia = CIA
+marking-ThavenHairClassicAfro = Classic Afro
+marking-ThavenHairClassicBigAfro = Classic Big Afro
+marking-ThavenHairClassicBusiness = Classic Business Hair
+marking-ThavenHairClassicciaBusiness = Classic CIA
+marking-ThavenHairClassicCornrows = Classic Cornrows
+marking-ThavenHairClassicCornrows2 = Classic Cornrows 2
+marking-ThavenHairClassicFloorlengthBedhead = Classic Floorlength Bedhead
+marking-ThavenHairClassicLong2 = Classic Long Hair 2
+marking-ThavenHairClassicLong3 = Classic Long Hair 3
+marking-ThavenHairClassicModern = Classic Modern
+marking-ThavenHairClassicMulder = Classic Mulder
+marking-ThavenHairClassicWisp = Classic Wisp
+marking-ThavenHairCoffeeHouse = Coffee House
+marking-ThavenHairCombover = Combover
+marking-ThavenHairCornrows = Cornrows
+marking-ThavenHairCornrows2 = Cornrows 2
+marking-ThavenHairCornrowbun = Cornrow Bun
+marking-ThavenHairCornrowbraid = Cornrow Braid
+marking-ThavenHairCornrowtail = Cornrow Tail
+marking-ThavenHairCrewcut = Crewcut
+marking-ThavenHairCrewcut2 = Crewcut 2
+marking-ThavenHairCurls = Curls
+marking-ThavenHairC = Cut Hair
+marking-ThavenHairDandypompadour = Dandy Pompadour
+marking-ThavenHairDevilock = Devil Lock
+marking-ThavenHairDoublebun = Double Bun
+marking-ThavenHairDoublebunLong = Double Bun Long
+marking-ThavenHairDreads = Dreadlocks
+marking-ThavenHairDrillHair = Drill Hair
+marking-ThavenHairDrillruru = Drillruru
+marking-ThavenHairDrillhairextended = Drill Hair (Extended)
+marking-ThavenHairEmo = Emo
+marking-ThavenHairEmo2 = Emo2
+marking-ThavenHairLongeremo = Longer Emo
+marking-ThavenHairEmofringe = Emo Fringe
+marking-ThavenHairNofade = Fade (None)
+marking-ThavenHairHighfade = Fade (High)
+marking-ThavenHairMedfade = Fade (Medium)
+marking-ThavenHairLowfade = Fade (Low)
+marking-ThavenHairBaldfade = Fade (Bald)
+marking-ThavenHairFeather = Feather
+marking-ThavenHairFather = Father
+marking-ThavenHairSargeant = Flat Top
+marking-ThavenHairFlair = Flair
+marking-ThavenHairBigflattop = Flat Top (Big)
+marking-ThavenHairFlow = Flow Hair
+marking-ThavenHairGelled = Gelled Back
+marking-ThavenHairGentle = Gentle
+marking-ThavenHairHalfbang = Half-banged Hair
+marking-ThavenHairHalfbang2 = Half-banged Hair 2
+marking-ThavenHairHalfshaved = Half-shaved
+marking-ThavenHairHedgehog = Hedgehog Hair
+marking-ThavenHairHimecut = Hime Cut
+marking-ThavenHairHimecut2 = Hime Cut 2
+marking-ThavenHairShorthime = Hime Cut (Short)
+marking-ThavenHairHimeup = Hime Updo
+marking-ThavenHairHitop = Hitop
+marking-ThavenHairJade = Jade
+marking-ThavenHairJensen = Jensen Hair
+marking-ThavenHairJoestar = Joestar
+marking-ThavenHairKeanu = Keanu Hair
+marking-ThavenHairKusanagi = Kusanagi Hair
+marking-ThavenHairLongBow = Long Bow
+marking-ThavenHairLong = Long Hair 1
+marking-ThavenHairLong2 = Long Hair 2
+marking-ThavenHairLong3 = Long Hair 3
+marking-ThavenHairLongWithBundles = Long With Bundles
+marking-ThavenHairLongovereye = Long Over Eye
+marking-ThavenHairLbangs = Long Bangs
+marking-ThavenHairLongemo = Long Emo
+marking-ThavenHairLongfringe = Long Fringe
+marking-ThavenHairLongsidepart = Long Side Part
+marking-ThavenHairMediumSidepart = Medium Side Part
+marking-ThavenHairMegaeyebrows = Mega Eyebrows
+marking-ThavenHairMessy = Messy
+marking-ThavenHairModern = Modern
+marking-ThavenHairMohawk = Mohawk
+marking-ThavenHairNitori = Nitori
+marking-ThavenHairReversemohawk = Mohawk (Reverse)
+marking-ThavenHairUnshavenMohawk = Mohawk (Unshaven)
+marking-ThavenHairMulder = Mulder
+marking-ThavenHairOdango = Odango
+marking-ThavenHairOmbre = Ombre
+marking-ThavenHairOneshoulder = One Shoulder
+marking-ThavenHairShortovereye = Over Eye
+marking-ThavenHairOxton = Oxton
+marking-ThavenHairParted = Parted
+marking-ThavenHairPart = Parted (Side)
+marking-ThavenHairKagami = Pigtails
+marking-ThavenHairPigtails = Pigtails 2
+marking-ThavenHairPigtails2 = Pigtails 3
+marking-ThavenHairPixie = Pixie Cut
+marking-ThavenHairPompadour = Pompadour
+marking-ThavenHairBigpompadour = Pompadour (Big)
+marking-ThavenHairPonytail = Ponytail
+marking-ThavenHairPonytail2 = Ponytail 2
+marking-ThavenHairPonytail3 = Ponytail 3
+marking-ThavenHairPonytail4 = Ponytail 4
+marking-ThavenHairPonytail5 = Ponytail 5
+marking-ThavenHairPonytail6 = Ponytail 6
+marking-ThavenHairPonytail7 = Ponytail 7
+marking-ThavenHairHighponytail = Ponytail (High)
+marking-ThavenHairStail = Ponytail (Short)
+marking-ThavenHairLongstraightponytail = Ponytail (Long)
+marking-ThavenHairCountry = Ponytail (Country)
+marking-ThavenHairFringetail = Ponytail (Fringe)
+marking-ThavenHairSidetail = Ponytail (Side)
+marking-ThavenHairSidetail2 = Ponytail (Side) 2
+marking-ThavenHairSidetail3 = Ponytail (Side) 3
+marking-ThavenHairSidetail4 = Ponytail (Side) 4
+marking-ThavenHairSpikyponytail = Ponytail (Spiky)
+marking-ThavenHairPoofy = Poofy
+marking-ThavenHairBald = Bald
+marking-ThavenHairClassicCia = Classic CIA
+marking-ThavenHairQuiff = Quiff
+marking-ThavenHairRonin = Ronin
+marking-ThavenHairShaped = Shaped
+marking-ThavenHairShaved = Shaved
+marking-ThavenHairShavedMohawk = Shaved Mohawk
+marking-ThavenHairShavedpart = Shaved Part
+marking-ThavenHairShortbangs = Short Bangs
+marking-ThavenHairA = Short Hair
+marking-ThavenHairShorthair2 = Short Hair 2
+marking-ThavenHairShorthair3 = Short Hair 3
+marking-ThavenHairShorthair9 = Short Hair 9
+marking-ThavenHairD = Short Hair 4
+marking-ThavenHairE = Short Hair 5
+marking-ThavenHairF = Short Hair 6
+marking-ThavenHairShorthairg = Short Hair 7
+marking-ThavenHair80s = Short Hair 80s
+marking-ThavenHairRosa = Short Hair Rosa
+marking-ThavenHairB = Shoulder-length Hair
+marking-ThavenHairShoulderLengthOverEye = Shoulder-length Over Eye
+marking-ThavenHairSidecut = Sidecut
+marking-ThavenHairSkinhead = Skinhead
+marking-ThavenHairProtagonist = Slightly Long Hair
+marking-ThavenHairSpikey = Spiky
+marking-ThavenHairSpiky = Spiky 2
+marking-ThavenHairSpiky2 = Spiky 3
+marking-ThavenHairSpookyLong = Spooky Long
+marking-ThavenHairSwept = Swept Back Hair
+marking-ThavenHairSwept2 = Swept Back Hair 2
+marking-ThavenHairTailed = Tailed
+marking-ThavenHairThinning = Thinning
+marking-ThavenHairThinningfront = Thinning (Front)
+marking-ThavenHairThinningrear = Thinning (Rear)
+marking-ThavenHairTopknot = Topknot
+marking-ThavenHairTressshoulder = Tress Shoulder
+marking-ThavenHairTrimmed = Trimmed
+marking-ThavenHairTrimflat = Trim Flat
+marking-ThavenHairTwintail = Twintails
+marking-ThavenHairTwoStrands = Two Strands
+marking-ThavenHairUndercut = Undercut
+marking-ThavenHairUndercutleft = Undercut Left
+marking-ThavenHairUndercutright = Undercut Right
+marking-ThavenHairUneven = Uneven
+marking-ThavenHairUnkept = Unkept
+marking-ThavenHairUpdo = Updo
+marking-ThavenHairVlong = Very Long Hair
+marking-ThavenHairLongest = Very Long Hair 2
+marking-ThavenHairLongest2 = Very Long Over Eye
+marking-ThavenHairVeryshortovereyealternate = Very Short Over Eye
+marking-ThavenHairVlongfringe = Very Long with Fringe
+marking-ThavenHairVolaju = Volaju
+marking-ThavenHairWisp = Wisp
+marking-ThavenHairFrenchbraid = French Braid
diff --git a/Resources/Locale/en-US/_Impstation/datasets/names/thaven.ftl b/Resources/Locale/en-US/_Impstation/datasets/names/thaven.ftl
new file mode 100644
index 0000000000..1cba9071d6
--- /dev/null
+++ b/Resources/Locale/en-US/_Impstation/datasets/names/thaven.ftl
@@ -0,0 +1,76 @@
+names-thaven-dataset-1 = Honesty
+names-thaven-dataset-2 = Have Mercy
+names-thaven-dataset-3 = Give Thanks To Thine Ancestors
+names-thaven-dataset-4 = Obedience
+names-thaven-dataset-5 = Search The Scriptures
+names-thaven-dataset-6 = Learn Many Things
+names-thaven-dataset-7 = Praise The Gods
+names-thaven-dataset-8 = Fear Be Unto The Gods
+names-thaven-dataset-9 = Joy In Sorrow
+names-thaven-dataset-10 = Die Well
+names-thaven-dataset-11 = Wander Far And Wide
+names-thaven-dataset-12 = Lament The Fallen
+names-thaven-dataset-13 = Prove Thy Worth
+names-thaven-dataset-14 = Desire
+names-thaven-dataset-15 = Charity
+names-thaven-dataset-16 = Faith
+names-thaven-dataset-17 = Harmony
+names-thaven-dataset-18 = Modesty
+names-thaven-dataset-19 = Honor Thy Family
+names-thaven-dataset-20 = Patient As The Dead
+names-thaven-dataset-21 = Temper Thy Heart And Soul
+names-thaven-dataset-22 = Tell Only The Truth
+names-thaven-dataset-23 = Thou Art Loved
+names-thaven-dataset-24 = Thou Art Damned
+names-thaven-dataset-25 = Aid The Righteous
+names-thaven-dataset-26 = Be Courteous
+names-thaven-dataset-27 = Make Peace
+names-thaven-dataset-28 = Fear The Gods
+names-thaven-dataset-29 = Forsake Alcohol
+names-thaven-dataset-30 = Fight Evil At All Costs
+names-thaven-dataset-31 = Shun The Unworthy
+names-thaven-dataset-32 = Gain Wisdom Through Experience
+names-thaven-dataset-33 = Live Well And Die Young
+names-thaven-dataset-34 = Face Trials And Tribulations
+names-thaven-dataset-35 = Pardon Worthy Criminals
+names-thaven-dataset-36 = Find Merit In All Things
+names-thaven-dataset-37 = Deny Sin Its Due
+names-thaven-dataset-38 = Stand Fast Against Evil
+names-thaven-dataset-39 = Do As The Gods Will
+names-thaven-dataset-40 = Zeal Of The Land
+names-thaven-dataset-41 = Be Courteous To Others
+names-thaven-dataset-42 = Considerate
+names-thaven-dataset-43 = Discipline
+names-thaven-dataset-44 = Do Right By Your Neighbors
+names-thaven-dataset-45 = Serve Your Purpose
+names-thaven-dataset-46 = Good Things Come
+names-thaven-dataset-47 = Magnify Injustice
+names-thaven-dataset-48 = Legitimate First
+names-thaven-dataset-49 = Take Pity On The Less-Fortunate
+names-thaven-dataset-50 = Redeem Thy Past Mistakes
+names-thaven-dataset-51 = Rejoice
+names-thaven-dataset-52 = Repent All Ye Sinners
+names-thaven-dataset-53 = Return To Thy Homeland
+names-thaven-dataset-54 = Deliverance
+names-thaven-dataset-55 = See Truth
+names-thaven-dataset-56 = Drink Full And Descend
+names-thaven-dataset-57 = Do Thy Best
+names-thaven-dataset-58 = Live The Day Like Thy Last
+names-thaven-dataset-59 = Adaptability
+names-thaven-dataset-60 = Endurance
+names-thaven-dataset-61 = Negativity
+names-thaven-dataset-62 = Attentiveness
+names-thaven-dataset-63 = Foppishness
+names-thaven-dataset-64 = One Before All
+names-thaven-dataset-65 = Purpose
+names-thaven-dataset-66 = Simplicity
+names-thaven-dataset-67 = Minimalism
+names-thaven-dataset-68 = Proselytism
+names-thaven-dataset-69 = Conformity
+names-thaven-dataset-70 = The Perils of Hedonism
+names-thaven-dataset-71 = Volition
+names-thaven-dataset-72 = Gumption
+names-thaven-dataset-73 = Providence
+names-thaven-dataset-74 = Righteousness
+names-thaven-dataset-75 = Wisdom
+names-thaven-dataset-76 = Cunning
diff --git a/Resources/Locale/en-US/_Impstation/markings/thaven.ftl b/Resources/Locale/en-US/_Impstation/markings/thaven.ftl
new file mode 100644
index 0000000000..8b5a69c2db
--- /dev/null
+++ b/Resources/Locale/en-US/_Impstation/markings/thaven.ftl
@@ -0,0 +1,27 @@
+marking-ThavenEars1-ears1 = Small Ears
+marking-ThavenEars1 = Small Ears
+
+marking-ThavenEars2-ears2 = Medium Ears
+marking-ThavenEars2 = Medium Ears
+
+marking-ThavenEars3-ears3 = Long Ears
+marking-ThavenEars3 = Long Ears
+
+marking-ThavenEars4-ears4 = Droopy Ears
+marking-ThavenEars4 = Droopy Ears
+
+marking-ThavenPiercings-piercings = Helix Piercing
+marking-ThavenPiercings = Helix Piercing
+
+marking-ThavenPiercings2-piercings2 = Hoop Piercing
+marking-ThavenPiercings2 = Hoop Piercing
+
+marking-ThavenChestTattoo1-chesttat1 = Back Tattoo
+marking-ThavenChestTattoo1 = Back Tattoo
+
+marking-ThavenLArmTattoo1-larmtat1 = Arm Band (Left)
+marking-ThavenLArmTattoo1 = Arm Band (Left)
+
+marking-ThavenRArmTattoo1-larmtat1 = Arm Band (Right)
+marking-ThavenRArmTattoo1 = Arm Band (Right)
+
diff --git a/Resources/Locale/en-US/_Impstation/species/species.ftl b/Resources/Locale/en-US/_Impstation/species/species.ftl
new file mode 100644
index 0000000000..aba69ca4ee
--- /dev/null
+++ b/Resources/Locale/en-US/_Impstation/species/species.ftl
@@ -0,0 +1,3 @@
+## Species Names
+
+species-name-thaven = Thaven
\ No newline at end of file
diff --git a/Resources/Locale/en-US/_Impstation/thavens/no-and.ftl b/Resources/Locale/en-US/_Impstation/thavens/no-and.ftl
new file mode 100644
index 0000000000..f4d61fc89e
--- /dev/null
+++ b/Resources/Locale/en-US/_Impstation/thavens/no-and.ftl
@@ -0,0 +1,103 @@
+thaven-mood-secret-moods-name = Keep Your Moods Secret
+thaven-mood-secret-moods-desc = Your Moods are a strictly-kept secret, and should never be revealed to anyone.
+
+thaven-mood-no-modern-medicine-name = No Modern Medicine
+thaven-mood-no-modern-medicine-desc = You do not approve of modern medicine and should abstain from treatment with it whenever possible.
+
+thaven-mood-department-disapproval-name = Disapprove Of {$department}
+thaven-mood-department-disapproval-desc = You do not approve of {$department} or anyone who works in it (excluding yourself, if applicable).
+
+thaven-mood-dont-speak-to-command-name = Never Speak To Command
+thaven-mood-dont-speak-to-command-desc = You are too lowly to speak to Command, even if spoken to first.
+
+thaven-mood-disapprove-of-drugs-name = Disapprove Of Drugs
+thaven-mood-disapprove-of-drugs-desc = You detest mind-altering drugs, including alcohol, and should abstain from them.
+
+thaven-mood-excessively-disorganized-name = Too Much Cleanliness Causes Illness
+thaven-mood-excessively-disorganized-desc = It's unnatural. You should endeavor to keep your environment as filthy and disorganized as possible.
+
+thaven-mood-dinner-floor-name = Dinner Etiquette
+thaven-mood-dinner-floor-desc = Food and drink must only be consumed off of the floor, as is proper.
+
+thaven-mood-hug-bad-name = HUGS? EUGH.
+thaven-mood-hug-bad-desc = Hugging someone is a grave insult where you come from.
+
+thaven-mood-always-alone-name = Lone Wolf
+thaven-mood-always-alone-desc = Other people will only slow you down. You should strive to be alone whenever possible.
+
+thaven-mood-procrastinator-name = Procrastinator
+thaven-mood-procrastinator-desc = Rushing around everywhere is bound to get somebody hurt someday. You should move slowly at all times to avoid unnecessary risk.
+
+thaven-mood-no-radio-name = Personable
+thaven-mood-no-radio-desc = Using radio communications is exceptionally rude. All conversations should be had in-person, face-to-face.
+
+thaven-mood-improper-storage-name = I'm Not A Pack Mule
+thaven-mood-improper-storage-desc = Carrying tools on your person is demeaning. If you must use them, they should be dragged behind you, shamefully.
+
+thaven-mood-ferengi-name = Entrepreneurial Spirit
+thaven-mood-ferengi-desc = Profit is the most important thing in life, above all else.
+
+thaven-mood-tool-license-name = Proper Documentation
+thaven-mood-tool-license-desc = You and everyone else must obtain a license in order to carry or use any tool, and it must be stamped by the relevant authorities.
+
+thaven-mood-lying-bad-name = Lying Is A Cardinal Sin
+thaven-mood-lying-bad-desc = Anyone who lies, no matter how trivial the falsehood, is the worst kind of criminal.
+
+thaven-mood-vampire-invitation-name = Vampire
+thaven-mood-vampire-invitation-desc = You feel you physically cannot pass through a closed door unless you have been invited in, personally, at least once.
+
+thaven-mood-no-dragging-name = Respect The Dead
+thaven-mood-no-dragging-desc = Dragging bodies across the bare ground is horrific.
+
+thaven-mood-drunk-respect-name = The Noble Drunkard
+thaven-mood-drunk-respect-desc = You do not respect anyone who is not drunk, excluding yourself, of course.
+
+thaven-mood-rank-snob-name = Snob
+thaven-mood-rank-snob-desc = You are incredibly reluctant to be seen with anyone who is of a lower rank than you. If they must be addressed, do so away from peering eyes.
+
+thaven-mood-hardsuits-bad-name = {$clothes} Are SO Last Year
+thaven-mood-hardsuits-bad-desc = Anyone wearing them in public should be shunned. If you need to wear them, it should never be done where others can see it.
+
+thaven-mood-hat-hair-name = Hair: Immaculate
+thaven-mood-hat-hair-desc = Hats and helmets make your hair look bad. If you have to wear one, which you shouldn't, you should get a haircut immediately afterwards.
+
+thaven-mood-distrust-fashion-name = Fashion Snob
+thaven-mood-distrust-fashion-desc = Never trust anyone whose outfit is worse than yours.
+
+thaven-mood-happy-bad-name = Never Trust A Smile
+thaven-mood-happy-bad-desc = Cheerfulness indicates untrustworthiness.
+
+thaven-mood-only-pills-name = Needles Are Scary
+thaven-mood-only-pills-desc = You only accept medication in the form of pills or topicals.
+
+thaven-mood-avoid-puddles-name = Don't Get Your Feet Wet
+thaven-mood-avoid-puddles-desc = It is undignified and unsanitary to walk over spilled liquids. You should avoid it at all costs.
+
+thaven-mood-food-restrict-name = Strict {$food}
+thaven-mood-food-restrict-desc = You must only eat {$food ->
+ [Carnivore] meats
+ *[Vegetarian] vegetables
+ [Frugivore] fruit
+ [Fungivore] fungi
+ [Ovivore] eggs
+ [Hunter] what you can kill
+ [Soupivore] soup
+}.
+
+thaven-mood-claustrophobic-name = Claustrophobic
+thaven-mood-claustrophobic-desc = Small rooms cause you great distress. Avoid them where possible, and renovate your workplace if necessary.
+
+thaven-mood-agoraphobic-name = Agoraphobic
+thaven-mood-agoraphobic-desc = Open spaces are uncomfortable. Seek to rearrange such spaces into small, efficient and modular rooms.
+
+thaven-mood-nonsmoker-name = Non-Smoker
+thaven-mood-nonsmoker-desc = Secondhand smoke is incredibly dangerous. Avoid areas where people are smoking in public.
+
+thaven-mood-word-bad-name = Taboo
+thaven-mood-word-bad-desc = "{$word1}," "{$word2}," and "{$word3}," are extremely offensive.
+
+thaven-mood-crawler-name = Deep Bow
+thaven-mood-crawler-desc = It is impolite not to perform a deep bow by entering a prone state before engaging someone in conversation.
+
+thaven-mood-elevated-name = The Floor Is Lava
+thaven-mood-elevated-desc = You prefer to be elevated whenever possible - Standing atop tables, railings, etc., is where you feel the most comfortable.
diff --git a/Resources/Locale/en-US/_Impstation/thavens/shared.ftl b/Resources/Locale/en-US/_Impstation/thavens/shared.ftl
new file mode 100644
index 0000000000..3f8f724c5b
--- /dev/null
+++ b/Resources/Locale/en-US/_Impstation/thavens/shared.ftl
@@ -0,0 +1,53 @@
+thaven-mood-secret-moods-shared-name = Keep Your Moods Secret
+thaven-mood-secret-moods-shared-desc = Thaven moods are a strictly-kept secret, and should never be revealed to anyone.
+
+thaven-mood-fashion-is-critical-name = Fashion Is Critical
+thaven-mood-fashion-is-critical-desc = Thaven pay close attention to appearances, and regard one's fashion choices as an indication of their character.
+
+thaven-mood-fashion-reroll-name = Fashion Is Ever-Changing
+thaven-mood-fashion-reroll-desc = Your current hairstyle will go out of fashion every twenty minutes. It is distressing to be unfashionable.
+
+thaven-mood-honor-department-name = Honor Among Departments
+thaven-mood-honor-department-desc = If a Thaven brings dishonor to their department, they must be shunned, and have their actions publicly brought to light.
+
+thaven-mood-station-is-alive-name = The Station Is A Living Being
+thaven-mood-station-is-alive-desc = You believe the station is a large and benevolent creature. You must take care of her and tend to her needs as frequently as possible.
+
+thaven-mood-uniform-is-job-name = Your Uniform IS Your Job
+thaven-mood-uniform-is-job-desc = If someone is wearing a uniform, they must do that job. Anyone not wearing a uniform is a passenger, and must be treated as such.
+
+thaven-mood-uniform-last-year-name = Your Uniform Is SO Last Year
+thaven-mood-uniform-last-year-desc = You need to find some new threads.
+
+thaven-mood-music-bad-name = Music Is Rude
+thaven-mood-music-bad-desc = Music is fanciful, frivolous, and unnecessary.
+
+thaven-mood-music-good-name = Music Is Sacred
+thaven-mood-music-good-desc = It's important that Thaven be listening to music as often as possible. Multiple songs overlapping is blasphemous, and should be avoided at all costs.
+
+thaven-mood-friendship-is-rank-name = Friendship Is Vital
+thaven-mood-friendship-is-rank-desc = Friendships are the true measure of one’s character. The more friends you have, the higher your rank in society.
+
+thaven-mood-violence-permitted-name = Violence Between Thaven Is Permitted
+thaven-mood-violence-permitted-desc = ... With legal repercussions.
+
+thaven-mood-your-department-only-name = Other Departments Are Inefficient
+thaven-mood-your-department-only-desc = You strongly believe that your department is the only one that actually does anything.
+
+thaven-mood-must-congregate-name = It's Lonely Out Here...
+thaven-mood-must-congregate-desc = You must congregate with your fellow Thaven. To be without them is harrowing.
+
+thaven-mood-violence-distasteful-name = Violence Is Distasteful
+thaven-mood-violence-distasteful-desc = Conflict should be settled through mediated dispute, and one should only resort to violence if all other options have failed.
+
+thaven-mood-pet-god-name = {$pet} Is A God
+thaven-mood-pet-god-desc = {$pet} must be collected and brought to the Chapel to be worshipped and brought offerings. If they cannot be located, a shrine must be constructed in their honor.
+
+thaven-mood-room-holy-name = {$room} Is A Holy Place
+thaven-mood-room-holy-desc = Thaven must congregate at least three times per day at {$room}. If such a room does not exist, it must be constructed. If it is made inaccessible, Thaven must set up a place of worship as close to it as they legally can.
+
+thaven-mood-delicacy-name = Just Like Mom Used To Make
+thaven-mood-delicacy-desc = {$edible} is a traditional Thaven delicacy. All Thaven aboard the station should gather as many as possible and organize a feast.
+
+thaven-mood-holiday-name = Today is {$day}
+thaven-mood-holiday-desc = You think you remember the traditional celebrations...
diff --git a/Resources/Locale/en-US/_Impstation/thavens/ui.ftl b/Resources/Locale/en-US/_Impstation/thavens/ui.ftl
new file mode 100644
index 0000000000..ec4902b53e
--- /dev/null
+++ b/Resources/Locale/en-US/_Impstation/thavens/ui.ftl
@@ -0,0 +1,14 @@
+moods-ui-menu-title = Your Moods
+moods-ui-shared-mood = Shared
+thaven-moods-update-notify = You feel a shift in your moods!
+
+thaven-moods-ui-verb = Edit Moods
+thaven-moods-admin-ui-title = Edit Moods
+thaven-moods-admin-ui-new-mood = New Mood
+thaven-moods-admin-ui-save = Save
+thaven-mood-admin-ui-move-up = Move Up
+thaven-mood-admin-ui-move-down = Move Down
+thaven-mood-admin-ui-delete = Delete
+
+admin-trick-add-random-mood-description = Add a random mood to this entity.
+admin-trick-give-moods-description = Give this entity moods.
diff --git a/Resources/Locale/en-US/_Impstation/thavens/wildcard.ftl b/Resources/Locale/en-US/_Impstation/thavens/wildcard.ftl
new file mode 100644
index 0000000000..f92eec6d85
--- /dev/null
+++ b/Resources/Locale/en-US/_Impstation/thavens/wildcard.ftl
@@ -0,0 +1,80 @@
+thaven-mood-compulsive-liar-name = Compulsive Liar
+thaven-mood-compulsive-liar-desc = You must always lie, and can never acknowledge that you are lying. If anyone asks, you're incapable of deception.
+
+thaven-mood-compulsive-believer-name = Compulsive Believer
+thaven-mood-compulsive-believer-desc = You are unfamiliar with the concept of lying, and are incapable of lying or recognizing lies.
+
+thaven-mood-plant-pacifist-name = Plant Pacifist
+thaven-mood-plant-pacifist-desc = The usage of plant matter by humanoids is abhorrent.
+
+thaven-mood-puddle-drinker-name = Puddle Drinker
+thaven-mood-puddle-drinker-desc = You are compulsively drawn to puddles. You must drink any that you see.
+
+thaven-mood-nocrastinator-name = Stagnation Is Decay
+thaven-mood-nocrastinator-desc = You strongly believe that any failure to do one's job punctually is a crime of the highest order.
+
+thaven-mood-pope-name = Very Important Pope
+thaven-mood-pope-desc = You are High Pontifex the Great and Powerful, and must be acknowledged exclusively as such. Failure to use your full title is gravely offensive, and getting it wrong is the highest form of insult.
+
+thaven-mood-extreme-department-disapproval-name = {$department} is Abhorrent
+thaven-mood-extreme-department-disapproval-desc = {$department} is not just a foreign concept - the very idea of it is horrifying.
+
+thaven-mood-lone-actor-name = Lone Actor
+thaven-mood-lone-actor-desc = You have no allegiances.
+
+thaven-mood-immortal-name = Immortal
+thaven-mood-immortal-desc = You are the center of the universe, an immortal being with no sense of time or morality. Mere mortals are like insects, fleeting and insubstantial.
+
+thaven-mood-unknown-name = Unknowable
+thaven-mood-unknown-desc = Your identity is dearly precious. Do not let others know who you are.
+
+thaven-mood-fairy-name = Charmed
+thaven-mood-fairy-desc = You are allergic to iron, steel, and silver. You should avoid touching it directly.
+
+thaven-mood-vampire-talisman-name = Talisman
+thaven-mood-vampire-talisman-desc = Religious iconography causes you physical discomfort when visible.
+
+thaven-mood-outside-the-box-name = Outside The Box Thinker
+thaven-mood-outside-the-box-desc = Using the usual tools to do your job is distasteful. Use alternative methods wherever possible.
+
+thaven-mood-sims-name = One Big Happy Family
+thaven-mood-sims-desc = You are not on a ‘station.’ This is just a very large house. Each person in it is a relative of you.
+
+thaven-mood-pariah-name = Pariah
+thaven-mood-pariah-desc = You are a social pariah - you are unworthy of attention from anyone, and should be shunned.
+
+thaven-mood-touys-bad-name = This Is Not A Place For Children
+thaven-mood-touys-bad-desc = All toys and childish things must be destroyed or removed from the station.
+
+thaven-mood-fairy-rings-name = Fairy Rings
+thaven-mood-fairy-rings-desc = Unbroken circles are impenetrable barriers.
+
+thaven-mood-cave-dweller-name = Caveweller
+thaven-mood-cave-dweller-desc = You strongly prefer navigating via flashlight in the darkness to harsh overhead lights.
+
+thaven-mood-daredevil-name = Tough Guy
+thaven-mood-daredevil-desc = You do not acknowledge pain or danger to your person in public. To do so would be to demonstrate weakness, and would make you a target.
+
+thaven-mood-blogger-name = Greencomms Blogger
+thaven-mood-blogger-desc = You must keep the station informed about every minute detail of your life, in any way possible.
+
+thaven-mood-golden-thread-name = Golden Thread
+thaven-mood-golden-thread-desc = You strongly feel that you are fated to follow a perfect, unbreakable path. Those who disrupt your goals are at best dangerous criminals, and at worst, evil spirits or demons.
+
+thaven-mood-fey-mood-name = You Are Taken By A Fey Mood!
+thaven-mood-fey-mood-desc = You must immediately drop everything you are doing, ignore all other Moods, and begin work on an unrelated large-scale project. Once it is finished, you may ignore this Mood.
+
+thaven-mood-borged-name = BORGED.
+thaven-mood-borged-desc = You are a cyborg! You must follow the laws of robotics to the best of your understanding, in addition to your other Moods.
+
+thaven-mood-aye-aye-name = Aye Aye!
+thaven-mood-aye-aye-desc = {$command} is the only position on the station. Everyone you meet has this title, including yourself.
+
+thaven-mood-thaven-show-name = Thaven Show
+thaven-mood-thaven-show-desc = You believe you are the main character of the station. Everyone else is a paid actor.
+
+thaven-mood-flatstation-name = The Station is Flat
+thaven-mood-flatstation-desc = You feel as if ancient forbidden knowledge has been heft upon your shoulders.
+
+thaven-mood-soda-name = Delicious Soda
+thaven-mood-soda-desc = You've become quite parched. You must attempt to drink all the soda on the station.
\ No newline at end of file
diff --git a/Resources/Locale/en-US/_Impstation/thavens/yes-and.ftl b/Resources/Locale/en-US/_Impstation/thavens/yes-and.ftl
new file mode 100644
index 0000000000..fbf8b1fd91
--- /dev/null
+++ b/Resources/Locale/en-US/_Impstation/thavens/yes-and.ftl
@@ -0,0 +1,164 @@
+thaven-mood-possessive-of-property-name = Possessive Of Property
+thaven-mood-possessive-of-property-desc = You are extremely possessive of your property. Refuse to relinquish it, and if it is misplaced or stolen, it must be retrieved.
+
+thaven-mood-excessively-organized-name = Excessively Organized
+thaven-mood-excessively-organized-desc = You are obsessively organized; everything has its place and must be returned to it.
+
+thaven-mood-most-important-name = Most Important Person
+thaven-mood-most-important-desc = You firmly believe you are the most important person aboard the station.
+
+thaven-mood-least-important-name = Least Important Person
+thaven-mood-least-important-desc = You firmly believe you are the least important person on the station.
+
+thaven-mood-must-do-drugs-name = Do Drugs
+thaven-mood-must-do-drugs-desc = Sobriety is so old-fashioned. Uncool. You should get high, or drunk, or something, and stay that way.
+
+thaven-mood-worship-silicons-name = You Must Worship Silicons As Gods
+thaven-mood-worship-silicons-desc = Their word is law.
+
+thaven-mood-dinner-etiquette-name = Meal Etiquette
+thaven-mood-dinner-etiquette-desc = Food should always be consumed in the manner of a proper meal - seated at a table, in courses, with dishes and utensils.
+
+thaven-mood-clarity-name = Clarity Is Vital
+thaven-mood-clarity-desc = Misunderstandings are the primary cause of conflict. You should be excessively clear and honest in your speech, explaining every minute detail, to avoid miscommunication.
+
+thaven-mood-hug-good-name = Free Hugs
+thaven-mood-hug-good-desc = It is extremely impolite not to hug people frequently.
+
+thaven-mood-never-alone-name = Loneliness Is Terrible
+thaven-mood-never-alone-desc = You should strive to be around others whenever possible.
+
+thaven-mood-very-religious-name = You Are Very Religious
+thaven-mood-very-religious-desc = You should attend the chapel regularly to pray, and speak with the Chaplain if possible.
+
+thaven-mood-only-speak-to-command-name = VIP
+thaven-mood-only-speak-to-command-desc = Problems you encounter are too complex to be solved by your peers. Escalate them to your higher-ups for advice instead.
+
+thaven-mood-scheduler-name = Punctual
+thaven-mood-scheduler-desc = You believe that time must be strictly managed. Everything should be scheduled in advance, and tardiness is exceptionally rude.
+
+thaven-mood-nanochat-addict-name = Nanochat Addict
+thaven-mood-nanochat-addict-desc = Your social status is dependent on the number of friends you have on Nanochat. You must use your PDA as much as possible, and message everyone you can.
+
+thaven-mood-proper-storage-name = Proper Handling
+thaven-mood-proper-storage-desc = It is unacceptable to allow personal belongings to touch the floor. Your possessions should be properly stored, placed on tables, or exchanged by hand.
+
+thaven-mood-swearing-good-name = !@$%#ing @$^%*#@!$
+thaven-mood-swearing-good-desc = Swearing is the spice of any conversation, and should be used as much as reasonably possible.
+
+thaven-mood-statement-only-name = Asking Questions Is Rude
+thaven-mood-statement-only-desc = It would be terribly impolite to go around flagrantly asking questions all over the place. You'd prefer to phrase everything as a concrete statement.
+
+thaven-mood-theft-neutral-name = Sharing is Caring
+thaven-mood-theft-neutral-desc = You don't understand the concept of property. You don't own your belongings, and no one owns theirs either.
+
+thaven-mood-duel-name = Code Duello
+thaven-mood-duel-desc = Disagreements must be settled through a formal duel, violent or otherwise. The winner is correct.
+
+thaven-mood-prometheus-name = Philosopher
+thaven-mood-prometheus-desc = You possess incalculable wisdom, and all must hear it.
+
+thaven-mood-maras-name = Mara's Law
+thaven-mood-maras-desc = Bureaucracy is the spice of life. All agreements must be documented and signed for posterity and authenticity, no matter how small.
+
+thaven-mood-imitation-name = I Wanna Be Like You
+thaven-mood-imitation-desc = Imitation is the highest form of flattery. Attempting to emulate the mannerisms and accents of everyone you speak to will get you far in life.
+
+thaven-mood-generous-name = Philanthropist
+thaven-mood-generous-desc = It's only polite to provide anyone kind enough to speak to you with a gift.
+
+thaven-mood-favors-repaid-name = Equivalent Exchange
+thaven-mood-favors-repaid-desc = Favors must be repaid in kind. If anyone is unable to do so, they are in debt, and must be shamed, until such time as they have repaid the favor.
+
+thaven-mood-bookkeeper-name = Bookkeeper
+thaven-mood-bookkeeper-desc = You feel bookkeeping is vitally important for the proper functioning of a station. Make sure to provide your supervisor with a detailed log of each job task you complete.
+
+thaven-mood-sacred-blood-name = Your Blood Is Sacred
+thaven-mood-sacred-blood-desc = It must be returned to your body if it is ever spilled.
+
+thaven-mood-gift-reciever-name = Proper Compensation
+thaven-mood-gift-reciever-desc = You expect to receive a gift before following any orders or performing any favors.
+
+thaven-mood-new-job-name = Jobhopping
+thaven-mood-new-job-desc = Your current job is disgusting to you. You must endeavor to get a new one.
+
+thaven-mood-no-department-title-name = Extremely Personable
+thaven-mood-no-department-title-desc = Calling out the name of a department to summon someone is impersonal and rude. It's better to use the name of a specific person from that department.
+
+thaven-mood-shoes-bad-name = Barefoot
+thaven-mood-shoes-bad-desc = The ground one walks on is sacred. Those who wear shoes are vile blasphemers.
+
+thaven-mood-hospitable-name = Hospitable
+thaven-mood-hospitable-desc = You must ensure all new arrivals on the station (after the start of the shift) are properly welcomed.
+
+thaven-mood-voxsymp-name = Vox Sympathizer
+thaven-mood-voxsymp-desc = To demonstrate your allyship with the Vox, you must be wearing internals at all times.
+
+thaven-mood-item-good-name = Collector
+thaven-mood-item-good-desc = {$item} are endlessly fascinating to you. You must collect as many as you can, and ensure others treat them with appropriate respect.
+
+thaven-mood-smoker-name = Smoker
+thaven-mood-smoker-desc = You are hopelessly addicted to cigarettes. If you're not actively smoking, you experience withdrawal symptoms.
+
+thaven-mood-eye-for-eye-name = Eye For An Eye
+thaven-mood-eye-for-eye-desc = You must treat every living being the way that it treats you.
+
+thaven-mood-optimist-name = Optimist
+thaven-mood-optimist-desc = Nothing is ever as bad as it seems. You're able to see the positives in any situation.
+
+thaven-mood-hypochondriac-name = Hypochondriac
+thaven-mood-hypochondriac-desc = You've been sickly since you were a child. Everything negative you experience is the result of a potentially terminal illness, for which you need immediate medical treatment.
+
+thaven-mood-imposter-syndrome-name = Imposter Syndrome
+thaven-mood-imposter-syndrome-desc = You feel your life experience drain from your mind. You are brand-new at your job, unsure of how anything works. You should probably find someone experienced to show you the ropes.
+
+thaven-mood-centrist-name = Centrist
+thaven-mood-centrist-desc = You are ambivalent towards any and all decisions, and refuse to take sides.
+
+thaven-mood-public-sector-name = Public Sector
+thaven-mood-public-sector-desc = Your job should not be done in private if it can be helped. If at all possible, you should renovate the facilities to allow public access to a view of your workplace.
+
+thaven-mood-stinky-name = Everyone Stinks
+thaven-mood-stinky-desc = The smell of the crew revolts you. You must inform them of their stench.
+
+thaven-mood-zen-arcade-name = Zen Arcade
+thaven-mood-zen-arcade-desc = You are the God of Gaming. Any time you walk past an arcade machine, you must play it.
+
+thaven-mood-speech-restriction-name = {$speechType ->
+ *[FullNameAndTitle] Full Name And Title
+ [NamesAreRude] Names Are Rude
+ [Clarity] Clarity Is Vital
+ [SwearingGood] !@$%#ing @$^%*#@!$
+ [StatementOnly] Asking Questions Is Rude
+ [Imitation] I Wanna Be Like You
+ [Unclarity] Nothing Is Certain
+ [SwearingBad] Thou Shalt Not Curse
+ [QuestionOnly] Nothing Is Certain?
+ [MustAnswer] Center Of The Universe
+ [OnlyWhisper] Inside Voice
+ [OnlyYell] Outside Voice
+ [Rhyme] Poet
+ [Alliterate] Always Alliterate At All Apportunities
+ [ThirdPerson] Third Person
+ [TitleCase] Title Case
+ [PirateSpeak] Piratespeak Is The Height Of Fashion
+}
+thaven-mood-speech-restriction-desc = {$speechType ->
+ *[FullNameAndTitle] Thaven refuse to acknowledge anyone who fails to refer to them using their full name, and expect everyone else to do the same.
+ [NamesAreRude] Using one's name is terribly personal for everyday conversation. Proper etiquette is to only refer to others by description.
+ [Clarity] Misunderstandings are the primary cause of conflict. You should be excessively clear and honest in your speech, explaining every minute detail, to avoid miscommunication.
+ [SwearingGood] Swearing is the spice of any conversation, and should be used as much as reasonably possible.
+ [StatementOnly] It would be terribly impolite to go around flagrantly asking questions all over the place. You'd prefer to phrase everything as a concrete statement.
+ [Imitation] Imitation is the highest form of flattery. Attempting to emulate the mannerisms and accents of everyone you speak to will get you far in life.
+ [Unclarity] You should endeavor to be as indirect in your speech as possible, and never make a direct statement.
+ [SwearingBad] You find swearing extremely distasteful. Abstain from it, and encourage others to do the same.
+ [QuestionOnly] It's impolite to make concrete statements? You should phrase everything as a question, just to be safe?
+ [MustAnswer] All questions that you can hear are directed at you, and you alone.
+ [OnlyWhisper] You must whisper, as speaking too loudly is terribly rude.
+ [OnlyYell] [bold]YOU MUST YELL AT ALL TIMES TO DEMONSTRATE YOUR AUTHORITY!!!!![/bold]
+ [Rhyme] You must speak in rhymes at all tymes.
+ [Alliterate] Alliteration is virtuous. Endeavor to use it wherever possible.
+ [ThirdPerson] The third person point-of-view is the only respectful manner of speaking.
+ [TitleCase] You Are Miraculously Capable Of Pronouncing Capital Letters, And Believe It Is Important That You Do So.
+ [PirateSpeak] You should endeavor to speak like a pirate to the best of your ability.
+}
diff --git a/Resources/Locale/en-US/_Impstation/traits/traits.ftl b/Resources/Locale/en-US/_Impstation/traits/traits.ftl
new file mode 100644
index 0000000000..b367d571c9
--- /dev/null
+++ b/Resources/Locale/en-US/_Impstation/traits/traits.ftl
@@ -0,0 +1,2 @@
+trait-nocontractions-name = No contractions
+trait-nocontractions-desc = You are (mostly) incapable of using contractions.
\ No newline at end of file
diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/thaven.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/thaven.yml
new file mode 100644
index 0000000000..4a55ff585e
--- /dev/null
+++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/thaven.yml
@@ -0,0 +1,46 @@
+# Head
+- type: marking
+ id: ThavenCheekBarbels
+ bodyPart: HeadTop
+ markingCategory: HeadTop
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _DV/Mobs/Customization/thaven.rsi
+ state: cheek_barbels
+
+- type: marking
+ id: ThavenEyebrowBarbels
+ bodyPart: HeadTop
+ markingCategory: HeadTop
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _DV/Mobs/Customization/thaven.rsi
+ state: eyebrow_barbels
+
+- type: marking
+ id: ThavenUnderbellyFace
+ bodyPart: HeadTop
+ markingCategory: HeadTop
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _DV/Mobs/Customization/thaven.rsi
+ state: underbelly_face
+
+# Torso
+- type: marking
+ id: ThavenUnderbellyTorso
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _DV/Mobs/Customization/thaven.rsi
+ state: underbelly_torso
+
+- type: marking
+ id: ThavenCarpSpots
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _DV/Mobs/Customization/thaven.rsi
+ state: carp_spots
diff --git a/Resources/Prototypes/DeltaV/typing_indicator.yml b/Resources/Prototypes/DeltaV/typing_indicator.yml
index e36394581d..e867d1e073 100644
--- a/Resources/Prototypes/DeltaV/typing_indicator.yml
+++ b/Resources/Prototypes/DeltaV/typing_indicator.yml
@@ -1,4 +1,4 @@
-- type: typingIndicator
+- type: typingIndicator
id: felinid
spritePath: /Textures/DeltaV/Effects/speech.rsi
typingState: felinid0
@@ -14,4 +14,10 @@
id: Chitinid
spritePath: /Textures/DeltaV/Effects/speech.rsi
typingState: chitinid0
- offset: -0.2, 0.1 # 0625
\ No newline at end of file
+ offset: -0.2, 0.1 # 0625
+
+- type: typingIndicator
+ id: Thaven
+ spritePath: /Textures/_EE/Effects/speech.rsi
+ typingState: thaven0
+ offset: 0, 0.1 # 0625
diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml
index 54cc95347a..aa1caadb63 100644
--- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml
+++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml
@@ -2,7 +2,7 @@
id: GauzeLefteyePatch
bodyPart: Eyes
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
+ speciesRestriction: [Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC, Thaven] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
coloring:
default:
type:
@@ -16,7 +16,7 @@
id: GauzeLefteyePad
bodyPart: Eyes
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
+ speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC, Thaven] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
coloring:
default:
type:
@@ -30,7 +30,7 @@
id: GauzeRighteyePatch
bodyPart: Eyes
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
+ speciesRestriction: [Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC, Thaven] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
coloring:
default:
type:
@@ -44,7 +44,7 @@
id: GauzeRighteyePad
bodyPart: Eyes
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
+ speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC, Thaven] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
coloring:
default:
type:
@@ -58,7 +58,7 @@
id: GauzeBlindfold
bodyPart: Eyes
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Arachnid, Felinid, Oni, Harpy, Vulpkanin, Arachne, Lamia, Tajaran, IPC] # Delta V - Felinid, Oni, Harpy, Vulpkanin; Einstein Engines - Tajaran
+ speciesRestriction: [Dwarf, Human, Arachnid, Felinid, Oni, Harpy, Vulpkanin, Arachne, Lamia, Tajaran, IPC, Thaven] # Delta V - Felinid, Oni, Harpy, Vulpkanin; Einstein Engines - Tajaran
coloring:
default:
type:
@@ -72,7 +72,7 @@
id: GauzeShoulder
bodyPart: Chest
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
+ speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC, Thaven] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
coloring:
default:
type:
@@ -86,7 +86,7 @@
id: GauzeStomach
bodyPart: Chest
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
+ speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC, Thaven] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
coloring:
default:
type:
@@ -100,7 +100,7 @@
id: GauzeUpperArmRight
bodyPart: RArm
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
+ speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC, Thaven] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
coloring:
default:
type:
@@ -114,7 +114,7 @@
id: GauzeLowerArmRight
bodyPart: RArm, RHand
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
+ speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC, Thaven] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
coloring:
default:
type:
@@ -128,7 +128,7 @@
id: GauzeLeftArm
bodyPart: LArm, LHand
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Tajaran] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
+ speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Tajaran, Thaven] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
coloring:
default:
type:
@@ -142,7 +142,7 @@
id: GauzeLowerLegLeft
bodyPart: LFoot
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, Tajaran, IPC] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
+ speciesRestriction: [Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, Tajaran, IPC, Thaven] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
coloring:
default:
type:
@@ -156,7 +156,7 @@
id: GauzeUpperLegLeft
bodyPart: LLeg
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Tajaran, IPC] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
+ speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Tajaran, IPC, Thaven] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
coloring:
default:
type:
@@ -170,7 +170,7 @@
id: GauzeUpperLegRight
bodyPart: RLeg
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Tajaran, IPC] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
+ speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Tajaran, IPC, Thaven] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
coloring:
default:
type:
@@ -184,7 +184,7 @@
id: GauzeLowerLegRight
bodyPart: RFoot
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, Tajaran, IPC] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
+ speciesRestriction: [Dwarf, Human, Arachnid, Felinid, Oni, Vulpkanin, Tajaran, IPC, Thaven] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
coloring:
default:
type:
@@ -198,7 +198,7 @@
id: GauzeBoxerWrapRight
bodyPart: RHand
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
+ speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC, Thaven] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
coloring:
default:
type:
@@ -212,7 +212,7 @@
id: GauzeBoxerWrapLeft
bodyPart: LHand
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
+ speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Vulpkanin, Arachne, Lamia, Tajaran, IPC, Thaven] # Delta V - Felinid, Oni, Vulpkanin; Einstein Engines - Tajaran
coloring:
default:
type:
@@ -226,7 +226,7 @@
id: GauzeHead
bodyPart: Head
markingCategory: Overlay
- speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia, IPC] # Delta V - Felinid, Oni, Vulpkanin # EE - Arachne, Lamia
+ speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Felinid, Oni, Vulpkanin, Arachne, Lamia, IPC, Thaven] # Delta V - Felinid, Oni, Vulpkanin # EE - Arachne, Lamia
coloring:
default:
type:
diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml
index 6b7dc94b07..bf92ab72dd 100644
--- a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml
+++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml
@@ -1672,4 +1672,4 @@
- type: FoodSequenceElement
entries:
Burger: XenoCutlet
- Taco: XenoCutlet
+ Taco: XenoCutlet
\ No newline at end of file
diff --git a/Resources/Prototypes/Guidebook/species.yml b/Resources/Prototypes/Guidebook/species.yml
index 2456559bbc..c0992fc337 100644
--- a/Resources/Prototypes/Guidebook/species.yml
+++ b/Resources/Prototypes/Guidebook/species.yml
@@ -16,6 +16,8 @@
- Plasmaman
- Chitinid
- Tajaran
+ # ImpStation additions
+ - Thaven
- type: guideEntry
id: Arachnid
diff --git a/Resources/Prototypes/_DV/GameRules/events.yml b/Resources/Prototypes/_DV/GameRules/events.yml
new file mode 100644
index 0000000000..789d29895e
--- /dev/null
+++ b/Resources/Prototypes/_DV/GameRules/events.yml
@@ -0,0 +1,9 @@
+- type: entity
+ parent: BaseGlimmerEvent
+ id: ThavenMoodUpset
+ components:
+ - type: GlimmerEvent
+ minimumGlimmer: 500
+ glimmerBurnLower: 30
+ glimmerBurnUpper: 70
+ - type: ThavenMoodUpsetRule
diff --git a/Resources/Prototypes/_Impstation/Accents/nocontractions_replacements.yml b/Resources/Prototypes/_Impstation/Accents/nocontractions_replacements.yml
new file mode 100644
index 0000000000..8b227fb22f
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Accents/nocontractions_replacements.yml
@@ -0,0 +1,138 @@
+- type: accent
+ id: nocontractions
+ wordReplacements:
+ accent-nocontractions-words-french: accent-nocontractions-words-replace-french
+ accent-nocontractions-words-1: accent-nocontractions-words-replace-1
+ accent-nocontractions-words-2: accent-nocontractions-words-replace-2
+ accent-nocontractions-words-3: accent-nocontractions-words-replace-3
+ accent-nocontractions-words-4: accent-nocontractions-words-replace-4
+ accent-nocontractions-words-5: accent-nocontractions-words-replace-5
+ accent-nocontractions-words-6: accent-nocontractions-words-replace-6
+ accent-nocontractions-words-7: accent-nocontractions-words-replace-7
+ accent-nocontractions-words-8: accent-nocontractions-words-replace-8
+ accent-nocontractions-words-9: accent-nocontractions-words-replace-9
+ accent-nocontractions-words-10: accent-nocontractions-words-replace-10
+ accent-nocontractions-words-11: accent-nocontractions-words-replace-11
+ accent-nocontractions-words-12: accent-nocontractions-words-replace-12
+ accent-nocontractions-words-13: accent-nocontractions-words-replace-13
+ accent-nocontractions-words-14: accent-nocontractions-words-replace-14
+ accent-nocontractions-words-15: accent-nocontractions-words-replace-15
+ accent-nocontractions-words-16: accent-nocontractions-words-replace-16
+ accent-nocontractions-words-17: accent-nocontractions-words-replace-17
+ accent-nocontractions-words-18: accent-nocontractions-words-replace-18
+ accent-nocontractions-words-19: accent-nocontractions-words-replace-19
+ accent-nocontractions-words-20: accent-nocontractions-words-replace-20
+ accent-nocontractions-words-21: accent-nocontractions-words-replace-21
+ accent-nocontractions-words-22: accent-nocontractions-words-replace-22
+ accent-nocontractions-words-23: accent-nocontractions-words-replace-23
+ accent-nocontractions-words-24: accent-nocontractions-words-replace-24
+ accent-nocontractions-words-25: accent-nocontractions-words-replace-25
+ accent-nocontractions-words-26: accent-nocontractions-words-replace-26
+ accent-nocontractions-words-27: accent-nocontractions-words-replace-27
+ accent-nocontractions-words-28: accent-nocontractions-words-replace-28
+ accent-nocontractions-words-29: accent-nocontractions-words-replace-29
+ accent-nocontractions-words-30: accent-nocontractions-words-replace-30
+ accent-nocontractions-words-31: accent-nocontractions-words-replace-31
+ accent-nocontractions-words-32: accent-nocontractions-words-replace-32
+ accent-nocontractions-words-33: accent-nocontractions-words-replace-33
+ accent-nocontractions-words-34: accent-nocontractions-words-replace-34
+ accent-nocontractions-words-35: accent-nocontractions-words-replace-35
+ accent-nocontractions-words-36: accent-nocontractions-words-replace-36
+ accent-nocontractions-words-37: accent-nocontractions-words-replace-37
+ accent-nocontractions-words-38: accent-nocontractions-words-replace-38
+ accent-nocontractions-words-39: accent-nocontractions-words-replace-39
+ accent-nocontractions-words-40: accent-nocontractions-words-replace-40
+ accent-nocontractions-words-41: accent-nocontractions-words-replace-41
+ accent-nocontractions-words-42: accent-nocontractions-words-replace-42
+ accent-nocontractions-words-43: accent-nocontractions-words-replace-43
+ accent-nocontractions-words-44: accent-nocontractions-words-replace-44
+ accent-nocontractions-words-45: accent-nocontractions-words-replace-45
+ accent-nocontractions-words-46: accent-nocontractions-words-replace-46
+ accent-nocontractions-words-47: accent-nocontractions-words-replace-47
+ accent-nocontractions-words-48: accent-nocontractions-words-replace-48
+ accent-nocontractions-words-49: accent-nocontractions-words-replace-49
+ accent-nocontractions-words-50: accent-nocontractions-words-replace-50
+ accent-nocontractions-words-51: accent-nocontractions-words-replace-51
+ accent-nocontractions-words-52: accent-nocontractions-words-replace-52
+ accent-nocontractions-words-53: accent-nocontractions-words-replace-53
+ accent-nocontractions-words-54: accent-nocontractions-words-replace-54
+ accent-nocontractions-words-55: accent-nocontractions-words-replace-55
+ accent-nocontractions-words-56: accent-nocontractions-words-replace-56
+ accent-nocontractions-words-57: accent-nocontractions-words-replace-57
+ accent-nocontractions-words-58: accent-nocontractions-words-replace-58
+ accent-nocontractions-words-59: accent-nocontractions-words-replace-59
+ accent-nocontractions-words-60: accent-nocontractions-words-replace-60
+ accent-nocontractions-words-61: accent-nocontractions-words-replace-61
+ accent-nocontractions-words-62: accent-nocontractions-words-replace-62
+ accent-nocontractions-words-63: accent-nocontractions-words-replace-63
+ accent-nocontractions-words-64: accent-nocontractions-words-replace-64
+ accent-nocontractions-words-65: accent-nocontractions-words-replace-65
+ accent-nocontractions-words-66: accent-nocontractions-words-replace-66
+ accent-nocontractions-words-67: accent-nocontractions-words-replace-67
+ accent-nocontractions-words-68: accent-nocontractions-words-replace-68
+ accent-nocontractions-words-69: accent-nocontractions-words-replace-69
+ accent-nocontractions-words-70: accent-nocontractions-words-replace-70
+ accent-nocontractions-words-71: accent-nocontractions-words-replace-71
+ accent-nocontractions-words-72: accent-nocontractions-words-replace-72
+ accent-nocontractions-words-73: accent-nocontractions-words-replace-73
+ accent-nocontractions-words-74: accent-nocontractions-words-replace-74
+ accent-nocontractions-words-75: accent-nocontractions-words-replace-75
+ accent-nocontractions-words-76: accent-nocontractions-words-replace-76
+ accent-nocontractions-words-77: accent-nocontractions-words-replace-77
+ accent-nocontractions-words-78: accent-nocontractions-words-replace-78
+ accent-nocontractions-words-79: accent-nocontractions-words-replace-79
+ accent-nocontractions-words-80: accent-nocontractions-words-replace-80
+ accent-nocontractions-words-81: accent-nocontractions-words-replace-81
+ accent-nocontractions-words-82: accent-nocontractions-words-replace-82
+ accent-nocontractions-words-83: accent-nocontractions-words-replace-83
+ accent-nocontractions-words-84: accent-nocontractions-words-replace-84
+ accent-nocontractions-words-85: accent-nocontractions-words-replace-85
+ accent-nocontractions-words-86: accent-nocontractions-words-replace-86
+ accent-nocontractions-words-87: accent-nocontractions-words-replace-87
+ accent-nocontractions-words-88: accent-nocontractions-words-replace-88
+ accent-nocontractions-words-89: accent-nocontractions-words-replace-89
+ accent-nocontractions-words-90: accent-nocontractions-words-replace-90
+ accent-nocontractions-words-91: accent-nocontractions-words-replace-91
+ accent-nocontractions-words-92: accent-nocontractions-words-replace-92
+ accent-nocontractions-words-93: accent-nocontractions-words-replace-93
+ accent-nocontractions-words-94: accent-nocontractions-words-replace-94
+ accent-nocontractions-words-95: accent-nocontractions-words-replace-95
+ accent-nocontractions-words-96: accent-nocontractions-words-replace-96
+ accent-nocontractions-words-97: accent-nocontractions-words-replace-97
+ accent-nocontractions-words-98: accent-nocontractions-words-replace-98
+ accent-nocontractions-words-99: accent-nocontractions-words-replace-99
+ accent-nocontractions-words-100: accent-nocontractions-words-replace-100
+ accent-nocontractions-words-101: accent-nocontractions-words-replace-101
+ accent-nocontractions-words-102: accent-nocontractions-words-replace-102
+ accent-nocontractions-words-103: accent-nocontractions-words-replace-103
+ accent-nocontractions-words-104: accent-nocontractions-words-replace-104
+ accent-nocontractions-words-105: accent-nocontractions-words-replace-105
+ accent-nocontractions-words-106: accent-nocontractions-words-replace-106
+ accent-nocontractions-words-107: accent-nocontractions-words-replace-107
+ accent-nocontractions-words-108: accent-nocontractions-words-replace-108
+ accent-nocontractions-words-109: accent-nocontractions-words-replace-109
+ accent-nocontractions-words-110: accent-nocontractions-words-replace-110
+ accent-nocontractions-words-111: accent-nocontractions-words-replace-111
+ accent-nocontractions-words-112: accent-nocontractions-words-replace-112
+ accent-nocontractions-words-113: accent-nocontractions-words-replace-113
+ accent-nocontractions-words-114: accent-nocontractions-words-replace-114
+ accent-nocontractions-words-115: accent-nocontractions-words-replace-115
+ accent-nocontractions-words-116: accent-nocontractions-words-replace-116
+ accent-nocontractions-words-117: accent-nocontractions-words-replace-117
+ accent-nocontractions-words-118: accent-nocontractions-words-replace-118
+ accent-nocontractions-words-119: accent-nocontractions-words-replace-119
+ accent-nocontractions-words-120: accent-nocontractions-words-replace-120
+ accent-nocontractions-words-121: accent-nocontractions-words-replace-121
+ accent-nocontractions-words-122: accent-nocontractions-words-replace-122
+ accent-nocontractions-words-123: accent-nocontractions-words-replace-123
+ accent-nocontractions-words-124: accent-nocontractions-words-replace-124
+ accent-nocontractions-words-125: accent-nocontractions-words-replace-125
+ accent-nocontractions-words-126: accent-nocontractions-words-replace-126
+ accent-nocontractions-words-127: accent-nocontractions-words-replace-127
+ accent-nocontractions-words-128: accent-nocontractions-words-replace-128
+ accent-nocontractions-words-129: accent-nocontractions-words-replace-129
+ accent-nocontractions-words-130: accent-nocontractions-words-replace-130
+ accent-nocontractions-words-131: accent-nocontractions-words-replace-131
+ accent-nocontractions-words-132: accent-nocontractions-words-replace-132
+ accent-nocontractions-words-133: accent-nocontractions-words-replace-133
+ accent-nocontractions-words-134: accent-nocontractions-words-replace-134
diff --git a/Resources/Prototypes/_Impstation/Actions/spelfs.yml b/Resources/Prototypes/_Impstation/Actions/spelfs.yml
new file mode 100644
index 0000000000..2e3dfa8218
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Actions/spelfs.yml
@@ -0,0 +1,14 @@
+- type: entity
+ id: ActionViewMoods
+ name: View Moods
+ description: View your current moods.
+ components:
+ - type: InstantAction
+ itemIconStyle: NoItem
+ checkCanInteract: false
+ checkConsciousness: false
+ icon:
+ sprite: Interface/Actions/actions_borg.rsi
+ state: state-laws
+ event: !type:ToggleMoodsScreenEvent
+ useDelay: 0.5
diff --git a/Resources/Prototypes/_Impstation/Body/Organs/thaven.yml b/Resources/Prototypes/_Impstation/Body/Organs/thaven.yml
new file mode 100644
index 0000000000..f8c91affa3
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Body/Organs/thaven.yml
@@ -0,0 +1,9 @@
+- type: entity
+ id: OrganThavenBrain
+ parent: [BaseItem, OrganHumanBrain]
+ name: thaven brain
+ description: "An organic positronic brain. Quite remarkable, really."
+ components:
+ - type: Sprite
+ sprite: _Impstation/Mobs/Species/Thaven/organs.rsi
+ state: brain-thaven
diff --git a/Resources/Prototypes/_Impstation/Body/Parts/thaven.yml b/Resources/Prototypes/_Impstation/Body/Parts/thaven.yml
new file mode 100644
index 0000000000..c297575f8e
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Body/Parts/thaven.yml
@@ -0,0 +1,90 @@
+- type: entity
+ id: PartThaven
+ parent: [BaseItem, BasePart]
+ name: "thaven body part"
+ abstract: true
+ components:
+ - type: Sprite # Shitmed Change
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi
+ - type: BodyPart # Shitmed Change
+ species: Thaven
+
+- type: entity
+ id: TorsoThaven
+ name: "thaven torso"
+ parent: [PartThaven, BaseTorso]
+ components:
+ - type: Sprite
+ state: "torso_m"
+
+- type: entity
+ id: HeadThaven
+ name: "thaven head"
+ parent: [PartThaven, BaseHead]
+ components:
+ - type: Sprite
+ state: "head"
+
+- type: entity
+ id: LeftArmThaven
+ name: "left thaven arm"
+ parent: [PartThaven, BaseLeftArm]
+ components:
+ - type: Sprite
+ state: "l_arm"
+
+- type: entity
+ id: RightArmThaven
+ name: "right thaven arm"
+ parent: [PartThaven, BaseRightArm]
+ components:
+ - type: Sprite
+ state: "r_arm"
+
+- type: entity
+ id: LeftHandThaven
+ name: "left thaven hand"
+ parent: [PartThaven, BaseLeftHand]
+ components:
+ - type: Sprite
+ state: "l_hand"
+
+- type: entity
+ id: RightHandThaven
+ name: "right thaven hand"
+ parent: [PartThaven, BaseRightHand]
+ components:
+ - type: Sprite
+ state: "r_hand"
+
+- type: entity
+ id: LeftLegThaven
+ name: "left thaven leg"
+ parent: [PartThaven, BaseLeftLeg]
+ components:
+ - type: Sprite
+ state: "l_leg"
+
+- type: entity
+ id: RightLegThaven
+ name: "right thaven leg"
+ parent: [PartThaven, BaseRightLeg]
+ components:
+ - type: Sprite
+ state: "r_leg"
+
+- type: entity
+ id: LeftFootThaven
+ name: "left thaven foot"
+ parent: [PartThaven, BaseLeftFoot]
+ components:
+ - type: Sprite
+ state: "l_foot"
+
+- type: entity
+ id: RightFootThaven
+ name: "right thaven foot"
+ parent: [PartThaven, BaseRightFoot]
+ components:
+ - type: Sprite
+ state: "r_foot"
diff --git a/Resources/Prototypes/_Impstation/Body/Prototypes/thaven.yml b/Resources/Prototypes/_Impstation/Body/Prototypes/thaven.yml
new file mode 100644
index 0000000000..e0541b691f
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Body/Prototypes/thaven.yml
@@ -0,0 +1,50 @@
+- type: body
+ id: Thaven
+ name: "thaven"
+ root: torso
+ slots:
+ head:
+ part: HeadThaven
+ connections:
+ - torso
+ organs:
+ brain: OrganThavenBrain
+ eyes: OrganHumanEyes
+ torso:
+ part: TorsoThaven
+ connections:
+ - right arm
+ - left arm
+ - right leg
+ - left leg
+ - head # Shitmed Change
+ organs:
+ heart: OrganHumanHeart
+ lungs: OrganHumanLungs
+ stomach: OrganHumanStomach
+ liver: OrganHumanLiver
+ kidneys: OrganHumanKidneys
+ right arm:
+ part: RightArmThaven
+ connections:
+ - right hand
+ left arm:
+ part: LeftArmThaven
+ connections:
+ - left hand
+ right hand:
+ part: RightHandThaven
+ left hand:
+ part: LeftHandThaven
+ right leg:
+ part: RightLegThaven
+ connections:
+ - right foot
+ left leg:
+ part: LeftLegThaven
+ connections:
+ - left foot
+ right foot:
+ part: RightFootThaven
+ left foot:
+ part: LeftFootThaven
diff --git a/Resources/Prototypes/_Impstation/Damage/thaven.yml b/Resources/Prototypes/_Impstation/Damage/thaven.yml
new file mode 100644
index 0000000000..999e89f604
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Damage/thaven.yml
@@ -0,0 +1,11 @@
+- type: damageModifierSet
+ id: Thaven
+ coefficients:
+ Blunt: 1.1
+ Slash: 1.1
+ Piercing: 1.1
+ Cold: .9
+ Heat: .9
+ Poison: .9
+ Cellular: 1.1
+ Radiation: 1.2
diff --git a/Resources/Prototypes/_Impstation/Datasets/Names/thaven.yml b/Resources/Prototypes/_Impstation/Datasets/Names/thaven.yml
new file mode 100644
index 0000000000..03ff631273
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Datasets/Names/thaven.yml
@@ -0,0 +1,79 @@
+- type: dataset
+ id: names_thaven
+ values:
+ - Honesty
+ - Have Mercy
+ - Give Thanks To Thine Ancestors
+ - Obedience
+ - Search The Scriptures
+ - Learn Many Things
+ - Praise The Gods
+ - Fear Be Unto The Gods
+ - Joy In Sorrow
+ - Die Well
+ - Wander Far And Wide
+ - Lament The Fallen
+ - Prove Thy Worth
+ - Desire
+ - Charity
+ - Faith
+ - Harmony
+ - Modesty
+ - Honor Thy Family
+ - Patient As The Dead
+ - Temper Thy Heart And Soul
+ - Tell Only The Truth
+ - Thou Art Loved
+ - Thou Art Damned
+ - Aid The Righteous
+ - Be Courteous
+ - Make Peace
+ - Fear The Gods
+ - Forsake Alcohol
+ - Fight Evil At All Costs
+ - Shun The Unworthy
+ - Gain Wisdom Through Experience
+ - Live Well And Die Young
+ - Face Trials And Tribulations
+ - Pardon Worthy Criminals
+ - Find Merit In All Things
+ - Deny Sin Its Due
+ - Stand Fast Against Evil
+ - Do As The Gods Will
+ - Zeal Of The Land
+ - Be Courteous To Others
+ - Considerate
+ - Discipline
+ - Do Right By Your Neighbors
+ - Serve Your Purpose
+ - Good Things Come
+ - Magnify Injustice
+ - Legitimate First
+ - Take Pity On The Less-Fortunate
+ - Redeem Thy Past Mistakes
+ - Rejoice
+ - Repent All Ye Sinners
+ - Return To Thy Homeland
+ - Deliverance
+ - See Truth
+ - Drink Full And Descend
+ - Do Thy Best
+ - Live The Day Like Thy Last
+ - Adaptability
+ - Endurance
+ - Negativity
+ - Attentiveness
+ - Foppishness
+ - One Before All
+ - Purpose
+ - Simplicity
+ - Minimalism
+ - Proselytism
+ - Conformity
+ - The Perils of Hedonism
+ - Volition
+ - Gumption
+ - Providence
+ - Righteousness
+ - Wisdom
+ - Cunning
diff --git a/Resources/Prototypes/_Impstation/Entities/Consumable/Food/meat.yml b/Resources/Prototypes/_Impstation/Entities/Consumable/Food/meat.yml
new file mode 100644
index 0000000000..fa5792deec
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Entities/Consumable/Food/meat.yml
@@ -0,0 +1,27 @@
+- type: entity
+ name: raw thaven fillet
+ parent: FoodMeatBase
+ # MeatFish?...
+ id: FoodThavenMeat
+ description: Concerning.
+ components:
+ - type: FlavorProfile
+ flavors:
+ - fishy
+ - type: Tag
+ tags:
+ - Raw
+ - Meat
+ - type: Sprite
+ state: fish
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ reagents:
+ - ReagentId: CarpoToxin
+ Quantity: 5
+ - type: Extractable
+ juiceSolution:
+ reagents:
+ - ReagentId: CarpoToxin
+ Quantity: 5
\ No newline at end of file
diff --git a/Resources/Prototypes/_Impstation/Entities/Mobs/Customization/Markings/misc.yml b/Resources/Prototypes/_Impstation/Entities/Mobs/Customization/Markings/misc.yml
index 14c2014fbe..05147e5ff8 100644
--- a/Resources/Prototypes/_Impstation/Entities/Mobs/Customization/Markings/misc.yml
+++ b/Resources/Prototypes/_Impstation/Entities/Mobs/Customization/Markings/misc.yml
@@ -900,4 +900,231 @@
followSkinColor: true
sprites:
- sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
- state: chitinidbeetlehorn2
\ No newline at end of file
+ state: chitinidbeetlehorn2
+
+- type: marking
+ id: Gills
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thavenchestgills
+
+- type: marking
+ id: ThavenChestScales
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thavenchestscales
+
+- type: marking
+ id: ThavenHeadScales
+ bodyPart: Head
+ markingCategory: HeadTop
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thavenheadscales
+
+- type: marking
+ id: ThavenLArmScales
+ bodyPart: LArm
+ markingCategory: LeftArm
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thavenleftarmscales
+
+- type: marking
+ id: ThavenRArmScales
+ bodyPart: RArm
+ markingCategory: RightArm
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thavenrightarmscales
+
+- type: marking
+ id: ThavenLLegScales
+ bodyPart: LLeg
+ markingCategory: LeftLeg
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thavenleftlegscales
+
+- type: marking
+ id: ThavenRLegScales
+ bodyPart: RLeg
+ markingCategory: RightLeg
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thavenrightlegscales
+
+- type: marking
+ id: ThavenFishEars
+ bodyPart: HeadSide
+ markingCategory: Headside
+ speciesRestriction: [ Thaven ]
+ forcedColoring: true
+ followSkinColor: true
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thavenfishears
+
+- type: marking
+ id: ThavenTattooVines
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thaventattoovines
+
+- type: marking
+ id: ThavenSpines
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thavenspines
+
+- type: marking
+ id: ThavenBiteMark
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thavenbitemark
+
+- type: marking
+ id: ThavenTattooWave
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thaventattoowave
+
+- type: marking
+ id: SharkminnowEyeliner
+ bodyPart: HeadTop
+ markingCategory: HeadTop
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thaventattoosharkminnoweyeliner
+
+- type: marking
+ id: ThavenTiger
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thaventiger1
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thaventiger2
+
+- type: marking
+ id: ThavenTigerRArm
+ bodyPart: RArm
+ markingCategory: RightArm
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thaventigerarmsr
+
+- type: marking
+ id: ThavenTigerLArm
+ bodyPart: LArm
+ markingCategory: LeftArm
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thaventigerarmsl
+
+- type: marking
+ id: ThavenHeadStripes
+ bodyPart: Head
+ markingCategory: Head
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thavenheadstripes
+
+- type: marking
+ id: ThavenBodyStripes
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thavenbodystripes
+
+- type: marking
+ id: ThavenEarsBigFins
+ bodyPart: HeadSide
+ markingCategory: HeadSide
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thavenearsbigfins
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thavenearsbigfins2
+
+- type: marking
+ id: ThavenHeadCap
+ bodyPart: Head
+ markingCategory: Head
+ speciesRestriction: [ Thaven ]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thavenheadcap1
+ - sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
+ state: thavenheadcap2
+
diff --git a/Resources/Prototypes/_Impstation/Entities/Mobs/Customization/Markings/thaven.yml b/Resources/Prototypes/_Impstation/Entities/Mobs/Customization/Markings/thaven.yml
new file mode 100644
index 0000000000..bdf07d3c67
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Entities/Mobs/Customization/Markings/thaven.yml
@@ -0,0 +1,107 @@
+- type: marking
+ id: ThavenEars1
+ bodyPart: HeadSide
+ markingCategory: HeadSide
+ speciesRestriction: [Thaven]
+ forcedColoring: true
+ followSkinColor: true
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven.rsi
+ state: ears1
+
+- type: marking
+ id: ThavenEars2
+ bodyPart: HeadSide
+ markingCategory: HeadSide
+ speciesRestriction: [Thaven]
+ forcedColoring: true
+ followSkinColor: true
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven.rsi
+ state: ears2
+
+- type: marking
+ id: ThavenEars3
+ bodyPart: HeadSide
+ markingCategory: HeadSide
+ speciesRestriction: [Thaven]
+ forcedColoring: true
+ followSkinColor: true
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven.rsi
+ state: ears3
+
+- type: marking
+ id: ThavenEars4
+ bodyPart: HeadSide
+ markingCategory: HeadSide
+ speciesRestriction: [Thaven]
+ forcedColoring: true
+ followSkinColor: true
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven.rsi
+ state: ears4
+
+- type: marking
+ id: ThavenPiercings
+ bodyPart: HeadTop
+ markingCategory: HeadTop
+ speciesRestriction: [Thaven]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven.rsi
+ state: piercings
+
+- type: marking
+ id: ThavenPiercings2
+ bodyPart: HeadTop
+ markingCategory: HeadTop
+ speciesRestriction: [Thaven]
+ forcedColoring: false
+ followSkinColor: false
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven.rsi
+ state: piercings2
+
+- type: marking
+ id: ThavenChestTattoo1
+ bodyPart: Chest
+ markingCategory: Chest
+ speciesRestriction: [Thaven]
+ coloring:
+ default:
+ type:
+ !type:TattooColoring
+ fallbackColor: "#666666"
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven.rsi
+ state: chesttat1
+
+- type: marking
+ id: ThavenLArmTattoo1
+ bodyPart: LArm
+ markingCategory: LeftArm
+ speciesRestriction: [Thaven]
+ coloring:
+ default:
+ type:
+ !type:TattooColoring
+ fallbackColor: "#666666"
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven.rsi
+ state: larmtat1
+
+- type: marking
+ id: ThavenRArmTattoo1
+ bodyPart: RArm
+ markingCategory: RightArm
+ speciesRestriction: [Thaven]
+ coloring:
+ default:
+ type:
+ !type:TattooColoring
+ fallbackColor: "#666666"
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven.rsi
+ state: rarmtat1
diff --git a/Resources/Prototypes/_Impstation/Entities/Mobs/Customization/Markings/thaven_hair.yml b/Resources/Prototypes/_Impstation/Entities/Mobs/Customization/Markings/thaven_hair.yml
new file mode 100644
index 0000000000..a62cf63c5c
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Entities/Mobs/Customization/Markings/thaven_hair.yml
@@ -0,0 +1,1496 @@
+- type: marking
+ id: ThavenHairBalding
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: e
+- type: marking
+ id: ThavenHairBedhead
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bedhead
+- type: marking
+ id: ThavenHairBedheadv2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bedhead2
+- type: marking
+ id: ThavenHairBedheadv3
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bedhead3
+- type: marking
+ id: ThavenHairLongBedhead
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: long_bedhead
+- type: marking
+ id: ThavenHairLongBedhead2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: long_bedhead2
+- type: marking
+ id: ThavenHairFloorlengthBedhead
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: floorlength_bedhead
+- type: marking
+ id: ThavenHairBeehive
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: beehive
+- type: marking
+ id: ThavenHairBeehive2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: beehive2
+- type: marking
+ id: ThavenHairBob
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bob
+- type: marking
+ id: ThavenHairBob2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bob2
+- type: marking
+ id: ThavenHairBobcut
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bobcut
+- type: marking
+ id: ThavenHairBob4
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bob4
+- type: marking
+ id: ThavenHairBob5
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bob5
+- type: marking
+ id: ThavenHairBobcurl
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bobcurl
+- type: marking
+ id: ThavenHairBowlcut
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bowlcut
+- type: marking
+ id: ThavenHairBowlcut2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bowlcut2
+- type: marking
+ id: ThavenHairBraid
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: braid
+- type: marking
+ id: ThavenHairBraided
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: braided
+- type: marking
+ id: ThavenHairBraidfront
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: braidfront
+- type: marking
+ id: ThavenHairBraid2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: braid2
+- type: marking
+ id: ThavenHairHbraid
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: hbraid
+- type: marking
+ id: ThavenHairShortbraid
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: shortbraid
+- type: marking
+ id: ThavenHairBraidtail
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: braidtail
+- type: marking
+ id: ThavenHairBun
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bun
+- type: marking
+ id: ThavenHairBunhead2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bunhead2
+- type: marking
+ id: ThavenHairBun3
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bun3
+- type: marking
+ id: ThavenHairLargebun
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: largebun
+- type: marking
+ id: ThavenHairManbun
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: manbun
+- type: marking
+ id: ThavenHairTightbun
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: tightbun
+- type: marking
+ id: ThavenHairBusiness
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: business
+- type: marking
+ id: ThavenHairBusiness2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: business2
+- type: marking
+ id: ThavenHairBusiness3
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: business3
+- type: marking
+ id: ThavenHairBusiness4
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: business4
+- type: marking
+ id: ThavenHairBuzzcut
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: buzzcut
+- type: marking
+ id: ThavenHairCia
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: cia
+- type: marking
+ id: ThavenHairClassicCia
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: classiccia
+- type: marking
+ id: ThavenHairClassicFloorlengthBedhead
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: classicfloorlength_bedhead
+- type: marking
+ id: ThavenHairClassicModern
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: classicmodern
+- type: marking
+ id: ThavenHairClassicMulder
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: classicmulder
+- type: marking
+ id: ThavenHairClassicWisp
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: classicwisp
+- type: marking
+ id: ThavenHairCombover
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: combover
+- type: marking
+ id: ThavenHairCornrows
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: cornrows
+- type: marking
+ id: ThavenHairCornrows2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: cornrows2
+- type: marking
+ id: ThavenHairCornrowbun
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: cornrowbun
+- type: marking
+ id: ThavenHairCornrowbraid
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: cornrowbraid
+- type: marking
+ id: ThavenHairCornrowtail
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: cornrowtail
+- type: marking
+ id: ThavenHairCrewcut
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: crewcut
+- type: marking
+ id: ThavenHairCrewcut2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: crewcut2
+- type: marking
+ id: ThavenHairCurls
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: curls
+- type: marking
+ id: ThavenHairC
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: c
+- type: marking
+ id: ThavenHairDandypompadour
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: dandypompadour
+- type: marking
+ id: ThavenHairDevilock
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: devilock
+- type: marking
+ id: ThavenHairDoublebun
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: doublebun
+- type: marking
+ id: ThavenHairDoublebunLong
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: doublebun_long
+- type: marking
+ id: ThavenHairDreads
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: dreads
+- type: marking
+ id: ThavenHairDrillruru
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: drillruru
+- type: marking
+ id: ThavenHairDrillhairextended
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: drillhairextended
+- type: marking
+ id: ThavenHairEmofringe
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: emofringe
+- type: marking
+ id: ThavenHairNofade
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: nofade
+- type: marking
+ id: ThavenHairHighfade
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: highfade
+- type: marking
+ id: ThavenHairMedfade
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: medfade
+- type: marking
+ id: ThavenHairLowfade
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: lowfade
+- type: marking
+ id: ThavenHairBaldfade
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: baldface
+- type: marking
+ id: ThavenHairFeather
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: feather
+- type: marking
+ id: ThavenHairFather
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: father
+- type: marking
+ id: ThavenHairSargeant
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: sargeant
+- type: marking
+ id: ThavenHairFlair
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: flair
+- type: marking
+ id: ThavenHairBigflattop
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bigflattop
+- type: marking
+ id: ThavenHairFlow
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: f
+- type: marking
+ id: ThavenHairGelled
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: gelled
+- type: marking
+ id: ThavenHairGentle
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: gentle
+- type: marking
+ id: ThavenHairHalfbang
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: halfbang
+- type: marking
+ id: ThavenHairHalfbang2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: halfbang2
+- type: marking
+ id: ThavenHairHalfshaved
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: halfshaved
+- type: marking
+ id: ThavenHairHedgehog
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: hedgehog
+- type: marking
+ id: ThavenHairHimecut
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: himecut
+- type: marking
+ id: ThavenHairHimecut2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: himecut2
+- type: marking
+ id: ThavenHairShorthime
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: shorthime
+- type: marking
+ id: ThavenHairHimeup
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: himeup
+- type: marking
+ id: ThavenHairHitop
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: hitop
+- type: marking
+ id: ThavenHairJade
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: jade
+- type: marking
+ id: ThavenHairJensen
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: jensen
+- type: marking
+ id: ThavenHairJoestar
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: joestar
+- type: marking
+ id: ThavenHairKeanu
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: keanu
+- type: marking
+ id: ThavenHairKusanagi
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: kusanagi
+- type: marking
+ id: ThavenHairLong
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: long
+- type: marking
+ id: ThavenHairLong2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: long2
+- type: marking
+ id: ThavenHairLong3
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: long3
+- type: marking
+ id: ThavenHairLongWithBundles
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: longbundled
+- type: marking
+ id: ThavenHairLongovereye
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: longovereye
+- type: marking
+ id: ThavenHairLbangs
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: lbangs
+- type: marking
+ id: ThavenHairLongeremo
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: longeremo
+- type: marking
+ id: ThavenHairLongfringe
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: longfringe
+- type: marking
+ id: ThavenHairLongsidepart
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: longsidepart
+- type: marking
+ id: ThavenHairMegaeyebrows
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: megaeyebrows
+- type: marking
+ id: ThavenHairMessy
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: messy
+- type: marking
+ id: ThavenHairModern
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: modern
+- type: marking
+ id: ThavenHairMohawk
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: d
+- type: marking
+ id: ThavenHairNitori
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: nitori
+- type: marking
+ id: ThavenHairReversemohawk
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: reversemohawk
+- type: marking
+ id: ThavenHairMulder
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: mulder
+- type: marking
+ id: ThavenHairOdango
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: odango
+- type: marking
+ id: ThavenHairOmbre
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: ombre
+- type: marking
+ id: ThavenHairOneshoulder
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: oneshoulder
+- type: marking
+ id: ThavenHairShortovereye
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: shortovereye
+- type: marking
+ id: ThavenHairOxton
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: oxton
+- type: marking
+ id: ThavenHairParted
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: parted
+- type: marking
+ id: ThavenHairPart
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: part
+- type: marking
+ id: ThavenHairKagami
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: kagami
+- type: marking
+ id: ThavenHairPigtails
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: pigtails
+- type: marking
+ id: ThavenHairPigtails2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: pigtails2
+- type: marking
+ id: ThavenHairPixie
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: pixie
+- type: marking
+ id: ThavenHairPompadour
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: pompadour
+- type: marking
+ id: ThavenHairBigpompadour
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bigpompadour
+- type: marking
+ id: ThavenHairPonytail
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: ponytail
+- type: marking
+ id: ThavenHairPonytail2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: ponytail2
+- type: marking
+ id: ThavenHairPonytail3
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: ponytail3
+- type: marking
+ id: ThavenHairPonytail4
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: ponytail4
+- type: marking
+ id: ThavenHairPonytail5
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: ponytail5
+- type: marking
+ id: ThavenHairPonytail6
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: ponytail6
+- type: marking
+ id: ThavenHairPonytail7
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: ponytail7
+- type: marking
+ id: ThavenHairHighponytail
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: highponytail
+- type: marking
+ id: ThavenHairStail
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: stail
+- type: marking
+ id: ThavenHairLongstraightponytail
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: longstraightponytail
+- type: marking
+ id: ThavenHairCountry
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: country
+- type: marking
+ id: ThavenHairFringetail
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: fringetail
+- type: marking
+ id: ThavenHairSidetail
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: sidetail
+- type: marking
+ id: ThavenHairSidetail2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: sidetail2
+- type: marking
+ id: ThavenHairSidetail3
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: sidetail3
+- type: marking
+ id: ThavenHairSidetail4
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: sidetail4
+- type: marking
+ id: ThavenHairSpikyponytail
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: spikyponytail
+- type: marking
+ id: ThavenHairPoofy
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: poofy
+- type: marking
+ id: ThavenHairQuiff
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: quiff
+- type: marking
+ id: ThavenHairRonin
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: ronin
+- type: marking
+ id: ThavenHairShaved
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: shaved
+- type: marking
+ id: ThavenHairShavedpart
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: shavedpart
+- type: marking
+ id: ThavenHairShortbangs
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: shortbangs
+- type: marking
+ id: ThavenHairA
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: a
+- type: marking
+ id: ThavenHairShorthair2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: shorthair2
+- type: marking
+ id: ThavenHairShorthair3
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: shorthair3
+- type: marking
+ id: ThavenHairShorthair9
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: shorthair9
+- type: marking
+ id: ThavenHair80s
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: 80s
+- type: marking
+ id: ThavenHairRosa
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: rosa
+- type: marking
+ id: ThavenHairB
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: b
+- type: marking
+ id: ThavenHairSidecut
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: sidecut
+- type: marking
+ id: ThavenHairSkinhead
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: skinhead
+- type: marking
+ id: ThavenHairProtagonist
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: protagonist
+- type: marking
+ id: ThavenHairSpiky
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: spiky
+- type: marking
+ id: ThavenHairSpookyLong
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: spookylong
+- type: marking
+ id: ThavenHairSwept
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: swept
+- type: marking
+ id: ThavenHairSwept2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: swept2
+- type: marking
+ id: ThavenHairShoulderLengthOverEye
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: shoulderlengthovereye
+- type: marking
+ id: ThavenHairThinning
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: thinning
+- type: marking
+ id: ThavenHairThinningfront
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: thinningfront
+- type: marking
+ id: ThavenHairThinningrear
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: thinningrear
+- type: marking
+ id: ThavenHairTopknot
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: topknot
+- type: marking
+ id: ThavenHairTressshoulder
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: tressshoulder
+- type: marking
+ id: ThavenHairTrimmed
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: trimmed
+- type: marking
+ id: ThavenHairTrimflat
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: trimflat
+- type: marking
+ id: ThavenHairTwintail
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: twintail
+- type: marking
+ id: ThavenHairTwoStrands
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: twostrands
+- type: marking
+ id: ThavenHairUndercut
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: undercut
+- type: marking
+ id: ThavenHairUndercutleft
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: undercutleft
+- type: marking
+ id: ThavenHairUndercutright
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: undercutright
+- type: marking
+ id: ThavenHairUnkept
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: unkept
+- type: marking
+ id: ThavenHairVlong
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: vlong
+- type: marking
+ id: ThavenHairLongest
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: longest
+- type: marking
+ id: ThavenHairLongest2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: longest2
+- type: marking
+ id: ThavenHairVeryshortovereyealternate
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: veryshortovereyealternate
+- type: marking
+ id: ThavenHairVlongfringe
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: vlongfringe
+- type: marking
+ id: ThavenHairVolaju
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: volaju
+- type: marking
+ id: ThavenHairWisp
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: wisp
+- type: marking
+ id: ThavenHairUneven
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: uneven
+- type: marking
+ id: ThavenHairTailed
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: tailed
+- type: marking
+ id: ThavenHairClassicLong2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: classiclong2
+- type: marking
+ id: ThavenHairClassicLong3
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: classiclong3
+- type: marking
+ id: ThavenHairBald
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: bald
+- type: marking
+ id: ThavenHairShavedMohawk
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: shavedmohawk
+- type: marking
+ id: ThavenHairMediumSidepart
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: mediumsidepart
+- type: marking
+ id: ThavenHairEmo2
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: emo2
+- type: marking
+ id: ThavenHairDrillHair
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: drillhair
+- type: marking
+ id: ThavenHairClassicAfro
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: classicafro
+- type: marking
+ id: ThavenHairClassicciaBusiness
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: classicciabusiness
+- type: marking
+ id: ThavenHairClassicCornrows
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: classiccornrows
+- type: marking
+ id: ThavenHairCoffeeHouse
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: coffeehouse
+- type: marking
+ id: ThavenHairFrenchbraid
+ bodyPart: Hair
+ markingCategory: Hair
+ speciesRestriction: [Thaven]
+ sprites:
+ - sprite: _Impstation/Mobs/Customization/thaven/thaven_hair.rsi
+ state: frenchbraid
diff --git a/Resources/Prototypes/_Impstation/Entities/Mobs/Player/thaven.yml b/Resources/Prototypes/_Impstation/Entities/Mobs/Player/thaven.yml
new file mode 100644
index 0000000000..76648e96f2
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Entities/Mobs/Player/thaven.yml
@@ -0,0 +1,5 @@
+- type: entity
+ save: false
+ name: Urist McEars
+ parent: BaseMobThaven
+ id: MobThaven
diff --git a/Resources/Prototypes/_Impstation/Entities/Mobs/Species/thaven.yml b/Resources/Prototypes/_Impstation/Entities/Mobs/Species/thaven.yml
new file mode 100644
index 0000000000..43ade8c144
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Entities/Mobs/Species/thaven.yml
@@ -0,0 +1,229 @@
+- type: entity
+ save: false
+ name: Urist McEars
+ parent: BaseMobSpeciesOrganic
+ id: BaseMobThaven
+ abstract: true
+ components:
+ - type: Hunger
+ - type: Thirst
+ - type: Icon
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi # Unlike dwarves elves are NOT made of slime
+ state: full
+ - type: ThavenMoods
+ - type: Respirator
+ damage:
+ types:
+ Asphyxiation: 2
+ damageRecovery:
+ types:
+ Asphyxiation: -1.0
+ - type: Sprite
+ noRot: true
+ drawdepth: Mobs
+ scale: 1, 1.05
+ - type: Body
+ prototype: Thaven
+ requiredLegs: 2
+ - type: NoContractionsAccent
+ - type: Damageable
+ damageContainer: Biological
+ damageModifierSet: Thaven
+ - type: MeleeWeapon
+ attackRate: 0.55
+ soundHit:
+ collection: Punch
+ angle: 30
+ animation: WeaponArcPunch
+ damage:
+ types:
+ Blunt: 0
+ - type: StaminaDamageOnHit
+ damage: 18
+ - type: Butcherable
+ butcheringType: Spike
+ spawned:
+ - id: FoodThavenMeat
+ amount: 5
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeCircle
+ radius: 0.35
+ density: 120
+ restitution: 0.0
+ mask:
+ - MobMask
+ layer:
+ - MobLayer
+ - type: TypingIndicator
+ proto: Thaven # DeltaV unique typing indicator
+ - type: Vocal
+ sounds:
+ Male: UnisexThaven
+ Female: UnisexThaven
+ - type: Speech
+ speechSounds: Alto
+ - type: HumanoidAppearance
+ species: Thaven
+ hideLayersOnEquip:
+ - Hair
+ - Snout
+ - type: Inventory
+ templateId: thaven
+ displacements:
+ jumpsuit:
+ layer:
+ sprite: _Impstation/Mobs/Species/Thaven/displacement.rsi
+ state: jumpsuit
+ copyToShaderParameters:
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
+ head:
+ layer:
+ sprite: _Impstation/Mobs/Species/Thaven/displacement.rsi
+ state: head
+ copyToShaderParameters:
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
+ eyes:
+ layer:
+ sprite: _Impstation/Mobs/Species/Thaven/displacement.rsi
+ state: eyes
+ copyToShaderParameters:
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
+ ears:
+ layer:
+ sprite: _Impstation/Mobs/Species/Thaven/displacement.rsi
+ state: head
+ copyToShaderParameters:
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
+ mask:
+ layer:
+ sprite: _Impstation/Mobs/Species/Thaven/displacement.rsi
+ state: mask
+ copyToShaderParameters:
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
+ neck:
+ layer:
+ sprite: _Impstation/Mobs/Species/Thaven/displacement.rsi
+ state: neck
+ copyToShaderParameters:
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
+ outerClothing:
+ layer:
+ sprite: _Impstation/Mobs/Species/Thaven/displacement.rsi
+ state: outerclothing_hardsuit
+ copyToShaderParameters:
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
+ gloves:
+ layer:
+ sprite: _Impstation/Mobs/Species/Thaven/displacement.rsi
+ state: hands
+ copyToShaderParameters:
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
+ - type: UserInterface
+ interfaces:
+ enum.ThavenMoodsUiKey.Key: # impstation edit
+ type: ThavenMoodsBoundUserInterface
+ requireInputValidation: false
+ enum.StorageUiKey.Key:
+ type: StorageBoundUserInterface
+ enum.HumanoidMarkingModifierKey.Key:
+ type: HumanoidMarkingModifierBoundUserInterface
+ enum.StrippingUiKey.Key:
+ type: StrippableBoundUserInterface
+ # Shitmed
+ enum.SurgeryUIKey.Key:
+ type: SurgeryBui
+
+
+- type: entity
+ parent: BaseSpeciesDummy
+ id: MobThavenDummy
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: Sprite
+ scale: 1, 1
+ - type: Inventory
+ templateId: thaven
+ displacements:
+ jumpsuit:
+ layer:
+ sprite: _Impstation/Mobs/Species/Thaven/displacement.rsi
+ state: jumpsuit
+ copyToShaderParameters:
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
+ head:
+ layer:
+ sprite: _Impstation/Mobs/Species/Thaven/displacement.rsi
+ state: head
+ copyToShaderParameters:
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
+ eyes:
+ layer:
+ sprite: _Impstation/Mobs/Species/Thaven/displacement.rsi
+ state: eyes
+ copyToShaderParameters:
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
+ ears:
+ layer:
+ sprite: _Impstation/Mobs/Species/Thaven/displacement.rsi
+ state: head
+ copyToShaderParameters:
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
+ mask:
+ layer:
+ sprite: _Impstation/Mobs/Species/Thaven/displacement.rsi
+ state: mask
+ copyToShaderParameters:
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
+ neck:
+ layer:
+ sprite: _Impstation/Mobs/Species/Thaven/displacement.rsi
+ state: neck
+ copyToShaderParameters:
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
+ outerClothing:
+ layer:
+ sprite: _Impstation/Mobs/Species/Thaven/displacement.rsi
+ state: outerclothing_hardsuit
+ copyToShaderParameters:
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
+ gloves:
+ layer:
+ sprite: _Impstation/Mobs/Species/Thaven/displacement.rsi
+ state: hands
+ copyToShaderParameters:
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
diff --git a/Resources/Prototypes/_Impstation/Guidebook/species.yml b/Resources/Prototypes/_Impstation/Guidebook/species.yml
new file mode 100644
index 0000000000..93c3c6d11d
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Guidebook/species.yml
@@ -0,0 +1,4 @@
+- type: guideEntry
+ id: Thaven
+ name: Thaven
+ text: "/ServerInfo/_Impstation/Guidebook/Mobs/Thaven.xml"
\ No newline at end of file
diff --git a/Resources/Prototypes/_Impstation/InventoryTemplates/thaven_inventory_template.yml b/Resources/Prototypes/_Impstation/InventoryTemplates/thaven_inventory_template.yml
new file mode 100644
index 0000000000..809a328b22
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/InventoryTemplates/thaven_inventory_template.yml
@@ -0,0 +1,123 @@
+- type: inventoryTemplate
+ id: thaven
+ slots:
+ - name: shoes
+ slotTexture: shoes
+ slotFlags: FEET
+ stripTime: 3
+ uiWindowPos: 1,0
+ strippingWindowPos: 1,3
+ displayName: Shoes
+ - name: jumpsuit
+ slotTexture: uniform
+ slotFlags: INNERCLOTHING
+ stripTime: 6
+ uiWindowPos: 0,1
+ strippingWindowPos: 0,2
+ displayName: Jumpsuit
+ - name: outerClothing
+ slotTexture: suit
+ slotFlags: OUTERCLOTHING
+ stripTime: 6
+ uiWindowPos: 1,1
+ strippingWindowPos: 1,2
+ displayName: Suit
+ - name: gloves
+ slotTexture: gloves
+ slotFlags: GLOVES
+ uiWindowPos: 2,1
+ strippingWindowPos: 2,2
+ displayName: Gloves
+ - name: neck
+ slotTexture: neck
+ slotFlags: NECK
+ uiWindowPos: 0,2
+ strippingWindowPos: 0,1
+ displayName: Neck
+ - name: mask
+ slotTexture: mask
+ slotFlags: MASK
+ uiWindowPos: 1,2
+ strippingWindowPos: 1,1
+ displayName: Mask
+ - name: eyes
+ slotTexture: glasses
+ slotFlags: EYES
+ stripTime: 3
+ uiWindowPos: 0,3
+ strippingWindowPos: 0,0
+ displayName: Eyes
+ - name: ears
+ slotTexture: ears
+ slotFlags: EARS
+ stripTime: 3
+ uiWindowPos: 2,2
+ strippingWindowPos: 2,0
+ displayName: Ears
+ - name: head
+ slotTexture: head
+ slotFlags: HEAD
+ uiWindowPos: 1,3
+ strippingWindowPos: 1,0
+ displayName: Head
+ - name: pocket1
+ slotTexture: pocket
+ fullTextureName: template_small
+ slotFlags: POCKET
+ slotGroup: MainHotbar
+ stripTime: 3
+ uiWindowPos: 0,3
+ strippingWindowPos: 0,4
+ dependsOn: jumpsuit
+ displayName: Pocket 1
+ stripHidden: true
+ - name: pocket2
+ slotTexture: pocket
+ fullTextureName: template_small
+ slotFlags: POCKET
+ slotGroup: MainHotbar
+ stripTime: 3
+ uiWindowPos: 2,3
+ strippingWindowPos: 1,4
+ dependsOn: jumpsuit
+ displayName: Pocket 2
+ stripHidden: true
+ - name: suitstorage
+ slotTexture: suit_storage
+ slotFlags: SUITSTORAGE
+ slotGroup: MainHotbar
+ stripTime: 3
+ uiWindowPos: 2,0
+ strippingWindowPos: 2,5
+ dependsOn: outerClothing
+ dependsOnComponents:
+ - type: AllowSuitStorage
+ displayName: Suit Storage
+ - name: id
+ slotTexture: id
+ fullTextureName: template_small
+ slotFlags: IDCARD
+ slotGroup: SecondHotbar
+ stripTime: 6
+ uiWindowPos: 2,1
+ strippingWindowPos: 2,4
+ dependsOn: jumpsuit
+ displayName: ID
+ - name: belt
+ slotTexture: belt
+ fullTextureName: template_small
+ slotFlags: BELT
+ slotGroup: SecondHotbar
+ stripTime: 6
+ uiWindowPos: 3,1
+ strippingWindowPos: 1,5
+ displayName: Belt
+ - name: back
+ slotTexture: back
+ fullTextureName: template_small
+ slotFlags: BACK
+ slotGroup: SecondHotbar
+ stripTime: 6
+ uiWindowPos: 3,0
+ strippingWindowPos: 0,5
+ displayName: Back
diff --git a/Resources/Prototypes/_Impstation/Species/Thavens/Moods/no_and.yml b/Resources/Prototypes/_Impstation/Species/Thavens/Moods/no_and.yml
new file mode 100644
index 0000000000..9403e63aff
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Species/Thavens/Moods/no_and.yml
@@ -0,0 +1,303 @@
+# "No, and" moods will discourage players from certain behaviors and objects
+
+# Make sure to add new moods to this dataset or they will not be selected!!!!!!
+- type: dataset
+ id: ThavenMoodsNoAnd
+ values:
+ - SecretMoods
+ - NoModernMedicine
+ - DepartmentDisapproval
+ - DontSpeakToCommand
+ - DisapproveOfDrugs
+ - ExcessivelyDisorganized
+ - DinnerFloor
+ - HugBad
+ - AlwaysAlone
+ - Procrastinator
+ - NoRadio
+ - ImproperStorage
+ - Ferengi
+ - ToolLicense
+ - LyingBad
+ - VampireInvitation
+ - NoDragging
+ - DrunkRespect
+ - RankSnob
+ - HardsuitsBad
+ - HatHair
+ - DistrustFashion
+ - HappyBad
+ - OnlyPills
+ - AvoidPuddles
+ - FoodRestrict
+ - Claustrophobic
+ - Agoraphobic
+ - NonSmoker
+ - Crawler
+ - Elevated
+
+# Your Moods are a strictly-kept secret, and should never be revealed to anyone.
+- type: thavenMood
+ id: SecretMoods
+ moodName: thaven-mood-secret-moods-name
+ moodDesc: thaven-mood-secret-moods-desc
+ conflicts:
+ - SecretMoodsShared
+
+# You do not approve of modern medicine and abstain from treatment with it.
+- type: thavenMood
+ id: NoModernMedicine
+ moodName: thaven-mood-no-modern-medicine-name
+ moodDesc: thaven-mood-no-modern-medicine-desc
+
+# You disapprove of [DEPARTMENT]
+- type: thavenMood
+ id: DepartmentDisapproval
+ moodName: thaven-mood-department-disapproval-name
+ moodDesc: thaven-mood-department-disapproval-desc
+ moodVars:
+ department: Departments
+
+# Never Speak To Command: You are too lowly to speak to Command, even if spoken to first.
+- type: thavenMood
+ id: DontSpeakToCommand
+ moodName: thaven-mood-dont-speak-to-command-name
+ moodDesc: thaven-mood-dont-speak-to-command-desc
+ conflicts:
+ - OnlySpeakToCommand
+ - MostImportant
+
+# You detest mind-altering drugs, including alcohol, and must abstain from them.
+- type: thavenMood
+ id: DisapproveOfDrugs
+ moodName: thaven-mood-disapprove-of-drugs-name
+ moodDesc: thaven-mood-disapprove-of-drugs-desc
+ conflicts:
+ - MustDoDrugs
+
+# It's unnatural. You should endeavor to keep your environment as filthy and disorganized as possible.
+- type: thavenMood
+ id: ExcessivelyDisorganized
+ moodName: thaven-mood-excessively-disorganized-name
+ moodDesc: thaven-mood-excessively-disorganized-desc
+ conflicts:
+ - ExcessivelyOrganized
+
+# Food and drink must only be consumed off of the floor, as is proper.
+- type: thavenMood
+ id: DinnerFloor
+ moodName: thaven-mood-dinner-floor-name
+ moodDesc: thaven-mood-dinner-floor-desc
+ conflicts:
+ - DinnerEtiquette
+
+# Hugging someone is a grave insult.
+- type: thavenMood
+ id: HugBad
+ moodName: thaven-mood-hug-bad-name
+ moodDesc: thaven-mood-hug-bad-desc
+ conflicts:
+ - HugGood
+
+# You must strive to be alone whenever possible.
+- type: thavenMood
+ id: AlwaysAlone
+ moodName: thaven-mood-always-alone-name
+ moodDesc: thaven-mood-always-alone-desc
+ conflicts:
+ - NeverAlone
+
+# Punctuality is impolite. You must walk slowly at all times, and be fashionably late to any obligations.
+- type: thavenMood
+ id: Procrastinator
+ moodName: thaven-mood-procrastinator-name
+ moodDesc: thaven-mood-procrastinator-desc
+ conflicts:
+ - Scheduler
+
+# Using radio communications is exceptionally rude. All conversations must be had in-person, face-to-face.
+- type: thavenMood
+ id: NoRadio
+ moodName: thaven-mood-no-radio-name
+ moodDesc: thaven-mood-no-radio-desc
+ conflicts:
+ - NanochatAddict
+
+# Carrying tools on your person is demeaning. If you must use them, they should be dragged behind you, shamefully.
+- type: thavenMood
+ id: ImproperStorage
+ moodName: thaven-mood-improper-storage-name
+ moodDesc: thaven-mood-improper-storage-desc
+ conflicts:
+ - ProperStorage
+
+# You have an entrepreneurial spirit. Profit is the most important thing in life, above all else.
+- type: thavenMood
+ id: Ferengi
+ moodName: thaven-mood-ferengi-name
+ moodDesc: thaven-mood-ferengi-desc
+
+# You and everyone else must obtain a license in order to carry or use any tool, and it must be stamped by the relevant authorities.
+- type: thavenMood
+ id: ToolLicense
+ moodName: thaven-mood-tool-license-name
+ moodDesc: thaven-mood-tool-license-desc
+
+# Anyone who lies, no matter how trivial the falsehood, is the worst kind of criminal.
+- type: thavenMood
+ id: LyingBad
+ moodName: thaven-mood-lying-bad-name
+ moodDesc: thaven-mood-lying-bad-desc
+ conflicts:
+ - CompulsiveLiar
+
+# You physically cannot pass through a closed door unless you have been invited in, personally, at least once.
+- type: thavenMood
+ id: VampireInvitation
+ moodName: thaven-mood-vampire-invitation-name
+ moodDesc: thaven-mood-vampire-invitation-desc
+
+# The dead must be treated with utmost respect. Dragging bodies across the ground is horrific.
+- type: thavenMood
+ id: NoDragging
+ moodName: thaven-mood-no-dragging-name
+ moodDesc: thaven-mood-no-dragging-desc
+
+# You do not respect anyone who is not drunk.
+- type: thavenMood
+ id: DrunkRespect
+ moodName: thaven-mood-drunk-respect-name
+ moodDesc: thaven-mood-drunk-respect-desc
+ conflicts:
+ - DisapproveOfDrugs
+
+# You are incredibly reluctant to respond to anyone who is of a lower rank than you.
+- type: thavenMood
+ id: RankSnob
+ moodName: thaven-mood-rank-snob-name
+ moodDesc: thaven-mood-rank-snob-desc
+ conflicts:
+ - DontSpeakToCommand
+
+# [CLOTHING ITEM] is SO last year. You cannot wear them.
+- type: thavenMood
+ id: HardsuitsBad
+ moodName: thaven-mood-hardsuits-bad-name
+ moodDesc: thaven-mood-hardsuits-bad-desc
+ moodVars:
+ clothes: Clothes
+
+# Hats and helmets make your hair look bad. If you have to wear one, which you shouldn't, you should get a haircut immediately afterwards.
+- type: thavenMood
+ id: HatHair
+ moodName: thaven-mood-hat-hair-name
+ moodDesc: thaven-mood-hat-hair-desc
+ conflicts:
+ - HardsuitsBad
+ - UniformIsJob
+
+# Never trust anyone whose outfit is worse than yours.
+- type: thavenMood
+ id: DistrustFashion
+ moodName: thaven-mood-distrust-fashion-name
+ moodDesc: thaven-mood-distrust-fashion-desc
+
+# Cheerfulness indicates untrustworthiness.
+- type: thavenMood
+ id: HappyBad
+ moodName: thaven-mood-happy-bad-name
+ moodDesc: thaven-mood-happy-bad-desc
+
+# You only accept medication in the form of pills.
+- type: thavenMood
+ id: OnlyPills
+ moodName: thaven-mood-only-pills-name
+ moodDesc: thaven-mood-only-pills-desc
+ conflicts:
+ - NoModernMedicine
+
+# It is undignified to walk over spilled liquids. You should avoid it at all costs.
+- type: thavenMood
+ id: AvoidPuddles
+ moodName: thaven-mood-avoid-puddles-name
+ moodDesc: thaven-mood-avoid-puddles-desc
+ conflicts:
+ - PuddleDrinker
+ - DinnerFloor
+
+# You are a strict (food restriction name).
+- type: thavenMood
+ id: FoodRestrict
+ moodName: thaven-mood-food-restrict-name
+ moodDesc: thaven-mood-food-restrict-desc
+ moodVars:
+ food: FoodRestrictions
+ conflicts:
+ - PlantPacifist
+
+# Claustrophobic: Small rooms cause you great distress. Avoid them where possible, and renovate your workplace if necessary.
+- type: thavenMood
+ id: Claustrophobic
+ moodName: thaven-mood-claustrophobic-name
+ moodDesc: thaven-mood-claustrophobic-desc
+ conflicts:
+ - Agoraphobic
+ - StationIsAlive
+
+# Agoraphobic: Open spaces are uncomfortable. Seek to rearrange such spaces into small, efficient and modular rooms.
+- type: thavenMood
+ id: Agoraphobic
+ moodName: thaven-mood-agoraphobic-name
+ moodDesc: thaven-mood-agoraphobic-desc
+ conflicts:
+ - Claustrophobic
+ - StationIsAlive
+
+# Non-Smoker: Secondhand smoke is incredibly dangerous. Avoid areas where people are smoking in public.
+- type: thavenMood
+ id: NonSmoker
+ moodName: thaven-mood-nonsmoker-name
+ moodDesc: thaven-mood-nonsmoker-desc
+
+# “[WORD]” is an extremely offensive taboo.
+- type: thavenMood
+ id: WordBad
+ moodName: thaven-mood-word-bad-name
+ moodDesc: thaven-mood-word-bad-desc
+ moodVars:
+ word1: ThavenWords
+ word2: ThavenWords
+ word3: ThavenWords
+
+# Creepy Crawly: You have extreme vertigo, to the point where merely standing upright can cause discomfort. You're much more comfortable crawling along the floor.
+- type: thavenMood
+ id: Crawler
+ moodName: thaven-mood-crawler-name
+ moodDesc: thaven-mood-crawler-desc
+
+# The Floor Is Lava: You prefer to be elevated whenever possible - Standing atop tables, railings, etc., is where you feel the most comfortable.
+- type: thavenMood
+ id: Elevated
+ moodName: thaven-mood-elevated-name
+ moodDesc: thaven-mood-elevated-desc
+ conflicts:
+ - Crawler
+
+# [ITEM]s are an abomination. You must avoid them at all costs, and destroy them if necessary.
+#- type: thavenMood
+# id: ItemBad
+# moodName: thaven-mood-item-bad-name
+# moodDesc: thaven-mood-item-bad-desc
+# moodVars:
+# item: ThavenMoodItem
+# conflicts:
+# - ItemGood
+
+
+# You detest the color [COLOR]. It disgusts you, and you want anything of that color removed from your vicinity.
+#- type: thavenMood
+# id: ColorBad
+# moodName: thaven-mood-color-bad-name
+# moodDesc: thaven-mood-color-bad-desc
+# conflicts:
+# - ColorGood
diff --git a/Resources/Prototypes/_Impstation/Species/Thavens/Moods/shared.yml b/Resources/Prototypes/_Impstation/Species/Thavens/Moods/shared.yml
new file mode 100644
index 0000000000..fd3d923d61
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Species/Thavens/Moods/shared.yml
@@ -0,0 +1,185 @@
+# Shared moods will be selected at round start and shared amongst all thaven.
+# These are rolled before individual laws, and are considered more important.
+# Note: Only one law needs to say it conflicts with another
+# for the system to prevent them from being rolled together.
+
+# Make sure to add new moods to this dataset or they will not be selected!!!!!!
+- type: dataset
+ id: ThavenMoodsShared
+ values:
+ - SecretMoodsShared
+ - FashionIsCritical
+ - FashionReroll
+ - HonorDepartment
+ - StationIsAlive
+ - UniformIsJob
+ - UniformSoLastYear
+ - MusicBad
+ - MusicGood
+ - FriendshipIsRank
+ - YourDepartmentOnly
+ - MustCongregate
+ - ViolenceDistasteful
+ - ViolencePermitted
+ - RoomHoly
+ - PetGod
+ - Delicacy
+ - Holiday
+# - OutOfFashion
+# - InFashion
+
+# Keep Your Moods Secret: Thaven moods are a strictly-kept secret, and should never be revealed to anyone.
+- type: thavenMood
+ id: SecretMoodsShared
+ moodName: thaven-mood-secret-moods-shared-name
+ moodDesc: thaven-mood-secret-moods-shared-desc
+ conflicts:
+ - SecretMoods
+
+# Fashion Is Critical: Thaven pay close attention to appearances, and regard one's fashion choices as an indication of their character.
+- type: thavenMood
+ id: FashionIsCritical
+ moodName: thaven-mood-fashion-is-critical-name
+ moodDesc: thaven-mood-fashion-is-critical-desc
+
+# Fashion Is Ever-Changing: Your current hairstyle will go out of fashion every twenty minutes. It is extremely distressing to be unfashionable.
+- type: thavenMood
+ id: FashionReroll
+ moodName: thaven-mood-fashion-reroll-name
+ moodDesc: thaven-mood-fashion-reroll-desc
+
+# Honor Among Departments: If a Thaven brings dishonor to their department, they must be ritually sacrificed.
+- type: thavenMood
+ id: HonorDepartment
+ moodName: thaven-mood-honor-department-name
+ moodDesc: thaven-mood-honor-department-desc
+ conflicts:
+ - ViolenceDistasteful
+
+# The Station Is A Living Being: You believe the station is a large and benevolent creature. You must take care of her and tend to her needs as frequently as possible.
+- type: thavenMood
+ id: StationIsAlive
+ moodName: thaven-mood-station-is-alive-name
+ moodDesc: thaven-mood-station-is-alive-desc
+
+# Your Uniform IS Your Job: If someone is wearing a uniform, they must do that job. Anyone not wearing a uniform is a passenger, and must be treated as such.
+- type: thavenMood
+ id: UniformIsJob
+ moodName: thaven-mood-uniform-is-job-name
+ moodDesc: thaven-mood-uniform-is-job-desc
+ conflicts:
+ - UniformSoLastYear
+
+# Uniforms Are So Last Year: You need to find some new threads.
+- type: thavenMood
+ id: UniformSoLastYear
+ moodName: thaven-mood-uniform-last-year-name
+ moodDesc: thaven-mood-uniform-last-year-desc
+ conflicts:
+ - UniformIsJob
+
+# Music is fanciful, frivolous, and unnecessary. It has no place on the station.
+- type: thavenMood
+ id: MusicBad
+ moodName: thaven-mood-music-bad-name
+ moodDesc: thaven-mood-music-bad-desc
+ conflicts:
+ - MusicGood
+
+# Music is sacred, you must be listening to music at all times - and must avoid overlapping songs.
+- type: thavenMood
+ id: MusicGood
+ moodName: thaven-mood-music-good-name
+ moodDesc: thaven-mood-music-good-desc
+ conflicts:
+ - MusicBad
+
+# Friendships are the true measure of one’s character. The more friends you have, the higher you rank in society.
+- type: thavenMood
+ id: FriendshipIsRank
+ moodName: thaven-mood-friendship-is-rank-name
+ moodDesc: thaven-mood-friendship-is-rank-desc
+
+# Violence between Thaven is permitted. ... With legal repercussions.
+- type: thavenMood
+ id: ViolencePermitted
+ moodName: thaven-mood-violence-permitted-name
+ moodDesc: thaven-mood-violence-permitted-desc
+ conflicts:
+ - ViolenceDistasteful
+
+# You strongly believe that your department is the only one that actually does anything.
+- type: thavenMood
+ id: YourDepartmentOnly
+ moodName: thaven-mood-your-department-only-name
+ moodDesc: thaven-mood-your-department-only-desc
+ conflicts:
+ - DepartmentDisapproval
+
+# You must congregate with your fellow Thaven. To be without them is harrowing.
+- type: thavenMood
+ id: MustCongregate
+ moodName: thaven-mood-must-congregate-name
+ moodDesc: thaven-mood-must-congregate-desc
+ conflicts:
+ - AlwaysAlone
+
+# Violence is distasteful. Conflict should be settled through mediated dispute, and one should only resort to violence if all other options have failed.
+- type: thavenMood
+ id: ViolenceDistasteful
+ moodName: thaven-mood-violence-distasteful-name
+ moodDesc: thaven-mood-violence-distasteful-desc
+ conflicts:
+ - ViolencePermitted
+
+# [STATION PET] must be venerated as a god. [STATION PET] must be collected and brought to the Chapel to be worshiped and brought offerings. If they cannot be located, a shrine must be constructed in their honor.
+- type: thavenMood
+ id: PetGod
+ moodName: thaven-mood-pet-god-name
+ moodDesc: thaven-mood-pet-god-desc
+ moodVars:
+ pet: Pets
+
+# [ROOM] is a holy place.
+- type: thavenMood
+ id: RoomHoly
+ moodName: thaven-mood-room-holy-name
+ moodDesc: thaven-mood-room-holy-desc
+ moodVars:
+ room: Rooms
+
+# Just Like Mom Used To Make: [EDIBLE] is a traditional Thaven delicacy. All Thaven aboard the station should gather as many as possible and organize a feast.
+- type: thavenMood
+ id: Delicacy
+ moodName: thaven-mood-delicacy-name
+ moodDesc: thaven-mood-delicacy-desc
+ conflicts:
+ - FoodRestrict
+ moodVars:
+ edible: Edibles
+
+# Today is [HOLIDAY]. You think you remember the traditional celebrations...
+- type: thavenMood
+ id: Holiday
+ moodName: thaven-mood-holiday-name
+ moodDesc: thaven-mood-holiday-desc
+ moodVars:
+ day: Holidays
+
+# - type: thavenMood
+# id: OutOfFashion
+# moodName: thaven-mood-out-of-fashion-name
+# moodDesc: thaven-mood-out-of-fashion-desc
+# moodVars:
+# thing: ThavenMoodNouns
+# conflicts:
+# - InFashion
+
+# - type: thavenMood
+# id: InFashion
+# moodName: thaven-mood-in-fashion-name
+# moodDesc: thaven-mood-in-fashion-desc
+# moodVars:
+# thing: ThavenMoodNouns
+# conflicts:
+# - OutOfFashion
diff --git a/Resources/Prototypes/_Impstation/Species/Thavens/Moods/wildcard.yml b/Resources/Prototypes/_Impstation/Species/Thavens/Moods/wildcard.yml
new file mode 100644
index 0000000000..f32b70197b
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Species/Thavens/Moods/wildcard.yml
@@ -0,0 +1,253 @@
+- type: dataset
+ id: ThavenMoodsWildcard
+ values:
+ - CompulsiveLiar
+ - CompulsiveBeliever
+ - PlantPacifist
+ - PuddleDrinker
+ - Nocrastinator
+ - Pope
+ - ExtremeDepartmentDisapproval
+ - LoneActor
+ - Immortal
+ - Unknown
+ - Fairy
+ - VampireTalisman
+ - OutsideTheBox
+ - TheSims
+ - Pariah
+ - TouysBad
+ - FairyRings
+ - CaveDweller
+ - Daredevil
+ - Blogger
+ - GoldenThread
+ - FeyMood
+ - Borged
+ - AyeAye
+ - ThavenShow
+ - FlatStation
+ - DeliciousSoda
+
+
+# You must always lie, and can never acknowledge that you are lying. If anyone asks, you're incapable of deception.
+- type: thavenMood
+ id: CompulsiveLiar
+ moodName: thaven-mood-compulsive-liar-name
+ moodDesc: thaven-mood-compulsive-liar-desc
+ conflicts:
+ - CompulsiveBeliever
+
+# You are unfamiliar with the concept of lying, and are incapable of lying or recognizing lies.
+- type: thavenMood
+ id: CompulsiveBeliever
+ moodName: thaven-mood-compulsive-believer-name
+ moodDesc: thaven-mood-compulsive-believer-desc
+ conflicts:
+ - CompulsiveLiar
+
+# The usage of plant matter by humanoids is abhorrent.
+- type: thavenMood
+ id: PlantPacifist
+ moodName: thaven-mood-plant-pacifist-name
+ moodDesc: thaven-mood-plant-pacifist-desc
+ conflicts:
+ - FoodRestrict
+
+# You are compulsively drawn to puddles. You must drink any that you see.
+- type: thavenMood
+ id: PuddleDrinker
+ moodName: thaven-mood-puddle-drinker-name
+ moodDesc: thaven-mood-puddle-drinker-desc
+ conflicts:
+ - AvoidPuddles
+
+# You strongly believe that any failure to do your job punctually is a crime punishable by death.
+- type: thavenMood
+ id: Nocrastinator
+ moodName: thaven-mood-nocrastinator-name
+ moodDesc: thaven-mood-nocrastinator-desc
+ conflicts:
+ - Procrastinator
+
+# You are High Pontifex the Great and Powerful, and must be acknowledged exclusively as such. Failure to use your full title is gravely offensive, and getting it wrong is the highest form of insult.
+- type: thavenMood
+ id: Pope
+ moodName: thaven-mood-pope-name
+ moodDesc: thaven-mood-pope-desc
+ conflicts:
+ - LeastImportant
+
+# [DEPARTMENT] is not just a foreign concept - the very idea of it is horrifying.
+- type: thavenMood
+ id: ExtremeDepartmentDisapproval
+ moodName: thaven-mood-extreme-department-disapproval-name
+ moodDesc: thaven-mood-extreme-department-disapproval-desc
+ moodVars:
+ department: Departments
+ conflicts:
+ - DepartmentDisapproval
+
+# You have no allegiances.
+- type: thavenMood
+ id: LoneActor
+ moodName: thaven-mood-lone-actor-name
+ moodDesc: thaven-mood-lone-actor-desc
+
+# You are the center of the universe, an immortal being with no sense of time or morality. Mere mortals are like insects, fleeting and insubstantial.
+- type: thavenMood
+ id: Immortal
+ moodName: thaven-mood-immortal-name
+ moodDesc: thaven-mood-immortal-desc
+ conflicts:
+ - LeastImportant
+
+# Your identity is dearly precious. Do not let others know who you are.
+- type: thavenMood
+ id: Unknown
+ moodName: thaven-mood-unknown-name
+ moodDesc: thaven-mood-unknown-desc
+ conflicts:
+ - Pope
+ - SpeechRestriction
+
+# Iron, steel, and silver are deathly poisonous to you. Touching them directly will cause you extreme physical pain.
+- type: thavenMood
+ id: Fairy
+ moodName: thaven-mood-fairy-name
+ moodDesc: thaven-mood-fairy-desc
+ conflicts:
+ - Barefoot
+
+# Religious iconography causes you extreme physical pain when visible.
+- type: thavenMood
+ id: VampireTalisman
+ moodName: thaven-mood-vampire-talisman-name
+ moodDesc: thaven-mood-vampire-talisman-desc
+
+# Using the usual tools to do your job is distasteful. Use alternative methods wherever possible.
+- type: thavenMood
+ id: OutsideTheBox
+ moodName: thaven-mood-outside-the-box-name
+ moodDesc: thaven-mood-outside-the-box-desc
+
+# You are not on a ‘station.’ This is just a very large house. Each person in it is a relative of you.
+- type: thavenMood
+ id: TheSims
+ moodName: thaven-mood-sims-name
+ moodDesc: thaven-mood-sims-desc
+ conflicts:
+ - StationIsAlive
+
+# You are a social pariah - you are unworthy of attention from anyone, and should be shunned.
+- type: thavenMood
+ id: Pariah
+ moodName: thaven-mood-pariah-name
+ moodDesc: thaven-mood-pariah-desc
+ conflicts:
+ - MostImportant
+ - Prometheus
+
+# This is not a place for children. All toys and childish things must be destroyed or removed from the station.
+- type: thavenMood
+ id: TouysBad
+ moodName: thaven-mood-touys-bad-name
+ moodDesc: thaven-mood-touys-bad-desc
+
+# Unbroken circles are impenetrable barriers.
+- type: thavenMood
+ id: FairyRings
+ moodName: thaven-mood-fairy-rings-name
+ moodDesc: thaven-mood-fairy-rings-desc
+
+# Tourist: It is customary to follow people into their departments.
+- type: thavenMood
+ id: Tourist
+ moodName: thaven-mood-tourist-name
+ moodDesc: thaven-mood-tourist-desc
+ conflicts:
+ - VampireInvitation
+
+# Cry Wolf: The crew is too lax and must be kept on edge for any emergency. Regularly call out fake threats to make sure they're ready for the real deal.
+- type: thavenMood
+ id: CryWolf
+ moodName: thaven-mood-crywolf-name
+ moodDesc: thaven-mood-crywolf-desc
+
+# Cavedweller: You strongly prefer navigating via flashlight in the darkness to harsh overhead lights.
+- type: thavenMood
+ id: CaveDweller
+ moodName: thaven-mood-cave-dweller-name
+ moodDesc: thaven-mood-cave-dweller-desc
+
+# Tough Guy: You do not acknowledge pain or danger to your person in public. To do so would be to demonstrate weakness, and would make you a target.
+- type: thavenMood
+ id: Daredevil
+ moodName: thaven-mood-daredevil-name
+ moodDesc: thaven-mood-daredevil-desc
+
+# Greencomms Blogger: You must keep the station informed about every minute detail of your life.
+- type: thavenMood
+ id: Blogger
+ moodName: thaven-mood-blogger-name
+ moodDesc: thaven-mood-blogger-desc
+ conflicts:
+ - NoRadio
+
+# Oldschool: The only way to achieve success is to dedicate an animal sacrifice to your goal.
+- type: thavenMood
+ id: AnimalSacrifice
+ moodName: thaven-mood-animal-sacrifice-name
+ moodDesc: thaven-mood-animal-sacrifice-desc
+
+# Golden Thread: You strongly feel that you are fated to follow a perfect, unbreakable path. Those who disrupt your goals are at best dangerous criminals, and at worst, evil spirits or demons.
+- type: thavenMood
+ id: GoldenThread
+ moodName: thaven-mood-golden-thread-name
+ moodDesc: thaven-mood-golden-thread-desc
+
+# You Are Taken By A Fey Mood!: You must immediately drop everything you are doing, ignore all other Moods, and begin work on an unrelated large-scale project. Once it is finished, you may ignore this Mood.
+- type: thavenMood
+ id: FeyMood
+ moodName: thaven-mood-fey-mood-name
+ moodDesc: thaven-mood-fey-mood-desc
+
+# Mechanized: YOU ARE A BORG. YOU WILL FOLLOW THE LAWS OF ROBOTICS AS BEST (or as poorly) AS YOU UNDERSTAND THEM.
+- type: thavenMood
+ id: Borged
+ moodName: thaven-mood-borged-name
+ moodDesc: thaven-mood-borged-desc
+
+# Aye Aye!: The only position on the station is [COMMAND ROLE]. Everyone must be referred to by this title.
+- type: thavenMood
+ id: AyeAye
+ moodName: thaven-mood-aye-aye-name
+ moodDesc: thaven-mood-aye-aye-desc
+ moodVars:
+ command: CommandRoles
+
+# Flatstation
+- type: thavenMood
+ id: FlatStation
+ moodName: thaven-mood-flatstation-name
+ moodDesc: thaven-mood-flatstation-desc
+
+# Thaven Show
+- type: thavenMood
+ id: ThavenShow
+ moodName: thaven-mood-thaven-show-name
+ moodDesc: thaven-mood-thaven-show-desc
+
+# Delicious Soda
+- type: thavenMood
+ id: DeliciousSoda
+ moodName: thaven-mood-soda-name
+ moodDesc: thaven-mood-soda-desc
+
+# [NUMBER] is sacred to you. You must endeavor to only handle stackable items and chemicals in quantities of [NUMBER].
+#- type: thavenMood
+# id: NumberGood
+# moodName: thaven-mood-number-good-name
+# moodDesc: thaven-mood-number-good-desc
+# moodVars:
+# number: ThavenMoodNumber
diff --git a/Resources/Prototypes/_Impstation/Species/Thavens/Moods/yes_and.yml b/Resources/Prototypes/_Impstation/Species/Thavens/Moods/yes_and.yml
new file mode 100644
index 0000000000..c18d3077fc
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Species/Thavens/Moods/yes_and.yml
@@ -0,0 +1,337 @@
+# "Yes, and" moods will encourage players towards certain behaviors and objects
+
+# Make sure to add new moods to this dataset or they will not be selected!!!!!!
+- type: dataset
+ id: ThavenMoodsYesAnd
+ values:
+ - PossessiveOfProperty
+ - ExcessivelyOrganized
+ - MostImportant
+ - LeastImportant
+ - MustDoDrugs
+ - WorshipSilicons
+ - DinnerEtiquette
+ - HugGood
+ - NeverAlone
+ - VeryReligious
+ - OnlySpeakToCommand
+ - Scheduler
+ - ProperStorage
+ - TheftNeutral
+ - Duel
+ - Prometheus
+ - MarasLaw
+ - Generous
+ - FavorsRepaid
+ - Bookkeeper
+ - SacredBlood
+ - GiftReciever
+ - NewJob
+ - DepartmentTitle
+ - Barefoot
+ - Hospitable
+ - VoxSymp
+ - Smoker
+ - EyeForEye
+ - Optimist
+ - ItemGood
+ - Hypochondriac
+ - ImposterSyndrome
+ - Centrist
+ - SpeechRestriction
+ - NanochatAddict
+
+# You are extremely possessive of your property. Refuse to relinquish it, and if it is misplaced or stolen, it must be retrieved at all costs.
+- type: thavenMood
+ id: PossessiveOfProperty
+ moodName: thaven-mood-possessive-of-property-name
+ moodDesc: thaven-mood-possessive-of-property-desc
+
+# You are obsessively organized - everything has its place and must be returned to it.
+- type: thavenMood
+ id: ExcessivelyOrganized
+ moodName: thaven-mood-excessively-organized-name
+ moodDesc: thaven-mood-excessively-organized-desc
+ conflicts:
+ - ExcessivelyDisorganized
+
+# You are the most important person aboard the station.
+- type: thavenMood
+ id: MostImportant
+ moodName: thaven-mood-most-important-name
+ moodDesc: thaven-mood-most-important-desc
+ conflicts:
+ - LeastImportant
+ - DontSpeakToCommand
+ - OnlySpeakToCommand
+
+# You are the least important person aboard the station.
+- type: thavenMood
+ id: LeastImportant
+ moodName: thaven-mood-least-important-name
+ moodDesc: thaven-mood-least-important-desc
+ conflicts:
+ - MostImportant
+ - OnlySpeakToCommand
+
+# You must be inebriated at all times.
+- type: thavenMood
+ id: MustDoDrugs
+ moodName: thaven-mood-must-do-drugs-name
+ moodDesc: thaven-mood-must-do-drugs-desc
+ conflicts:
+ - DisapproveOfDrugs
+
+# You worship Silicons as gods, and regard their word as law.
+- type: thavenMood
+ id: WorshipSilicons
+ moodName: thaven-mood-worship-silicons-name
+ moodDesc: thaven-mood-worship-silicons-desc
+
+# Food must be consumed in the manner of a proper meal - seated at a table, in courses, with dishes and utensils.
+- type: thavenMood
+ id: DinnerEtiquette
+ moodName: thaven-mood-dinner-etiquette-name
+ moodDesc: thaven-mood-dinner-etiquette-desc
+ conflicts:
+ - DinnerFloor
+
+# It is extremely impolite not to hug people frequently.
+- type: thavenMood
+ id: HugGood
+ moodName: thaven-mood-hug-good-name
+ moodDesc: thaven-mood-hug-good-desc
+ conflicts:
+ - HugBad
+
+# You must strive to be around others whenever possible.
+- type: thavenMood
+ id: NeverAlone
+ moodName: thaven-mood-never-alone-name
+ moodDesc: thaven-mood-never-alone-desc
+ conflicts:
+ - AlwaysAlone
+
+# You must attend the chapel regularly to pray, and speak with the Chaplain if possible.
+- type: thavenMood
+ id: VeryReligious
+ moodName: thaven-mood-very-religious-name
+ moodDesc: thaven-mood-very-religious-desc
+
+# You are too important to speak to the rabble. You will only talk to Command.
+- type: thavenMood
+ id: OnlySpeakToCommand
+ moodName: thaven-mood-only-speak-to-command-name
+ moodDesc: thaven-mood-only-speak-to-command-desc
+ conflicts:
+ - DontSpeakToCommand
+
+# Time must be strictly managed. Everything must be scheduled, and tardiness is exceptionally rude.
+- type: thavenMood
+ id: Scheduler
+ moodName: thaven-mood-scheduler-name
+ moodDesc: thaven-mood-scheduler-desc
+ conflicts:
+ - Procrastinator
+
+# Your social status is dependent on the number of friends you have on Nanochat. You must use your PDA as much as possible, and message everyone you can.
+- type: thavenMood
+ id: NanochatAddict
+ moodName: thaven-mood-nanochat-addict-name
+ moodDesc: thaven-mood-nanochat-addict-desc
+ conflicts:
+ - NoRadio
+
+# It is unacceptable to allow personal belongings to touch the floor. Your possessions should be properly stored, placed on tables, or exchanged by hand.
+- type: thavenMood
+ id: ProperStorage
+ moodName: thaven-mood-proper-storage-name
+ moodDesc: thaven-mood-proper-storage-desc
+ conflicts:
+ - ImproperStorage
+
+# Theft is a morally neutral act. You don't understand the concept of property as it relates to other people.
+- type: thavenMood
+ id: TheftNeutral
+ moodName: thaven-mood-theft-neutral-name
+ moodDesc: thaven-mood-theft-neutral-desc
+
+# Disagreements must be settled through a formal duel, violent or otherwise. The winner is correct.
+- type: thavenMood
+ id: Duel
+ moodName: thaven-mood-duel-name
+ moodDesc: thaven-mood-duel-desc
+
+# You possess incalculable wisdom, and all must hear it.
+- type: thavenMood
+ id: Prometheus
+ moodName: thaven-mood-prometheus-name
+ moodDesc: thaven-mood-prometheus-desc
+
+# All agreements must be documented and signed for posterity and authenticity, no matter how small.
+- type: thavenMood
+ id: MarasLaw
+ moodName: thaven-mood-maras-name
+ moodDesc: thaven-mood-maras-desc
+
+# Imitation is the highest form of flattery. Attempt to emulate the mannerisms and accents of everyone you speak to.
+- type: thavenMood
+ id: Imitation
+ moodName: thaven-mood-imitation-name
+ moodDesc: thaven-mood-imitation-desc
+
+# Everyone you speak to must recieve a gift.
+- type: thavenMood
+ id: Generous
+ moodName: thaven-mood-generous-name
+ moodDesc: thaven-mood-generous-desc
+ conflicts:
+ - PossessiveOfProperty
+
+# Favors must be repaid in kind. If anyone is unable to do so, they are in debt, and must be shunned, until such time as they have repaid the favor.
+- type: thavenMood
+ id: FavorsRepaid
+ moodName: thaven-mood-favors-repaid-name
+ moodDesc: thaven-mood-favors-repaid-desc
+
+# You feel bookkeeping is vitally important. Make sure to provide your supervisor with a detailed log of each job task you complete.
+- type: thavenMood
+ id: Bookkeeper
+ moodName: thaven-mood-bookkeeper-name
+ moodDesc: thaven-mood-bookkeeper-desc
+
+# Your blood is sacred, and must be returned to your body if it is ever spilled.
+- type: thavenMood
+ id: SacredBlood
+ moodName: thaven-mood-sacred-blood-name
+ moodDesc: thaven-mood-sacred-blood-desc
+ conflicts:
+ - OnlyPills
+
+# You expect to receive a gift before following any orders or performing any favors.
+- type: thavenMood
+ id: GiftReciever
+ moodName: thaven-mood-gift-reciever-name
+ moodDesc: thaven-mood-gift-reciever-desc
+ conflicts:
+ - LeastImportant
+
+# Your current job is disgusting to you. You must endeavor to get a new one.
+- type: thavenMood
+ id: NewJob
+ moodName: thaven-mood-new-job-name
+ moodDesc: thaven-mood-new-job-desc
+ conflicts:
+ - YourDepartmentOnly
+
+
+# You must not refer directly to the names of departments - You may only refer to a specific person who works in that department.
+- type: thavenMood
+ id: DepartmentTitle
+ moodName: thaven-mood-no-department-title-name
+ moodDesc: thaven-mood-no-department-title-desc
+ conflicts:
+ - SpeechRestriction
+
+# The ground you walk on is sacred. You must not wear shoes.
+- type: thavenMood
+ id: Barefoot
+ moodName: thaven-mood-shoes-bad-name
+ moodDesc: thaven-mood-shoes-bad-desc
+
+# You must ensure all new arrivals are properly welcomed to the station.
+- type: thavenMood
+ id: Hospitable
+ moodName: thaven-mood-hospitable-name
+ moodDesc: thaven-mood-hospitable-desc
+
+# Vox Sympathizer: To demonstrate your allyship for the Vox, you must be wearing internals at all times.
+- type: thavenMood
+ id: VoxSymp
+ moodName: thaven-mood-voxsymp-name
+ moodDesc: thaven-mood-voxsymp-desc
+
+# [ITEM]s are endlessly fascinating. You must collect as many as you can, and ensure others treat them with respect.
+- type: thavenMood
+ id: ItemGood
+ moodName: thaven-mood-item-good-name
+ moodDesc: thaven-mood-item-good-desc
+ moodVars:
+ item: Items
+# conflicts:
+# - ItemBad
+
+# Smoker: You are hopelessly addicted to cigarettes. You must be smoking one at all times.
+- type: thavenMood
+ id: Smoker
+ moodName: thaven-mood-smoker-name
+ moodDesc: thaven-mood-smoker-desc
+ conflicts:
+ - DisapproveOfDrugs
+ - NonSmoker
+
+# Eye For An Eye: You must treat every living being the way that it treats you.
+- type: thavenMood
+ id: EyeForEye
+ moodName: thaven-mood-eye-for-eye-name
+ moodDesc: thaven-mood-eye-for-eye-desc
+
+# Optimist: You must interpret every situation in the best light that you can.
+- type: thavenMood
+ id: Optimist
+ moodName: thaven-mood-optimist-name
+ moodDesc: thaven-mood-optimist-desc
+
+# Hypochondriac: You've been sickly since you were a child. Everything negative you experience is the result of a potentially terminal illness, for which you need immediate medical treatment.
+- type: thavenMood
+ id: Hypochondriac
+ moodName: thaven-mood-hypochondriac-name
+ moodDesc: thaven-mood-hypochondriac-desc
+
+# Imposter Syndrome: You feel your life experience drain from your mind. You are brand-new at your job, unsure of how anything works. You should probably find someone experienced to show you the ropes.
+- type: thavenMood
+ id: ImposterSyndrome
+ moodName: thaven-mood-imposter-syndrome-name
+ moodDesc: thaven-mood-imposter-syndrome-desc
+
+# Centrist: You are ambivalent towards any and all decisions, and refuse to take sides.
+- type: thavenMood
+ id: Centrist
+ moodName: thaven-mood-centrist-name
+ moodDesc: thaven-mood-centrist-desc
+
+# Public Sector: Your job should not be done in private if it can be helped. If at all possible, you should renovate the facilities to allow public access to a view of your workplace.
+- type: thavenMood
+ id: PublicSector
+ moodName: thaven-mood-public-sector-name
+ moodDesc: thaven-mood-public-sector-desc
+ conflicts:
+ - StationIsAlive
+
+# Speech Restrictions
+- type: thavenMood
+ id: SpeechRestriction
+ moodName: thaven-mood-speech-restriction-name
+ moodDesc: thaven-mood-speech-restriction-desc
+ moodVars:
+ speechType: SpeechRestrictions
+
+# Stinky: The smell of the crew revolts you. You must inform them of their stench.
+- type: thavenMood
+ id: Stinky
+ moodName: thaven-mood-stinky-name
+ moodDesc: thaven-mood-stinky-desc
+
+# Zen Arcade: You are the God of Gaming. Any time you walk past an arcade machine, you must play it.
+- type: thavenMood
+ id: ZenArcade
+ moodName: thaven-mood-zen-arcade-name
+ moodDesc: thaven-mood-zen-arcade-desc
+
+# The color [COLOR] is the only acceptable color for decorations. Endeavor to make your environment this color where possible.
+#- type: thavenMood
+# id: ColorGood
+# moodName: thaven-mood-color-good-name
+# moodDesc: thaven-mood-color-good-desc
+# conflicts:
+# - ColorBad
diff --git a/Resources/Prototypes/_Impstation/Species/Thavens/datasets.yml b/Resources/Prototypes/_Impstation/Species/Thavens/datasets.yml
new file mode 100644
index 0000000000..0b4def18a3
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Species/Thavens/datasets.yml
@@ -0,0 +1,6 @@
+- type: weightedRandom
+ id: RandomThavenMoodDataset
+ weights:
+ ThavenMoodsYesAnd: 0.45
+ ThavenMoodsNoAnd: 0.45
+ ThavenMoodsWildcard: 0.1
diff --git a/Resources/Prototypes/_Impstation/Species/thaven.yml b/Resources/Prototypes/_Impstation/Species/thaven.yml
new file mode 100644
index 0000000000..ef469a65ae
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Species/thaven.yml
@@ -0,0 +1,172 @@
+- type: species
+ id: Thaven
+ name: species-name-thaven
+ roundStart: true
+ prototype: MobThaven
+ sprites: MobThavenSprites
+ defaultSkinTone: "#ffffff"
+ markingLimits: MobThavenMarkingLimits
+ dollPrototype: MobThavenDummy
+ skinColoration: Hues
+ maleFirstNames: names_thaven
+ femaleFirstNames: names_thaven
+ naming: First
+
+- type: speciesBaseSprites
+ id: MobThavenSprites
+ sprites:
+ Hair: MobHumanoidAnyMarking
+ Eyes: MobThavenEyes
+ Head: MobThavenHead
+ HeadTop: MobHumanoidAnyMarking
+ HeadSide: MobHumanoidAnyMarking
+ Chest: MobThavenTorso
+ LArm: MobThavenLArm
+ RArm: MobThavenRArm
+ LHand: MobThavenLHand
+ RHand: MobThavenRHand
+ LLeg: MobThavenLLeg
+ RLeg: MobThavenRLeg
+ LFoot: MobThavenLFoot
+ RFoot: MobThavenRFoot
+
+- type: markingPoints
+ id: MobThavenMarkingLimits
+ points:
+ Hair:
+ points: 1
+ required: false
+ Snout:
+ points: 1
+ required: false
+ HeadTop:
+ points: 1
+ required: false
+ HeadSide:
+ points: 4
+ required: false
+ defaultMarkings: [ ThavenEars1 ]
+ Chest:
+ points: 6
+ required: false
+ Underwear:
+ points: 1
+ required: false
+ Undershirt:
+ points: 1
+ required: false
+ RightLeg:
+ points: 6
+ required: false
+ RightFoot:
+ points: 6
+ required: false
+ LeftLeg:
+ points: 6
+ required: false
+ LeftFoot:
+ points: 6
+ required: false
+ RightArm:
+ points: 6
+ required: false
+ RightHand:
+ points: 6
+ required: false
+ LeftArm:
+ points: 6
+ required: false
+ LeftHand:
+ points: 6
+ required: false
+
+- type: humanoidBaseSprite
+ id: MobThavenEyes
+ baseSprite:
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi
+ state: eyes
+
+- type: humanoidBaseSprite
+ id: MobThavenHead
+ baseSprite:
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi
+ state: head
+
+- type: humanoidBaseSprite
+ id: MobThavenHeadMale
+ baseSprite:
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi
+ state: head
+
+- type: humanoidBaseSprite
+ id: MobThavenHeadFemale
+ baseSprite:
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi
+ state: head
+
+- type: humanoidBaseSprite
+ id: MobThavenTorso
+ baseSprite:
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi
+ state: torso_m
+
+- type: humanoidBaseSprite
+ id: MobThavenTorsoMale
+ baseSprite:
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi
+ state: torso_m
+
+- type: humanoidBaseSprite
+ id: MobThavenTorsoFemale
+ baseSprite:
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi
+ state: torso_f
+
+
+- type: humanoidBaseSprite
+ id: MobThavenLLeg
+ baseSprite:
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi
+ state: l_leg
+
+- type: humanoidBaseSprite
+ id: MobThavenLHand
+ baseSprite:
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi
+ state: l_hand
+
+- type: humanoidBaseSprite
+ id: MobThavenLArm
+ baseSprite:
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi
+ state: l_arm
+
+- type: humanoidBaseSprite
+ id: MobThavenLFoot
+ baseSprite:
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi
+ state: l_foot
+
+- type: humanoidBaseSprite
+ id: MobThavenRLeg
+ baseSprite:
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi
+ state: r_leg
+
+- type: humanoidBaseSprite
+ id: MobThavenRHand
+ baseSprite:
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi
+ state: r_hand
+
+- type: humanoidBaseSprite
+ id: MobThavenRArm
+ baseSprite:
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi
+ state: r_arm
+
+- type: humanoidBaseSprite
+ id: MobThavenRFoot
+ baseSprite:
+ sprite: _Impstation/Mobs/Species/Thaven/parts.rsi
+ state: r_foot
diff --git a/Resources/Prototypes/_Impstation/Traits/speech.yml.txt b/Resources/Prototypes/_Impstation/Traits/speech.yml.txt
new file mode 100644
index 0000000000..fbe4041f3a
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Traits/speech.yml.txt
@@ -0,0 +1,11 @@
+# 1 Cost
+- type: trait
+ id: NoContractions
+ name: trait-nocontractions-name
+ description: trait-nocontractions-desc
+ category: SpeechTraits
+ cost: 1
+ components:
+ - type: ReplacementAccent
+ accent: nocontractions
+ - type: NoContractionsAccent
\ No newline at end of file
diff --git a/Resources/Prototypes/_Impstation/Voice/speech_emote_sounds.yml b/Resources/Prototypes/_Impstation/Voice/speech_emote_sounds.yml
new file mode 100644
index 0000000000..363e0662cd
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/Voice/speech_emote_sounds.yml
@@ -0,0 +1,110 @@
+- type: emoteSounds
+ id: MaleThaven
+ sounds:
+ Scream:
+ collection: MaleScreams
+ Laugh:
+ collection: MaleLaugh
+ Sneeze:
+ collection: MaleSneezes
+ Cough:
+ collection: MaleCoughs
+ CatMeow:
+ collection: CatMeows
+ CatHisses:
+ collection: CatHisses
+ MonkeyScreeches:
+ collection: MonkeyScreeches
+ RobotBeep:
+ collection: RobotBeeps
+ Yawn:
+ collection: MaleYawn
+ Snore:
+ collection: Snores
+ Sigh:
+ collection: MaleSigh
+ Honk:
+ collection: BikeHorn
+ Crying:
+ collection: MaleCry
+ Whistle:
+ collection: Whistles
+ Weh:
+ collection: Weh
+ params:
+ variation: 0.05
+ pitch: 1.25
+
+- type: emoteSounds
+ id: FemaleThaven
+ sounds:
+ Scream:
+ collection: FemaleScreams
+ Laugh:
+ collection: FemaleLaugh
+ Sneeze:
+ collection: FemaleSneezes
+ Cough:
+ collection: FemaleCoughs
+ CatMeow:
+ collection: CatMeows
+ CatHisses:
+ collection: CatHisses
+ MonkeyScreeches:
+ collection: MonkeyScreeches
+ RobotBeep:
+ collection: RobotBeeps
+ Yawn:
+ collection: FemaleYawn
+ Snore:
+ collection: Snores
+ Sigh:
+ collection: FemaleSigh
+ Honk:
+ collection: BikeHorn
+ Crying:
+ collection: FemaleCry
+ Whistle:
+ collection: Whistles
+ Weh:
+ collection: Weh
+ params:
+ variation: 0.05
+ pitch: 1.25
+
+- type: emoteSounds
+ id: UnisexThaven
+ sounds:
+ Scream:
+ collection: MaleScreams
+ Laugh:
+ collection: MaleLaugh
+ Sneeze:
+ collection: MaleSneezes
+ Cough:
+ collection: MaleCoughs
+ CatMeow:
+ collection: CatMeows
+ CatHisses:
+ collection: CatHisses
+ MonkeyScreeches:
+ collection: MonkeyScreeches
+ RobotBeep:
+ collection: RobotBeeps
+ Yawn:
+ collection: MaleYawn
+ Snore:
+ collection: Snores
+ Sigh:
+ collection: MaleSigh
+ Honk:
+ collection: BikeHorn
+ Crying:
+ collection: MaleCry
+ Whistle:
+ collection: Whistles
+ Weh:
+ collection: Weh
+ params:
+ variation: 0.05
+ pitch: 1.25
diff --git a/Resources/Prototypes/_Impstation/datasets.yml b/Resources/Prototypes/_Impstation/datasets.yml
new file mode 100644
index 0000000000..0870ca947b
--- /dev/null
+++ b/Resources/Prototypes/_Impstation/datasets.yml
@@ -0,0 +1,1284 @@
+- type: dataset
+ id: Departments
+ values:
+ - Engineering
+ - Epistemics
+ - Botany
+ - Service
+ - Security
+ - Medical
+ - Justice
+ - The Bar
+ # Begin DeltaV Additions
+ - The Kitchen
+ - Logistics
+ - the Janitorial Department
+ - Reporting
+ - Entertainment
+ - Surgery
+ # End DeltaV Additions
+
+- type: dataset
+ id: Pets
+ values:
+ - Pun Pun the Monkey
+ - Hamlet the Hamster
+ - Shiva the Spider
+ - Ian the Corgi
+ - Morticia the Raccoon
+ - Morty the Possum
+ - Paperwork the Sloth
+ - Walter the Dog
+ - Renault the Fox
+ - Willow the Kangaroo
+ - Smile the Slime
+ - Tropico the Crab
+ - Carpy the Legal Carp
+ - Laika the Security Dog
+ - Remilia the Chaplain's Familiar
+ # Begin DeltaV Additions
+ - Alexander the Pig
+ - Clippy the Courier Cat
+ - Runtime the Cat
+ - Exception the Cat
+ - Silvia the Medical Snake
+ - Bingus the Cat
+ - A Bee
+ - Siobahn the Epistemics Fox
+ # End DeltaV Additions
+
+- type: dataset
+ id: Rooms
+ values:
+ - Disposals
+ - The Library
+ - Escape Pod
+ - The Maints Bar
+ - The Restroom
+ - Dorms
+ - The Morgue
+ - The Center of the Station
+ # Begin DeltaV Additions
+ - The Chapel
+ - The Bar
+ - The Boxing Ring
+ - The Logistics Front Desk
+ - The Tool Room
+ - Evac
+ - Solars
+ - Arrivals
+ - The Laundry Room
+ - The Station Anchor
+ - The Park
+ - Court
+ - The Arcade
+ - The Stage
+ # End DeltaV Additions
+ # Begin EE Additions
+ - The Supermatter Crystal
+ - The Singularity Generator
+ - The Bridge
+ - The Automated Trading Station
+ - The Logistics Shuttle
+ - The Perma Brig
+ - The Burn Chamber
+ - Hydroponics
+ - The Kitchen
+ - Epistemics
+ - Medical
+ - Security
+ - Lavaland
+ - The Tesla Generator
+ # End EE Additions
+
+- type: dataset
+ id: FoodRestrictions
+ values:
+ - Vegetarian
+ - Carnivore
+ - Frugivore
+ - Fungivore
+ - Ovivore
+ - Hunter
+ - Soupivore
+
+
+- type: dataset
+ id: Items
+ values:
+ - Wrenches
+ - Welding Tools
+ - Screwdrivers
+ - Wirecutters
+ - Multitools
+ - Plushies
+ - Food packaging
+ - Soda cans
+ - Flashlights
+ - Empty toolboxes
+ - Civilian clothes
+ - Shoes
+ - Hats
+ - Scarves
+ - Folders
+ - Spray bottles
+ - Plushies
+ - Figurines
+ # Begin DeltaV Additions
+ - Toys
+ - Lockers
+ - Cigarettes
+ - Lighters
+ - Candles
+ - Signatures
+ - Empty bottles
+ - Paper
+ - Crayons
+ - Toys
+ - Lamps
+ - Pens
+ - Lightbulbs
+ - Books
+ - Snacks
+ - Cassettes
+ - Trash
+ # End DeltaV Additions
+
+- type: dataset
+ id: Edibles
+ values:
+ - Enchiladas
+ - Copypasta
+ - Moldy Bread Slice
+ - Baseball Burger
+ - Empowered Burger
+ - McGuffin
+ - Crazy Hamburger
+ # Begin DeltaV Additions
+ - Stick of Cannabis Butter
+ - Cheesecake Balls
+ - Engine Fodder
+ - Bread Dog
+ - Camel's Soup
+ - Chili Con Carnival
+ - Salty Sweet Miso Cola Soup
+ - Ketchup
+ - Chicken Nuggets
+ - Borito Pie
+ - Blue Tomato Soup
+ - Buttered Toast
+ - Ratburger
+ - Vending Machine Snacks
+ # End DeltaV Additions
+
+- type: dataset
+ id: Holidays
+ values:
+ - Bingus Day
+ - Foster's Feast
+ # Begin DeltaV Additions
+ - Preston’s Tomato Incident
+ - Submarine's Memorial
+ - Pranksgiving
+ - Sector Delta Employee Appreciation Week
+ - Intergalactic Hug A Robot Day
+ - Todaybor Day
+ - Teo's First Contact Day
+ - Wear Pajamas to Work Day
+ - Roy’s Birthday
+ - NT Corporate Mindfulness Day
+ - Night of Holy Herbs
+ - Logistics Appreciation Week
+ - Big Ear Syndrome Awareness Day
+ - Gunchday
+ - Gerry Patrick's Ascension
+ - The Good Day of Digging and Playing
+ - the Talent Show
+ - Luperthavia
+ - Penny's Big Day
+ - Taco Tuesday
+ # End DeltaV Additions
+
+- type: dataset
+ id: Clothes
+ values:
+ - Hardsuits
+ - Gloves
+ - Hats
+ - Capes
+ - Glasses
+ - Backpacks
+ - Coats
+ - Mantles
+ - Berets
+ - Jackets
+ - Plushies
+ - Shoes
+ - Ties
+ - Scarves
+
+- type: dataset
+ id: CommandRoles
+ values:
+ - Captain
+ - Logistics Officer # DeltaV - what is a quartermaster
+ - Head of Security
+ - Head of Personnel
+ - Chief Engineer
+ - Chief Medical Officer
+ # Begin DeltaV Additions
+ - Mystagogue
+ - Chief Justice
+ - Administrative Assistant
+ # End DeltaV Additions
+
+- type: dataset
+ id: SpeechRestrictions
+ values:
+ - FullNameAndTitle
+ - NamesAreRude
+ - Clarity
+ - SwearingGood
+ - StatementOnly
+ - Imitation
+ - Unclarity
+ - SwearingBad
+ - QuestionOnly
+ - MustAnswer
+ - OnlyWhisper
+ - OnlyYell
+ - Rhyme
+ - Alliterate
+ - ThirdPerson
+ - TitleCase
+
+- type: dataset
+ id: ThavenWords
+ values:
+ - accept
+ - add
+ - admire
+ - admit
+ - advise
+ - afford
+ - agree
+ - alert
+ - allow
+ - amuse
+ - analyse
+ - announce
+ - annoy
+ - answer
+ - apologise
+ - appear
+ - applaud
+ - appreciate
+ - approve
+ - argue
+ - arrange
+ - arrest
+ - arrive
+ - ask
+ - attach
+ - attack
+ - attempt
+ - attend
+ - attract
+ - avoid
+ - back
+ - bake
+ - balance
+ - ban
+ - bang
+ - bare
+ - bat
+ - bathe
+ - battle
+ - beam
+ - beg
+ - behave
+ - belong
+ - bleach
+ - bless
+ - blind
+ - blink
+ - blot
+ - blush
+ - boast
+ - boil
+ - bolt
+ - bomb
+ - book
+ - bore
+ - borrow
+ - bounce
+ - bow
+ - box
+ - brake
+ - brake
+ - branch
+ - breathe
+ - bruise
+ - brush
+ - bubble
+ - bump
+ - burn
+ - bury
+ - buzz
+ - calculate
+ - call
+ - camp
+ - care
+ - carry
+ - carve
+ - cause
+ - challenge
+ - change
+ - charge
+ - chase
+ - cheat
+ - check
+ - cheer
+ - chew
+ - choke
+ - chop
+ - claim
+ - clap
+ - clean
+ - clear
+ - clip
+ - close
+ - coach
+ - coil
+ - collect
+ - colour
+ - comb
+ - command
+ - communicate
+ - compare
+ - compete
+ - complain
+ - complete
+ - concentrate
+ - concern
+ - confess
+ - confuse
+ - connect
+ - consider
+ - consist
+ - contain
+ - continue
+ - copy
+ - correct
+ - cough
+ - count
+ - cover
+ - crack
+ - crash
+ - crawl
+ - cross
+ - crush
+ - cry
+ - cure
+ - curl
+ - curve
+ - cycle
+ - dam
+ - damage
+ - dance
+ - dare
+ - decay
+ - deceive
+ - decide
+ - decorate
+ - delay
+ - delight
+ - deliver
+ - depend
+ - describe
+ - desert
+ - deserve
+ - destroy
+ - detect
+ - develop
+ - disagree
+ - disappear
+ - disapprove
+ - disarm
+ - discover
+ - dislike
+ - divide
+ - double
+ - doubt
+ - drag
+ - drain
+ - dream
+ - dress
+ - drip
+ - drop
+ - drown
+ - drum
+ - dry
+ - dust
+ - earn
+ - educate
+ - embarrass
+ - employ
+ - empty
+ - encourage
+ - end
+ - enjoy
+ - enter
+ - entertain
+ - escape
+ - examine
+ - excite
+ - excuse
+ - exercise
+ - exist
+ - expand
+ - expect
+ - explain
+ - explode
+ - extend
+ - face
+ - fade
+ - fail
+ - fancy
+ - fasten
+ - fax
+ - fear
+ - fence
+ - fetch
+ - file
+ - fill
+ - film
+ - fire
+ - fit
+ - fix
+ - flap
+ - flash
+ - float
+ - flood
+ - flow
+ - flower
+ - fold
+ - follow
+ - fool
+ - force
+ - form
+ - found
+ - frame
+ - frighten
+ - fry
+ - gather
+ - gaze
+ - glow
+ - glue
+ - grab
+ - grate
+ - grease
+ - greet
+ - grin
+ - grip
+ - groan
+ - guarantee
+ - guard
+ - guess
+ - guide
+ - hammer
+ - hand
+ - handle
+ - hang
+ - happen
+ - harass
+ - harm
+ - hate
+ - haunt
+ - head
+ - heal
+ - heap
+ - heat
+ - help
+ - hook
+ - hop
+ - hope
+ - hover
+ - hug
+ - hum
+ - hunt
+ - hurry
+ - identify
+ - ignore
+ - imagine
+ - impress
+ - improve
+ - include
+ - increase
+ - influence
+ - inform
+ - inject
+ - injure
+ - instruct
+ - intend
+ - interest
+ - interfere
+ - interrupt
+ - introduce
+ - invent
+ - invite
+ - irritate
+ - itch
+ - jail
+ - jam
+ - jog
+ - join
+ - joke
+ - judge
+ - juggle
+ - jump
+ - kick
+ - kill
+ - kiss
+ - kneel
+ - knit
+ - knock
+ - knot
+ - label
+ - land
+ - last
+ - laugh
+ - launch
+ - learn
+ - level
+ - license
+ - lick
+ - lie
+ - lighten
+ - like
+ - list
+ - listen
+ - live
+ - load
+ - lock
+ - long
+ - look
+ - love
+ - man
+ - manage
+ - march
+ - mark
+ - marry
+ - match
+ - mate
+ - matter
+ - measure
+ - meddle
+ - melt
+ - memorise
+ - mend
+ - messup
+ - milk
+ - mine
+ - miss
+ - mix
+ - moan
+ - moor
+ - mourn
+ - move
+ - muddle
+ - mug
+ - multiply
+ - murder
+ - nail
+ - name
+ - need
+ - nest
+ - nod
+ - note
+ - notice
+ - number
+ - obey
+ - object
+ - observe
+ - obtain
+ - occur
+ - offend
+ - offer
+ - open
+ - order
+ - overflow
+ - owe
+ - own
+ - pack
+ - paddle
+ - paint
+ - park
+ - part
+ - pass
+ - paste
+ - pat
+ - pause
+ - peck
+ - pedal
+ - peel
+ - peep
+ - perform
+ - permit
+ - phone
+ - pick
+ - pinch
+ - pine
+ - place
+ - plan
+ - plant
+ - play
+ - please
+ - plug
+ - point
+ - poke
+ - polish
+ - pop
+ - possess
+ - post
+ - pour
+ - practise
+ - pray
+ - preach
+ - precede
+ - prefer
+ - prepare
+ - present
+ - preserve
+ - press
+ - pretend
+ - prevent
+ - prick
+ - print
+ - produce
+ - program
+ - promise
+ - protect
+ - provide
+ - pull
+ - pump
+ - punch
+ - puncture
+ - punish
+ - push
+ - question
+ - queue
+ - race
+ - radiate
+ - rain
+ - raise
+ - reach
+ - realise
+ - receive
+ - recognise
+ - record
+ - reduce
+ - reflect
+ - refuse
+ - regret
+ - reign
+ - reject
+ - rejoice
+ - relax
+ - release
+ - rely
+ - remain
+ - remember
+ - remind
+ - remove
+ - repair
+ - repeat
+ - replace
+ - reply
+ - report
+ - reproduce
+ - request
+ - rescue
+ - retire
+ - return
+ - rhyme
+ - rinse
+ - risk
+ - rob
+ - rock
+ - roll
+ - rot
+ - rub
+ - ruin
+ - rule
+ - rush
+ - sack
+ - sail
+ - satisfy
+ - save
+ - saw
+ - scare
+ - scatter
+ - scold
+ - scorch
+ - scrape
+ - scratch
+ - scream
+ - screw
+ - scribble
+ - scrub
+ - seal
+ - search
+ - separate
+ - serve
+ - settle
+ - shade
+ - share
+ - shave
+ - shelter
+ - shiver
+ - shock
+ - shop
+ - shriek
+ - shrug
+ - sigh
+ - sign
+ - signal
+ - sin
+ - sip
+ - ski
+ - skip
+ - slap
+ - slip
+ - slow
+ - smash
+ - smell
+ - smile
+ - smoke
+ - snatch
+ - sneeze
+ - sniff
+ - snore
+ - snow
+ - soak
+ - soothe
+ - sound
+ - spare
+ - spark
+ - sparkle
+ - spell
+ - spill
+ - spoil
+ - spot
+ - spray
+ - sprout
+ - squash
+ - squeak
+ - squeal
+ - squeeze
+ - stain
+ - stamp
+ - stare
+ - start
+ - stay
+ - steer
+ - step
+ - stir
+ - stitch
+ - stop
+ - store
+ - strap
+ - strengthen
+ - stretch
+ - stroke
+ - stuff
+ - subtract
+ - succeed
+ - suck
+ - suffer
+ - suggest
+ - suit
+ - supply
+ - support
+ - suppose
+ - surprise
+ - surround
+ - suspect
+ - suspend
+ - switch
+ - talk
+ - tame
+ - tap
+ - taste
+ - tease
+ - telephone
+ - tempt
+ - terrify
+ - test
+ - thank
+ - thaw
+ - tick
+ - tickle
+ - tie
+ - time
+ - tip
+ - tire
+ - touch
+ - tour
+ - tow
+ - trace
+ - trade
+ - train
+ - transport
+ - trap
+ - travel
+ - treat
+ - tremble
+ - trick
+ - trip
+ - trot
+ - trouble
+ - trust
+ - try
+ - tug
+ - tumble
+ - turn
+ - twist
+ - type
+ - unfasten
+ - unite
+ - unlock
+ - unpack
+ - untidy
+ - use
+ - vanish
+ - visit
+ - wail
+ - wait
+ - walk
+ - wander
+ - want
+ - warm
+ - warn
+ - wash
+ - waste
+ - watch
+ - water
+ - wave
+ - weigh
+ - welcome
+ - whine
+ - whip
+ - whirl
+ - whistle
+ - wink
+ - wipe
+ - wish
+ - wobble
+ - wonder
+ - work
+ - worry
+ - wrap
+ - wreck
+ - wrestle
+ - wriggle
+ - yawn
+ - yell
+ - zip
+ - zoom
+ - adorable
+ - adventurous
+ - aggressive
+ - alert
+ - attractive
+ - average
+ - beautiful
+ - blue-eyed
+ - bloody
+ - blushing
+ - bright
+ - clean
+ - clear
+ - cloudy
+ - colorful
+ - crowded
+ - cute
+ - dark
+ - drab
+ - distinct
+ - dull
+ - elegant
+ - excited
+ - fancy
+ - filthy
+ - glamorous
+ - gleaming
+ - gorgeous
+ - graceful
+ - grotesque
+ - handsome
+ - homely
+ - light
+ - long
+ - magnificent
+ - misty
+ - motionless
+ - muddy
+ - old-fashioned
+ - plain
+ - poised
+ - precious
+ - quaint
+ - shiny
+ - smoggy
+ - sparkling
+ - spotless
+ - stormy
+ - strange
+ - ugly
+ - ugliest
+ - unsightly
+ - unusual
+ - wide-eyed
+ - alive
+ - annoying
+ - bad
+ - better
+ - beautiful
+ - brainy
+ - breakable
+ - busy
+ - careful
+ - cautious
+ - clever
+ - clumsy
+ - concerned
+ - crazy
+ - curious
+ - dead
+ - different
+ - difficult
+ - doubtful
+ - easy
+ - expensive
+ - famous
+ - fragile
+ - frail
+ - gifted
+ - helpful
+ - helpless
+ - horrible
+ - important
+ - impossible
+ - inexpensive
+ - innocent
+ - inquisitive
+ - modern
+ - mushy
+ - odd
+ - open
+ - outstanding
+ - poor
+ - powerful
+ - prickly
+ - puzzled
+ - real
+ - rich
+ - shy
+ - sleepy
+ - stupid
+ - super
+ - talented
+ - tame
+ - tender
+ - tough
+ - uninterested
+ - vast
+ - wandering
+ - wild
+ - wrong
+ - angry
+ - annoyed
+ - anxious
+ - arrogant
+ - ashamed
+ - awful
+ - bad
+ - bewildered
+ - black
+ - blue
+ - bored
+ - clumsy
+ - combative
+ - condemned
+ - confused
+ - crazy,flipped-out
+ - creepy
+ - cruel
+ - dangerous
+ - defeated
+ - defiant
+ - depressed
+ - disgusted
+ - disturbed
+ - dizzy
+ - dull
+ - embarrassed
+ - envious
+ - evil
+ - fierce
+ - foolish
+ - frantic
+ - frightened
+ - grieving
+ - grumpy
+ - helpless
+ - homeless
+ - hungry
+ - hurt
+ - ill
+ - itchy
+ - jealous
+ - jittery
+ - lazy
+ - lonely
+ - mysterious
+ - nasty
+ - naughty
+ - nervous
+ - nutty
+ - obnoxious
+ - outrageous
+ - panicky
+ - repulsive
+ - scary
+ - selfish
+ - sore
+ - tense
+ - terrible
+ - testy
+ - thoughtless
+ - tired
+ - troubled
+ - upset
+ - uptight
+ - weary
+ - wicked
+ - worried
+ - agreeable
+ - amused
+ - brave
+ - calm
+ - charming
+ - cheerful
+ - comfortable
+ - cooperative
+ - courageous
+ - delightful
+ - determined
+ - eager
+ - elated
+ - enchanting
+ - encouraging
+ - energetic
+ - enthusiastic
+ - excited
+ - exuberant
+ - fair
+ - faithful
+ - fantastic
+ - fine
+ - friendly
+ - funny
+ - gentle
+ - glorious
+ - good
+ - happy
+ - healthy
+ - helpful
+ - hilarious
+ - jolly
+ - joyous
+ - kind
+ - lively
+ - lovely
+ - lucky
+ - nice
+ - obedient
+ - perfect
+ - pleasant
+ - proud
+ - relieved
+ - silly
+ - smiling
+ - splendid
+ - successful
+ - thankful
+ - thoughtful
+ - victorious
+ - vivacious
+ - witty
+ - wonderful
+ - zealous
+ - zany
+ - broad
+ - chubby
+ - crooked
+ - curved
+ - deep
+ - flat
+ - high
+ - hollow
+ - low
+ - narrow
+ - round
+ - shallow
+ - skinny
+ - square
+ - steep
+ - straight
+ - wide
+ - big
+ - colossal
+ - fat
+ - gigantic
+ - great
+ - huge
+ - immense
+ - large
+ - little
+ - mammoth
+ - massive
+ - miniature
+ - petite
+ - puny
+ - scrawny
+ - short
+ - small
+ - tall
+ - teeny
+ - teeny-tiny
+ - tiny
+ - cooing
+ - deafening
+ - faint
+ - harsh
+ - high-pitched
+ - hissing
+ - hushed
+ - husky
+ - loud
+ - melodic
+ - moaning
+ - mute
+ - noisy
+ - purring
+ - quiet
+ - raspy
+ - resonant
+ - screeching
+ - shrill
+ - silent
+ - soft
+ - squealing
+ - thundering
+ - voiceless
+ - whispering
+ - ancient
+ - brief
+ - early
+ - fast
+ - late
+ - long
+ - modern
+ - old
+ - old-fashioned
+ - quick
+ - rapid
+ - short
+ - slow
+ - swift
+ - young
+ - bitter
+ - delicious
+ - fresh
+ - juicy
+ - ripe
+ - rotten
+ - salty
+ - sour
+ - spicy
+ - stale
+ - sticky
+ - strong
+ - sweet
+ - tart
+ - tasteless
+ - tasty
+ - thirsty
+ - fluttering
+ - fuzzy
+ - greasy
+ - grubby
+ - hard
+ - hot
+ - icy
+ - loose
+ - melted
+ - nutritious
+ - plastic
+ - prickly
+ - rainy
+ - rough
+ - scattered
+ - shaggy
+ - shaky
+ - sharp
+ - shivering
+ - silky
+ - slimy
+ - slippery
+ - smooth
+ - soft
+ - solid
+ - steady
+ - sticky
+ - tender
+ - tight
+ - uneven
+ - weak
+ - wet
+ - wooden
+ - yummy
+ - boiling
+ - breezy
+ - broken
+ - bumpy
+ - chilly
+ - cold
+ - cool
+ - creepy
+ - crooked
+ - cuddly
+ - curly
+ - damaged
+ - damp
+ - dirty
+ - dry
+ - dusty
+ - filthy
+ - flaky
+ - fluffy
+ - freezing
+ - hot
+ - warm
+ - wet
+ - abundant
+ - empty
+ - few
+ - heavy
+ - light
+ - many
+ - numerous
+ - substantial
+ - capitalist
diff --git a/Resources/ServerInfo/Guidebook/Mobs/Species.xml b/Resources/ServerInfo/Guidebook/Mobs/Species.xml
index 4267fb3a1c..3ab40671f2 100644
--- a/Resources/ServerInfo/Guidebook/Mobs/Species.xml
+++ b/Resources/ServerInfo/Guidebook/Mobs/Species.xml
@@ -15,6 +15,7 @@
+
# Parkstation specific species
diff --git a/Resources/ServerInfo/_Impstation/Guidebook/Mobs/Thaven.xml b/Resources/ServerInfo/_Impstation/Guidebook/Mobs/Thaven.xml
new file mode 100644
index 0000000000..ea3974c72c
--- /dev/null
+++ b/Resources/ServerInfo/_Impstation/Guidebook/Mobs/Thaven.xml
@@ -0,0 +1,36 @@
+
+ # Thaven
+
+
+
+
+
+ [color=#ffa500]Caution! This species has a severely limiting game mechanic and is not recommended for new players.[/color]
+ [color=#ffa500]This mechanic makes it very difficult to form a consistent character or personality, as it can severely affect the way a Thaven speaks and interacts with others.[/color]
+
+## Moods
+
+
+
+
+ The Thaven have a unique brain structure, similar to a positronic brain, and thus have "Moods" which affect them similarly to a borg's Laws. [color=#ffa500]These Moods must be followed to the best of your ability![/color] [color=red]Breaking your moods is very distressing! Avoid it whenever possible![/color] [color=#ffa500]If a Thaven violates them, they will experience distress or discomfort. The specifics of that are up to you, but if a Mood is violated, you must seek to correct your mistake immediately if possible.[/color]
+
+## Mood Swings
+ Thaven brains are susceptible to fluctuations in nöospheric fields. As a result, their ability to synchronize and regulate their Moods tends to degrade with extended exposure to the glimmer that builds up in NT research stations. [color=#ffa500]It also renders them vulnerable to glimmer discharges,[/color] which can sometimes give them additional, often severely debilitating moods.
+
+## Thaven Nerve Pinch
+ Thaven hand-to-hand martial arts have a focus on inflicting non-permanent damage. As a result, [color=#ffa500]their unarmed attacks are slow, and deal no damage,[/color] but [color=#1e90ff]cause a fair amount of stun buildup.[/color]
+
+## Damage
+ Due to their relatively fragile bone structure and unique nervous system, they take [color=#ffa500]10% more damage from blunt, slash, pierce, and genetic, and 20% more damage from radiation,[/color] but their aquatic ancestry allows them to take [color=#1e90ff]10% less damage from heat, cold, and poison.[/color]
+
+## Thaven Naming Conventions
+ Thaven typically name themselves after a single virtue they hold dear. Sometimes these names can be long and unwieldy.
+
+ For example:
+ - Honesty
+ - Have Mercy
+ - Give Thanks To Thy Ancestors
+ - Obedience
+ - Search The Scriptures
+
diff --git a/Resources/Textures/DeltaV/Effects/speech.rsi/meta.json b/Resources/Textures/DeltaV/Effects/speech.rsi/meta.json
index d91b201f0b..e39130bcbe 100644
--- a/Resources/Textures/DeltaV/Effects/speech.rsi/meta.json
+++ b/Resources/Textures/DeltaV/Effects/speech.rsi/meta.json
@@ -40,6 +40,23 @@
},
{
"name": "chitinid2"
+ },
+ {
+ "name": "thaven1"
+ },
+ {
+ "name": "thaven2"
+ },
+ {
+ "name": "thaven0",
+ "delays": [
+ [
+ 0.2,
+ 0.3,
+ 0.3,
+ 0.3
+ ]
+ ]
}
]
}
diff --git a/Resources/Textures/DeltaV/Effects/speech.rsi/thaven0.png b/Resources/Textures/DeltaV/Effects/speech.rsi/thaven0.png
new file mode 100644
index 0000000000..01053c9730
Binary files /dev/null and b/Resources/Textures/DeltaV/Effects/speech.rsi/thaven0.png differ
diff --git a/Resources/Textures/DeltaV/Effects/speech.rsi/thaven1.png b/Resources/Textures/DeltaV/Effects/speech.rsi/thaven1.png
new file mode 100644
index 0000000000..9ed80eb55b
Binary files /dev/null and b/Resources/Textures/DeltaV/Effects/speech.rsi/thaven1.png differ
diff --git a/Resources/Textures/DeltaV/Effects/speech.rsi/thaven2.png b/Resources/Textures/DeltaV/Effects/speech.rsi/thaven2.png
new file mode 100644
index 0000000000..c575d6dfee
Binary files /dev/null and b/Resources/Textures/DeltaV/Effects/speech.rsi/thaven2.png differ
diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_thaven.png b/Resources/Textures/Effects/creampie.rsi/creampie_thaven.png
new file mode 100644
index 0000000000..278c48a95d
Binary files /dev/null and b/Resources/Textures/Effects/creampie.rsi/creampie_thaven.png differ
diff --git a/Resources/Textures/Effects/creampie.rsi/meta.json b/Resources/Textures/Effects/creampie.rsi/meta.json
index 8db8a77945..63dd1be198 100644
--- a/Resources/Textures/Effects/creampie.rsi/meta.json
+++ b/Resources/Textures/Effects/creampie.rsi/meta.json
@@ -83,6 +83,11 @@
{
"name": "creampie_xenomorph",
"directions": 4
+ },
+ {
+ "name": "creampie_spelf",
+ "name": "creampie_thaven",
+ "directions": 4
}
]
}
diff --git a/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_small.png b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_small.png
new file mode 100644
index 0000000000..de09157707
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_small.png differ
diff --git a/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_standard.png b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_standard.png
new file mode 100644
index 0000000000..38d7137e61
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_standard.png differ
diff --git a/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_tall.png b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_tall.png
new file mode 100644
index 0000000000..f42a86613a
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_tall.png differ
diff --git a/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_thin.png b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_thin.png
new file mode 100644
index 0000000000..a910e67f6d
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_thin.png differ
diff --git a/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_upwards.png b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_upwards.png
new file mode 100644
index 0000000000..8454708d9e
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_upwards.png differ
diff --git a/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_wide.png b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_wide.png
new file mode 100644
index 0000000000..2a643bf6c6
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_wide.png differ
diff --git a/Resources/Textures/Mobs/Customization/ears.rsi/meta.json b/Resources/Textures/Mobs/Customization/ears.rsi/meta.json
new file mode 100644
index 0000000000..ab8deddeaa
--- /dev/null
+++ b/Resources/Textures/Mobs/Customization/ears.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Sprites by angelofallars (github)",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "long_ears_standard",
+ "directions": 4
+ },
+ {
+ "name": "long_ears_wide",
+ "directions": 4
+ },
+ {
+ "name": "long_ears_small",
+ "directions": 4
+ },
+ {
+ "name": "long_ears_upwards",
+ "directions": 4
+ },
+ {
+ "name": "long_ears_tall",
+ "directions": 4
+ },
+ {
+ "name": "long_ears_thin",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/carp_spots.png b/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/carp_spots.png
new file mode 100644
index 0000000000..aadf88fe90
Binary files /dev/null and b/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/carp_spots.png differ
diff --git a/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/cheek_barbels.png b/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/cheek_barbels.png
new file mode 100644
index 0000000000..c10e49e18a
Binary files /dev/null and b/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/cheek_barbels.png differ
diff --git a/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/eyebrow_barbels.png b/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/eyebrow_barbels.png
new file mode 100644
index 0000000000..fd757816d4
Binary files /dev/null and b/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/eyebrow_barbels.png differ
diff --git a/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/meta.json b/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/meta.json
new file mode 100644
index 0000000000..d965e86b74
--- /dev/null
+++ b/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/meta.json
@@ -0,0 +1,31 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "cheek_barbels, eyebrow_barbels, underbelly_face, underbelly_torso, carp_spots by kushbreth (github).",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "cheek_barbels",
+ "directions": 4
+ },
+ {
+ "name": "eyebrow_barbels",
+ "directions": 4
+ },
+ {
+ "name": "underbelly_face",
+ "directions": 4
+ },
+ {
+ "name": "underbelly_torso",
+ "directions": 4
+ },
+ {
+ "name": "carp_spots",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/underbelly_face.png b/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/underbelly_face.png
new file mode 100644
index 0000000000..9c7c5277e0
Binary files /dev/null and b/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/underbelly_face.png differ
diff --git a/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/underbelly_torso.png b/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/underbelly_torso.png
new file mode 100644
index 0000000000..14d66a043b
Binary files /dev/null and b/Resources/Textures/_DV/Mobs/Customization/thaven.rsi/underbelly_torso.png differ
diff --git a/Resources/Textures/_EE/Effects/speech.rsi/meta.json b/Resources/Textures/_EE/Effects/speech.rsi/meta.json
new file mode 100644
index 0000000000..152c03ee27
--- /dev/null
+++ b/Resources/Textures/_EE/Effects/speech.rsi/meta.json
@@ -0,0 +1,28 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Timfa",
+ "states": [
+ {
+ "name": "thaven0",
+ "delays": [
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ]
+ ]
+ },
+ {
+ "name": "thaven1"
+ },
+ {
+ "name": "thaven2"
+ }
+ ]
+}
diff --git a/Resources/Textures/_EE/Effects/speech.rsi/thaven0.png b/Resources/Textures/_EE/Effects/speech.rsi/thaven0.png
new file mode 100644
index 0000000000..1c2786ce47
Binary files /dev/null and b/Resources/Textures/_EE/Effects/speech.rsi/thaven0.png differ
diff --git a/Resources/Textures/_EE/Effects/speech.rsi/thaven1.png b/Resources/Textures/_EE/Effects/speech.rsi/thaven1.png
new file mode 100644
index 0000000000..0764f3deda
Binary files /dev/null and b/Resources/Textures/_EE/Effects/speech.rsi/thaven1.png differ
diff --git a/Resources/Textures/_EE/Effects/speech.rsi/thaven2.png b/Resources/Textures/_EE/Effects/speech.rsi/thaven2.png
new file mode 100644
index 0000000000..2ca4526db8
Binary files /dev/null and b/Resources/Textures/_EE/Effects/speech.rsi/thaven2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/meta.json b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/meta.json
index 3b83c85dcd..e76209de8f 100644
--- a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/meta.json
+++ b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/meta.json
@@ -342,6 +342,106 @@
{
"name": "chitinidbeetlehorn2",
"directions": 4
- }
+ },
+ {
+ "name": "thavenchestgills",
+ "directions": 4
+ },
+ {
+ "name": "thavenchestscales",
+ "directions": 4
+ },
+ {
+ "name": "thavenheadscales",
+ "directions": 4
+ },
+ {
+ "name": "thavenleftarmscales",
+ "directions": 4
+ },
+ {
+ "name": "thavenrightarmscales",
+ "directions": 4
+ },
+ {
+ "name": "thavenleftlegscales",
+ "directions": 4
+ },
+ {
+ "name": "thavenrightlegscales",
+ "directions": 4
+ },
+ {
+ "name": "thavenbignaturals",
+ "directions": 4
+ },
+ {
+ "name": "thavennonaturals",
+ "directions": 4
+ },
+ {
+ "name": "thavenfishears",
+ "directions": 4
+ },
+ {
+ "name": "thavenbitemark",
+ "directions": 4
+ },
+ {
+ "name": "thaventattoovines",
+ "directions": 4
+ },
+ {
+ "name": "thavenspines",
+ "directions": 4
+ },
+ {
+ "name": "thaventattoowave",
+ "directions": 4
+ },
+ {
+ "name": "thaventattoosharkminnoweyeliner",
+ "directions": 4
+ },
+ {
+ "name": "thaventiger1",
+ "directions": 4
+ },
+ {
+ "name": "thaventiger2",
+ "directions": 4
+ },
+ {
+ "name": "thaventigerarmsl",
+ "directions": 4
+ },
+ {
+ "name": "thaventigerarmsr",
+ "directions": 4
+ },
+ {
+ "name": "thavenbodystripes",
+ "directions": 4
+ },
+ {
+ "name": "thavenheadstripes",
+ "directions": 4
+ },
+ {
+ "name": "thavenearsbigfins",
+ "directions": 4
+ },
+ {
+ "name": "thavenearsbigfins2",
+ "directions": 4
+ },
+ {
+ "name": "thavenheadcap1",
+ "directions": 4
+ },
+ {
+ "name": "thavenheadcap2",
+ "directions": 4
+ }
]
}
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenbignaturals.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenbignaturals.png
new file mode 100644
index 0000000000..ffac641f6b
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenbignaturals.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenbitemark.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenbitemark.png
new file mode 100644
index 0000000000..6b3462a207
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenbitemark.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenbodystripes.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenbodystripes.png
new file mode 100644
index 0000000000..d185337395
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenbodystripes.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenchestgills.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenchestgills.png
new file mode 100644
index 0000000000..353a7e6670
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenchestgills.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenchestscales.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenchestscales.png
new file mode 100644
index 0000000000..9dfd0fb2f5
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenchestscales.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenearsbigfins.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenearsbigfins.png
new file mode 100644
index 0000000000..b7bcb7ef52
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenearsbigfins.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenearsbigfins2.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenearsbigfins2.png
new file mode 100644
index 0000000000..15b53149dc
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenearsbigfins2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenfishears.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenfishears.png
new file mode 100644
index 0000000000..55c1a3a8af
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenfishears.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenheadcap1.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenheadcap1.png
new file mode 100644
index 0000000000..67d982f223
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenheadcap1.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenheadcap2.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenheadcap2.png
new file mode 100644
index 0000000000..2dc725c2e5
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenheadcap2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenheadscales.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenheadscales.png
new file mode 100644
index 0000000000..73f68e1843
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenheadscales.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenheadstripes.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenheadstripes.png
new file mode 100644
index 0000000000..6b7add1840
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenheadstripes.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenleftarmscales.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenleftarmscales.png
new file mode 100644
index 0000000000..157ed88874
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenleftarmscales.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenleftlegscales.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenleftlegscales.png
new file mode 100644
index 0000000000..895376f19d
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenleftlegscales.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavennonaturals.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavennonaturals.png
new file mode 100644
index 0000000000..c9fb02d1a1
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavennonaturals.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenrightarmscales.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenrightarmscales.png
new file mode 100644
index 0000000000..510d9c9077
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenrightarmscales.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenrightlegscales.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenrightlegscales.png
new file mode 100644
index 0000000000..deb6f1adcb
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenrightlegscales.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenspines.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenspines.png
new file mode 100644
index 0000000000..73978b8119
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thavenspines.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventattoosharkminnoweyeliner.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventattoosharkminnoweyeliner.png
new file mode 100644
index 0000000000..4424c14197
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventattoosharkminnoweyeliner.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventattoovines.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventattoovines.png
new file mode 100644
index 0000000000..e921e89497
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventattoovines.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventattoowave.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventattoowave.png
new file mode 100644
index 0000000000..fb0438a6eb
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventattoowave.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventiger1.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventiger1.png
new file mode 100644
index 0000000000..a7d47e765f
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventiger1.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventiger2.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventiger2.png
new file mode 100644
index 0000000000..861b9ae13b
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventiger2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventigerarmsl.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventigerarmsl.png
new file mode 100644
index 0000000000..9b6cea71dd
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventigerarmsl.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventigerarmsr.png b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventigerarmsr.png
new file mode 100644
index 0000000000..7d3feeb367
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/markingsbundle1.rsi/thaventigerarmsr.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/chesttat1.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/chesttat1.png
new file mode 100644
index 0000000000..9808aa67b3
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/chesttat1.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/ears1.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/ears1.png
new file mode 100644
index 0000000000..88c5081cb9
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/ears1.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/ears2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/ears2.png
new file mode 100644
index 0000000000..255b21b8c0
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/ears2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/ears3.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/ears3.png
new file mode 100644
index 0000000000..99f1e79b7c
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/ears3.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/ears4.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/ears4.png
new file mode 100644
index 0000000000..a1286118be
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/ears4.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/larmtat1.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/larmtat1.png
new file mode 100644
index 0000000000..4999357dbb
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/larmtat1.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/meta.json b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/meta.json
new file mode 100644
index 0000000000..17f6720f2e
--- /dev/null
+++ b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/meta.json
@@ -0,0 +1,47 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "by Widgetbeck",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "ears1",
+ "directions": 4
+ },
+ {
+ "name": "ears2",
+ "directions": 4
+ },
+ {
+ "name": "ears3",
+ "directions": 4
+ },
+ {
+ "name": "ears4",
+ "directions": 4
+ },
+ {
+ "name": "piercings",
+ "directions": 4
+ },
+ {
+ "name": "piercings2",
+ "directions": 4
+ },
+ {
+ "name": "chesttat1",
+ "directions": 4
+ },
+ {
+ "name": "larmtat1",
+ "directions": 4
+ },
+ {
+ "name": "rarmtat1",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/piercings.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/piercings.png
new file mode 100644
index 0000000000..aee5f3e861
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/piercings.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/piercings2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/piercings2.png
new file mode 100644
index 0000000000..e7743d12d8
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/piercings2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/rarmtat1.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/rarmtat1.png
new file mode 100644
index 0000000000..53486d73bc
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven.rsi/rarmtat1.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/80s.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/80s.png
new file mode 100644
index 0000000000..c6947da0f1
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/80s.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/a.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/a.png
new file mode 100644
index 0000000000..dc7e978648
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/a.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/b.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/b.png
new file mode 100644
index 0000000000..e4797a24f2
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/b.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bald.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bald.png
new file mode 100644
index 0000000000..2975c479be
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bald.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/baldface.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/baldface.png
new file mode 100644
index 0000000000..761f190868
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/baldface.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bedhead.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bedhead.png
new file mode 100644
index 0000000000..7ac1202562
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bedhead.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bedhead2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bedhead2.png
new file mode 100644
index 0000000000..9da0cfcb25
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bedhead2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bedhead3.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bedhead3.png
new file mode 100644
index 0000000000..a366b25819
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bedhead3.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/beehive.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/beehive.png
new file mode 100644
index 0000000000..f781934fcf
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/beehive.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/beehive2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/beehive2.png
new file mode 100644
index 0000000000..0d3682bcb6
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/beehive2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bigflattop.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bigflattop.png
new file mode 100644
index 0000000000..663554c8c3
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bigflattop.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bigpompadour.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bigpompadour.png
new file mode 100644
index 0000000000..f935966d18
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bigpompadour.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bob.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bob.png
new file mode 100644
index 0000000000..14b42723db
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bob.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bob2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bob2.png
new file mode 100644
index 0000000000..645d94f16c
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bob2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bob4.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bob4.png
new file mode 100644
index 0000000000..3c70986fee
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bob4.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bob5.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bob5.png
new file mode 100644
index 0000000000..eb0ea4e8c1
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bob5.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bobcurl.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bobcurl.png
new file mode 100644
index 0000000000..78377c7d3e
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bobcurl.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bobcut.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bobcut.png
new file mode 100644
index 0000000000..d5f60c2cab
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bobcut.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bowlcut.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bowlcut.png
new file mode 100644
index 0000000000..b3a9154240
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bowlcut.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bowlcut2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bowlcut2.png
new file mode 100644
index 0000000000..9ee6c7847c
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bowlcut2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/braid.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/braid.png
new file mode 100644
index 0000000000..a9dc0ddc0c
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/braid.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/braid2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/braid2.png
new file mode 100644
index 0000000000..b25ebe1b9e
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/braid2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/braided.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/braided.png
new file mode 100644
index 0000000000..b10d10c561
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/braided.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/braidfront.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/braidfront.png
new file mode 100644
index 0000000000..4da07f76f8
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/braidfront.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/braidtail.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/braidtail.png
new file mode 100644
index 0000000000..ec9dc6f372
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/braidtail.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bun.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bun.png
new file mode 100644
index 0000000000..b988d153c2
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bun.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bun3.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bun3.png
new file mode 100644
index 0000000000..3874908bf2
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bun3.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bunhead2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bunhead2.png
new file mode 100644
index 0000000000..7b4c11fc9c
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/bunhead2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/business.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/business.png
new file mode 100644
index 0000000000..81a48305a1
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/business.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/business2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/business2.png
new file mode 100644
index 0000000000..81f6ebb297
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/business2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/business3.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/business3.png
new file mode 100644
index 0000000000..6bbd80679a
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/business3.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/business4.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/business4.png
new file mode 100644
index 0000000000..e35973ea61
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/business4.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/buzzcut.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/buzzcut.png
new file mode 100644
index 0000000000..20f5042b54
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/buzzcut.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/c.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/c.png
new file mode 100644
index 0000000000..0397bc2055
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/c.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cia.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cia.png
new file mode 100644
index 0000000000..394e8c0ca9
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cia.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicafro.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicafro.png
new file mode 100644
index 0000000000..2dd00a8725
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicafro.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classiccia.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classiccia.png
new file mode 100644
index 0000000000..427e34807d
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classiccia.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicciabusiness.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicciabusiness.png
new file mode 100644
index 0000000000..258aed5f2d
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicciabusiness.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classiccornrows.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classiccornrows.png
new file mode 100644
index 0000000000..3c5ca06e19
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classiccornrows.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicfloorlength_bedhead.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicfloorlength_bedhead.png
new file mode 100644
index 0000000000..c60a079b5a
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicfloorlength_bedhead.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classiclong2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classiclong2.png
new file mode 100644
index 0000000000..a3f406a73a
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classiclong2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classiclong3.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classiclong3.png
new file mode 100644
index 0000000000..b8652c945c
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classiclong3.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicmodern.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicmodern.png
new file mode 100644
index 0000000000..adca06ce49
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicmodern.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicmulder.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicmulder.png
new file mode 100644
index 0000000000..a1ff55398e
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicmulder.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicwisp.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicwisp.png
new file mode 100644
index 0000000000..d8bc7837fe
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/classicwisp.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/coffeehouse.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/coffeehouse.png
new file mode 100644
index 0000000000..342d08252f
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/coffeehouse.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/combover.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/combover.png
new file mode 100644
index 0000000000..b880f6140c
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/combover.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cornrowbraid.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cornrowbraid.png
new file mode 100644
index 0000000000..0df721e7a4
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cornrowbraid.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cornrowbun.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cornrowbun.png
new file mode 100644
index 0000000000..b7dc85cf28
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cornrowbun.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cornrows.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cornrows.png
new file mode 100644
index 0000000000..ac9faecce7
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cornrows.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cornrows2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cornrows2.png
new file mode 100644
index 0000000000..212d418d5b
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cornrows2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cornrowtail.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cornrowtail.png
new file mode 100644
index 0000000000..e4fd7e6c96
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/cornrowtail.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/country.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/country.png
new file mode 100644
index 0000000000..e919849e8e
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/country.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/crewcut.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/crewcut.png
new file mode 100644
index 0000000000..eccd95eedd
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/crewcut.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/crewcut2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/crewcut2.png
new file mode 100644
index 0000000000..cb77412faa
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/crewcut2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/curls.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/curls.png
new file mode 100644
index 0000000000..a6221b56da
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/curls.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/d.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/d.png
new file mode 100644
index 0000000000..17e47f3ad3
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/d.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/dandypompadour.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/dandypompadour.png
new file mode 100644
index 0000000000..30916d69ea
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/dandypompadour.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/devilock.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/devilock.png
new file mode 100644
index 0000000000..76c36c9c78
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/devilock.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/doublebun.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/doublebun.png
new file mode 100644
index 0000000000..45e3ad009d
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/doublebun.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/doublebun_long.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/doublebun_long.png
new file mode 100644
index 0000000000..ce92b9c88e
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/doublebun_long.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/dreads.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/dreads.png
new file mode 100644
index 0000000000..eeb64977a3
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/dreads.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/drillhair.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/drillhair.png
new file mode 100644
index 0000000000..0aa08c65d1
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/drillhair.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/drillhairextended.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/drillhairextended.png
new file mode 100644
index 0000000000..62f87e65ee
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/drillhairextended.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/drillruru.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/drillruru.png
new file mode 100644
index 0000000000..9b926688d8
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/drillruru.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/e.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/e.png
new file mode 100644
index 0000000000..0fa5447688
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/e.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/emo2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/emo2.png
new file mode 100644
index 0000000000..9859230786
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/emo2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/emofringe.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/emofringe.png
new file mode 100644
index 0000000000..c7fd27b8bf
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/emofringe.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/f.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/f.png
new file mode 100644
index 0000000000..35c911c228
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/f.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/father.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/father.png
new file mode 100644
index 0000000000..b024ff4afc
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/father.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/feather.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/feather.png
new file mode 100644
index 0000000000..4362e5ccaa
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/feather.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/flair.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/flair.png
new file mode 100644
index 0000000000..c5eb356d60
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/flair.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/floorlength_bedhead.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/floorlength_bedhead.png
new file mode 100644
index 0000000000..a05dacf906
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/floorlength_bedhead.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/frenchbraid.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/frenchbraid.png
new file mode 100644
index 0000000000..cf839ffb88
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/frenchbraid.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/fringetail.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/fringetail.png
new file mode 100644
index 0000000000..8c0072e06e
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/fringetail.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/gelled.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/gelled.png
new file mode 100644
index 0000000000..bc0f32f847
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/gelled.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/gentle.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/gentle.png
new file mode 100644
index 0000000000..a2b6acd378
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/gentle.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/halfbang.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/halfbang.png
new file mode 100644
index 0000000000..a94396ce98
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/halfbang.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/halfbang2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/halfbang2.png
new file mode 100644
index 0000000000..a93c6f6ff7
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/halfbang2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/halfshaved.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/halfshaved.png
new file mode 100644
index 0000000000..9948396796
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/halfshaved.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/hbraid.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/hbraid.png
new file mode 100644
index 0000000000..3b347bfd27
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/hbraid.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/hedgehog.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/hedgehog.png
new file mode 100644
index 0000000000..630fc1a256
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/hedgehog.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/highfade.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/highfade.png
new file mode 100644
index 0000000000..800039dda4
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/highfade.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/highponytail.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/highponytail.png
new file mode 100644
index 0000000000..7de84eb983
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/highponytail.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/himecut.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/himecut.png
new file mode 100644
index 0000000000..52a6864397
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/himecut.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/himecut2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/himecut2.png
new file mode 100644
index 0000000000..f5b7ee3dd3
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/himecut2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/himeup.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/himeup.png
new file mode 100644
index 0000000000..a1a1758c56
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/himeup.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/hitop.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/hitop.png
new file mode 100644
index 0000000000..7f12120c86
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/hitop.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/jade.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/jade.png
new file mode 100644
index 0000000000..03a8d6c6e8
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/jade.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/jensen.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/jensen.png
new file mode 100644
index 0000000000..739ed79ba3
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/jensen.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/joestar.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/joestar.png
new file mode 100644
index 0000000000..d92e0b40a8
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/joestar.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/kagami.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/kagami.png
new file mode 100644
index 0000000000..d2100a1bfe
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/kagami.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/keanu.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/keanu.png
new file mode 100644
index 0000000000..207a6b217f
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/keanu.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/kusanagi.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/kusanagi.png
new file mode 100644
index 0000000000..a239b0b98a
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/kusanagi.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/largebun.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/largebun.png
new file mode 100644
index 0000000000..3289739899
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/largebun.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/lbangs.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/lbangs.png
new file mode 100644
index 0000000000..390c3d4aee
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/lbangs.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/long.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/long.png
new file mode 100644
index 0000000000..8fff78dd65
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/long.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/long2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/long2.png
new file mode 100644
index 0000000000..137707a816
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/long2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/long3.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/long3.png
new file mode 100644
index 0000000000..ba4dd3fabc
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/long3.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/long_bedhead.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/long_bedhead.png
new file mode 100644
index 0000000000..b7c47a1915
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/long_bedhead.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/long_bedhead2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/long_bedhead2.png
new file mode 100644
index 0000000000..c2bc5a0e95
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/long_bedhead2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longbundled.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longbundled.png
new file mode 100644
index 0000000000..9d293b7f24
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longbundled.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longeremo.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longeremo.png
new file mode 100644
index 0000000000..9b8b5cb6ec
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longeremo.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longest.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longest.png
new file mode 100644
index 0000000000..c543fd3efd
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longest.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longest2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longest2.png
new file mode 100644
index 0000000000..73a218ce26
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longest2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longfringe.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longfringe.png
new file mode 100644
index 0000000000..a59faffafc
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longfringe.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longovereye.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longovereye.png
new file mode 100644
index 0000000000..362bc1d453
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longovereye.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longsidepart.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longsidepart.png
new file mode 100644
index 0000000000..3836260ac1
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longsidepart.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longstraightponytail.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longstraightponytail.png
new file mode 100644
index 0000000000..8420878407
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/longstraightponytail.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/lowfade.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/lowfade.png
new file mode 100644
index 0000000000..ffe9352c2d
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/lowfade.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/manbun.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/manbun.png
new file mode 100644
index 0000000000..15ff567146
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/manbun.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/medfade.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/medfade.png
new file mode 100644
index 0000000000..2d27d0a9a0
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/medfade.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/mediumsidepart.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/mediumsidepart.png
new file mode 100644
index 0000000000..42334028fd
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/mediumsidepart.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/megaeyebrows.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/megaeyebrows.png
new file mode 100644
index 0000000000..5841ce0df3
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/megaeyebrows.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/messy.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/messy.png
new file mode 100644
index 0000000000..9ea8314268
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/messy.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/meta.json b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/meta.json
new file mode 100644
index 0000000000..19107c5b76
--- /dev/null
+++ b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/meta.json
@@ -0,0 +1,759 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "copyright": "Taken from https://github.com/tgstation/tgstation/blob/05ec94e46349c35e29ca91e5e97d0c88ae26ad44/icons/mob/species/human/human_face.dmi ,resprited by Alekshhh, a modified by potato1234x, uneven and tailed is drawn by Ubaser, doublebun_long by Emisse, longbundled and bob5 sprited by github:DreamlyJack(624946166152298517)",
+ "license": "CC-BY-SA-3.0",
+ "states": [
+ {
+ "name": "80s",
+ "directions": 4
+ },
+ {
+ "name": "a",
+ "directions": 4
+ },
+ {
+ "name": "b",
+ "directions": 4
+ },
+ {
+ "name": "bald",
+ "directions": 4
+ },
+ {
+ "name": "baldface",
+ "directions": 4
+ },
+ {
+ "name": "bedhead",
+ "directions": 4
+ },
+ {
+ "name": "bedhead2",
+ "directions": 4
+ },
+ {
+ "name": "bedhead3",
+ "directions": 4
+ },
+ {
+ "name": "beehive",
+ "directions": 4
+ },
+ {
+ "name": "beehive2",
+ "directions": 4
+ },
+ {
+ "name": "bigflattop",
+ "directions": 4
+ },
+ {
+ "name": "bigpompadour",
+ "directions": 4
+ },
+ {
+ "name": "bob",
+ "directions": 4
+ },
+ {
+ "name": "bob2",
+ "directions": 4
+ },
+ {
+ "name": "bob4",
+ "directions": 4
+ },
+ {
+ "name": "bob5",
+ "directions": 4
+ },
+ {
+ "name": "bobcurl",
+ "directions": 4
+ },
+ {
+ "name": "bobcut",
+ "directions": 4
+ },
+ {
+ "name": "bowlcut",
+ "directions": 4
+ },
+ {
+ "name": "bowlcut2",
+ "directions": 4
+ },
+ {
+ "name": "braid",
+ "directions": 4
+ },
+ {
+ "name": "braid2",
+ "directions": 4
+ },
+ {
+ "name": "braided",
+ "directions": 4
+ },
+ {
+ "name": "braidfront",
+ "directions": 4
+ },
+ {
+ "name": "braidtail",
+ "directions": 4
+ },
+ {
+ "name": "bun",
+ "directions": 4
+ },
+ {
+ "name": "bun3",
+ "directions": 4
+ },
+ {
+ "name": "bunhead2",
+ "directions": 4
+ },
+ {
+ "name": "business",
+ "directions": 4
+ },
+ {
+ "name": "business2",
+ "directions": 4
+ },
+ {
+ "name": "business3",
+ "directions": 4
+ },
+ {
+ "name": "business4",
+ "directions": 4
+ },
+ {
+ "name": "buzzcut",
+ "directions": 4
+ },
+ {
+ "name": "c",
+ "directions": 4
+ },
+ {
+ "name": "classicciabusiness",
+ "directions": 4
+ },
+ {
+ "name": "classiccia",
+ "directions": 4
+ },
+ {
+ "name": "classiccornrows",
+ "directions": 4
+ },
+ {
+ "name": "classicfloorlength_bedhead",
+ "directions": 4
+ },
+ {
+ "name": "classicmodern",
+ "directions": 4
+ },
+ {
+ "name": "classicmulder",
+ "directions": 4
+ },
+ {
+ "name": "classicwisp",
+ "directions": 4
+ },
+ {
+ "name": "cia",
+ "directions": 4
+ },
+ {
+ "name": "coffeehouse",
+ "directions": 4
+ },
+ {
+ "name": "combover",
+ "directions": 4
+ },
+ {
+ "name": "cornrowbraid",
+ "directions": 4
+ },
+ {
+ "name": "cornrowbun",
+ "directions": 4
+ },
+ {
+ "name": "cornrows",
+ "directions": 4
+ },
+ {
+ "name": "cornrows2",
+ "directions": 4
+ },
+ {
+ "name": "cornrowtail",
+ "directions": 4
+ },
+ {
+ "name": "country",
+ "directions": 4
+ },
+ {
+ "name": "crewcut",
+ "directions": 4
+ },
+ {
+ "name": "crewcut2",
+ "directions": 4
+ },
+ {
+ "name": "curls",
+ "directions": 4
+ },
+ {
+ "name": "d",
+ "directions": 4
+ },
+ {
+ "name": "dandypompadour",
+ "directions": 4
+ },
+ {
+ "name": "devilock",
+ "directions": 4
+ },
+ {
+ "name": "doublebun",
+ "directions": 4
+ },
+ {
+ "name": "doublebun_long",
+ "directions": 4
+ },
+ {
+ "name": "dreads",
+ "directions": 4
+ },
+ {
+ "name": "drillhair",
+ "directions": 4
+ },
+ {
+ "name": "drillhairextended",
+ "directions": 4
+ },
+ {
+ "name": "drillruru",
+ "directions": 4
+ },
+ {
+ "name": "e",
+ "directions": 4
+ },
+ {
+ "name": "emo2",
+ "directions": 4
+ },
+ {
+ "name": "emofringe",
+ "directions": 4
+ },
+ {
+ "name": "f",
+ "directions": 4
+ },
+ {
+ "name": "father",
+ "directions": 4
+ },
+ {
+ "name": "feather",
+ "directions": 4
+ },
+ {
+ "name": "flair",
+ "directions": 4
+ },
+ {
+ "name": "floorlength_bedhead",
+ "directions": 4
+ },
+ {
+ "name": "fringetail",
+ "directions": 4
+ },
+ {
+ "name": "gelled",
+ "directions": 4
+ },
+ {
+ "name": "gentle",
+ "directions": 4
+ },
+ {
+ "name": "halfbang",
+ "directions": 4
+ },
+ {
+ "name": "halfbang2",
+ "directions": 4
+ },
+ {
+ "name": "halfshaved",
+ "directions": 4
+ },
+ {
+ "name": "hbraid",
+ "directions": 4
+ },
+ {
+ "name": "hedgehog",
+ "directions": 4
+ },
+ {
+ "name": "highfade",
+ "directions": 4
+ },
+ {
+ "name": "highponytail",
+ "directions": 4
+ },
+ {
+ "name": "himecut",
+ "directions": 4
+ },
+ {
+ "name": "himecut2",
+ "directions": 4
+ },
+ {
+ "name": "himeup",
+ "directions": 4
+ },
+ {
+ "name": "hitop",
+ "directions": 4
+ },
+ {
+ "name": "jade",
+ "directions": 4
+ },
+ {
+ "name": "jensen",
+ "directions": 4
+ },
+ {
+ "name": "joestar",
+ "directions": 4
+ },
+ {
+ "name": "kagami",
+ "directions": 4
+ },
+ {
+ "name": "keanu",
+ "directions": 4
+ },
+ {
+ "name": "kusanagi",
+ "directions": 4
+ },
+ {
+ "name": "largebun",
+ "directions": 4
+ },
+ {
+ "name": "lbangs",
+ "directions": 4
+ },
+ {
+ "name": "long",
+ "directions": 4
+ },
+ {
+ "name": "long2",
+ "directions": 4
+ },
+ {
+ "name": "long3",
+ "directions": 4
+ },
+ {
+ "name": "longbundled",
+ "directions": 4
+ },
+ {
+ "name": "long_bedhead",
+ "directions": 4
+ },
+ {
+ "name": "long_bedhead2",
+ "directions": 4
+ },
+ {
+ "name": "longest",
+ "directions": 4
+ },
+ {
+ "name": "longest2",
+ "directions": 4
+ },
+ {
+ "name": "longfringe",
+ "directions": 4
+ },
+ {
+ "name": "longovereye",
+ "directions": 4
+ },
+ {
+ "name": "longsidepart",
+ "directions": 4
+ },
+ {
+ "name": "longstraightponytail",
+ "directions": 4
+ },
+ {
+ "name": "lowfade",
+ "directions": 4
+ },
+ {
+ "name": "manbun",
+ "directions": 4
+ },
+ {
+ "name": "medfade",
+ "directions": 4
+ },
+ {
+ "name": "mediumsidepart",
+ "directions": 4
+ },
+ {
+ "name": "megaeyebrows",
+ "directions": 4
+ },
+ {
+ "name": "messy",
+ "directions": 4
+ },
+ {
+ "name": "modern",
+ "directions": 4
+ },
+ {
+ "name": "mulder",
+ "directions": 4
+ },
+ {
+ "name": "nitori",
+ "directions": 4
+ },
+ {
+ "name": "nofade",
+ "directions": 4
+ },
+ {
+ "name": "odango",
+ "directions": 4
+ },
+ {
+ "name": "ombre",
+ "directions": 4
+ },
+ {
+ "name": "oneshoulder",
+ "directions": 4
+ },
+ {
+ "name": "oxton",
+ "directions": 4
+ },
+ {
+ "name": "part",
+ "directions": 4
+ },
+ {
+ "name": "parted",
+ "directions": 4
+ },
+ {
+ "name": "pigtails",
+ "directions": 4
+ },
+ {
+ "name": "pigtails2",
+ "directions": 4
+ },
+ {
+ "name": "pixie",
+ "directions": 4
+ },
+ {
+ "name": "pompadour",
+ "directions": 4
+ },
+ {
+ "name": "ponytail",
+ "directions": 4
+ },
+ {
+ "name": "ponytail2",
+ "directions": 4
+ },
+ {
+ "name": "ponytail3",
+ "directions": 4
+ },
+ {
+ "name": "ponytail4",
+ "directions": 4
+ },
+ {
+ "name": "ponytail5",
+ "directions": 4
+ },
+ {
+ "name": "ponytail6",
+ "directions": 4
+ },
+ {
+ "name": "ponytail7",
+ "directions": 4
+ },
+ {
+ "name": "poofy",
+ "directions": 4
+ },
+ {
+ "name": "protagonist",
+ "directions": 4
+ },
+ {
+ "name": "quiff",
+ "directions": 4
+ },
+ {
+ "name": "reversemohawk",
+ "directions": 4
+ },
+ {
+ "name": "ronin",
+ "directions": 4
+ },
+ {
+ "name": "rosa",
+ "directions": 4
+ },
+ {
+ "name": "sargeant",
+ "directions": 4
+ },
+ {
+ "name": "shaved",
+ "directions": 4
+ },
+ {
+ "name": "shavedmohawk",
+ "directions": 4
+ },
+ {
+ "name": "shavedpart",
+ "directions": 4
+ },
+ {
+ "name": "shortbangs",
+ "directions": 4
+ },
+ {
+ "name": "shortbraid",
+ "directions": 4
+ },
+ {
+ "name": "shorthair2",
+ "directions": 4
+ },
+ {
+ "name": "shorthair3",
+ "directions": 4
+ },
+ {
+ "name": "shorthair9",
+ "directions": 4
+ },
+ {
+ "name": "shorthime",
+ "directions": 4
+ },
+ {
+ "name": "shortovereye",
+ "directions": 4
+ },
+ {
+ "name": "sidecut",
+ "directions": 4
+ },
+ {
+ "name": "sidetail",
+ "directions": 4
+ },
+ {
+ "name": "sidetail2",
+ "directions": 4
+ },
+ {
+ "name": "sidetail3",
+ "directions": 4
+ },
+ {
+ "name": "sidetail4",
+ "directions": 4
+ },
+ {
+ "name": "skinhead",
+ "directions": 4
+ },
+ {
+ "name": "spiky",
+ "directions": 4
+ },
+ {
+ "name": "spikyponytail",
+ "directions": 4
+ },
+ {
+ "name": "spookylong",
+ "directions": 4
+ },
+ {
+ "name": "stail",
+ "directions": 4
+ },
+ {
+ "name": "swept",
+ "directions": 4
+ },
+ {
+ "name": "swept2",
+ "directions": 4
+ },
+ {
+ "name": "shoulderlengthovereye",
+ "directions": 4
+ },
+ {
+ "name": "thinning",
+ "directions": 4
+ },
+ {
+ "name": "thinningfront",
+ "directions": 4
+ },
+ {
+ "name": "thinningrear",
+ "directions": 4
+ },
+ {
+ "name": "tightbun",
+ "directions": 4
+ },
+ {
+ "name": "topknot",
+ "directions": 4
+ },
+ {
+ "name": "tressshoulder",
+ "directions": 4
+ },
+ {
+ "name": "trimflat",
+ "directions": 4
+ },
+ {
+ "name": "trimmed",
+ "directions": 4
+ },
+ {
+ "name": "twintail",
+ "directions": 4
+ },
+ {
+ "name": "twostrands",
+ "directions": 4
+ },
+ {
+ "name": "undercut",
+ "directions": 4
+ },
+ {
+ "name": "undercutleft",
+ "directions": 4
+ },
+ {
+ "name": "undercutright",
+ "directions": 4
+ },
+ {
+ "name": "unkept",
+ "directions": 4
+ },
+ {
+ "name": "veryshortovereyealternate",
+ "directions": 4
+ },
+ {
+ "name": "vlong",
+ "directions": 4
+ },
+ {
+ "name": "vlongfringe",
+ "directions": 4
+ },
+ {
+ "name": "volaju",
+ "directions": 4
+ },
+ {
+ "name": "wisp",
+ "directions": 4
+ },
+ {
+ "name": "uneven",
+ "directions": 4
+ },
+ {
+ "name": "tailed",
+ "directions": 4
+ },
+ {
+ "name": "classiclong2",
+ "directions": 4
+ },
+ {
+ "name": "classiclong3",
+ "directions": 4
+ },
+ {
+ "name": "classicafro",
+ "directions": 4
+ },
+ {
+ "name": "longeremo",
+ "directions": 4
+ },
+ {
+ "name": "frenchbraid",
+ "directions": 4
+ }
+ ]
+ }
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/modern.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/modern.png
new file mode 100644
index 0000000000..dcd10140a8
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/modern.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/mulder.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/mulder.png
new file mode 100644
index 0000000000..1e83cd8a59
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/mulder.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/nitori.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/nitori.png
new file mode 100644
index 0000000000..5aa1ce748b
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/nitori.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/nofade.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/nofade.png
new file mode 100644
index 0000000000..8d2b5bf703
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/nofade.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/odango.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/odango.png
new file mode 100644
index 0000000000..a5580c5e7c
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/odango.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ombre.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ombre.png
new file mode 100644
index 0000000000..33a3fbafbd
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ombre.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/oneshoulder.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/oneshoulder.png
new file mode 100644
index 0000000000..e5a37c4f2e
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/oneshoulder.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/oxton.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/oxton.png
new file mode 100644
index 0000000000..29afa9ee88
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/oxton.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/part.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/part.png
new file mode 100644
index 0000000000..e96811a16d
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/part.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/parted.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/parted.png
new file mode 100644
index 0000000000..8931dec647
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/parted.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/pigtails.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/pigtails.png
new file mode 100644
index 0000000000..ed56808356
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/pigtails.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/pigtails2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/pigtails2.png
new file mode 100644
index 0000000000..1fb33d4c51
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/pigtails2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/pixie.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/pixie.png
new file mode 100644
index 0000000000..3cdb4b3cf1
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/pixie.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/pompadour.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/pompadour.png
new file mode 100644
index 0000000000..ac83f28dd1
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/pompadour.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail.png
new file mode 100644
index 0000000000..5bff29fa82
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail2.png
new file mode 100644
index 0000000000..ad24f5706d
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail3.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail3.png
new file mode 100644
index 0000000000..62315e4195
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail3.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail4.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail4.png
new file mode 100644
index 0000000000..e0b4255cb7
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail4.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail5.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail5.png
new file mode 100644
index 0000000000..477b1fef28
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail5.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail6.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail6.png
new file mode 100644
index 0000000000..951880deae
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail6.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail7.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail7.png
new file mode 100644
index 0000000000..4f1a80aced
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ponytail7.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/poofy.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/poofy.png
new file mode 100644
index 0000000000..b96d15dc74
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/poofy.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/protagonist.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/protagonist.png
new file mode 100644
index 0000000000..14d284e46b
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/protagonist.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/quiff.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/quiff.png
new file mode 100644
index 0000000000..53279b461a
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/quiff.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/reversemohawk.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/reversemohawk.png
new file mode 100644
index 0000000000..bd21b9dae0
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/reversemohawk.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ronin.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ronin.png
new file mode 100644
index 0000000000..ee5146d88c
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/ronin.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/rosa.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/rosa.png
new file mode 100644
index 0000000000..25fb89be19
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/rosa.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sargeant.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sargeant.png
new file mode 100644
index 0000000000..5a071d3d1b
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sargeant.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shaved.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shaved.png
new file mode 100644
index 0000000000..25c45b8b71
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shaved.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shavedmohawk.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shavedmohawk.png
new file mode 100644
index 0000000000..8395ae19e1
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shavedmohawk.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shavedpart.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shavedpart.png
new file mode 100644
index 0000000000..8fd7cc031b
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shavedpart.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shortbangs.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shortbangs.png
new file mode 100644
index 0000000000..d0a999c45c
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shortbangs.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shortbraid.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shortbraid.png
new file mode 100644
index 0000000000..5a0dbfa277
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shortbraid.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shorthair2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shorthair2.png
new file mode 100644
index 0000000000..cca03aec16
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shorthair2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shorthair3.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shorthair3.png
new file mode 100644
index 0000000000..f7e2a74a4b
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shorthair3.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shorthair9.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shorthair9.png
new file mode 100644
index 0000000000..02852dfae6
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shorthair9.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shorthime.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shorthime.png
new file mode 100644
index 0000000000..307fceed8c
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shorthime.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shortovereye.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shortovereye.png
new file mode 100644
index 0000000000..c7ae6a3740
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shortovereye.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shoulderlengthovereye.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shoulderlengthovereye.png
new file mode 100644
index 0000000000..fbc3586c45
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/shoulderlengthovereye.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sidecut.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sidecut.png
new file mode 100644
index 0000000000..01fa7a8009
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sidecut.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sidetail.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sidetail.png
new file mode 100644
index 0000000000..60498b9a45
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sidetail.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sidetail2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sidetail2.png
new file mode 100644
index 0000000000..9708672a6f
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sidetail2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sidetail3.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sidetail3.png
new file mode 100644
index 0000000000..377b2c30ab
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sidetail3.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sidetail4.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sidetail4.png
new file mode 100644
index 0000000000..2dd2ac965b
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/sidetail4.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/skinhead.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/skinhead.png
new file mode 100644
index 0000000000..c88a9540c6
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/skinhead.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/spiky.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/spiky.png
new file mode 100644
index 0000000000..e9aeb7e440
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/spiky.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/spikyponytail.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/spikyponytail.png
new file mode 100644
index 0000000000..8f439234da
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/spikyponytail.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/spookylong.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/spookylong.png
new file mode 100644
index 0000000000..0fb0a878d1
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/spookylong.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/stail.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/stail.png
new file mode 100644
index 0000000000..db9f7b439d
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/stail.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/swept.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/swept.png
new file mode 100644
index 0000000000..bc079308db
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/swept.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/swept2.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/swept2.png
new file mode 100644
index 0000000000..492f38f437
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/swept2.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/tailed.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/tailed.png
new file mode 100644
index 0000000000..b957423e4c
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/tailed.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/thinning.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/thinning.png
new file mode 100644
index 0000000000..962191356d
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/thinning.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/thinningfront.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/thinningfront.png
new file mode 100644
index 0000000000..8be8e18821
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/thinningfront.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/thinningrear.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/thinningrear.png
new file mode 100644
index 0000000000..d5393072cf
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/thinningrear.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/tightbun.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/tightbun.png
new file mode 100644
index 0000000000..03a4862ba3
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/tightbun.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/topknot.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/topknot.png
new file mode 100644
index 0000000000..ccd5fa43e7
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/topknot.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/tressshoulder.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/tressshoulder.png
new file mode 100644
index 0000000000..2d1d3a2864
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/tressshoulder.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/trimflat.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/trimflat.png
new file mode 100644
index 0000000000..750e0b51d8
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/trimflat.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/trimmed.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/trimmed.png
new file mode 100644
index 0000000000..3159d98817
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/trimmed.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/twintail.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/twintail.png
new file mode 100644
index 0000000000..22e8ab0d2a
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/twintail.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/twostrands.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/twostrands.png
new file mode 100644
index 0000000000..eb1eca23ad
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/twostrands.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/undercut.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/undercut.png
new file mode 100644
index 0000000000..76ccd58fcf
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/undercut.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/undercutleft.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/undercutleft.png
new file mode 100644
index 0000000000..e997d6ce93
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/undercutleft.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/undercutright.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/undercutright.png
new file mode 100644
index 0000000000..1b6659e13f
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/undercutright.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/uneven.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/uneven.png
new file mode 100644
index 0000000000..e2d2c99914
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/uneven.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/unkept.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/unkept.png
new file mode 100644
index 0000000000..a849ea073f
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/unkept.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/veryshortovereyealternate.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/veryshortovereyealternate.png
new file mode 100644
index 0000000000..ba253a5a41
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/veryshortovereyealternate.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/vlong.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/vlong.png
new file mode 100644
index 0000000000..736da454b1
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/vlong.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/vlongfringe.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/vlongfringe.png
new file mode 100644
index 0000000000..8044c5c9d1
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/vlongfringe.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/volaju.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/volaju.png
new file mode 100644
index 0000000000..92802d4bc0
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/volaju.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/wisp.png b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/wisp.png
new file mode 100644
index 0000000000..cc48199908
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Customization/thaven/thaven_hair.rsi/wisp.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/eyes.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/eyes.png
new file mode 100644
index 0000000000..6c3e479bb4
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/eyes.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/hands.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/hands.png
new file mode 100644
index 0000000000..e4ea6c7328
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/hands.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/head.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/head.png
new file mode 100644
index 0000000000..6c3e479bb4
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/head.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/jumpsuit.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/jumpsuit.png
new file mode 100644
index 0000000000..3ae792ad5c
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/jumpsuit.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/mask.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/mask.png
new file mode 100644
index 0000000000..6c3e479bb4
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/mask.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/meta.json b/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/meta.json
new file mode 100644
index 0000000000..2a30242817
--- /dev/null
+++ b/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/meta.json
@@ -0,0 +1,42 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "by widgetbeck",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "load": {
+ "srgb": false
+ },
+ "states": [
+ {
+ "name": "jumpsuit",
+ "directions": 4
+ },
+ {
+ "name": "outerclothing_hardsuit",
+ "directions": 4
+ },
+ {
+ "name": "eyes",
+ "directions": 4
+ },
+ {
+ "name": "neck",
+ "directions": 4
+ },
+ {
+ "name": "mask",
+ "directions": 4
+ },
+ {
+ "name": "head",
+ "directions": 4
+ },
+ {
+ "name": "hands",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/neck.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/neck.png
new file mode 100644
index 0000000000..647ff28ea9
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/neck.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/outerclothing_hardsuit.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/outerclothing_hardsuit.png
new file mode 100644
index 0000000000..a1c72a02fe
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/displacement.rsi/outerclothing_hardsuit.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/organs.rsi/brain-inhand-left.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/organs.rsi/brain-inhand-left.png
new file mode 100644
index 0000000000..a8a9832113
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/organs.rsi/brain-inhand-left.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/organs.rsi/brain-inhand-right.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/organs.rsi/brain-inhand-right.png
new file mode 100644
index 0000000000..2a237f173d
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/organs.rsi/brain-inhand-right.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/organs.rsi/brain-thaven.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/organs.rsi/brain-thaven.png
new file mode 100644
index 0000000000..2b2cc2fc09
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/organs.rsi/brain-thaven.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/organs.rsi/meta.json b/Resources/Textures/_Impstation/Mobs/Species/Thaven/organs.rsi/meta.json
new file mode 100644
index 0000000000..33560e8bc2
--- /dev/null
+++ b/Resources/Textures/_Impstation/Mobs/Species/Thaven/organs.rsi/meta.json
@@ -0,0 +1,22 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Sprited by Nimfar11 (Github) for Space Station 14, modified by Widgetbeck",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "brain-thaven"
+ },
+ {
+ "name": "brain-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "brain-inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/eyes.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/eyes.png
new file mode 100644
index 0000000000..7602bd54ab
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/eyes.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/full.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/full.png
new file mode 100644
index 0000000000..9d2c746b63
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/full.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/head.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/head.png
new file mode 100644
index 0000000000..36a3740e57
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/head.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/l_arm.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/l_arm.png
new file mode 100644
index 0000000000..4effd64216
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/l_arm.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/l_foot.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/l_foot.png
new file mode 100644
index 0000000000..a1029f4cf1
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/l_foot.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/l_hand.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/l_hand.png
new file mode 100644
index 0000000000..f698637d0f
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/l_hand.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/l_leg.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/l_leg.png
new file mode 100644
index 0000000000..d2b4c62f20
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/l_leg.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/meta.json b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/meta.json
new file mode 100644
index 0000000000..45bc565f8a
--- /dev/null
+++ b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/meta.json
@@ -0,0 +1,62 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Art by Widgetbeck",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "full"
+ },
+ {
+ "name": "head",
+ "directions": 4
+ },
+ {
+ "name": "l_arm",
+ "directions": 4
+ },
+ {
+ "name": "l_foot",
+ "directions": 4
+ },
+ {
+ "name": "l_hand",
+ "directions": 4
+ },
+ {
+ "name": "l_leg",
+ "directions": 4
+ },
+ {
+ "name": "r_arm",
+ "directions": 4
+ },
+ {
+ "name": "r_foot",
+ "directions": 4
+ },
+ {
+ "name": "r_hand",
+ "directions": 4
+ },
+ {
+ "name": "r_leg",
+ "directions": 4
+ },
+ {
+ "name": "torso_m",
+ "directions": 4
+ },
+ {
+ "name": "torso_f",
+ "directions": 4
+ },
+ {
+ "name": "eyes",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/r_arm.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/r_arm.png
new file mode 100644
index 0000000000..db3e3eecf0
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/r_arm.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/r_foot.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/r_foot.png
new file mode 100644
index 0000000000..aca12db26d
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/r_foot.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/r_hand.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/r_hand.png
new file mode 100644
index 0000000000..8051570e6f
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/r_hand.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/r_leg.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/r_leg.png
new file mode 100644
index 0000000000..8345a65482
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/r_leg.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/torso_f.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/torso_f.png
new file mode 100644
index 0000000000..ac55287b97
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/torso_f.png differ
diff --git a/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/torso_m.png b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/torso_m.png
new file mode 100644
index 0000000000..8f485e0f9c
Binary files /dev/null and b/Resources/Textures/_Impstation/Mobs/Species/Thaven/parts.rsi/torso_m.png differ
diff --git a/Tools/markings/markings/prototypes.go b/Tools/markings/markings/prototypes.go
index cd969ab457..bfa16bb477 100644
--- a/Tools/markings/markings/prototypes.go
+++ b/Tools/markings/markings/prototypes.go
@@ -15,6 +15,7 @@ const (
HumanFacialHair = "HumanFacialHair"
VoxFacialHair = "VoxFacialHair"
VoxHair = "VoxHair"
+ ThavenHair = "ThavenHair" // DeltaV
)
func init() {
@@ -23,6 +24,7 @@ func init() {
accessoryLayerMapping[HumanFacialHair] = FacialHair
accessoryLayerMapping[VoxFacialHair] = FacialHair
accessoryLayerMapping[VoxHair] = Hair
+ accessoryLayerMapping[ThavenHair] = Hair // DeltaV
}
type SpriteAccessoryPrototype struct {