Merge branch 'master' into upstream
@@ -27,4 +27,8 @@ public static class Palettes
|
||||
// Intended to be used with `ModulateSelf` to darken / lighten something
|
||||
public static readonly ColorPalette AlphaModulate = ColorPalette.FromHexBase("#ffffff");
|
||||
|
||||
// wl tones
|
||||
public static readonly ColorPalette WL1 = ColorPalette.FromHexBase("#9051A8");
|
||||
public static readonly ColorPalette WL2 = ColorPalette.FromHexBase("#2d2d2d", lightnessShift: 0.015f, chromaShift: 0.0055f);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
using Content.Client.Stylesheets.Palette;
|
||||
using Content.Client.Stylesheets.Palette;
|
||||
|
||||
namespace Content.Client.Stylesheets.Stylesheets;
|
||||
|
||||
public sealed partial class NanotrasenStylesheet
|
||||
{
|
||||
public override ColorPalette PrimaryPalette => Palettes.Navy;
|
||||
public override ColorPalette SecondaryPalette => Palettes.Slate;
|
||||
public override ColorPalette PositivePalette => Palettes.Green;
|
||||
public override ColorPalette NegativePalette => Palettes.Red;
|
||||
public override ColorPalette HighlightPalette => Palettes.Gold;
|
||||
//WL-Change-start
|
||||
public override ColorPalette PrimaryPalette => Palettes.WL2;
|
||||
public override ColorPalette SecondaryPalette => Palettes.WL2;
|
||||
public override ColorPalette PositivePalette => Palettes.WL1;
|
||||
public override ColorPalette NegativePalette => Palettes.WL1;
|
||||
public override ColorPalette HighlightPalette => Palettes.WL1;
|
||||
//WL-Change-end
|
||||
}
|
||||
|
||||
@@ -4,9 +4,11 @@ namespace Content.Client.Stylesheets.Stylesheets;
|
||||
|
||||
public partial class SystemStylesheet
|
||||
{
|
||||
public override ColorPalette PrimaryPalette => Palettes.Cyan;
|
||||
public override ColorPalette SecondaryPalette => Palettes.Neutral;
|
||||
public override ColorPalette PositivePalette => Palettes.Green;
|
||||
public override ColorPalette NegativePalette => Palettes.Red;
|
||||
public override ColorPalette HighlightPalette => Palettes.Maroon;
|
||||
//WL-Change-start
|
||||
public override ColorPalette PrimaryPalette => Palettes.WL2;
|
||||
public override ColorPalette SecondaryPalette => Palettes.WL2;
|
||||
public override ColorPalette PositivePalette => Palettes.WL1;
|
||||
public override ColorPalette NegativePalette => Palettes.WL1;
|
||||
public override ColorPalette HighlightPalette => Palettes.WL1;
|
||||
//WL-Change-end
|
||||
}
|
||||
|
||||
@@ -95,24 +95,7 @@ public sealed partial class SkillsForcedWindow : FancyWindow
|
||||
HorizontalAlignment = Control.HAlignment.Center
|
||||
};
|
||||
|
||||
confirmButton.OnPressed += _ =>
|
||||
{
|
||||
if (_totalPoints - _spentPoints == 0)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
warningContainer.RemoveAllChildren();
|
||||
var warning = new Label
|
||||
{
|
||||
Text = Loc.GetString("skills-unspent-warning"),
|
||||
FontColorOverride = Color.Yellow,
|
||||
HorizontalAlignment = Control.HAlignment.Center
|
||||
};
|
||||
warningContainer.AddChild(warning);
|
||||
}
|
||||
};
|
||||
confirmButton.OnPressed += _ => Close();
|
||||
|
||||
bottomContainer.AddChild(confirmButton);
|
||||
bottomContainer.AddChild(warningContainer);
|
||||
|
||||
@@ -438,8 +438,16 @@ public sealed partial class ChatSystem : SharedChatSystem
|
||||
}
|
||||
|
||||
// WL-Change: No talk in vacuum Start
|
||||
if (!TryEntitySpeak(source))
|
||||
var pressureCheckEv = new PressureLanguageCheckEvent(message, source);
|
||||
RaiseLocalEvent(source, ref pressureCheckEv);
|
||||
if (pressureCheckEv.Cancelled)
|
||||
return;
|
||||
else if (pressureCheckEv.ForceWhisper)
|
||||
{
|
||||
SendEntityWhisper(source, originalMessage, range, null, nameOverride);
|
||||
return;
|
||||
}
|
||||
message = pressureCheckEv.Message;
|
||||
// WL-Change: No talk in vacuum End
|
||||
|
||||
name = FormattedMessage.EscapeText(name);
|
||||
@@ -471,18 +479,18 @@ public sealed partial class ChatSystem : SharedChatSystem
|
||||
if (originalMessage == message)
|
||||
{
|
||||
if (name != Name(source))
|
||||
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Say from {source} as {name}: {originalMessage}.");
|
||||
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Say from {source} as {name}: {originalMessage}. Obfuscated to {obfusMessage}."); //WL-Changes: Languages
|
||||
else
|
||||
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Say from {source}: {originalMessage}.");
|
||||
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Say from {source}: {originalMessage}. Obfuscated to {obfusMessage}."); //WL-Changes: Languages
|
||||
}
|
||||
else
|
||||
{
|
||||
if (name != Name(source))
|
||||
_adminLogger.Add(LogType.Chat, LogImpact.Low,
|
||||
$"Say from {source} as {name}, original: {originalMessage}, transformed: {message}.");
|
||||
$"Say from {source} as {name}, original: {originalMessage}, transformed: {message}. Obfuscated to {obfusMessage}."); //WL-Changes: Languages
|
||||
else
|
||||
_adminLogger.Add(LogType.Chat, LogImpact.Low,
|
||||
$"Say from {source}, original: {originalMessage}, transformed: {message}.");
|
||||
$"Say from {source}, original: {originalMessage}, transformed: {message}. Obfuscated to {obfusMessage}."); //WL-Changes: Languages
|
||||
}
|
||||
}
|
||||
|
||||
@@ -591,9 +599,6 @@ public sealed partial class ChatSystem : SharedChatSystem
|
||||
_chatManager.ChatMessageToOne(ChatChannel.Whisper, /*WL-Changes: Languages*/afterObfusMessage, afterUnknownMessage/*WL-Changes: Languages*/, source, false, session.Channel);
|
||||
}
|
||||
|
||||
if (TryEntitySpeak(source)) // WL-Change: No talk in vacuum
|
||||
_replay.RecordServerMessage(new ChatMessage(ChatChannel.Whisper, message, wrappedMessage, GetNetEntity(source), null, MessageRangeHideChatForReplay(range)));
|
||||
|
||||
var ev = new EntitySpokeEvent(source, message, originalMessage, channel, obfuscatedMessage, /*WL-Changes: Languages*/biobfMessage, langObfusMessage/*WL-Changes: Languages*/);
|
||||
RaiseLocalEvent(source, ev, true);
|
||||
if (!hideLog)
|
||||
|
||||
@@ -103,6 +103,13 @@ public sealed class RadioSystem : EntitySystem
|
||||
RaiseLocalEvent(radioSource, ref sendAttemptEv);
|
||||
var canSend = !sendAttemptEv.Cancelled;
|
||||
|
||||
//WL-Changes: Languages start
|
||||
var checkLanguageEv = new RadioLanguageCheckEvent(content, radioSource);
|
||||
RaiseLocalEvent(messageSource, ref checkLanguageEv);
|
||||
canSend = canSend && !checkLanguageEv.Cancelled;
|
||||
content = checkLanguageEv.Message;
|
||||
//WL-Changes: Languages end
|
||||
|
||||
var sourceMapId = Transform(radioSource).MapID;
|
||||
var hasActiveServer = HasActiveServer(sourceMapId, channel.ID);
|
||||
var sourceServerExempt = _exemptQuery.HasComp(radioSource);
|
||||
@@ -157,6 +164,7 @@ public sealed class RadioSystem : EntitySystem
|
||||
radioSource,
|
||||
chatMsgEv);
|
||||
|
||||
|
||||
RaiseLocalEvent(receiver, ref ev);
|
||||
// WL-Changes-end
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ public sealed class LanguagesSoundsSystem : EntitySystem
|
||||
var soundEvent = new LanguageSoundEvent(proto.ID, GetNetEntity(uid));
|
||||
var whispSoundEvent = new LanguageSoundEvent(proto.ID, GetNetEntity(uid), true);
|
||||
|
||||
if (!proto.NeedSound)
|
||||
if (!proto.CustomSound)
|
||||
return;
|
||||
|
||||
var xformQuery = GetEntityQuery<TransformComponent>();
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
using Content.Shared._WL.Languages;
|
||||
using Content.Shared._WL.Languages.Components;
|
||||
using Content.Shared.IdentityManagement;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.Timing;
|
||||
using Content.Shared.Radio;
|
||||
using Content.Shared.Speech;
|
||||
using Content.Shared.Trigger.Systems;
|
||||
using Content.Server.Atmos.EntitySystems;
|
||||
using Robust.Shared.Network;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Utility;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
namespace Content.Server._WL.Languages;
|
||||
|
||||
@@ -15,40 +19,33 @@ public sealed class LanguagesSystem : SharedLanguagesSystem
|
||||
{
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly IEntityManager _ent = default!;
|
||||
[Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||
|
||||
/// <summary>
|
||||
/// Потому что <see cref="Shared.Chat.ChatChannelExtensions.TextColor(Shared.Chat.ChatChannel)" />.
|
||||
/// </summary>
|
||||
private static readonly Color DefaultChatTextColor = Color.LightGray;
|
||||
|
||||
private static readonly string DefaultChatTextFontId = "Default";
|
||||
private static readonly int DefaultChatTextFontSize = 12;
|
||||
private static readonly float FullTalkPressure = 50f;
|
||||
private static readonly float MinTalkPressure = 5f;
|
||||
private static readonly float ForceWhisperProb = .3f;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<LanguagesComponent, MapInitEvent>(OnMapInit);
|
||||
SubscribeLocalEvent<LanguagesComponent, ComponentInit>(OnComponentInit);
|
||||
SubscribeLocalEvent<AddLanguagesComponent, ComponentInit>(OnAddInit);
|
||||
SubscribeLocalEvent<LanguagesComponent, PressureLanguageCheckEvent>(OnPressureLanguageCheck);
|
||||
SubscribeLocalEvent<ModifyLanguagesComponent, ComponentInit>(OnModifyInit);
|
||||
|
||||
SubscribeNetworkEvent<LanguageChangeEvent>(OnGlobalLanguageChange);
|
||||
SubscribeNetworkEvent<LanguagesSyncEvent>(OnLanguagesSync);
|
||||
}
|
||||
|
||||
public void OnMapInit(EntityUid ent, LanguagesComponent component, ref MapInitEvent args)
|
||||
{
|
||||
var langs = component.Speaking;
|
||||
if (langs.Count == 0)
|
||||
return;
|
||||
foreach (ProtoId<LanguagePrototype> protoid in langs)
|
||||
{
|
||||
var proto = GetLanguagePrototype(protoid);
|
||||
if (proto != null)
|
||||
{
|
||||
if (TryChangeLanguage(_ent.GetNetEntity(ent), protoid))
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void AddLanguage(EntityUid ent, string language)
|
||||
{
|
||||
if (!TryComp<LanguagesComponent>(ent, out var comp))
|
||||
@@ -61,28 +58,45 @@ public sealed class LanguagesSystem : SharedLanguagesSystem
|
||||
SyncLanguages(net_ent, comp);
|
||||
}
|
||||
|
||||
public void OnAddInit(EntityUid ent, AddLanguagesComponent component, ref ComponentInit args)
|
||||
public void OnModifyInit(EntityUid ent, ModifyLanguagesComponent component, ref ComponentInit args)
|
||||
{
|
||||
var langs = component.Languages;
|
||||
if (langs.Count == 0 || !TryComp<LanguagesComponent>(ent, out var out_comp))
|
||||
if (!TryComp<LanguagesComponent>(ent, out var out_comp))
|
||||
{
|
||||
RemComp<AddLanguagesComponent>(ent);
|
||||
RemComp<ModifyLanguagesComponent>(ent);
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (ProtoId<LanguagePrototype> protoid in langs)
|
||||
if (!component.SpecieLanguage)
|
||||
{
|
||||
var proto = GetLanguagePrototype(protoid);
|
||||
if (proto != null)
|
||||
foreach (ProtoId<LanguagePrototype> protoid in langs)
|
||||
{
|
||||
if (component.ToSpeaking)
|
||||
out_comp.Speaking.Add(protoid);
|
||||
var proto = GetLanguagePrototype(protoid);
|
||||
if (proto != null)
|
||||
{
|
||||
if (component.ToSpeaking)
|
||||
out_comp.Speaking.Add(protoid);
|
||||
|
||||
if (component.ToUnderstood)
|
||||
out_comp.Understood.Add(protoid);
|
||||
if (component.ToUnderstood)
|
||||
out_comp.Understood.Add(protoid);
|
||||
}
|
||||
}
|
||||
}
|
||||
RemComp<AddLanguagesComponent>(ent);
|
||||
else
|
||||
{
|
||||
var protoid = out_comp.SpecieLanguage;
|
||||
var proto = GetLanguagePrototype(protoid);
|
||||
if (proto != null && protoid != null)
|
||||
{
|
||||
if (component.ToSpeaking)
|
||||
out_comp.Speaking.Remove(protoid.Value);
|
||||
|
||||
if (component.ToUnderstood)
|
||||
out_comp.Understood.Remove(protoid.Value);
|
||||
}
|
||||
}
|
||||
|
||||
RemComp<ModifyLanguagesComponent>(ent);
|
||||
|
||||
Dirty(ent, out_comp);
|
||||
|
||||
@@ -95,6 +109,10 @@ public sealed class LanguagesSystem : SharedLanguagesSystem
|
||||
var langs = component.Speaking;
|
||||
if (langs.Count == 0)
|
||||
return;
|
||||
|
||||
if (component.SpecieLanguage != null)
|
||||
AddLanguage(ent, component.SpecieLanguage);
|
||||
|
||||
foreach (ProtoId<LanguagePrototype> protoid in langs)
|
||||
{
|
||||
var proto = GetLanguagePrototype(protoid);
|
||||
@@ -126,6 +144,42 @@ public sealed class LanguagesSystem : SharedLanguagesSystem
|
||||
OnLanguageChange(entity, (string)msg.Language);
|
||||
}
|
||||
|
||||
public void OnPressureLanguageCheck(EntityUid source, LanguagesComponent comp, ref PressureLanguageCheckEvent args)
|
||||
{
|
||||
var passability = CheckPressurePass(source, args.Message);
|
||||
if (passability == 0)
|
||||
{
|
||||
args.Cancelled = true;
|
||||
|
||||
var time = _timing.CurTime;
|
||||
if (true || time > comp.LastPopup + comp.PopupCooldown)
|
||||
{
|
||||
comp.LastPopup = time;
|
||||
var message = Loc.GetString("languages-vacuum-block");
|
||||
|
||||
_popup.PopupEntity(message, source);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else if (passability < 1)
|
||||
{
|
||||
args.Message = ObfuscateMessageReadability(args.Message, passability);
|
||||
|
||||
if (passability < ForceWhisperProb)
|
||||
args.ForceWhisper = true;
|
||||
|
||||
var time = _timing.CurTime;
|
||||
if (true || time > comp.LastPopup + comp.PopupCooldown)
|
||||
{
|
||||
comp.LastPopup = time;
|
||||
var message = Loc.GetString("languages-vacuum-part-pass");
|
||||
|
||||
_popup.PopupEntity(message, source);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string ObfuscateMessageFromSource(string message, EntityUid source)
|
||||
{
|
||||
LanguagePrototype? proto = null;
|
||||
@@ -172,13 +226,13 @@ public sealed class LanguagesSystem : SharedLanguagesSystem
|
||||
public bool NeedTTS(EntityUid source)
|
||||
{
|
||||
if (!TryComp<LanguagesComponent>(source, out var source_lang))
|
||||
return false;
|
||||
return true;
|
||||
else
|
||||
{
|
||||
var message_language = source_lang.CurrentLanguage;
|
||||
var proto = GetLanguagePrototype(message_language);
|
||||
if (proto == null)
|
||||
return false;
|
||||
return true;
|
||||
else
|
||||
{
|
||||
return proto.NeedTTS;
|
||||
@@ -198,7 +252,7 @@ public sealed class LanguagesSystem : SharedLanguagesSystem
|
||||
return false;
|
||||
else
|
||||
{
|
||||
return proto.Obfuscation.IsEmoting();
|
||||
return proto.Emoting;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -207,7 +261,7 @@ public sealed class LanguagesSystem : SharedLanguagesSystem
|
||||
{
|
||||
var proto = GetLanguagePrototype(source, message);
|
||||
if (proto != null)
|
||||
return proto.Obfuscation.IsEmoting();
|
||||
return proto.Emoting;
|
||||
|
||||
return IsObfusEmoting(source);
|
||||
}
|
||||
@@ -232,7 +286,11 @@ public sealed class LanguagesSystem : SharedLanguagesSystem
|
||||
var isSelf = listener == source;
|
||||
var canUnderstand = CanUnderstand(source, listener, msg);
|
||||
|
||||
var color = GetColor(msg, source, channel.Color);
|
||||
var language = GetLanguagePrototype(source, msg);
|
||||
|
||||
var color = GetColor(language, channel.Color);
|
||||
|
||||
var (fontSize, fontId) = GetFontParams(language, speech.FontSize, speech.FontId);
|
||||
|
||||
string message;
|
||||
if (isSelf || canUnderstand)
|
||||
@@ -251,24 +309,39 @@ public sealed class LanguagesSystem : SharedLanguagesSystem
|
||||
if (!isSelf && !canUnderstand && IsObfusEmoting(source, msg))
|
||||
locId = "chat-radio-message-wrap-emote-lang";
|
||||
|
||||
return Loc.GetString(locId,
|
||||
var wrappedMessage = Loc.GetString(locId,
|
||||
("color", channel.Color),
|
||||
("fontType", speech.FontId),
|
||||
("fontSize", speech.FontSize),
|
||||
("fontType", fontId),
|
||||
("fontSize", fontSize),
|
||||
("verb", Loc.GetString(_random.Pick(speech.SpeechVerbStrings))),
|
||||
("channel", $"\\[{channel.LocalizedName}\\]"),
|
||||
("name", name),
|
||||
("message", message),
|
||||
("langColor", color));
|
||||
|
||||
return SanitizeWrappedMessage(source, wrappedMessage);
|
||||
}
|
||||
|
||||
public Color GetColor(string message, EntityUid source, Color? fallback = null)
|
||||
public (int, string) GetFontParams(LanguagePrototype? language, int? fallbackSize = null, string? fallbackId = null)
|
||||
{
|
||||
var language = GetLanguagePrototype(source, message);
|
||||
int size;
|
||||
string id;
|
||||
|
||||
if (TryComp<LanguagesComponent>(source, out var comp))
|
||||
language ??= GetLanguagePrototype(comp.CurrentLanguage);
|
||||
if (language == null || language.FontSize == DefaultChatTextFontSize)
|
||||
size = fallbackSize ?? DefaultChatTextFontSize;
|
||||
else
|
||||
size = language.FontSize;
|
||||
|
||||
if (language == null || language.FontId == DefaultChatTextFontId)
|
||||
id = fallbackId ?? DefaultChatTextFontId;
|
||||
else
|
||||
id = language.FontId;
|
||||
|
||||
return (size, id);
|
||||
}
|
||||
|
||||
public Color GetColor(LanguagePrototype? language, Color? fallback = null)
|
||||
{
|
||||
if (language == null || language.Color == DefaultChatTextColor)
|
||||
return fallback ?? DefaultChatTextColor;
|
||||
|
||||
@@ -282,14 +355,18 @@ public sealed class LanguagesSystem : SharedLanguagesSystem
|
||||
|
||||
TryProcessLanguageMessage(source, message, out string new_message);
|
||||
|
||||
var color = GetColor(message, source);
|
||||
var language = GetLanguagePrototype(source, message);
|
||||
|
||||
var color = GetColor(language);
|
||||
|
||||
var escapedMessage = FormattedMessage.EscapeText(new_message);
|
||||
|
||||
return Loc.GetString("chat-manager-entity-whisper-wrap-message-lang",
|
||||
var wrappedMessage = Loc.GetString("chat-manager-entity-whisper-wrap-message-lang",
|
||||
("entityName", name),
|
||||
("message", escapedMessage),
|
||||
("langColor", color));
|
||||
|
||||
return SanitizeWrappedMessage(source, wrappedMessage);
|
||||
}
|
||||
|
||||
public string GetEmoteWrappedMessage(string message, EntityUid source, string name)
|
||||
@@ -302,7 +379,7 @@ public sealed class LanguagesSystem : SharedLanguagesSystem
|
||||
("message", FormattedMessage.RemoveMarkupOrThrow(message))
|
||||
);
|
||||
|
||||
return wrappedMessage;
|
||||
return SanitizeWrappedMessage(source, wrappedMessage);
|
||||
}
|
||||
|
||||
public string GetWrappedMessage(string message, EntityUid source, string name, SpeechVerbPrototype speech)
|
||||
@@ -312,16 +389,45 @@ public sealed class LanguagesSystem : SharedLanguagesSystem
|
||||
|
||||
TryProcessLanguageMessage(source, message, out string new_message);
|
||||
|
||||
var color = GetColor(message, source);
|
||||
var language = GetLanguagePrototype(source, message);
|
||||
|
||||
var color = GetColor(language);
|
||||
|
||||
var (fontSize, fontId) = GetFontParams(language, speech.FontSize, speech.FontId);
|
||||
|
||||
var locId = speech.Bold ? "chat-manager-entity-say-bold-wrap-message-lang" : "chat-manager-entity-say-wrap-message-lang";
|
||||
Logger.Debug(fontId);
|
||||
|
||||
return Loc.GetString(locId,
|
||||
var wrappedMessage = Loc.GetString(locId,
|
||||
("entityName", name),
|
||||
("verb", Loc.GetString(_random.Pick(speech.SpeechVerbStrings))),
|
||||
("fontType", speech.FontId),
|
||||
("fontSize", speech.FontSize),
|
||||
("fontType", fontId), //Оно не работает, даже если захардкодить. Не понимаю почему. (tau)
|
||||
("fontSize", fontSize),
|
||||
("message", FormattedMessage.EscapeText(new_message)),
|
||||
("langColor", color));
|
||||
|
||||
return SanitizeWrappedMessage(source, wrappedMessage);
|
||||
}
|
||||
|
||||
private float CheckPressurePass(EntityUid source, string msg)
|
||||
{
|
||||
var language = GetLanguagePrototype(source, msg);
|
||||
|
||||
if (language == null)
|
||||
return 1f;
|
||||
|
||||
if (_atmosphereSystem.GetContainingMixture(source) is { } mixture)
|
||||
{
|
||||
var fixed_pressure = MathF.Max(mixture.Pressure - MinTalkPressure, 0f);
|
||||
|
||||
var pressure_prob = MathF.Min(fixed_pressure/(FullTalkPressure - MinTalkPressure), 1f);
|
||||
|
||||
var full_prob = MathF.Min(pressure_prob + language.PressurePass, 1f);
|
||||
|
||||
return full_prob;
|
||||
}
|
||||
else
|
||||
return 1f;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ using Robust.Shared.Serialization.TypeSerializers.Implementations;
|
||||
namespace Content.Shared._WL.Languages.Components;
|
||||
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
public sealed partial class AddLanguagesComponent : Component
|
||||
public sealed partial class ModifyLanguagesComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public bool ToRemove = false;
|
||||
@@ -17,6 +17,9 @@ public sealed partial class AddLanguagesComponent : Component
|
||||
[DataField]
|
||||
public bool ToSpeaking = true;
|
||||
|
||||
[DataField]
|
||||
public bool SpecieLanguage = false;
|
||||
|
||||
[DataField]
|
||||
public List<ProtoId<LanguagePrototype>> Languages = [];
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared._WL.Languages.Components;
|
||||
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
||||
public sealed partial class LanguagesComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
@@ -22,6 +22,15 @@ public sealed partial class LanguagesComponent : Component
|
||||
[DataField]
|
||||
public ProtoId<LanguagePrototype>? CurrentLanguage = null;
|
||||
|
||||
[DataField]
|
||||
public ProtoId<LanguagePrototype>? SpecieLanguage = null;
|
||||
|
||||
[DataField, AutoNetworkedField]
|
||||
public TimeSpan LastPopup;
|
||||
|
||||
[DataField, AutoNetworkedField]
|
||||
public TimeSpan PopupCooldown = TimeSpan.FromSeconds(1);
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class State : ComponentState
|
||||
{
|
||||
|
||||
@@ -33,8 +33,23 @@ public sealed partial class LanguagePrototype : IPrototype
|
||||
[DataField("needtts")]
|
||||
public bool NeedTTS = true;
|
||||
|
||||
[DataField("needsound")]
|
||||
public bool NeedSound = false;
|
||||
[DataField("emoting")]
|
||||
public bool Emoting = false;
|
||||
|
||||
[DataField("radioPass")]
|
||||
public float RadioPass = 1f;
|
||||
|
||||
[DataField("pressurePass")]
|
||||
public float PressurePass = 0f;
|
||||
|
||||
[DataField("fontId")]
|
||||
public string FontId = "Default";
|
||||
|
||||
[DataField("fontSize")]
|
||||
public int FontSize = 12;
|
||||
|
||||
[DataField("customSound")]
|
||||
public bool CustomSound = false;
|
||||
|
||||
[DataField("sound")]
|
||||
public SoundCollectionSpecifier Sound = new SoundCollectionSpecifier("TernarySounds");
|
||||
|
||||
@@ -1,11 +1,36 @@
|
||||
using Content.Shared.Chat;
|
||||
using Content.Shared._WL.Languages;
|
||||
using Content.Shared._WL.Languages.Components;
|
||||
using Content.Shared.DoAfter;
|
||||
using Robust.Shared.Serialization;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
|
||||
namespace Content.Shared._WL.Languages;
|
||||
|
||||
/// <summary>
|
||||
/// Проверка на окружающее давление
|
||||
/// </summary>
|
||||
[ByRefEvent]
|
||||
public record struct PressureLanguageCheckEvent(string Message, EntityUid Source)
|
||||
{
|
||||
public string Message = Message;
|
||||
public readonly EntityUid Source = Source;
|
||||
public bool Cancelled = false;
|
||||
public bool ForceWhisper = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Проверка на то, можно ли на языке говорить по радио
|
||||
/// </summary>
|
||||
[ByRefEvent]
|
||||
public record struct RadioLanguageCheckEvent(string Message, EntityUid RadioSource)
|
||||
{
|
||||
public string Message = Message;
|
||||
public readonly EntityUid RadioSource = RadioSource;
|
||||
public bool Cancelled = false;
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed partial class LanguageChangeEvent : EntityEventArgs
|
||||
{
|
||||
|
||||
@@ -34,25 +34,18 @@ public abstract partial class ObfuscationMethod
|
||||
Obfuscate(builder, message, global_seed);
|
||||
return builder.ToString();
|
||||
}
|
||||
|
||||
public abstract bool IsEmoting();
|
||||
}
|
||||
|
||||
public partial class ReplacementObfuscation : ObfuscationMethod
|
||||
{
|
||||
[DataField(required: true)]
|
||||
public List<string> Replacement = [];
|
||||
public List<string> Replacement = [];
|
||||
|
||||
internal override void Obfuscate(StringBuilder builder, string message, int global_seed)
|
||||
{
|
||||
var index = PseudoRandom(message.GetHashCode(), global_seed, 0, Replacement.Count - 1);
|
||||
builder.Append(Replacement[index]);
|
||||
}
|
||||
|
||||
public override bool IsEmoting()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public partial class WordsReplacementObfuscation : ObfuscationMethod
|
||||
@@ -96,11 +89,6 @@ public partial class WordsReplacementObfuscation : ObfuscationMethod
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override bool IsEmoting()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public partial class Utf16ReplacementObfuscation : ObfuscationMethod
|
||||
@@ -164,11 +152,6 @@ public partial class Utf16ReplacementObfuscation : ObfuscationMethod
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override bool IsEmoting()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -230,14 +213,9 @@ public partial class ByCharReplacementObfuscation : ObfuscationMethod
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override bool IsEmoting()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public partial class EmoteObfuscation : ObfuscationMethod
|
||||
public partial class LengthObfuscation : ObfuscationMethod
|
||||
{
|
||||
[DataField(required: true)]
|
||||
public List<string> Replacement = [];
|
||||
@@ -257,9 +235,4 @@ public partial class EmoteObfuscation : ObfuscationMethod
|
||||
index = System.Math.Max(0, System.Math.Min(index, Replacement.Count - 1));
|
||||
builder.Append(Replacement[index]);
|
||||
}
|
||||
|
||||
public override bool IsEmoting()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,9 +3,12 @@ using Content.Shared.Chat;
|
||||
using Content.Shared.GameTicking;
|
||||
using Content.Shared.Popups;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Serialization;
|
||||
using Robust.Shared.Timing;
|
||||
using System.Collections.Frozen;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Text;
|
||||
|
||||
namespace Content.Shared._WL.Languages;
|
||||
|
||||
@@ -16,6 +19,8 @@ public abstract class SharedLanguagesSystem : EntitySystem
|
||||
[Dependency] private readonly IEntityManager _ent = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||
[Dependency] private readonly SharedChatSystem _chat = default!;
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
|
||||
private FrozenDictionary<char, LanguagePrototype> _keylan = default!;
|
||||
|
||||
@@ -24,6 +29,9 @@ public abstract class SharedLanguagesSystem : EntitySystem
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<LanguagesComponent, RadioLanguageCheckEvent>(OnRadioLanguageCheck);
|
||||
|
||||
CacheLanguages();
|
||||
|
||||
}
|
||||
@@ -46,6 +54,39 @@ public abstract class SharedLanguagesSystem : EntitySystem
|
||||
return proto;
|
||||
}
|
||||
|
||||
public void OnRadioLanguageCheck(EntityUid source, LanguagesComponent comp, ref RadioLanguageCheckEvent args)
|
||||
{
|
||||
var passability = CheckRadioPass(source, args.Message);
|
||||
if (passability == 0)
|
||||
{
|
||||
args.Cancelled = true;
|
||||
|
||||
var time = _timing.CurTime;
|
||||
if (time > comp.LastPopup + comp.PopupCooldown)
|
||||
{
|
||||
comp.LastPopup = time;
|
||||
var message = Loc.GetString("languages-radio-block");
|
||||
|
||||
_popup.PopupEntity(message, source);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else if (passability < 1)
|
||||
{
|
||||
args.Message = ObfuscateMessageReadability(args.Message, 1.0f - passability);
|
||||
|
||||
var time = _timing.CurTime;
|
||||
if (time > comp.LastPopup + comp.PopupCooldown)
|
||||
{
|
||||
comp.LastPopup = time;
|
||||
var message = Loc.GetString("languages-radio-part-pass");
|
||||
|
||||
_popup.PopupEntity(message, source);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string ObfuscateMessage(EntityUid uid, string message, ProtoId<LanguagePrototype> language)
|
||||
{
|
||||
var proto = GetLanguagePrototype(language);
|
||||
@@ -71,6 +112,12 @@ public abstract class SharedLanguagesSystem : EntitySystem
|
||||
if (!comp.Understood.Contains(protoid))
|
||||
return false;
|
||||
|
||||
if (ent == null)
|
||||
return false;
|
||||
|
||||
comp.CurrentLanguage = protoid;
|
||||
Dirty(ent.Value, comp);
|
||||
|
||||
var ev = new LanguageChangeEvent(netEnt, protoid);
|
||||
RaiseNetworkEvent(ev);
|
||||
RaiseLocalEvent(ent.Value, ev);
|
||||
@@ -106,7 +153,7 @@ public abstract class SharedLanguagesSystem : EntitySystem
|
||||
/// <param name="uid"></param>
|
||||
/// <param name="message"></param>
|
||||
/// <returns></returns>
|
||||
public LanguagePrototype? GetLanguagePrototype(EntityUid uid, string? message)
|
||||
public LanguagePrototype? GetLanguagePrototype(EntityUid uid, string? message = null)
|
||||
{
|
||||
LanguagePrototype? language = null;
|
||||
|
||||
@@ -114,11 +161,12 @@ public abstract class SharedLanguagesSystem : EntitySystem
|
||||
return null;
|
||||
|
||||
if (string.IsNullOrEmpty(message) || message.Length < 2 || !(message.StartsWith(LanguagePrefix)))
|
||||
return null;
|
||||
{
|
||||
return GetLanguagePrototype(comp.CurrentLanguage);
|
||||
}
|
||||
|
||||
var prefix = char.ToLower(message[1]);
|
||||
|
||||
|
||||
return _keylan.TryGetValue(prefix, out language)
|
||||
? language : null;
|
||||
}
|
||||
@@ -166,6 +214,46 @@ public abstract class SharedLanguagesSystem : EntitySystem
|
||||
return false;
|
||||
}
|
||||
|
||||
private float CheckRadioPass(EntityUid source, string msg)
|
||||
{
|
||||
var language = GetLanguagePrototype(source, msg);
|
||||
|
||||
if (language == null)
|
||||
return 1.0f;
|
||||
|
||||
return language.RadioPass;
|
||||
}
|
||||
|
||||
public string ObfuscateMessageReadability(string message, float chance)
|
||||
{
|
||||
var modifiedMessage = new StringBuilder(message);
|
||||
|
||||
for (var i = 0; i < message.Length; i++)
|
||||
{
|
||||
if (char.IsWhiteSpace((modifiedMessage[i])))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (_random.Prob(1 - chance))
|
||||
{
|
||||
modifiedMessage[i] = '~';
|
||||
}
|
||||
}
|
||||
|
||||
return modifiedMessage.ToString();
|
||||
}
|
||||
|
||||
public string SanitizeWrappedMessage(EntityUid source, string message, bool capitalize = true)
|
||||
{
|
||||
var newMessage = message.Trim();
|
||||
|
||||
if (capitalize)
|
||||
newMessage = _chat.SanitizeMessageCapital(newMessage);
|
||||
|
||||
return newMessage ?? "";
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class LanguagesInfoEvent : EntityEventArgs
|
||||
{
|
||||
|
||||
BIN
Resources/Fonts/_WL/Pixelated-Wingdings.ttf
Normal file
BIN
Resources/Fonts/_WL/pixelated-wingdings.otf
Normal file
@@ -30,3 +30,21 @@ language-sareng-desc = В языке саренгов преобладают г
|
||||
|
||||
language-slimish = Слаймолюдский
|
||||
language-slimish-desc = Адаптированный под биологию слаймолюдов человеческий английский. Образовался естественным образом во время развития вида в виду необходимости коммуникации между особями. Не имеет письменной вариации, но устно широко распространён благодаря своему удобству для слаймолюдов. Состоит из разных хлюпающих, булькающих звуков и различных вибраций, являющихся переиначиванием человеческой английской речи.
|
||||
|
||||
language-wingdings = Общегалактический жестовый
|
||||
language-wingdings-desc = Наиболее распространённый жестовый язык, подходящий практически для всех разумных рас. Крайне популярен среди инженеров, учёных и любых других профессий, которые требуют работу при низком давлении и в экстримальных условиях.
|
||||
|
||||
language-toptranslate = Высший транслит
|
||||
language-toptranslate-desc = Усложнённая версия транслита, обладающая высококомплексной грамматикой и невероятно большим количеством слов. Говорить на нём — это отличный способ показать как своё аристократичное происхождение, так и снобизм. Наиболее популярен в КОГе и крайне распространён в Ноократии Эранта среди высоких классов и в Консорциуме "Нексус". По звучанию и словообразование похож на человеческий французский и некоторые другие романские языки.
|
||||
|
||||
language-bottomtranslate = Адаптированный транслит
|
||||
language-bottomtranslate-desc = Упрощённая версия транслита, обладающая примитивной грамматикой и сниженным количеством слов. Появился во время образования СоцКона для максимального упращения перехода неразвитых планет в индустриальную эру. В сравнении с высшим транслитом часто зовётся низшим, хотя многие считают такое название оскорбительным. Распространён в СоцКоне, особенно в Умпорской Федерации из-за вечного противостояния Ноократии.
|
||||
|
||||
language-urhs = Урсахский
|
||||
language-urhs-desc = Диалект Синта'Унати, включающий в себя больше рычащих, чем шипящих звуков. Звучит знчаительно грубее и "животнее" Синта'Унати.
|
||||
|
||||
language-urlum = Урлюм
|
||||
language-urlum-desc = Язык муринов. По большей части состоит из различных писков и сложных высоких гласных, от чего иногда может больше напоминать чириканье, чем полноценную речь.
|
||||
|
||||
language-siktair = Сик'Таир
|
||||
language-siktair-desc = Язык таяран. Из-за их консервативности почти не изменяется, от того в нём отсутствует множество современных терминов. Один из прородителей адаптированного транслита.
|
||||
|
||||
5
Resources/Locale/ru-RU/_WL/languages/popups.ftl
Normal file
@@ -0,0 +1,5 @@
|
||||
languages-radio-block = Вы не можете говорить на этом языке по радио!
|
||||
languages-radio-part-pass = Вы не можете полностью передать смысл на этом языке по радио!
|
||||
|
||||
languages-vacuum-block = Вы не можете говорить на этом языке в низком давлении!
|
||||
languages-vacuum-part-pass = Вы не можете полностью передать смысл на этом языке в низком давлении!
|
||||
22
Resources/Locale/ru-RU/_WL/languages/traits.ftl
Normal file
@@ -0,0 +1,22 @@
|
||||
trait-category-languages = Языки
|
||||
|
||||
trait-language-unspecie = Убрать язык вида
|
||||
trait-language-unspecie-desc = Удаляет родной язык вида. Используйте с умом.
|
||||
|
||||
trait-language-oldearth = Староземной
|
||||
trait-language-oldearth-desc = Человеческий язык. Крайне сложен в изучении для не людей.
|
||||
|
||||
trait-language-sinta = Синта'Унати
|
||||
trait-language-sinta-desc = Наиболее популярный язык среди унатхов.
|
||||
|
||||
trait-language-urhs = Урсахский
|
||||
trait-language-urhs-desc = Второй по популярности диалект Синта'Унати. Обладает большей грубостью.
|
||||
|
||||
trait-language-top = Высший транслит
|
||||
trait-language-top-desc = Усложнённая версия транслита. Для аристократов.
|
||||
|
||||
trait-language-bottom = Адаптированный транслит
|
||||
trait-language-bottom-desc = Упрощённая версия транслита. Для бедных и необразованных.
|
||||
|
||||
trait-language-wingdings = Общегалактический жестовый
|
||||
trait-language-wingdings-desc = Популярный жестовый язык. Позволяет говорить в вакууме.
|
||||
@@ -1,5 +1,5 @@
|
||||
lathe-category-reports = Отчёты
|
||||
lathe-category-statements = Заключения
|
||||
lathe-category-statements = Заявления
|
||||
lathe-category-inquiries-and-appeals = Запросы и обращения
|
||||
lathe-category-complaints = Жалобы
|
||||
lathe-category-permissions = Разрешения
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Errors
|
||||
# Errors
|
||||
loadout-group-species-restriction = Этот предмет недоступен для вашего текущего вида.
|
||||
# Miscellaneous
|
||||
loadout-group-trinkets = Безделушки
|
||||
@@ -173,3 +173,5 @@ loadout-group-psychologist-jumpsuit = Психотерапевт, комбине
|
||||
# WL-change-psych
|
||||
loadout-group-boxer-jumpsuit = Боксёр, комбинезон
|
||||
loadout-group-boxer-gloves = Боксёр, перчатки
|
||||
# WL-change-bartender
|
||||
loadout-group-bartender-glasses = Бармен, очки
|
||||
|
||||
@@ -638,8 +638,8 @@
|
||||
# corvax-chatsan-word-64: corvax-chatsan-replacement-64
|
||||
# corvax-chatsan-word-65: corvax-chatsan-replacement-65
|
||||
# corvax-chatsan-word-66: corvax-chatsan-replacement-66
|
||||
# corvax-chatsan-word-67: corvax-chatsan-replacement-67
|
||||
# corvax-chatsan-word-68: corvax-chatsan-replacement-68
|
||||
corvax-chatsan-word-67: corvax-chatsan-replacement-67 #WL-Changes: автозамена для пж и спс
|
||||
corvax-chatsan-word-68: corvax-chatsan-replacement-68 #WL-Changes: автозамена для пж и спс
|
||||
# corvax-chatsan-word-69: corvax-chatsan-replacement-69
|
||||
# corvax-chatsan-word-70: corvax-chatsan-replacement-70
|
||||
# corvax-chatsan-word-71: corvax-chatsan-replacement-71
|
||||
|
||||
@@ -394,10 +394,9 @@
|
||||
- type: Languages
|
||||
speaking:
|
||||
- Translate
|
||||
- Ternary
|
||||
understood:
|
||||
- Translate
|
||||
- Ternary
|
||||
specieLanguage: Ternary
|
||||
#WL-Changes: Languages end
|
||||
- type: MobCollision # WL-Changes: MobCollision works for players only
|
||||
|
||||
|
||||
@@ -7,6 +7,14 @@
|
||||
components:
|
||||
- type: HumanoidAppearance
|
||||
species: Tajaran
|
||||
# WL-Change Start
|
||||
hideLayersOnEquip:
|
||||
- Hair
|
||||
- Snout
|
||||
- FacialHair
|
||||
- HeadTop
|
||||
- HeadSide
|
||||
# WL-Change End
|
||||
- type: Hunger
|
||||
baseDecayRate: 0.02
|
||||
- type: Thirst
|
||||
@@ -80,6 +88,7 @@
|
||||
- Translate
|
||||
understood:
|
||||
- Translate
|
||||
specieLanguage: SikTair
|
||||
# WL-Changes: Languages
|
||||
|
||||
- type: entity
|
||||
|
||||
@@ -7,6 +7,14 @@
|
||||
components:
|
||||
- type: HumanoidAppearance
|
||||
species: CorvaxVulpkanin
|
||||
# WL-Change Start
|
||||
hideLayersOnEquip:
|
||||
- Hair
|
||||
- Snout
|
||||
- FacialHair
|
||||
- HeadTop
|
||||
- HeadSide
|
||||
# WL-Change End
|
||||
- type: Hunger # on 1.5x more
|
||||
thresholds:
|
||||
Overfed: 250
|
||||
@@ -105,10 +113,9 @@
|
||||
- type: Languages
|
||||
speaking:
|
||||
- Translate
|
||||
- Kuniluc
|
||||
understood:
|
||||
- Translate
|
||||
- Kuniluc
|
||||
specieLanguage: Kuniluc
|
||||
#WL-Changes: Languages end
|
||||
|
||||
- type: entity
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
- type: RandomSpawner
|
||||
prototypes:
|
||||
- Grille
|
||||
- GrilleBroken
|
||||
# - GrilleBroken #Corvax-WL Changes
|
||||
- ClockworkGrille #Corvax-WL Changes
|
||||
chance: 1.0
|
||||
placement:
|
||||
mode: AlignTileAny
|
||||
|
||||
@@ -119,10 +119,9 @@
|
||||
- type: Languages
|
||||
speaking:
|
||||
- Translate
|
||||
- RootSpeak
|
||||
understood:
|
||||
- Translate
|
||||
- RootSpeak
|
||||
specieLanguage: RootSpeak
|
||||
#WL-Changes: Languages end
|
||||
|
||||
- type: entity
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
hideLayersOnEquip:
|
||||
- Hair
|
||||
- Snout
|
||||
- FacialHair # WL-Change
|
||||
- type: Inventory
|
||||
femaleDisplacements:
|
||||
jumpsuit:
|
||||
@@ -31,10 +32,9 @@
|
||||
- type: Languages
|
||||
speaking:
|
||||
- Translate
|
||||
- OldEarth
|
||||
understood:
|
||||
- Translate
|
||||
- OldEarth
|
||||
specieLanguage: OldEarth
|
||||
#WL-Changes: Languages end
|
||||
|
||||
- type: entity
|
||||
|
||||
@@ -182,10 +182,9 @@
|
||||
- type: Languages
|
||||
speaking:
|
||||
- Translate
|
||||
- Weaver
|
||||
understood:
|
||||
- Translate
|
||||
- Weaver
|
||||
specieLanguage: Weaver
|
||||
#WL-Changes: Languages end
|
||||
|
||||
- type: entity
|
||||
|
||||
@@ -123,10 +123,9 @@
|
||||
- type: Languages
|
||||
speaking:
|
||||
- Translate
|
||||
- SintaUnati
|
||||
understood:
|
||||
- Translate
|
||||
- SintaUnati
|
||||
specieLanguage: SintaUnati
|
||||
#WL-Changes: Languages end
|
||||
|
||||
- type: entity
|
||||
|
||||
@@ -39,6 +39,12 @@
|
||||
delay: 0.5
|
||||
- type: HumanoidAppearance
|
||||
species: SlimePerson
|
||||
# WL-Change start
|
||||
hideLayersOnEquip:
|
||||
- Hair
|
||||
- Snout
|
||||
- FacialHair
|
||||
# WL-Change end
|
||||
- type: Speech
|
||||
speechVerb: Slime
|
||||
speechSounds: Slime
|
||||
|
||||
@@ -149,6 +149,12 @@
|
||||
visible: false
|
||||
- type: HumanoidAppearance
|
||||
species: Vox
|
||||
# WL-Change start
|
||||
hideLayersOnEquip:
|
||||
- Hair
|
||||
- Snout
|
||||
- FacialHair
|
||||
# WL-Change end
|
||||
undergarmentTop: UndergarmentTopTanktopVox
|
||||
undergarmentBottom: UndergarmentBottomBoxersVox
|
||||
markingsDisplacement:
|
||||
@@ -215,10 +221,9 @@
|
||||
- type: Languages
|
||||
speaking:
|
||||
- Translate
|
||||
- VoxPigin
|
||||
understood:
|
||||
- Translate
|
||||
- VoxPigin
|
||||
specieLanguage: VoxPigin
|
||||
#WL-Changes: Languages end
|
||||
|
||||
- type: entity
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
- type: entity
|
||||
- type: entity
|
||||
abstract: true
|
||||
save: false
|
||||
parent: [BaseMobSpeciesOrganic]
|
||||
|
||||
@@ -249,7 +249,7 @@
|
||||
job: AtmosphericTechnician
|
||||
|
||||
- type: entity
|
||||
parent: EngineeringIDCard
|
||||
parent: IDCardStandard
|
||||
id: SeniorEngineerIDCard
|
||||
name: senior engineer ID card
|
||||
components:
|
||||
@@ -264,6 +264,8 @@
|
||||
- sprite: *icon-rsi
|
||||
offset: *icon-offset
|
||||
state: SeniorEngineer
|
||||
- type: PresetIdCard
|
||||
job: SeniorEngineer
|
||||
|
||||
#Medical
|
||||
|
||||
@@ -361,7 +363,7 @@
|
||||
job: Psychologist
|
||||
|
||||
- type: entity
|
||||
parent: MedicalIDCard
|
||||
parent: IDCardStandard
|
||||
id: SeniorPhysicianIDCard
|
||||
name: senior physician ID card
|
||||
components:
|
||||
@@ -375,6 +377,8 @@
|
||||
- sprite: *icon-rsi
|
||||
offset: *icon-offset
|
||||
state: SeniorPhysician
|
||||
- type: PresetIdCard
|
||||
job: SeniorPhysician
|
||||
|
||||
#Science
|
||||
|
||||
@@ -415,7 +419,7 @@
|
||||
job: Scientist
|
||||
|
||||
- type: entity
|
||||
parent: ResearchIDCard
|
||||
parent: IDCardStandard
|
||||
id: SeniorResearcherIDCard
|
||||
name: senior researcher ID card
|
||||
components:
|
||||
@@ -429,6 +433,8 @@
|
||||
- sprite: *icon-rsi
|
||||
offset: *icon-offset
|
||||
state: SeniorResearcher
|
||||
- type: PresetIdCard
|
||||
job: SeniorResearcher
|
||||
|
||||
#Security
|
||||
|
||||
@@ -519,9 +525,11 @@
|
||||
- sprite: *icon-rsi
|
||||
offset: *icon-offset
|
||||
state: Brigmedic
|
||||
- type: PresetIdCard
|
||||
job: Brigmedic
|
||||
|
||||
- type: entity
|
||||
parent: SecurityIDCard
|
||||
parent: IDCardStandard
|
||||
id: SeniorOfficerIDCard
|
||||
name: senior officer ID card
|
||||
components:
|
||||
@@ -535,6 +543,8 @@
|
||||
- sprite: *icon-rsi
|
||||
offset: *icon-offset
|
||||
state: SeniorOfficer
|
||||
- type: PresetIdCard
|
||||
job: SeniorOfficer
|
||||
|
||||
#Service
|
||||
|
||||
|
||||
@@ -327,6 +327,8 @@
|
||||
solutions:
|
||||
absorbed:
|
||||
maxVol: 30
|
||||
- type: CleansForensics
|
||||
cleanDelay: 10
|
||||
- type: UseDelay
|
||||
delay: 1.5
|
||||
- type: Tag
|
||||
|
||||
@@ -18,6 +18,13 @@
|
||||
equipment:
|
||||
head: ClothingHeadHatBowlerHat
|
||||
|
||||
# WL-Changes: Bartender Bartender eyes loadout Start
|
||||
- type: loadout
|
||||
id: BartenderHudBeer
|
||||
equipment:
|
||||
eyes: ClothingEyesHudBeer
|
||||
# WL-Changes: Bartender Bartender eyes loadout End
|
||||
|
||||
# Jumpsuit
|
||||
- type: loadout
|
||||
id: BartenderJumpsuit
|
||||
|
||||
@@ -309,6 +309,18 @@
|
||||
- BartenderHead
|
||||
- BartenderBowler
|
||||
|
||||
# WL-Changes: Bartender Bartender eyes loadout Start
|
||||
- type: loadoutGroup
|
||||
id: BartenderEyewear
|
||||
name: loadout-group-bartender-glasses
|
||||
minLimit: 0
|
||||
loadouts:
|
||||
- BartenderHudBeer
|
||||
- Glasses
|
||||
- GlassesJamjar
|
||||
- GlassesJensen
|
||||
# WL-Changes: Bartender Bartender eyes loadout End
|
||||
|
||||
- type: loadoutGroup
|
||||
id: BartenderJumpsuit
|
||||
name: loadout-group-bartender-jumpsuit
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
- BartenderJumpsuit
|
||||
- CommonBackpack
|
||||
- BartenderOuterClothing
|
||||
- Glasses
|
||||
- BartenderEyewear # WL-Changes: Bartender eyes loadout
|
||||
- Survival
|
||||
- Trinkets
|
||||
- WLNeck # WL-Changes: Neck add
|
||||
|
||||
@@ -226,9 +226,9 @@
|
||||
- !type:HealthChange
|
||||
# WL species start
|
||||
conditions:
|
||||
# Golem
|
||||
# Golem, Android
|
||||
- !type:MetabolizerTypeCondition
|
||||
type: [ Golem ]
|
||||
type: [ Golem, Biorobotic ]
|
||||
inverted: true
|
||||
# WL species end
|
||||
- !type:MetabolizerTypeCondition
|
||||
@@ -259,6 +259,15 @@
|
||||
conditions:
|
||||
- !type:MetabolizerTypeCondition
|
||||
type: [ Golem ]
|
||||
Medicine:
|
||||
effects:
|
||||
- !type:ModifyBloodLevel
|
||||
conditions:
|
||||
- !type:MetabolizerTypeCondition
|
||||
# Android
|
||||
type: [ Biorobotic ]
|
||||
amount: 0.5
|
||||
|
||||
# WL species end
|
||||
|
||||
- type: reagent
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
accent: dwarf
|
||||
- type: GrowlingAccent # Corvax-Vulps
|
||||
- type: OwOAccent
|
||||
- type: CischiAccent # WL-Change
|
||||
|
||||
# 1 Cost
|
||||
|
||||
|
||||
@@ -26,6 +26,13 @@
|
||||
- type: Item
|
||||
storedRotation: -90
|
||||
- type: IdentityBlocker
|
||||
- type: HideLayerClothing
|
||||
slots:
|
||||
- Hair
|
||||
- Snout
|
||||
- FacialHair
|
||||
- HeadTop
|
||||
- HeadSide
|
||||
|
||||
- type: entity
|
||||
abstract: true
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
- type: marking
|
||||
- type: marking
|
||||
id: UndershirtShirtBand
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -15,8 +15,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtPoloBlue
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -30,8 +30,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtSportBlue
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -45,8 +45,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtPoloGrayYellow
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -60,8 +60,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtSportGreen
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -75,8 +75,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtIan
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -90,8 +90,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtIlovent
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -105,8 +105,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtLover
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -120,8 +120,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtMatroska
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -135,8 +135,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtPeace
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -150,8 +150,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtPogoman
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -165,8 +165,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtPoloRed
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -180,8 +180,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtSportRed
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -195,8 +195,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtTopRed
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -210,8 +210,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtAlien
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -225,8 +225,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtAssblastusa
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -240,8 +240,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtJerseyBlue
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -255,8 +255,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtClown
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -270,8 +270,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtCommie
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -285,8 +285,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtMeat
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -300,8 +300,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtNano
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -315,8 +315,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtQuestion
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -330,8 +330,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtJerseyRed
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -345,8 +345,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtSkull
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -360,8 +360,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtSS14
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -375,8 +375,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtStripes
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -390,8 +390,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtTiedye
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -405,8 +405,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtWhite
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
coloring:
|
||||
default:
|
||||
@@ -419,8 +419,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtBraSports
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
sexRestriction: Female
|
||||
coloring:
|
||||
@@ -434,8 +434,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtBraSportsAlt
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
sexRestriction: Female
|
||||
coloring:
|
||||
@@ -449,8 +449,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtTankFire
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -464,8 +464,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtTankMidriff
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
sexRestriction: Female
|
||||
coloring:
|
||||
@@ -479,8 +479,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtTankStripes
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -494,8 +494,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShirtUK
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -509,8 +509,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtPoloWhite
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
coloring:
|
||||
default:
|
||||
@@ -523,8 +523,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtShortSleeveWhite
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
coloring:
|
||||
default:
|
||||
@@ -537,8 +537,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UndershirtTopWhite
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
sexRestriction: Female
|
||||
coloring:
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Male
|
||||
# Male
|
||||
- type: marking
|
||||
id: UnderwearMaleMidway
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
sexRestriction: Male
|
||||
coloring:
|
||||
@@ -16,8 +16,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearMaleStripe
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
sexRestriction: Male
|
||||
coloring:
|
||||
@@ -31,8 +31,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearMaleUk
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
sexRestriction: Male
|
||||
forcedColoring: true
|
||||
@@ -47,8 +47,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearMankini
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
sexRestriction: Male
|
||||
coloring:
|
||||
@@ -62,8 +62,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearLongjohns
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
sexRestriction: Male
|
||||
coloring:
|
||||
@@ -77,8 +77,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearMaleKinky
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
sexRestriction: Male
|
||||
coloring:
|
||||
@@ -92,8 +92,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearMaleHearts
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
sexRestriction: Male
|
||||
forcedColoring: true
|
||||
@@ -108,8 +108,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearMaleCommie
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
sexRestriction: Male
|
||||
forcedColoring: true
|
||||
@@ -124,8 +124,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearMaleBriefs
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
sexRestriction: Male
|
||||
coloring:
|
||||
@@ -139,8 +139,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearMaleBoxers
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
sexRestriction: Male
|
||||
coloring:
|
||||
@@ -154,8 +154,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearMaleAssblastusa
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
speciesRestriction: [Human, SlimePerson, Dwarf, Reptilian, Moth, Arachnid, Akula, Felinid, HumanoidKidanes, Vulpkanines, Android, Murine]
|
||||
sexRestriction: Male
|
||||
forcedColoring: true
|
||||
@@ -171,8 +171,8 @@
|
||||
# Female
|
||||
- type: marking
|
||||
id: UnderwearFemaleUk
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
sexRestriction: Female
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -186,8 +186,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearFemaleThong
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
sexRestriction: Female
|
||||
coloring:
|
||||
default:
|
||||
@@ -200,8 +200,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearFemaleStrapless
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
sexRestriction: Female
|
||||
coloring:
|
||||
default:
|
||||
@@ -214,8 +214,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearFemaleSport
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
sexRestriction: Female
|
||||
coloring:
|
||||
default:
|
||||
@@ -228,8 +228,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearFemaleNeko
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
sexRestriction: Female
|
||||
coloring:
|
||||
default:
|
||||
@@ -242,8 +242,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearFemaleLace
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
sexRestriction: Female
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -257,8 +257,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearFemaleKinky
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
sexRestriction: Female
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -272,8 +272,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearFemaleCommie
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
sexRestriction: Female
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
@@ -287,8 +287,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearFemaleBralette
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
sexRestriction: Female
|
||||
coloring:
|
||||
default:
|
||||
@@ -301,8 +301,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearFemaleBikini
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
sexRestriction: Female
|
||||
coloring:
|
||||
default:
|
||||
@@ -315,8 +315,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearFemaleBabydoll
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
sexRestriction: Female
|
||||
coloring:
|
||||
default:
|
||||
@@ -329,8 +329,8 @@
|
||||
|
||||
- type: marking
|
||||
id: UnderwearFemaleAssblastusa
|
||||
bodyPart: UndergarmentTop
|
||||
markingCategory: UndergarmentTop
|
||||
bodyPart: UndergarmentBottom
|
||||
markingCategory: UndergarmentBottom
|
||||
sexRestriction: Female
|
||||
forcedColoring: true
|
||||
coloring:
|
||||
|
||||
@@ -34,10 +34,9 @@
|
||||
- type: Languages
|
||||
speaking:
|
||||
- Translate
|
||||
- Sarengis
|
||||
understood:
|
||||
- Translate
|
||||
- Sarengis
|
||||
specieLanguage: Sarengis
|
||||
|
||||
- type: entity
|
||||
save: false
|
||||
|
||||
@@ -110,6 +110,10 @@
|
||||
thermalRegulationTemperatureThreshold: 25
|
||||
- type: HumanoidAppearance
|
||||
species: Android
|
||||
hideLayersOnEquip:
|
||||
- Hair
|
||||
- Snout
|
||||
- FacialHair
|
||||
- type: Body
|
||||
prototype: Android
|
||||
requiredLegs: 2
|
||||
@@ -227,10 +231,9 @@
|
||||
- type: Languages
|
||||
speaking:
|
||||
- Translate
|
||||
- Ternary
|
||||
understood:
|
||||
- Translate
|
||||
- Ternary
|
||||
specieLanguage: Ternary
|
||||
- type: MobCollision # WL-Changes: MobCollision works for players only
|
||||
- type: OfferItem # CorvaxGoob-Offer
|
||||
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
- type: Thirst
|
||||
- type: HumanoidAppearance
|
||||
species: Cischi
|
||||
hideLayersOnEquip:
|
||||
- Hair
|
||||
- Snout
|
||||
- FacialHair
|
||||
- type: Damageable
|
||||
damageModifierSet: Cischi
|
||||
- type: Inventory
|
||||
@@ -103,6 +107,7 @@
|
||||
- Translate
|
||||
understood:
|
||||
- Translate
|
||||
- type: NoSlip
|
||||
|
||||
- type: entity
|
||||
save: false
|
||||
|
||||
@@ -12,6 +12,12 @@
|
||||
Unsexed: MaleFelinid
|
||||
- type: HumanoidAppearance
|
||||
species: Felinid
|
||||
hideLayersOnEquip:
|
||||
- Hair
|
||||
- Snout
|
||||
- FacialHair
|
||||
- HeadTop
|
||||
- HeadSide
|
||||
- type: Body
|
||||
prototype: Felinid
|
||||
# - type: Damageable
|
||||
@@ -58,10 +64,9 @@
|
||||
- type: Languages
|
||||
speaking:
|
||||
- Translate
|
||||
- OldEarth
|
||||
understood:
|
||||
- Translate
|
||||
- OldEarth
|
||||
specieLanguage: OldEarth
|
||||
- type: Inventory
|
||||
femaleDisplacements:
|
||||
jumpsuit:
|
||||
|
||||
@@ -7,6 +7,12 @@
|
||||
components:
|
||||
- type: HumanoidAppearance
|
||||
species: Murine
|
||||
hideLayersOnEquip:
|
||||
- Hair
|
||||
- Snout
|
||||
- FacialHair
|
||||
- HeadTop
|
||||
- HeadSide
|
||||
- type: Body
|
||||
prototype: HumanoidMurine
|
||||
requiredLegs: 2
|
||||
@@ -53,13 +59,12 @@
|
||||
speechVerb: SmallMob
|
||||
audioParams:
|
||||
volume: -5
|
||||
#WL-Changes: Languages start
|
||||
- type: Languages
|
||||
speaking:
|
||||
- Translate
|
||||
understood:
|
||||
- Translate
|
||||
#WL-Changes: Languages end
|
||||
specieLanguage: Urlum
|
||||
- type: AddHeightItem
|
||||
|
||||
- type: entity
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
- state: locked
|
||||
map: ["enum.LockVisualLayers.Lock"]
|
||||
shader: unshaded
|
||||
- state: paper
|
||||
visible: false
|
||||
sprite: _WL/Objects/Storage/ManualStorage/Paper/labels.rsi
|
||||
map: ["enum.PaperLabelVisuals.Layer"]
|
||||
- type: Item
|
||||
sprite: _WL/Objects/Storage/ManualStorage/Command/small.rsi
|
||||
- type: AccessReader
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
layers:
|
||||
- map: [ base ]
|
||||
state: icon
|
||||
- state: paper
|
||||
visible: false
|
||||
sprite: _WL/Objects/Storage/ManualStorage/Paper/labels.rsi
|
||||
map: ["enum.PaperLabelVisuals.Layer"]
|
||||
- type: Item
|
||||
sprite: _WL/Objects/Storage/ManualStorage/Default/small.rsi
|
||||
size: Large
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
- state: locked
|
||||
map: ["enum.LockVisualLayers.Lock"]
|
||||
shader: unshaded
|
||||
- state: paper
|
||||
visible: false
|
||||
sprite: _WL/Objects/Storage/ManualStorage/Paper/labels.rsi
|
||||
map: ["enum.PaperLabelVisuals.Layer"]
|
||||
- type: Item
|
||||
sprite: _WL/Objects/Storage/ManualStorage/Security/small.rsi
|
||||
- type: AccessReader
|
||||
|
||||
131
Resources/Prototypes/_WL/Languages/extra.yml
Normal file
@@ -0,0 +1,131 @@
|
||||
- type: language
|
||||
id: Wingdings
|
||||
name: language-wingdings
|
||||
description: language-wingdings-desc
|
||||
color: '#a6a6a6'
|
||||
keylang: 'ж'
|
||||
needtts: false
|
||||
emoting: true
|
||||
radioPass: 0
|
||||
pressurePass: 1
|
||||
obfuscation:
|
||||
!type:LengthObfuscation
|
||||
replacement:
|
||||
- показывает жест
|
||||
- показывает несколько жестов
|
||||
- быстро показывает множество различных жестов
|
||||
icon:
|
||||
sprite: /Textures/_WL/Interface/Languages/languages.rsi
|
||||
state: hand
|
||||
|
||||
- type: language
|
||||
id: TopTranslate
|
||||
name: language-toptranslate
|
||||
description: language-toptranslate-desc
|
||||
color: '#00c5d7'
|
||||
keylang: 'ш'
|
||||
obfuscation:
|
||||
!type:ByCharReplacementObfuscation
|
||||
replacement:
|
||||
- les
|
||||
- as
|
||||
- ter
|
||||
- ro
|
||||
- ew
|
||||
- wote
|
||||
- im
|
||||
- um
|
||||
- un
|
||||
- nu
|
||||
- ret
|
||||
- w
|
||||
- a
|
||||
- b
|
||||
- hes
|
||||
- je
|
||||
- uex
|
||||
- xer
|
||||
- x
|
||||
- th
|
||||
- tho
|
||||
- the
|
||||
- tha
|
||||
- ro
|
||||
- ium
|
||||
- lam
|
||||
- terr
|
||||
- jo
|
||||
- je
|
||||
- re
|
||||
- la
|
||||
- le
|
||||
- xlo
|
||||
- ry
|
||||
- y
|
||||
- thx
|
||||
icon:
|
||||
sprite: /Textures/_WL/Interface/Languages/languages.rsi
|
||||
state: top
|
||||
|
||||
- type: language
|
||||
id: BottomTranslate
|
||||
name: language-bottomtranslate
|
||||
description: language-bottomtranslate-desc
|
||||
color: '#963a1e'
|
||||
keylang: 'ц'
|
||||
obfuscation:
|
||||
!type:ByCharReplacementObfuscation
|
||||
replacement:
|
||||
- e
|
||||
- a
|
||||
- i
|
||||
- o
|
||||
- u
|
||||
- re
|
||||
- lo
|
||||
- ke
|
||||
- tu
|
||||
- ru
|
||||
- fi
|
||||
- ti
|
||||
- m
|
||||
- d
|
||||
- s
|
||||
- k
|
||||
- t
|
||||
- p
|
||||
- oo
|
||||
icon:
|
||||
sprite: /Textures/_WL/Interface/Languages/languages.rsi
|
||||
state: bottom
|
||||
|
||||
- type: language
|
||||
id: Urhas
|
||||
name: language-urhs
|
||||
description: language-urhs-desc
|
||||
color: '#470806'
|
||||
keylang: 'х'
|
||||
obfuscation:
|
||||
!type:ByCharReplacementObfuscation
|
||||
replacement:
|
||||
- r
|
||||
- s
|
||||
- h
|
||||
- k
|
||||
- t
|
||||
- a
|
||||
- ss
|
||||
- so
|
||||
- se
|
||||
- h
|
||||
- he
|
||||
- ro
|
||||
- ta
|
||||
- o
|
||||
- e
|
||||
- u
|
||||
- k
|
||||
- ka
|
||||
icon:
|
||||
sprite: /Textures/_WL/Interface/Languages/languages.rsi
|
||||
state: urhs
|
||||
@@ -1,17 +1,3 @@
|
||||
- type: language
|
||||
id: BaseLang
|
||||
name: Base language
|
||||
description: Base language description.
|
||||
abstract: true
|
||||
needtts: true
|
||||
obfuscation:
|
||||
!type:ReplacementObfuscation
|
||||
replacement:
|
||||
- base
|
||||
icon:
|
||||
sprite: /Textures/_WL/Interface/Languages/languages.rsi
|
||||
state: default
|
||||
|
||||
- type: language
|
||||
id: Translate
|
||||
name: language-translate
|
||||
@@ -99,31 +85,33 @@
|
||||
color: '#ede028'
|
||||
keylang: 'у'
|
||||
obfuscation:
|
||||
!type:WordsReplacementObfuscation
|
||||
!type:ByCharReplacementObfuscation
|
||||
replacement:
|
||||
- weh
|
||||
- sswah
|
||||
- hassi
|
||||
- shis
|
||||
- khwasi
|
||||
- ashwa
|
||||
- ihhsa
|
||||
- assihi
|
||||
- hissa
|
||||
- essewa
|
||||
- wssahhi
|
||||
- ehess
|
||||
- hesso
|
||||
- awsssai
|
||||
- essewa
|
||||
- ssihisa
|
||||
- shirskl
|
||||
- we
|
||||
- s
|
||||
- i
|
||||
- ss
|
||||
- te
|
||||
- re
|
||||
- so
|
||||
- tsso
|
||||
- tesso
|
||||
- asi
|
||||
- attater
|
||||
- he
|
||||
- su
|
||||
- ky
|
||||
- i
|
||||
- s
|
||||
- w
|
||||
- e
|
||||
- h
|
||||
- h
|
||||
- weh
|
||||
- l
|
||||
- s
|
||||
- o
|
||||
- f
|
||||
- h
|
||||
- k
|
||||
- c
|
||||
- r
|
||||
icon:
|
||||
sprite: /Textures/_WL/Interface/Languages/languages.rsi
|
||||
state: unati
|
||||
@@ -176,8 +164,11 @@
|
||||
description: language-weaver-desc
|
||||
color: '#f5ee8c'
|
||||
keylang: 'н'
|
||||
emoting: true
|
||||
radioPass: .9
|
||||
pressurePass: .4
|
||||
obfuscation:
|
||||
!type:EmoteObfuscation
|
||||
!type:LengthObfuscation
|
||||
replacement:
|
||||
- пищит
|
||||
- щебечет
|
||||
@@ -195,7 +186,7 @@
|
||||
color: '#03b5fc'
|
||||
keylang: 'а'
|
||||
needtts: false
|
||||
needsound: true
|
||||
customSound: true
|
||||
sound:
|
||||
collection: TernarySounds
|
||||
obfuscation:
|
||||
@@ -214,8 +205,11 @@
|
||||
description: language-rootspeak-desc
|
||||
color: '#309100'
|
||||
keylang: 'д'
|
||||
emoting: true
|
||||
radioPass: .3
|
||||
pressurePass: .4
|
||||
obfuscation:
|
||||
!type:EmoteObfuscation
|
||||
!type:LengthObfuscation
|
||||
replacement:
|
||||
- шуршит
|
||||
- трещит ветками
|
||||
@@ -232,8 +226,9 @@
|
||||
color: "#8bebb3"
|
||||
keylang: 'с'
|
||||
needtts: false
|
||||
emoting: true
|
||||
obfuscation:
|
||||
!type:EmoteObfuscation
|
||||
!type:LengthObfuscation
|
||||
replacement:
|
||||
- булькает
|
||||
- несколько раз булькает
|
||||
@@ -276,33 +271,33 @@
|
||||
sprite: /Textures/_WL/Interface/Languages/languages.rsi
|
||||
state: vox
|
||||
|
||||
- type: entity
|
||||
parent: MobDebugRandomCounter
|
||||
id: MobDebugCounterLanguageSmart
|
||||
name: language tester
|
||||
description: He can language
|
||||
suffix: DEBUG, LANG
|
||||
components:
|
||||
- type: Languages
|
||||
understood:
|
||||
- Translate
|
||||
- OldEarth
|
||||
- SintaUnati
|
||||
- Sarengis
|
||||
- Weaver
|
||||
- Ternary
|
||||
- RootSpeak
|
||||
- Slimish
|
||||
- VoxPigin
|
||||
- Kuniluc
|
||||
speaking:
|
||||
- Translate
|
||||
- OldEarth
|
||||
- SintaUnati
|
||||
- Sarengis
|
||||
- Weaver
|
||||
- Ternary
|
||||
- RootSpeak
|
||||
- Slimish
|
||||
- VoxPigin
|
||||
- Kuniluc
|
||||
- type: language
|
||||
id: Urlum
|
||||
name: language-urlum
|
||||
description: language-urlum-desc
|
||||
color: "#999999"
|
||||
keylang: 'м'
|
||||
needtts: false
|
||||
emoting: true
|
||||
obfuscation:
|
||||
!type:LengthObfuscation
|
||||
replacement:
|
||||
- слегка попискивает
|
||||
- пищит
|
||||
icon:
|
||||
sprite: /Textures/_WL/Interface/Languages/languages.rsi
|
||||
state: murine
|
||||
|
||||
- type: language
|
||||
id: SikTair
|
||||
name: language-siktair
|
||||
description: language-siktair-desc
|
||||
color: '#00ccaa'
|
||||
keylang: 'я'
|
||||
obfuscation:
|
||||
!type:Utf16ReplacementObfuscation
|
||||
utf16start: 224
|
||||
utf16end: 382
|
||||
icon:
|
||||
sprite: /Textures/_WL/Interface/Languages/languages.rsi
|
||||
state: default
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
# science
|
||||
SeniorResearcher: [ 1, 1 ]
|
||||
Scientist: [ 2, 2 ]
|
||||
Scientist: [ 3, 3 ]
|
||||
ResearchAssistant: [ 2, 2 ]
|
||||
|
||||
# security
|
||||
|
||||
@@ -1,109 +1,37 @@
|
||||
- type: dungeonRoom
|
||||
id: MaintsPaperZooBottomA
|
||||
size: 3,3
|
||||
size: 6,3
|
||||
atlas: /Maps/_WL/Dungeon/wl_paper_zoo.yml
|
||||
offset: 1,1
|
||||
tags:
|
||||
- StationElementZOOPaperBOTTOM
|
||||
- StationElementZOOPaper
|
||||
|
||||
- type: dungeonRoom
|
||||
id: MaintsPaperZooBottomB
|
||||
size: 3,3
|
||||
size: 6,3
|
||||
atlas: /Maps/_WL/Dungeon/wl_paper_zoo.yml
|
||||
offset: 5,1
|
||||
offset: 8,1
|
||||
tags:
|
||||
- StationElementZOOPaperBOTTOM
|
||||
- StationElementZOOPaper
|
||||
|
||||
- type: dungeonRoom
|
||||
id: MaintsPaperZooBottomC
|
||||
size: 3,3
|
||||
size: 6,3
|
||||
atlas: /Maps/_WL/Dungeon/wl_paper_zoo.yml
|
||||
offset: 9,1
|
||||
offset: 15,1
|
||||
tags:
|
||||
- StationElementZOOPaperBOTTOM
|
||||
|
||||
- type: dungeonRoom
|
||||
id: MaintsPaperZooBottomD
|
||||
size: 3,3
|
||||
atlas: /Maps/_WL/Dungeon/wl_paper_zoo.yml
|
||||
offset: 13,1
|
||||
tags:
|
||||
- StationElementZOOPaperBOTTOM
|
||||
|
||||
- type: dungeonRoom
|
||||
id: MaintsPaperZooBottomE
|
||||
size: 3,3
|
||||
atlas: /Maps/_WL/Dungeon/wl_paper_zoo.yml
|
||||
offset: 17,1
|
||||
tags:
|
||||
- StationElementZOOPaperBOTTOM
|
||||
|
||||
|
||||
|
||||
- type: dungeonRoom
|
||||
id: MaintsPaperZooTopA
|
||||
size: 3,3
|
||||
atlas: /Maps/_WL/Dungeon/wl_paper_zoo.yml
|
||||
offset: 1,5
|
||||
tags:
|
||||
- StationElementZOOPaperTOP
|
||||
|
||||
- type: dungeonRoom
|
||||
id: MaintsPaperZooTopB
|
||||
size: 3,3
|
||||
atlas: /Maps/_WL/Dungeon/wl_paper_zoo.yml
|
||||
offset: 5,5
|
||||
tags:
|
||||
- StationElementZOOPaperTOP
|
||||
|
||||
- type: dungeonRoom
|
||||
id: MaintsPaperZooTopC
|
||||
size: 3,3
|
||||
atlas: /Maps/_WL/Dungeon/wl_paper_zoo.yml
|
||||
offset: 9,5
|
||||
tags:
|
||||
- StationElementZOOPaperTOP
|
||||
|
||||
- type: dungeonRoom
|
||||
id: MaintsPaperZooTopD
|
||||
size: 3,3
|
||||
atlas: /Maps/_WL/Dungeon/wl_paper_zoo.yml
|
||||
offset: 13,5
|
||||
tags:
|
||||
- StationElementZOOPaperTOP
|
||||
|
||||
- type: dungeonRoom
|
||||
id: MaintsPaperZooTopE
|
||||
size: 3,3
|
||||
atlas: /Maps/_WL/Dungeon/wl_paper_zoo.yml
|
||||
offset: 17,5
|
||||
tags:
|
||||
- StationElementZOOPaperTOP
|
||||
|
||||
- StationElementZOOPaper
|
||||
|
||||
|
||||
- type: entity
|
||||
parent: BaseRoomMarker
|
||||
id: StationElementsZOOTOPPaperRoomMarker
|
||||
name: Paper Zoo TOP
|
||||
suffix: 3x3, Paper
|
||||
components:
|
||||
- type: RoomFill
|
||||
minSize: 3,3
|
||||
maxSize: 3,3
|
||||
roomWhitelist:
|
||||
tags:
|
||||
- StationElementZOOPaperTOP
|
||||
|
||||
- type: entity
|
||||
parent: BaseRoomMarker
|
||||
id: StationElementsZOOBOTTOMPaperRoomMarker
|
||||
id: StationElementsZOOPaperRoomMarker
|
||||
name: Paper Zoo BOTTOM
|
||||
suffix: 3x3, Paper
|
||||
suffix: 6x3, Paper
|
||||
components:
|
||||
- type: RoomFill
|
||||
minSize: 3,3
|
||||
maxSize: 3,3
|
||||
minSize: 6,3
|
||||
maxSize: 6,3
|
||||
roomWhitelist:
|
||||
tags:
|
||||
- StationElementZOOPaperBOTTOM
|
||||
- StationElementZOOPaper
|
||||
|
||||
@@ -1 +1,102 @@
|
||||
# If you add a new trait, make sure to add the corresponding component to the whitelist in \Resources\Prototypes\Entities\Mobs\Player\clone.yml so it gets copied to clones correctly!
|
||||
- type: traitCategory
|
||||
id: Languages
|
||||
name: trait-category-languages
|
||||
maxTraitPoints: 2
|
||||
|
||||
- type: trait
|
||||
id: UnSpecie
|
||||
name: trait-language-unspecie
|
||||
description: trait-language-unspecie-desc
|
||||
category: Languages
|
||||
cost: -1
|
||||
whitelist:
|
||||
components:
|
||||
- Languages
|
||||
components:
|
||||
- type: ModifyLanguages
|
||||
specieLanguage: true
|
||||
|
||||
- type: trait
|
||||
id: OldEarth
|
||||
name: trait-language-oldearth
|
||||
description: trait-language-oldearth-desc
|
||||
category: Languages
|
||||
cost: 3
|
||||
whitelist:
|
||||
components:
|
||||
- Languages
|
||||
components:
|
||||
- type: ModifyLanguages
|
||||
languages:
|
||||
- OldEarth
|
||||
|
||||
- type: trait
|
||||
id: SintaUnati
|
||||
name: trait-language-sinta
|
||||
description: trait-language-sinta-desc
|
||||
category: Languages
|
||||
cost: 1
|
||||
whitelist:
|
||||
components:
|
||||
- Languages
|
||||
components:
|
||||
- type: ModifyLanguages
|
||||
languages:
|
||||
- SintaUnati
|
||||
|
||||
- type: trait
|
||||
id: Urhas
|
||||
name: trait-language-urhs
|
||||
description: trait-language-urhs-desc
|
||||
category: Languages
|
||||
cost: 1
|
||||
whitelist:
|
||||
components:
|
||||
- Languages
|
||||
components:
|
||||
- type: ModifyLanguages
|
||||
languages:
|
||||
- Urhas
|
||||
|
||||
- type: trait
|
||||
id: TopTranslate
|
||||
name: trait-language-top
|
||||
description: trait-language-top-desc
|
||||
category: Languages
|
||||
cost: 2
|
||||
whitelist:
|
||||
components:
|
||||
- Languages
|
||||
components:
|
||||
- type: ModifyLanguages
|
||||
languages:
|
||||
- TopTranslate
|
||||
|
||||
- type: trait
|
||||
id: BottomTranslate
|
||||
name: trait-language-bottom
|
||||
description: trait-language-bottom-desc
|
||||
category: Languages
|
||||
cost: 1
|
||||
whitelist:
|
||||
components:
|
||||
- Languages
|
||||
components:
|
||||
- type: ModifyLanguages
|
||||
languages:
|
||||
- BottomTranslate
|
||||
|
||||
- type: trait
|
||||
id: Wingdings
|
||||
name: trait-language-wingdings
|
||||
description: trait-language-wingdings-desc
|
||||
category: Languages
|
||||
cost: 1
|
||||
whitelist:
|
||||
components:
|
||||
- Languages
|
||||
components:
|
||||
- type: ModifyLanguages
|
||||
languages:
|
||||
- Wingdings
|
||||
|
||||
3
Resources/Prototypes/_WL/fonts.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
- type: font
|
||||
id: WingdingsPixel
|
||||
path: /Fonts/_WL/Pixelated-Wingdings.ttf
|
||||
@@ -20,10 +20,7 @@
|
||||
id: MaintsCMOPaper
|
||||
|
||||
- type: Tag
|
||||
id: StationElementZOOPaperTOP
|
||||
|
||||
- type: Tag
|
||||
id: StationElementZOOPaperBOTTOM
|
||||
id: StationElementZOOPaper
|
||||
|
||||
- type: Tag
|
||||
id: MaintsPaperAproved
|
||||
|
||||
|
After Width: | Height: | Size: 352 B |
@@ -23,6 +23,10 @@
|
||||
"name": "equipped-MASK-vox",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "equipped-MASK-moth",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "up-equipped-MASK",
|
||||
"directions": 4
|
||||
@@ -31,6 +35,10 @@
|
||||
"name": "up-equipped-MASK-vox",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "up-equipped-MASK-moth",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
|
||||
|
After Width: | Height: | Size: 355 B |
|
After Width: | Height: | Size: 495 B |
|
After Width: | Height: | Size: 600 B |
@@ -52,6 +52,18 @@
|
||||
{
|
||||
"name": "sareng"
|
||||
},
|
||||
{
|
||||
"name": "top"
|
||||
},
|
||||
{
|
||||
"name": "bottom"
|
||||
},
|
||||
{
|
||||
"name": "hand"
|
||||
},
|
||||
{
|
||||
"name": "urhs"
|
||||
},
|
||||
{
|
||||
"name": "slime"
|
||||
}
|
||||
|
||||
BIN
Resources/Textures/_WL/Interface/Languages/languages.rsi/top.png
Normal file
|
After Width: | Height: | Size: 474 B |
|
After Width: | Height: | Size: 422 B |
BIN
Resources/Textures/_WL/Logo/svin.jpg
Normal file
|
After Width: | Height: | Size: 461 KiB |