Port Thaven From DeltaV, Who Ported It From Impstation (#2132)

<!--
This is a semi-strict format, you can add/remove sections as needed but
the order/format should be kept the same
Remove these comments before submitting
-->

# Description

<!--
Explain this PR in as much detail as applicable

Some example prompts to consider:
How might this affect the game? The codebase?
What might be some alternatives to this?
How/Who does this benefit/hurt [the game/codebase]?
-->

https://github.com/DeltaV-Station/Delta-v/pull/2948 and a bunch of other
PR's

---

# TODO

<!--
A list of everything you have to do before this PR is "complete"
You probably won't have to complete everything before merging but it's
good to leave future references
-->

- [x] fix markings causing a crash
- [x] fix displacement maps causing a crash

---

<!--
This is default collapsed, readers click to expand it and see all your
media
The PR media section can get very large at times, so this is a good way
to keep it clean
The title is written using HTML tags
The title must be within the <summary> tags or you won't see it
-->

<details><summary><h1>Media</h1></summary>
<p>

![image](https://github.com/user-attachments/assets/ad449fc4-93c7-47d4-8db7-c53da765aa51)

https://github.com/user-attachments/assets/033bec46-24c5-44ad-8e5c-7aae2ed85b03

https://github.com/user-attachments/assets/6fd647b5-2ee0-45e6-a124-9b90c35e2153

![image-71](https://github.com/user-attachments/assets/bdb7b129-a1b4-445d-9b1a-fa884b429ad4)

</p>
</details>

---

# Changelog

<!--
You can add an author after the `🆑` to change the name that appears
in the changelog (ex: `🆑 Death`)
Leaving it blank will default to your GitHub display name
This includes all available types for the changelog
-->

🆑
- add: Port Thaven from DeltaV, who ported it from Impstation

(cherry picked from commit 86a8e4d940eac038505c66a1649b376f6956cade)
This commit is contained in:
Timfa
2025-04-05 20:14:44 +02:00
committed by Spatison
parent c30ea32f1c
commit eb8cc29fee
344 changed files with 8897 additions and 22 deletions

View File

@@ -0,0 +1,30 @@
<BoxContainer
xmlns="https://spacestation14.io"
xmlns:graphics="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
xmlns:customControls="clr-namespace:Content.Client.Administration.UI.CustomControls"
HorizontalExpand="True"
Orientation="Vertical"
>
<customControls:HSeparator></customControls:HSeparator>
<BoxContainer Orientation="Vertical">
<LineEdit Name="ThavenMoodTitle" Access="Public" Margin="5 0 0 0" />
<PanelContainer
Margin="20 10 0 0"
MinHeight="128"
>
<PanelContainer.PanelOverride>
<graphics:StyleBoxFlat BackgroundColor="#1B1B1B"></graphics:StyleBoxFlat>
</PanelContainer.PanelOverride>
<BoxContainer Orientation="Horizontal" SeparationOverride="5">
<TextEdit Name="ThavenMoodContent" Access="Public" HorizontalExpand="True" Editable="True" MinWidth="500" MinHeight="80"></TextEdit>
</BoxContainer>
</PanelContainer>
</BoxContainer>
<BoxContainer Orientation="Horizontal" Margin="0 5 0 0" MaxHeight="64" Align="Begin">
<Button Name="MoveUp" Access="Public" Text="{Loc thaven-mood-admin-ui-move-up}" StyleClasses="OpenRight"></Button>
<Button Name="MoveDown" Access="Public" Text="{Loc thaven-mood-admin-ui-move-down}" StyleClasses="OpenLeft"></Button>
</BoxContainer>
<BoxContainer Orientation="Horizontal" Align="End" Margin="0 10 5 10">
<Button Name="Delete" Access="Public" Text="{Loc thaven-mood-admin-ui-delete}" ModulateSelfOverride="Red"></Button>
</BoxContainer>
</BoxContainer>

View File

@@ -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());
}
}
}

View File

@@ -0,0 +1,22 @@
<controls:FancyWindow
xmlns="https://spacestation14.io"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
Title="{Loc thaven-moods-admin-ui-title}"
MinSize="560 400"
>
<!-->
this shit does not layout properly unless I put the horizontal boxcontainer inside of a vertical one
????
<!-->
<BoxContainer Orientation="Vertical">
<BoxContainer Orientation="Horizontal" Align="End">
<Button Name="NewMoodButton" Text="{Loc thaven-moods-admin-ui-new-mood}" MaxSize="256 64" StyleClasses="OpenRight"></Button>
<Button Name="SaveButton" Text="{Loc thaven-moods-admin-ui-save}" MaxSize="256 64" Access="Public" StyleClasses="OpenLeft"></Button>
</BoxContainer>
</BoxContainer>
<BoxContainer Orientation="Vertical" Margin="4 60 0 0">
<ScrollContainer VerticalExpand="True" HorizontalExpand="True" HScrollEnabled="False">
<BoxContainer Orientation="Vertical" Name="MoodContainer" Access="Public" VerticalExpand="True" />
</ScrollContainer>
</BoxContainer>
</controls:FancyWindow>

View File

@@ -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<ThavenMood> _moods = new();
public ThavenMoodUi()
{
RobustXamlLoader.Load(this);
NewMoodButton.OnPressed += _ => AddNewMood();
}
private void AddNewMood()
{
MoodContainer.AddChild(new MoodContainer());
}
public List<ThavenMood> GetMoods()
{
var newMoods = new List<ThavenMood>();
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<ThavenMood> 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);
}
}
}

View File

@@ -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<EntityManager>();
_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();
}
}

View File

@@ -0,0 +1,14 @@
<Control xmlns="https://spacestation14.io"
xmlns:customControls="clr-namespace:Content.Client.Administration.UI.CustomControls"
Margin="0 0 0 10">
<PanelContainer VerticalExpand="True" StyleClasses="BackgroundDark">
<BoxContainer Orientation="Vertical"
HorizontalExpand="True"
VerticalExpand="True"
Margin="5 5 5 5">
<RichTextLabel Name="MoodNameLabel" StyleClasses="LabelKeyText"/>
<customControls:HSeparator Margin="0 5 0 5"/>
<RichTextLabel Name="MoodDescLabel"/>
</BoxContainer>
</PanelContainer>
</Control>

View File

@@ -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());
}
}

View File

@@ -0,0 +1,7 @@
using Content.Shared._Impstation.Thaven;
namespace Content.Client._Impstation.Thaven;
public sealed partial class ThavenMoodSystem : SharedThavenMoodSystem
{
}

View File

@@ -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<ThavenMood>? _moods;
private List<ThavenMood>? _sharedMoods;
public ThavenMoodsBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
_owner = owner;
}
protected override void Open()
{
base.Open();
_menu = this.CreateWindow<ThavenMoodsMenu>();
}
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);
}
}

View File

@@ -0,0 +1,27 @@
<controls:FancyWindow xmlns="https://spacestation14.io"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
Title="{Loc 'moods-ui-menu-title'}"
MinSize="200 100"
SetSize="450 515">
<BoxContainer Orientation="Vertical"
HorizontalExpand="True"
VerticalExpand="True">
<PanelContainer VerticalExpand="True" Margin="10 10 10 10">
<PanelContainer.PanelOverride>
<gfx:StyleBoxFlat BackgroundColor="#1B1B1E"/>
</PanelContainer.PanelOverride>
<ScrollContainer
HScrollEnabled="False"
HorizontalExpand="True"
VerticalExpand="True">
<BoxContainer
Name="MoodDisplayContainer"
Orientation="Vertical"
VerticalExpand="True"
Margin="10 10 10 0">
</BoxContainer>
</ScrollContainer>
</PanelContainer>
</BoxContainer>
</controls:FancyWindow>

View File

@@ -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));
}
}

View File

@@ -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<IEntityManager>();
var thavenSystem = entMan.System<ThavenMoodsSystem>();
var protoMan = server.ResolveDependency<IPrototypeManager>();
var dataset = protoMan.Index<DatasetPrototype>("ThreeValueSet");
var moodProto = protoMan.Index<ThavenMoodPrototype>("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<IEntityManager>();
var thavenSystem = entMan.System<ThavenMoodsSystem>();
var protoMan = server.ResolveDependency<IPrototypeManager>();
var dataset = protoMan.Index<DatasetPrototype>("ThreeValueSet");
var moodProto = protoMan.Index<ThavenMoodPrototype>("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();
}
}

View File

@@ -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<ICommonSession, List<EditSolutionsEui>> _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<ThavenMoodsComponent>(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<Verb> args)
{

View File

@@ -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;

View File

@@ -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<ThavenMoodUpsetRuleComponent>
{
[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<ThavenMoodsComponent>();
while (thavens.MoveNext(out var thavenUid, out var thavenComp))
{
_thavenMoods.AddWildcardMood((thavenUid, thavenComp));
}
}
}

View File

@@ -0,0 +1,10 @@
namespace Content.Server.Speech.Components;
/// <summary>
/// Removes contractions (e.g. "can't," "don't," etc.)
/// </summary>
[RegisterComponent]
public sealed partial class NoContractionsAccentComponent : Component
{
}

View File

@@ -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<NoContractionsAccentComponent, AccentGetEvent>(OnAccent);
}
private void OnAccent(EntityUid uid, NoContractionsAccentComponent component, AccentGetEvent args)
{
var message = args.Message;
args.Message = message;
}
}

View File

@@ -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<ThavenMood> SharedMoods => _sharedMoods.AsReadOnly();
private readonly List<ThavenMood> _sharedMoods = new();
[ValidatePrototypeId<DatasetPrototype>]
private const string SharedDataset = "ThavenMoodsShared";
[ValidatePrototypeId<DatasetPrototype>]
private const string YesAndDataset = "ThavenMoodsYesAnd";
[ValidatePrototypeId<DatasetPrototype>]
private const string NoAndDataset = "ThavenMoodsNoAnd";
[ValidatePrototypeId<DatasetPrototype>]
private const string WildcardDataset = "ThavenMoodsWildcard";
[ValidatePrototypeId<EntityPrototype>]
private const string ActionViewMoods = "ActionViewMoods";
[ValidatePrototypeId<WeightedRandomPrototype>]
private const string RandomThavenMoodDataset = "RandomThavenMoodDataset";
public override void Initialize()
{
base.Initialize();
NewSharedMoods();
SubscribeLocalEvent<ThavenMoodsComponent, ComponentStartup>(OnThavenMoodInit);
SubscribeLocalEvent<ThavenMoodsComponent, ComponentShutdown>(OnThavenMoodShutdown);
SubscribeLocalEvent<ThavenMoodsComponent, ToggleMoodsScreenEvent>(OnToggleMoodsScreen);
SubscribeLocalEvent<ThavenMoodsComponent, BoundUIOpenedEvent>(OnBoundUIOpened);
SubscribeLocalEvent<RoundRestartCleanupEvent>((_) => 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<ThavenMoodsComponent>();
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<ActorComponent>(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<ThavenMood>? currentMoods = null, HashSet<string>? conflicts = null)
{
var dataset = _proto.Index<DatasetPrototype>(datasetProto);
var choices = dataset.Values.ToList();
if (currentMoods == null)
currentMoods = new HashSet<ThavenMood>();
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<ThavenMoodPrototype>(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<ThavenMoodsComponent> ent)
{
if (!TryComp<ActorComponent>(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);
}
/// <summary>
/// Creates a ThavenMood instance from the given ThavenMoodPrototype, and rolls
/// its mood vars.
/// </summary>
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<string>();
foreach (var (name, datasetID) in proto.MoodVarDatasets)
{
var dataset = _proto.Index<DatasetPrototype>(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<DatasetPrototype>(dataset)));
}
}
return mood;
}
/// <summary>
/// Checks if the given mood prototype conflicts with the current moods, and
/// adds the mood if it does not.
/// </summary>
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<WeightedRandomPrototype>(RandomThavenMoodDataset).Pick();
return TryAddRandomMood(uid, datasetProto, comp);
}
public void SetMoods(EntityUid uid, IEnumerable<ThavenMood> 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<string> GetConflicts(IEnumerable<ThavenMood> moods)
{
var conflicts = new HashSet<string>();
foreach (var mood in moods)
{
conflicts.Add(mood.ProtoId); // Specific moods shouldn't be added twice
conflicts.UnionWith(mood.Conflicts);
}
return conflicts;
}
public HashSet<string> 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<string> GetMoodProtoSet(IEnumerable<ThavenMood> moods)
{
var moodProtos = new HashSet<string>();
foreach (var mood in moods)
if (!string.IsNullOrEmpty(mood.ProtoId))
moodProtos.Add(mood.ProtoId);
return moodProtos;
}
/// <summary>
/// Return a list of the moods that are affecting this entity.
/// </summary>
public List<ThavenMood> GetActiveMoods(EntityUid uid, ThavenMoodsComponent? comp = null, bool includeShared = true)
{
if (!Resolve(uid, ref comp))
return [];
if (includeShared && comp.FollowsSharedMoods)
{
return new List<ThavenMood>(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<ThavenMoodsComponent> ent)
{
TryAddRandomMood(ent.Owner, WildcardDataset, ent.Comp);
}
// End DeltaV: thaven mood upsets
}

View File

@@ -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<ThavenMood> _moods = new();
private List<ThavenMood> _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;
}
}

View File

@@ -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
{
/// <summary>
/// The number of shared moods to give thaven by default.
/// </summary>
public static readonly CVarDef<uint> ThavenSharedMoodCount =
CVarDef.Create<uint>("thaven.shared_mood_count", 1, CVar.SERVERONLY);
}

View File

@@ -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<ThavenMoodsComponent, GotEmaggedEvent>(OnEmagged); DeltaV: no emagging thavens
}
protected virtual void OnEmagged(EntityUid uid, ThavenMoodsComponent comp, ref GotEmaggedEvent args)
{
args.Handled = true;
}
}

View File

@@ -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<ThavenMood> 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<ThavenMood> Moods;
public List<ThavenMood> SharedMoods;
public ThavenMoodsBuiState(List<ThavenMood> moods, List<ThavenMood> sharedMoods)
{
Moods = moods;
SharedMoods = sharedMoods;
}
}

View File

@@ -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<ThavenMoodPrototype> ProtoId = string.Empty;
/// <summary>
/// A locale string of the mood name.
/// </summary>
[DataField(required: true), ViewVariables(VVAccess.ReadWrite)]
public string MoodName = string.Empty;
/// <summary>
/// A locale string of the mood description. Gets passed to
/// <see cref="Loc.GetString"/> with <see cref="MoodVars"/>.
/// </summary>
[DataField(required: true), ViewVariables(VVAccess.ReadWrite)]
public string MoodDesc = string.Empty;
[DataField(serverOnly: true, customTypeSerializer: typeof(PrototypeIdHashSetSerializer<ThavenMoodPrototype>))]
[ViewVariables(VVAccess.ReadWrite)]
public HashSet<string> Conflicts = new();
/// <summary>
/// Additional localized words for the <see cref="MoodDesc"/>, for things like random
/// verbs and nouns.
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
public Dictionary<string, string> 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
{
/// <inheritdoc/>
[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;
/// <summary>
/// A list of mood IDs that this mood will conflict with.
/// </summary>
[DataField("conflicts", customTypeSerializer: typeof(PrototypeIdHashSetSerializer<ThavenMoodPrototype>))]
public HashSet<string> Conflicts = new();
/// <summary>
/// Extra mood variables that will be randomly chosen and provided
/// to the <see cref="Loc.GetString"/> call on <see cref="ThavenMood.MoodDesc"/>.
/// </summary>
[DataField("moodVars", customTypeSerializer: typeof(PrototypeIdValueDictionarySerializer<string, DatasetPrototype>))]
public Dictionary<string, string> MoodVarDatasets = new();
/// <summary>
/// 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.
/// </summary>
[DataField("allowDuplicateMoodVars"), ViewVariables(VVAccess.ReadWrite)]
public bool AllowDuplicateMoodVars = false;
}

View File

@@ -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<ThavenMood> Moods { get; }
public NetEntity Target { get; }
public ThavenMoodsEuiState(List<ThavenMood> moods, NetEntity target)
{
Moods = moods;
Target = target;
}
}
[Serializable, NetSerializable]
public sealed class ThavenMoodsSaveMessage : EuiMessageBase
{
public List<ThavenMood> Moods { get; }
public NetEntity Target { get; }
public ThavenMoodsSaveMessage(List<ThavenMood> moods, NetEntity target)
{
Moods = moods;
Target = target;
}
}

View File

@@ -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"

Binary file not shown.

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -0,0 +1,3 @@
## Species Names
species-name-thaven = Thaven

View File

@@ -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.

View File

@@ -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 ones 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...

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.
}

View File

@@ -0,0 +1,2 @@
trait-nocontractions-name = No contractions
trait-nocontractions-desc = You are (mostly) incapable of using contractions.

View File

@@ -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

View File

@@ -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
offset: -0.2, 0.1 # 0625
- type: typingIndicator
id: Thaven
spritePath: /Textures/_EE/Effects/speech.rsi
typingState: thaven0
offset: 0, 0.1 # 0625

View File

@@ -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:

View File

@@ -1672,4 +1672,4 @@
- type: FoodSequenceElement
entries:
Burger: XenoCutlet
Taco: XenoCutlet
Taco: XenoCutlet

View File

@@ -16,6 +16,8 @@
- Plasmaman
- Chitinid
- Tajaran
# ImpStation additions
- Thaven
- type: guideEntry
id: Arachnid

View File

@@ -0,0 +1,9 @@
- type: entity
parent: BaseGlimmerEvent
id: ThavenMoodUpset
components:
- type: GlimmerEvent
minimumGlimmer: 500
glimmerBurnLower: 30
glimmerBurnUpper: 70
- type: ThavenMoodUpsetRule

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -900,4 +900,231 @@
followSkinColor: true
sprites:
- sprite: _Impstation/Mobs/Customization/markingsbundle1.rsi
state: chitinidbeetlehorn2
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

View File

@@ -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

View File

@@ -0,0 +1,5 @@
- type: entity
save: false
name: Urist McEars
parent: BaseMobThaven
id: MobThaven

View File

@@ -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

View File

@@ -0,0 +1,4 @@
- type: guideEntry
id: Thaven
name: Thaven
text: "/ServerInfo/_Impstation/Guidebook/Mobs/Thaven.xml"

View File

@@ -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

View File

@@ -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

View File

@@ -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 ones 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

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,6 @@
- type: weightedRandom
id: RandomThavenMoodDataset
weights:
ThavenMoodsYesAnd: 0.45
ThavenMoodsNoAnd: 0.45
ThavenMoodsWildcard: 0.1

View File

@@ -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

View File

@@ -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

View File

@@ -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

File diff suppressed because it is too large Load Diff

View File

@@ -15,6 +15,7 @@
<GuideEntityEmbed Entity="MobSlimePerson" Caption="Slime Person"/>
<GuideEntityEmbed Entity="MobShadowkinDummy" Caption="Shadowkin"/>
<GuideEntityEmbed Entity="MobChitinid" Caption="Chitinid"/>
<GuideEntityEmbed Entity="MobThaven" Caption="Thaven"/>
</Box>
# Parkstation specific species

View File

@@ -0,0 +1,36 @@
<Document>
# Thaven
<Box>
<GuideEntityEmbed Entity="MobThaven" Caption=""/>
</Box>
[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
<Box>
<GuideEntityEmbed Entity="PositronicBrain" Caption=""/>
</Box>
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
</Document>

View File

@@ -40,6 +40,23 @@
},
{
"name": "chitinid2"
},
{
"name": "thaven1"
},
{
"name": "thaven2"
},
{
"name": "thaven0",
"delays": [
[
0.2,
0.3,
0.3,
0.3
]
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 758 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 626 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 626 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 B

View File

@@ -83,6 +83,11 @@
{
"name": "creampie_xenomorph",
"directions": 4
},
{
"name": "creampie_spelf",
"name": "creampie_thaven",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 686 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 826 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 789 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 675 B

View File

@@ -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
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

View File

@@ -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
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 B

View File

@@ -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"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 B

View File

@@ -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
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 871 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 683 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 766 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 888 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 753 B

Some files were not shown because too many files have changed in this diff Show More