Merge pull request #133 from crystallpunk-14/04-05-2024-upstream
04 05 2024 upstream
@@ -2,7 +2,4 @@ using Content.Shared.Station;
|
||||
|
||||
namespace Content.Client.Station;
|
||||
|
||||
public sealed class StationSpawningSystem : SharedStationSpawningSystem
|
||||
{
|
||||
|
||||
}
|
||||
public sealed class StationSpawningSystem : SharedStationSpawningSystem;
|
||||
|
||||
@@ -64,7 +64,8 @@ namespace Content.IntegrationTests.Tests.Utility
|
||||
var testMap = await pair.CreateTestMap();
|
||||
var mapCoordinates = testMap.MapCoords;
|
||||
|
||||
var sEntities = server.ResolveDependency<IEntityManager>();
|
||||
var sEntities = server.EntMan;
|
||||
var sys = server.System<EntityWhitelistSystem>();
|
||||
|
||||
await server.WaitAssertion(() =>
|
||||
{
|
||||
@@ -80,22 +81,14 @@ namespace Content.IntegrationTests.Tests.Utility
|
||||
Components = new[] { $"{ValidComponent}" },
|
||||
Tags = new() { "WhitelistTestValidTag" }
|
||||
};
|
||||
whitelistInst.UpdateRegistrations();
|
||||
Assert.That(whitelistInst, Is.Not.Null);
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(whitelistInst.Components, Is.Not.Null);
|
||||
Assert.That(whitelistInst.Tags, Is.Not.Null);
|
||||
});
|
||||
Assert.That(sys.IsValid(whitelistInst, validComponent), Is.True);
|
||||
Assert.That(sys.IsValid(whitelistInst, WhitelistTestValidTag), Is.True);
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(whitelistInst.IsValid(validComponent), Is.True);
|
||||
Assert.That(whitelistInst.IsValid(WhitelistTestValidTag), Is.True);
|
||||
|
||||
Assert.That(whitelistInst.IsValid(invalidComponent), Is.False);
|
||||
Assert.That(whitelistInst.IsValid(WhitelistTestInvalidTag), Is.False);
|
||||
Assert.That(sys.IsValid(whitelistInst, invalidComponent), Is.False);
|
||||
Assert.That(sys.IsValid(whitelistInst, WhitelistTestInvalidTag), Is.False);
|
||||
});
|
||||
|
||||
// Test from serialized
|
||||
@@ -111,11 +104,11 @@ namespace Content.IntegrationTests.Tests.Utility
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(whitelistSer.IsValid(validComponent), Is.True);
|
||||
Assert.That(whitelistSer.IsValid(WhitelistTestValidTag), Is.True);
|
||||
Assert.That(sys.IsValid(whitelistSer, validComponent), Is.True);
|
||||
Assert.That(sys.IsValid(whitelistSer, WhitelistTestValidTag), Is.True);
|
||||
|
||||
Assert.That(whitelistSer.IsValid(invalidComponent), Is.False);
|
||||
Assert.That(whitelistSer.IsValid(WhitelistTestInvalidTag), Is.False);
|
||||
Assert.That(sys.IsValid(whitelistSer, invalidComponent), Is.False);
|
||||
Assert.That(sys.IsValid(whitelistSer, WhitelistTestInvalidTag), Is.False);
|
||||
});
|
||||
});
|
||||
await pair.CleanReturnAsync();
|
||||
|
||||
@@ -96,6 +96,16 @@ public sealed class AlertLevelSystem : EntitySystem
|
||||
RaiseLocalEvent(new AlertLevelPrototypeReloadedEvent());
|
||||
}
|
||||
|
||||
public string GetLevel(EntityUid station, AlertLevelComponent? alert = null)
|
||||
{
|
||||
if (!Resolve(station, ref alert))
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
return alert.CurrentLevel;
|
||||
}
|
||||
|
||||
public float GetAlertLevelDelay(EntityUid station, AlertLevelComponent? alert = null)
|
||||
{
|
||||
if (!Resolve(station, ref alert))
|
||||
|
||||
@@ -12,9 +12,10 @@ namespace Content.Server.Atmos.Components
|
||||
/// <summary>
|
||||
/// Tool is functional only in allowed slots
|
||||
/// </summary>
|
||||
[DataField("allowedSlots")]
|
||||
[DataField]
|
||||
public SlotFlags AllowedSlots = SlotFlags.MASK | SlotFlags.HEAD;
|
||||
public bool IsFunctional;
|
||||
|
||||
public EntityUid? ConnectedInternalsEntity;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ using Content.Shared.DoAfter;
|
||||
using Content.Shared.Hands.Components;
|
||||
using Content.Shared.Internals;
|
||||
using Content.Shared.Inventory;
|
||||
using Content.Shared.Roles;
|
||||
using Content.Shared.Verbs;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.Utility;
|
||||
@@ -23,17 +24,29 @@ public sealed class InternalsSystem : EntitySystem
|
||||
[Dependency] private readonly InventorySystem _inventory = default!;
|
||||
[Dependency] private readonly PopupSystem _popupSystem = default!;
|
||||
|
||||
public const SlotFlags InventorySlots = SlotFlags.POCKET | SlotFlags.BELT;
|
||||
private EntityQuery<InternalsComponent> _internalsQuery;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
_internalsQuery = GetEntityQuery<InternalsComponent>();
|
||||
|
||||
SubscribeLocalEvent<InternalsComponent, InhaleLocationEvent>(OnInhaleLocation);
|
||||
SubscribeLocalEvent<InternalsComponent, ComponentStartup>(OnInternalsStartup);
|
||||
SubscribeLocalEvent<InternalsComponent, ComponentShutdown>(OnInternalsShutdown);
|
||||
SubscribeLocalEvent<InternalsComponent, GetVerbsEvent<InteractionVerb>>(OnGetInteractionVerbs);
|
||||
SubscribeLocalEvent<InternalsComponent, InternalsDoAfterEvent>(OnDoAfter);
|
||||
|
||||
SubscribeLocalEvent<StartingGearEquippedEvent>(OnStartingGear);
|
||||
}
|
||||
|
||||
private void OnStartingGear(ref StartingGearEquippedEvent ev)
|
||||
{
|
||||
if (!_internalsQuery.TryComp(ev.Entity, out var internals) || internals.BreathToolEntity == null)
|
||||
return;
|
||||
|
||||
ToggleInternals(ev.Entity, ev.Entity, force: false, internals);
|
||||
}
|
||||
|
||||
private void OnGetInteractionVerbs(
|
||||
@@ -217,7 +230,7 @@ public sealed class InternalsSystem : EntitySystem
|
||||
if (component.BreathToolEntity is null || !AreInternalsWorking(component))
|
||||
return 2;
|
||||
|
||||
// If pressure in the tank is below low pressure threshhold, flash warning on internals UI
|
||||
// If pressure in the tank is below low pressure threshold, flash warning on internals UI
|
||||
if (TryComp<GasTankComponent>(component.GasTankEntity, out var gasTank)
|
||||
&& gasTank.IsLowPressure)
|
||||
{
|
||||
|
||||
@@ -26,7 +26,7 @@ public abstract partial class GameRuleSystem<T> : EntitySystem where T : ICompon
|
||||
SubscribeLocalEvent<T, GameRuleAddedEvent>(OnGameRuleAdded);
|
||||
SubscribeLocalEvent<T, GameRuleStartedEvent>(OnGameRuleStarted);
|
||||
SubscribeLocalEvent<T, GameRuleEndedEvent>(OnGameRuleEnded);
|
||||
SubscribeLocalEvent<T, RoundEndTextAppendEvent>(OnRoundEndTextAppend);
|
||||
SubscribeLocalEvent<RoundEndTextAppendEvent>(OnRoundEndTextAppend);
|
||||
}
|
||||
|
||||
private void OnStartAttempt(RoundStartAttemptEvent args)
|
||||
@@ -70,11 +70,16 @@ public abstract partial class GameRuleSystem<T> : EntitySystem where T : ICompon
|
||||
Ended(uid, component, ruleData, args);
|
||||
}
|
||||
|
||||
private void OnRoundEndTextAppend(Entity<T> ent, ref RoundEndTextAppendEvent args)
|
||||
private void OnRoundEndTextAppend(RoundEndTextAppendEvent ev)
|
||||
{
|
||||
if (!TryComp<GameRuleComponent>(ent, out var ruleData))
|
||||
return;
|
||||
AppendRoundEndText(ent, ent, ruleData, ref args);
|
||||
var query = AllEntityQuery<T>();
|
||||
while (query.MoveNext(out var uid, out var comp))
|
||||
{
|
||||
if (!TryComp<GameRuleComponent>(uid, out var ruleData))
|
||||
continue;
|
||||
|
||||
AppendRoundEndText(uid, comp, ruleData, ref ev);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Content.Server.Actions;
|
||||
using Content.Server.Polymorph.Systems;
|
||||
using Content.Shared.Zombies;
|
||||
using Content.Server.Actions;
|
||||
using Content.Server.Popups;
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.Geras;
|
||||
using Robust.Shared.Player;
|
||||
|
||||
@@ -10,8 +10,9 @@ namespace Content.Server.Geras;
|
||||
/// <inheritdoc/>
|
||||
public sealed class GerasSystem : SharedGerasSystem
|
||||
{
|
||||
[Dependency] private readonly ActionsSystem _actionsSystem = default!;
|
||||
[Dependency] private readonly PolymorphSystem _polymorphSystem = default!;
|
||||
[Dependency] private readonly MetaDataSystem _metaDataSystem = default!;
|
||||
[Dependency] private readonly ActionsSystem _actionsSystem = default!;
|
||||
[Dependency] private readonly PopupSystem _popupSystem = default!;
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -19,6 +20,12 @@ public sealed class GerasSystem : SharedGerasSystem
|
||||
{
|
||||
SubscribeLocalEvent<GerasComponent, MorphIntoGeras>(OnMorphIntoGeras);
|
||||
SubscribeLocalEvent<GerasComponent, MapInitEvent>(OnMapInit);
|
||||
SubscribeLocalEvent<GerasComponent, EntityZombifiedEvent>(OnZombification);
|
||||
}
|
||||
|
||||
private void OnZombification(EntityUid uid, GerasComponent component, EntityZombifiedEvent args)
|
||||
{
|
||||
_actionsSystem.RemoveAction(uid, component.GerasActionEntity);
|
||||
}
|
||||
|
||||
private void OnMapInit(EntityUid uid, GerasComponent component, MapInitEvent args)
|
||||
@@ -29,6 +36,9 @@ public sealed class GerasSystem : SharedGerasSystem
|
||||
|
||||
private void OnMorphIntoGeras(EntityUid uid, GerasComponent component, MorphIntoGeras args)
|
||||
{
|
||||
if (HasComp<ZombieComponent>(uid))
|
||||
return; // i hate zomber.
|
||||
|
||||
var ent = _polymorphSystem.PolymorphEntity(uid, component.GerasPolymorphId);
|
||||
|
||||
if (!ent.HasValue)
|
||||
@@ -36,6 +46,7 @@ public sealed class GerasSystem : SharedGerasSystem
|
||||
|
||||
_popupSystem.PopupEntity(Loc.GetString("geras-popup-morph-message-others", ("entity", ent.Value)), ent.Value, Filter.PvsExcept(ent.Value), true);
|
||||
_popupSystem.PopupEntity(Loc.GetString("geras-popup-morph-message-user"), ent.Value, ent.Value);
|
||||
|
||||
args.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,5 +32,11 @@ namespace Content.Server.Speech.Components
|
||||
{
|
||||
[DataField("accent", customTypeSerializer: typeof(PrototypeIdSerializer<ReplacementAccentPrototype>), required: true)]
|
||||
public string Accent = default!;
|
||||
|
||||
/// <summary>
|
||||
/// Allows you to substitute words, not always, but with some chance
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public float ReplacementChance = 1f;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,9 @@ namespace Content.Server.Speech.EntitySystems
|
||||
|
||||
private void OnAccent(EntityUid uid, ReplacementAccentComponent component, AccentGetEvent args)
|
||||
{
|
||||
if (!_random.Prob(component.ReplacementChance))
|
||||
return;
|
||||
|
||||
args.Message = ApplyReplacements(args.Message, component.Accent);
|
||||
}
|
||||
|
||||
@@ -46,6 +49,12 @@ namespace Content.Server.Speech.EntitySystems
|
||||
if (prototype.WordReplacements == null)
|
||||
return message;
|
||||
|
||||
// Prohibition of repeated word replacements.
|
||||
// All replaced words placed in the final message are placed here as dashes (___) with the same length.
|
||||
// The regex search goes through this buffer message, from which the already replaced words are crossed out,
|
||||
// ensuring that the replaced words cannot be replaced again.
|
||||
var maskMessage = message;
|
||||
|
||||
foreach (var (first, replace) in prototype.WordReplacements)
|
||||
{
|
||||
var f = _loc.GetString(first);
|
||||
@@ -53,10 +62,10 @@ namespace Content.Server.Speech.EntitySystems
|
||||
// this is kind of slow but its not that bad
|
||||
// essentially: go over all matches, try to match capitalization where possible, then replace
|
||||
// rather than using regex.replace
|
||||
for (int i = Regex.Count(message, $@"(?<!\w){f}(?!\w)", RegexOptions.IgnoreCase); i > 0; i--)
|
||||
for (int i = Regex.Count(maskMessage, $@"(?<!\w){f}(?!\w)", RegexOptions.IgnoreCase); i > 0; i--)
|
||||
{
|
||||
// fetch the match again as the character indices may have changed
|
||||
Match match = Regex.Match(message, $@"(?<!\w){f}(?!\w)", RegexOptions.IgnoreCase);
|
||||
Match match = Regex.Match(maskMessage, $@"(?<!\w){f}(?!\w)", RegexOptions.IgnoreCase);
|
||||
var replacement = r;
|
||||
|
||||
// Intelligently replace capitalization
|
||||
@@ -80,6 +89,8 @@ namespace Content.Server.Speech.EntitySystems
|
||||
|
||||
// In-place replace the match with the transformed capitalization replacement
|
||||
message = message.Remove(match.Index, match.Length).Insert(match.Index, replacement);
|
||||
string mask = new string('_', match.Length);
|
||||
maskMessage = message.Remove(match.Index, match.Length).Insert(match.Index, mask);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@ public sealed class StationSpawningSystem : SharedStationSpawningSystem
|
||||
/// <inheritdoc/>
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
Subs.CVar(_configurationManager, CCVars.ICRandomCharacters, e => _randomizeCharacters = e, true);
|
||||
|
||||
_spawnerCallbacks = new Dictionary<SpawnPriorityPreference, Action<PlayerSpawningEvent>>()
|
||||
@@ -181,7 +182,7 @@ public sealed class StationSpawningSystem : SharedStationSpawningSystem
|
||||
if (prototype?.StartingGear != null)
|
||||
{
|
||||
var startingGear = _prototypeManager.Index<StartingGearPrototype>(prototype.StartingGear);
|
||||
EquipStartingGear(entity.Value, startingGear);
|
||||
EquipStartingGear(entity.Value, startingGear, raiseEvent: false);
|
||||
}
|
||||
|
||||
// Run loadouts after so stuff like storage loadouts can get
|
||||
@@ -217,11 +218,14 @@ public sealed class StationSpawningSystem : SharedStationSpawningSystem
|
||||
}
|
||||
|
||||
// Handle any extra data here.
|
||||
EquipStartingGear(entity.Value, startingGear);
|
||||
EquipStartingGear(entity.Value, startingGear, raiseEvent: false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var gearEquippedEv = new StartingGearEquippedEvent(entity.Value);
|
||||
RaiseLocalEvent(entity.Value, ref gearEquippedEv, true);
|
||||
|
||||
if (profile != null)
|
||||
{
|
||||
if (prototype != null)
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
using Content.Server.StationEvents.Events;
|
||||
using Content.Server.AlertLevel;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server.StationEvents.Components;
|
||||
|
||||
[RegisterComponent, Access(typeof(AlertLevelInterceptionRule))]
|
||||
public sealed partial class AlertLevelInterceptionRuleComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// Alert level to set the station to when the event starts.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public string AlertLevel = "blue";
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using Content.Server.GameTicking.Components;
|
||||
using Content.Server.StationEvents.Components;
|
||||
using Content.Server.AlertLevel;
|
||||
|
||||
namespace Content.Server.StationEvents.Events;
|
||||
|
||||
public sealed class AlertLevelInterceptionRule : StationEventSystem<AlertLevelInterceptionRuleComponent>
|
||||
{
|
||||
[Dependency] private readonly AlertLevelSystem _alertLevelSystem = default!;
|
||||
|
||||
protected override void Started(EntityUid uid, AlertLevelInterceptionRuleComponent component, GameRuleComponent gameRule,
|
||||
GameRuleStartedEvent args)
|
||||
{
|
||||
base.Started(uid, component, gameRule, args);
|
||||
|
||||
if (!TryGetRandomStation(out var chosenStation))
|
||||
return;
|
||||
if (_alertLevelSystem.GetLevel(chosenStation.Value) != "green")
|
||||
return;
|
||||
|
||||
_alertLevelSystem.SetLevel(chosenStation.Value, component.AlertLevel, true, true, true);
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ using Content.Shared.Actions;
|
||||
namespace Content.Shared.Geras;
|
||||
|
||||
/// <summary>
|
||||
/// A Geras is the small morph of a slime. This system handles exactly that.
|
||||
/// Geras is the god of old age, and A geras is the small morph of a slime. This system allows the slimes to have the morphing action.
|
||||
/// </summary>
|
||||
public abstract class SharedGerasSystem : EntitySystem
|
||||
{
|
||||
|
||||
@@ -151,7 +151,6 @@ public partial class InventorySystem : EntitySystem
|
||||
slotDefinitions = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
slotDefinitions = inv.Slots;
|
||||
return true;
|
||||
}
|
||||
|
||||
10
Content.Shared/Roles/StartingGearEquippedEvent.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace Content.Shared.Roles;
|
||||
|
||||
/// <summary>
|
||||
/// Raised directed on an entity when a new starting gear prototype has been equipped.
|
||||
/// </summary>
|
||||
[ByRefEvent]
|
||||
public record struct StartingGearEquippedEvent(EntityUid Entity)
|
||||
{
|
||||
public readonly EntityUid Entity = Entity;
|
||||
}
|
||||
@@ -17,12 +17,24 @@ public abstract class SharedStationSpawningSystem : EntitySystem
|
||||
[Dependency] private readonly SharedStorageSystem _storage = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _xformSystem = default!;
|
||||
|
||||
private EntityQuery<HandsComponent> _handsQuery;
|
||||
private EntityQuery<InventoryComponent> _inventoryQuery;
|
||||
private EntityQuery<StorageComponent> _storageQuery;
|
||||
private EntityQuery<TransformComponent> _xformQuery;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
_handsQuery = GetEntityQuery<HandsComponent>();
|
||||
_inventoryQuery = GetEntityQuery<InventoryComponent>();
|
||||
_storageQuery = GetEntityQuery<StorageComponent>();
|
||||
_xformQuery = GetEntityQuery<TransformComponent>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Equips starting gear onto the given entity.
|
||||
/// <see cref="EquipStartingGear(Robust.Shared.GameObjects.EntityUid,System.Nullable{Robust.Shared.Prototypes.ProtoId{Content.Shared.Roles.StartingGearPrototype}},bool)"/>
|
||||
/// </summary>
|
||||
/// <param name="entity">Entity to load out.</param>
|
||||
/// <param name="startingGear">Starting gear to use.</param>
|
||||
public void EquipStartingGear(EntityUid entity, ProtoId<StartingGearPrototype>? startingGear)
|
||||
public void EquipStartingGear(EntityUid entity, ProtoId<StartingGearPrototype>? startingGear, bool raiseEvent = true)
|
||||
{
|
||||
PrototypeManager.TryIndex(startingGear, out var gearProto);
|
||||
EquipStartingGear(entity, gearProto);
|
||||
@@ -33,11 +45,14 @@ public abstract class SharedStationSpawningSystem : EntitySystem
|
||||
/// </summary>
|
||||
/// <param name="entity">Entity to load out.</param>
|
||||
/// <param name="startingGear">Starting gear to use.</param>
|
||||
public void EquipStartingGear(EntityUid entity, StartingGearPrototype? startingGear)
|
||||
/// <param name="raiseEvent">Should we raise the event for equipped. Set to false if you will call this manually</param>
|
||||
public void EquipStartingGear(EntityUid entity, StartingGearPrototype? startingGear, bool raiseEvent = true)
|
||||
{
|
||||
if (startingGear == null)
|
||||
return;
|
||||
|
||||
var xform = _xformQuery.GetComponent(entity);
|
||||
|
||||
if (InventorySystem.TryGetSlots(entity, out var slotDefinitions))
|
||||
{
|
||||
foreach (var slot in slotDefinitions)
|
||||
@@ -45,16 +60,16 @@ public abstract class SharedStationSpawningSystem : EntitySystem
|
||||
var equipmentStr = startingGear.GetGear(slot.Name);
|
||||
if (!string.IsNullOrEmpty(equipmentStr))
|
||||
{
|
||||
var equipmentEntity = EntityManager.SpawnEntity(equipmentStr, EntityManager.GetComponent<TransformComponent>(entity).Coordinates);
|
||||
var equipmentEntity = EntityManager.SpawnEntity(equipmentStr, xform.Coordinates);
|
||||
InventorySystem.TryEquip(entity, equipmentEntity, slot.Name, silent: true, force:true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (TryComp(entity, out HandsComponent? handsComponent))
|
||||
if (_handsQuery.TryComp(entity, out var handsComponent))
|
||||
{
|
||||
var inhand = startingGear.Inhand;
|
||||
var coords = EntityManager.GetComponent<TransformComponent>(entity).Coordinates;
|
||||
var coords = xform.Coordinates;
|
||||
foreach (var prototype in inhand)
|
||||
{
|
||||
var inhandEntity = EntityManager.SpawnEntity(prototype, coords);
|
||||
@@ -70,7 +85,7 @@ public abstract class SharedStationSpawningSystem : EntitySystem
|
||||
{
|
||||
var coords = _xformSystem.GetMapCoordinates(entity);
|
||||
var ents = new ValueList<EntityUid>();
|
||||
TryComp(entity, out InventoryComponent? inventoryComp);
|
||||
_inventoryQuery.TryComp(entity, out var inventoryComp);
|
||||
|
||||
foreach (var (slot, entProtos) in startingGear.Storage)
|
||||
{
|
||||
@@ -84,7 +99,7 @@ public abstract class SharedStationSpawningSystem : EntitySystem
|
||||
|
||||
if (inventoryComp != null &&
|
||||
InventorySystem.TryGetSlotEntity(entity, slot, out var slotEnt, inventoryComponent: inventoryComp) &&
|
||||
TryComp(slotEnt, out StorageComponent? storage))
|
||||
_storageQuery.TryComp(slotEnt, out var storage))
|
||||
{
|
||||
foreach (var ent in ents)
|
||||
{
|
||||
@@ -93,5 +108,11 @@ public abstract class SharedStationSpawningSystem : EntitySystem
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (raiseEvent)
|
||||
{
|
||||
var ev = new StartingGearEquippedEvent(entity);
|
||||
RaiseLocalEvent(entity, ref ev, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
@@ -185,6 +186,7 @@ public sealed class TagSystem : EntitySystem
|
||||
/// <summary>
|
||||
/// Checks if a tag has been added to an entity.
|
||||
/// </summary>
|
||||
[Obsolete]
|
||||
public bool HasTag(EntityUid entity, string id, EntityQuery<TagComponent> tagQuery)
|
||||
{
|
||||
return tagQuery.TryGetComponent(entity, out var component) &&
|
||||
@@ -243,7 +245,7 @@ public sealed class TagSystem : EntitySystem
|
||||
/// </exception>
|
||||
public bool HasAllTags(EntityUid entity, List<ProtoId<TagPrototype>> ids)
|
||||
{
|
||||
return TryComp<TagComponent>(entity, out var component) &&
|
||||
return _tagQuery.TryComp(entity, out var component) &&
|
||||
HasAllTags(component, ids);
|
||||
}
|
||||
|
||||
@@ -521,16 +523,18 @@ public sealed class TagSystem : EntitySystem
|
||||
/// </exception>
|
||||
public bool HasAllTags(TagComponent component, List<ProtoId<TagPrototype>> ids)
|
||||
{
|
||||
var stringIds = new List<string>();
|
||||
foreach (var tag in ids)
|
||||
foreach (var id in ids)
|
||||
{
|
||||
stringIds.Add(tag.Id);
|
||||
AssertValidTag(id);
|
||||
|
||||
if (!component.Tags.Contains(id))
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
return HasAllTags(component, stringIds);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Checks if any of the given tags have been added.
|
||||
/// </summary>
|
||||
@@ -552,7 +556,6 @@ public sealed class TagSystem : EntitySystem
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Checks if any of the given tags have been added.
|
||||
/// </summary>
|
||||
@@ -619,13 +622,15 @@ public sealed class TagSystem : EntitySystem
|
||||
/// </exception>
|
||||
public bool HasAnyTag(TagComponent comp, List<ProtoId<TagPrototype>> ids)
|
||||
{
|
||||
var stringIds = new List<string>();
|
||||
foreach (var tag in ids)
|
||||
foreach (var id in ids)
|
||||
{
|
||||
stringIds.Add(tag.Id);
|
||||
AssertValidTag(id);
|
||||
|
||||
if (comp.Tags.Contains(id))
|
||||
return true;
|
||||
}
|
||||
|
||||
return HasAnyTag(comp, stringIds);
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -5,6 +5,7 @@ using Content.Shared.Hands;
|
||||
using Content.Shared.Hands.Components;
|
||||
using Content.Shared.Hands.EntitySystems;
|
||||
using Content.Shared.Interaction;
|
||||
using Content.Shared.Interaction.Events;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.Verbs;
|
||||
using Robust.Shared.Containers;
|
||||
@@ -27,6 +28,7 @@ public sealed partial class ActivatableUISystem : EntitySystem
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<ActivatableUIComponent, UseInHandEvent>(OnUseInHand);
|
||||
SubscribeLocalEvent<ActivatableUIComponent, ActivateInWorldEvent>(OnActivate);
|
||||
SubscribeLocalEvent<ActivatableUIComponent, InteractUsingEvent>(OnInteractUsing);
|
||||
SubscribeLocalEvent<ActivatableUIComponent, HandDeselectedEvent>(OnHandDeselected);
|
||||
@@ -99,6 +101,9 @@ public sealed partial class ActivatableUISystem : EntitySystem
|
||||
if (!args.CanAccess)
|
||||
return false;
|
||||
|
||||
if (!component.RequiredItems?.IsValid(args.Using ?? default, EntityManager) ?? false)
|
||||
return false;
|
||||
|
||||
if (component.RequireHands)
|
||||
{
|
||||
if (args.Hands == null)
|
||||
@@ -117,6 +122,20 @@ public sealed partial class ActivatableUISystem : EntitySystem
|
||||
return args.CanInteract || component.AllowSpectator && HasComp<GhostComponent>(args.User);
|
||||
}
|
||||
|
||||
private void OnUseInHand(EntityUid uid, ActivatableUIComponent component, UseInHandEvent args)
|
||||
{
|
||||
if (args.Handled)
|
||||
return;
|
||||
|
||||
if (component.VerbOnly)
|
||||
return;
|
||||
|
||||
if (component.RequiredItems != null)
|
||||
return;
|
||||
|
||||
args.Handled = InteractUI(args.User, uid, component);
|
||||
}
|
||||
|
||||
private void OnActivate(EntityUid uid, ActivatableUIComponent component, ActivateInWorldEvent args)
|
||||
{
|
||||
if (args.Handled)
|
||||
|
||||
@@ -38,8 +38,8 @@ public sealed partial class EntityWhitelist
|
||||
[DataField]
|
||||
public List<ProtoId<ItemSizePrototype>>? Sizes;
|
||||
|
||||
[NonSerialized]
|
||||
private List<ComponentRegistration>? _registrations;
|
||||
[NonSerialized, Access(typeof(EntityWhitelistSystem))]
|
||||
public List<ComponentRegistration>? Registrations;
|
||||
|
||||
/// <summary>
|
||||
/// Tags that are allowed in the whitelist.
|
||||
@@ -55,67 +55,13 @@ public sealed partial class EntityWhitelist
|
||||
[DataField]
|
||||
public bool RequireAll;
|
||||
|
||||
public void UpdateRegistrations()
|
||||
[Obsolete("Use WhitelistSystem")]
|
||||
public bool IsValid(EntityUid uid, IEntityManager? man = null)
|
||||
{
|
||||
var sys = man?.System<EntityWhitelistSystem>() ??
|
||||
IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<EntityWhitelistSystem>();
|
||||
|
||||
if (Components == null)
|
||||
return;
|
||||
return sys.IsValid(this, uid);
|
||||
|
||||
var compFact = IoCManager.Resolve<IComponentFactory>();
|
||||
_registrations = new List<ComponentRegistration>();
|
||||
foreach (var name in Components)
|
||||
{
|
||||
var availability = compFact.GetComponentAvailability(name);
|
||||
if (compFact.TryGetRegistration(name, out var registration)
|
||||
&& availability == ComponentAvailability.Available)
|
||||
{
|
||||
_registrations.Add(registration);
|
||||
}
|
||||
else if (availability == ComponentAvailability.Unknown)
|
||||
{
|
||||
Logger.Warning($"Unknown component name {name} passed to EntityWhitelist!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns whether a given entity fits the whitelist.
|
||||
/// </summary>
|
||||
public bool IsValid(EntityUid uid, IEntityManager? entityManager = null)
|
||||
{
|
||||
if (Components != null && _registrations == null)
|
||||
UpdateRegistrations();
|
||||
|
||||
IoCManager.Resolve(ref entityManager);
|
||||
if (_registrations != null)
|
||||
{
|
||||
foreach (var reg in _registrations)
|
||||
{
|
||||
if (entityManager.HasComponent(uid, reg.Type))
|
||||
{
|
||||
if (!RequireAll)
|
||||
return true;
|
||||
}
|
||||
else if (RequireAll)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (Sizes != null && entityManager.TryGetComponent(uid, out ItemComponent? itemComp))
|
||||
{
|
||||
if (Sizes.Contains(itemComp.Size))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (Tags != null && entityManager.TryGetComponent(uid, out TagComponent? tags))
|
||||
{
|
||||
var tagSystem = entityManager.System<TagSystem>();
|
||||
return RequireAll ? tagSystem.HasAllTags(tags, Tags) : tagSystem.HasAnyTag(tags, Tags);
|
||||
}
|
||||
|
||||
if (RequireAll)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
84
Content.Shared/Whitelist/EntityWhitelistSystem.cs
Normal file
@@ -0,0 +1,84 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using Content.Shared.Item;
|
||||
using Content.Shared.Tag;
|
||||
|
||||
namespace Content.Shared.Whitelist;
|
||||
|
||||
public sealed class EntityWhitelistSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly IComponentFactory _factory = default!;
|
||||
[Dependency] private readonly TagSystem _tag = default!;
|
||||
|
||||
private EntityQuery<ItemComponent> _itemQuery;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
_itemQuery = GetEntityQuery<ItemComponent>();
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="IsValid(Content.Shared.Whitelist.EntityWhitelist,Robust.Shared.GameObjects.EntityUid)"/>
|
||||
public bool IsValid(EntityWhitelist list, [NotNullWhen(true)] EntityUid? uid)
|
||||
{
|
||||
return uid != null && IsValid(list, uid.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks whether a given entity satisfies a whitelist.
|
||||
/// </summary>
|
||||
public bool IsValid(EntityWhitelist list, EntityUid uid)
|
||||
{
|
||||
if (list.Components != null)
|
||||
EnsureRegistrations(list);
|
||||
|
||||
if (list.Registrations != null)
|
||||
{
|
||||
foreach (var reg in list.Registrations)
|
||||
{
|
||||
if (HasComp(uid, reg.Type))
|
||||
{
|
||||
if (!list.RequireAll)
|
||||
return true;
|
||||
}
|
||||
else if (list.RequireAll)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (list.Sizes != null && _itemQuery.TryComp(uid, out var itemComp))
|
||||
{
|
||||
if (list.Sizes.Contains(itemComp.Size))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (list.Tags != null)
|
||||
{
|
||||
return list.RequireAll
|
||||
? _tag.HasAllTags(uid, list.Tags)
|
||||
: _tag.HasAnyTag(uid, list.Tags);
|
||||
}
|
||||
|
||||
return list.RequireAll;
|
||||
}
|
||||
|
||||
private void EnsureRegistrations(EntityWhitelist list)
|
||||
{
|
||||
if (list.Components == null)
|
||||
return;
|
||||
|
||||
list.Registrations = new List<ComponentRegistration>();
|
||||
foreach (var name in list.Components)
|
||||
{
|
||||
var availability = _factory.GetComponentAvailability(name);
|
||||
if (_factory.TryGetRegistration(name, out var registration)
|
||||
&& availability == ComponentAvailability.Available)
|
||||
{
|
||||
list.Registrations.Add(registration);
|
||||
}
|
||||
else if (availability == ComponentAvailability.Unknown)
|
||||
{
|
||||
Log.Warning($"Unknown component name {name} passed to EntityWhitelist!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -42,3 +42,8 @@
|
||||
license: "CC-BY-SA-3.0"
|
||||
copyright: "Paradise, volume and pitch changed, merged with redalert.ogg"
|
||||
source: "https://github.com/ParadiseSS13/Paradise/blob/07b26ee6b4a11a0607986d322ee007020569feae/sound/effects/siren.ogg"
|
||||
|
||||
- files: ["intercept.ogg"]
|
||||
license: "CC-BY-SA-3.0"
|
||||
copyright: "Taken from tgstation"
|
||||
source: "https://github.com/tgstation/tgstation/blob/95731342b97167d7883ff091d389f79c36442ee6/sound/ai/default/intercept.ogg"
|
||||
|
||||
BIN
Resources/Audio/Announcements/intercept.ogg
Normal file
@@ -1,84 +1,4 @@
|
||||
Entries:
|
||||
- author: metalgearsloth
|
||||
changes:
|
||||
- message: Remove executions pending code rewrite.
|
||||
type: Remove
|
||||
id: 6017
|
||||
time: '2024-02-25T11:36:17.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/25555
|
||||
- author: Krunk
|
||||
changes:
|
||||
- message: Candy bowls function properly again!
|
||||
type: Fix
|
||||
id: 6018
|
||||
time: '2024-02-25T13:08:15.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/25514
|
||||
- author: Whisper
|
||||
changes:
|
||||
- message: Added juice that makes you Weh! Juice a lizard plushie today!
|
||||
type: Add
|
||||
id: 6019
|
||||
time: '2024-02-25T13:54:07.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/25132
|
||||
- author: wafehling
|
||||
changes:
|
||||
- message: Secret mode has become more secret, with the 4th option Survival added
|
||||
to the rotation.
|
||||
type: Tweak
|
||||
id: 6020
|
||||
time: '2024-02-25T21:15:35.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/25568
|
||||
- author: Tayrtahn
|
||||
changes:
|
||||
- message: Added a live preview display to reagent dispensers.
|
||||
type: Add
|
||||
id: 6021
|
||||
time: '2024-02-25T23:03:22.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/25391
|
||||
- author: Krunk
|
||||
changes:
|
||||
- message: Fixed grid inventory occasionally messing with your item rotation.
|
||||
type: Fix
|
||||
id: 6022
|
||||
time: '2024-02-25T23:24:21.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/25510
|
||||
- author: Ubaser
|
||||
changes:
|
||||
- message: Satchels no longer have darkened space representing a gap, and is instead
|
||||
transparent.
|
||||
type: Tweak
|
||||
id: 6023
|
||||
time: '2024-02-25T23:24:59.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/25147
|
||||
- author: TheShuEd
|
||||
changes:
|
||||
- message: Huge flora anomaly nerf
|
||||
type: Tweak
|
||||
id: 6024
|
||||
time: '2024-02-25T23:41:24.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/25499
|
||||
- author: OctoRocket
|
||||
changes:
|
||||
- message: Removed the hands requirement to read paper.
|
||||
type: Tweak
|
||||
id: 6025
|
||||
time: '2024-02-26T02:40:22.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/25580
|
||||
- author: SlamBamActionman
|
||||
changes:
|
||||
- message: Self-uncuff damage has been removed, but attempting to self-uncuff now
|
||||
has a cooldown instead.
|
||||
type: Tweak
|
||||
id: 6026
|
||||
time: '2024-02-26T02:41:20.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/25161
|
||||
- author: deltanedas
|
||||
changes:
|
||||
- message: Traitors can now be asked to steal the CMO's Handheld Crew Monitor.
|
||||
type: Tweak
|
||||
id: 6027
|
||||
time: '2024-02-26T03:40:48.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/25563
|
||||
- author: MACMAN2003
|
||||
changes:
|
||||
- message: You can now make LED light tubes and LED light bulbs at an autolathe.
|
||||
@@ -3860,3 +3780,97 @@
|
||||
id: 6516
|
||||
time: '2024-05-02T17:09:38.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/27628
|
||||
- author: ElectroJr
|
||||
changes:
|
||||
- message: Fixed various interactions not prioritizing opening a UI. No more trying
|
||||
to eat mission critical faxes.
|
||||
type: Fix
|
||||
id: 6517
|
||||
time: '2024-05-02T23:37:21.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/27631
|
||||
- author: Plykiya
|
||||
changes:
|
||||
- message: Blast grenades have had their manufacturing cost tripled.
|
||||
type: Tweak
|
||||
- message: Blast grenades are now part of the Basic Shuttle Armament research and
|
||||
can be printed at the secfab.
|
||||
type: Tweak
|
||||
id: 6518
|
||||
time: '2024-05-03T00:03:52.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/27580
|
||||
- author: Vasilis, Dutch-VanDerLinde
|
||||
changes:
|
||||
- message: A new event has been added, syndicate sleeper agents, which raises the
|
||||
alert level and selects 1-2 players to be traitors rarely throughout the round.
|
||||
type: Add
|
||||
id: 6519
|
||||
time: '2024-05-03T00:13:35.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/27501
|
||||
- author: Errant
|
||||
changes:
|
||||
- message: Space Ninjas now automatically turn their internals on when they spawn.
|
||||
type: Tweak
|
||||
id: 6520
|
||||
time: '2024-05-03T01:24:22.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/25083
|
||||
- author: Hanzdegloker
|
||||
changes:
|
||||
- message: Added 6 new energy drink based mixed drinks.
|
||||
type: Add
|
||||
- message: Added Red Bool energy drink back to the soda dispenser and gave it a
|
||||
new canned sprite.
|
||||
type: Add
|
||||
id: 6521
|
||||
time: '2024-05-03T06:57:37.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/27597
|
||||
- author: DuskyJay
|
||||
changes:
|
||||
- message: Allowed EMP implants to be used while stunned or cuffed.
|
||||
type: Tweak
|
||||
id: 6522
|
||||
time: '2024-05-03T07:51:33.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/27644
|
||||
- author: Just-a-Unity-Dev
|
||||
changes:
|
||||
- message: Fixed Geras not having their speed buff.
|
||||
type: Fix
|
||||
- message: Geras are no longer immune to other AI mobs.
|
||||
type: Fix
|
||||
- message: Slimes can no longer morph into a Geras when zombified.
|
||||
type: Fix
|
||||
- message: Lowered the Geras death threshold.
|
||||
type: Tweak
|
||||
id: 6523
|
||||
time: '2024-05-03T17:26:09.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/27308
|
||||
- author: nikthechampiongr
|
||||
changes:
|
||||
- message: Ninjas will no longer be pointed to random wreckage in space.
|
||||
type: Fix
|
||||
id: 6524
|
||||
time: '2024-05-03T20:23:43.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/27552
|
||||
- author: Dutch-VanDerLinde
|
||||
changes:
|
||||
- message: Fixed nuclear operatives, zombies, and head revolutionary round end summaries
|
||||
not showing.
|
||||
type: Fix
|
||||
id: 6525
|
||||
time: '2024-05-04T00:03:52.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/27654
|
||||
- author: TheShuEd
|
||||
changes:
|
||||
- message: Added Train station!
|
||||
type: Add
|
||||
id: 6526
|
||||
time: '2024-05-04T11:10:08.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/27534
|
||||
- author: TheShuEd
|
||||
changes:
|
||||
- message: "Added Pathological Liar trait accent. The accent has a 15% chance of\
|
||||
\ inverting your message to the opposite. Replacing \u201CYes\u201D with \u201C\
|
||||
No\u201D, \u201CCan\u201D with \u201Ccan't\u201D and so on."
|
||||
type: Add
|
||||
id: 6527
|
||||
time: '2024-05-04T11:11:46.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/27618
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
marking-VoxFacialHairColonel = Vox Colonel
|
||||
marking-VoxFacialHairFu = Quill Fu
|
||||
marking-VoxFacialHairNeck = Neck Quills
|
||||
marking-VoxFacialHairBeard = Quill Beard
|
||||
marking-VoxFacialHairRuffBeard = Ruff Beard
|
||||
marking-VoxFacialHairBeard = Vox Beard (Quills)
|
||||
marking-VoxFacialHairColonel = Vox Moustache (Colonel)
|
||||
marking-VoxFacialHairFu = Vox Moustache (Quill Fu)
|
||||
marking-VoxFacialHairNeck = Vox Beard (Neck Quills)
|
||||
marking-VoxFacialHairMane = Vox Beard (Mane)
|
||||
|
||||
@@ -1,13 +1,22 @@
|
||||
marking-VoxHairShortQuills = Short Vox Quills
|
||||
marking-VoxHairKingly = Vox Kingly
|
||||
marking-VoxHairAfro = Vox Afro
|
||||
marking-VoxHairMohawk = Vox Mohawk
|
||||
marking-VoxHairYasuhiro = Vox Yasuhiro
|
||||
marking-VoxHairBraids = Vox Braids
|
||||
marking-VoxHairCrestedQuills = Vox Crested Quills
|
||||
marking-VoxHairEmperorQuills = Vox Emperor Quills
|
||||
marking-VoxHairFlowing = Vox Flowing
|
||||
marking-VoxHairHawk = Vox Hawk
|
||||
marking-VoxHairHorns = Vox Horns
|
||||
marking-VoxHairNights = Vox Nights
|
||||
marking-VoxHairSurf = Vox Surf
|
||||
marking-VoxHairCropped = Vox Cropped
|
||||
marking-VoxHairRuffhawk = Vox Ruffhawk
|
||||
marking-VoxHairRows = Vox Rows
|
||||
marking-VoxHairKeelQuills = Vox Keel Quills
|
||||
marking-VoxHairKeetQuills = Vox Keet Quills
|
||||
marking-VoxHairKingly = Vox Kingly
|
||||
marking-VoxHairLongBraid = Vox Long Braid
|
||||
marking-VoxHairMange = Vox Mange
|
||||
marking-VoxHairMohawk = Vox Mohawk
|
||||
marking-VoxHairNights = Vox Nights
|
||||
marking-VoxHairPony = Vox Pony
|
||||
marking-VoxHairRazorClipped = Vox Razor (Clipped)
|
||||
marking-VoxHairRazor = Vox Razor
|
||||
marking-VoxHairSortBraid = Vox Short Braid
|
||||
marking-VoxHairShortQuills = Vox Short Quills
|
||||
marking-VoxHairSurf = Vox Surf
|
||||
marking-VoxHairTielQuills = Vox Tiel Quills
|
||||
marking-VoxHairYasu = Vox Yasuhiro
|
||||
|
||||
@@ -243,6 +243,12 @@ flavor-complex-atomic-cola = like hoarding bottle caps
|
||||
flavor-complex-cuba-libre = like spiked cola
|
||||
flavor-complex-gin-tonic = like spiked lemon-lime soda
|
||||
flavor-complex-screwdriver = like spiked orange juice
|
||||
flavor-complex-vodka-red-bool = like a heart attack
|
||||
flavor-complex-irish-bool = caffine and Ireland
|
||||
flavor-complex-xeno-basher = like killing bugs
|
||||
flavor-complex-budget-insuls-drink = like door hacking
|
||||
flavor-complex-watermelon-wakeup = like a sweet wakeup call
|
||||
flavor-complex-rubberneck = like synthetics
|
||||
flavor-complex-irish-car-bomb = like a spiked cola float
|
||||
flavor-complex-themartinez = like violets and lemon vodka
|
||||
flavor-complex-cogchamp = like brass
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
job-supervisors-centcom = CentCom official
|
||||
job-supervisors-centcom = Central Command
|
||||
job-supervisors-captain = the captain
|
||||
job-supervisors-hop = the head of personnel
|
||||
job-supervisors-hos = the head of security
|
||||
|
||||
11
Resources/Locale/en-US/markings/vox_tattoos.ftl
Normal file
@@ -0,0 +1,11 @@
|
||||
marking-TattooVoxHeartLeftArm-heart_l_arm = Vox Left Arm Tattoo (Heart)
|
||||
marking-TattooVoxHeartLeftArm = Vox Left Arm Tattoo (Heart)
|
||||
|
||||
marking-TattooVoxHeartRightArm-heart_r_arm = Vox Right Arm Tattoo (Heart)
|
||||
marking-TattooVoxHeartRightArm = Vox Right Arm Tattoo (Heart)
|
||||
|
||||
marking-TattooVoxHiveChest-hive_s = Vox Chest Tattoo (hive)
|
||||
marking-TattooVoxHiveChest = Vox Chest Tattoo (hive)
|
||||
|
||||
marking-TattooVoxNightlingChest-nightling_s = Vox Chest Tattoo (nightling)
|
||||
marking-TattooVoxNightlingChest = Vox Chest Tattoo (nightling)
|
||||
@@ -261,3 +261,21 @@ reagent-desc-whiskey-soda = For the more refined griffon.
|
||||
|
||||
reagent-name-white-russian = white russian
|
||||
reagent-desc-white-russian = That's just, like, your opinion, man...
|
||||
|
||||
reagent-name-vodka-red-bool = vodka red bool
|
||||
reagent-desc-vodka-red-bool = Because heart failure and liver failure go hand in hand.
|
||||
|
||||
reagent-name-xeno-basher = xeno basher
|
||||
reagent-desc-xeno-basher = The perfect drink before an expedition.
|
||||
|
||||
reagent-name-irish-bool = irish bool
|
||||
reagent-desc-irish-bool = Like a bool in a Ireland shop.
|
||||
|
||||
reagent-name-budget-insuls = budget insuls
|
||||
reagent-desc-budget-insuls = A tider's preferred drink.
|
||||
|
||||
reagent-name-watermelon-wakeup = watermelon wakeup
|
||||
reagent-desc-watermelon-wakeup = If you want to be awake, this will do it... Also sweet.
|
||||
|
||||
reagent-name-rubberneck = rubberneck
|
||||
reagent-desc-rubberneck = A popular drink amongst those adhering to an all synthetic diet.
|
||||
|
||||
132
Resources/Locale/en-US/speech/speech-liar.ftl
Normal file
@@ -0,0 +1,132 @@
|
||||
liar-word-1 = yes
|
||||
liar-word-replacement-1 = no
|
||||
|
||||
liar-word-2 = no
|
||||
liar-word-replacement-2 = yes
|
||||
|
||||
liar-word-3 = yeah
|
||||
liar-word-replacement-3 = nah
|
||||
|
||||
liar-word-4 = nah
|
||||
liar-word-replacement-4 = yeah
|
||||
|
||||
liar-word-5 = yep
|
||||
liar-word-replacement-5 = nope
|
||||
|
||||
liar-word-6 = nope
|
||||
liar-word-replacement-6 = yep
|
||||
|
||||
liar-word-7 = sure
|
||||
liar-word-replacement-7 = nah
|
||||
|
||||
liar-word-8 = was
|
||||
liar-word-replacement-8 = wasnt
|
||||
|
||||
liar-word-9 = wasnt
|
||||
liar-word-replacement-9 = was
|
||||
|
||||
liar-word-10 = was
|
||||
liar-word-replacement-10 = wasnt
|
||||
|
||||
liar-word-11 = is
|
||||
liar-word-replacement-11 = isnt
|
||||
|
||||
liar-word-12 = will
|
||||
liar-word-replacement-12 = wont
|
||||
|
||||
liar-word-12 = not
|
||||
liar-word-replacement-12 = ""
|
||||
|
||||
liar-word-13 = dont
|
||||
liar-word-replacement-13 = ""
|
||||
|
||||
liar-word-14 = can
|
||||
liar-word-replacement-14 = cant
|
||||
|
||||
liar-word-15 = cant
|
||||
liar-word-replacement-15 = can
|
||||
|
||||
liar-word-16 = should
|
||||
liar-word-replacement-16 = shouldnt
|
||||
|
||||
liar-word-17 = dead
|
||||
liar-word-replacement-17 = alive
|
||||
|
||||
liar-word-18 = alive
|
||||
liar-word-replacement-18 = dead
|
||||
|
||||
liar-word-19 = does
|
||||
liar-word-replacement-19 = doesnt
|
||||
|
||||
liar-word-20 = did
|
||||
liar-word-replacement-20 = didnt
|
||||
|
||||
liar-word-21 = didnt
|
||||
liar-word-replacement-21 = ""
|
||||
|
||||
liar-word-22 = nothing
|
||||
liar-word-replacement-22 = something
|
||||
|
||||
liar-word-23 = something
|
||||
liar-word-replacement-23 = nothing
|
||||
|
||||
liar-word-24 = somebody
|
||||
liar-word-replacement-24 = nobody
|
||||
|
||||
liar-word-25 = nobody
|
||||
liar-word-replacement-25 = somebody
|
||||
|
||||
liar-word-26 = can
|
||||
liar-word-replacement-26 = "can't"
|
||||
|
||||
liar-word-27 = "can't"
|
||||
liar-word-replacement-27 = can
|
||||
|
||||
liar-word-28 = should
|
||||
liar-word-replacement-28 = "shouldn't"
|
||||
|
||||
liar-word-29 = do
|
||||
liar-word-replacement-29 = "don't"
|
||||
|
||||
liar-word-30 = "don't"
|
||||
liar-word-replacement-30 = ""
|
||||
|
||||
liar-word-31 = does
|
||||
liar-word-replacement-31 = "doesn't"
|
||||
|
||||
liar-word-32 = did
|
||||
liar-word-replacement-32 = "didn't"
|
||||
|
||||
liar-word-33 = "didn't"
|
||||
liar-word-replacement-33 = did
|
||||
|
||||
liar-word-34 = ye
|
||||
liar-word-34-2 = ya
|
||||
liar-word-replacement-34 = na
|
||||
|
||||
liar-word-35 = na
|
||||
liar-word-replacement-35 = ye
|
||||
|
||||
liar-word-36 = yuh
|
||||
liar-word-replacement-36 = nuh
|
||||
|
||||
liar-word-37 = nuh
|
||||
liar-word-replacement-37 = yuh
|
||||
|
||||
liar-word-38 = love
|
||||
liar-word-replacement-38 = hate
|
||||
|
||||
liar-word-39 = hate
|
||||
liar-word-replacement-39 = love
|
||||
|
||||
liar-word-40 = like
|
||||
liar-word-replacement-40 = don't like
|
||||
|
||||
liar-word-41 = good
|
||||
liar-word-replacement-41 = bad
|
||||
|
||||
liar-word-42 = bad
|
||||
liar-word-replacement-42 = good
|
||||
|
||||
liar-word-42 = want
|
||||
liar-word-replacement-42 = "don't want"
|
||||
@@ -1 +1 @@
|
||||
station-event-immovable-rod-start-announcement = What the fuck was that?!?
|
||||
station-event-immovable-rod-start-announcement = High velocity unidentified object is on a collision course with the station. Impact imminent.
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
station-event-communication-interception = Attention! Enemy communication intercepted. Security level elevated.
|
||||
@@ -38,3 +38,6 @@ trait-southern-desc = You have a different way of speakin'.
|
||||
|
||||
trait-snoring-name = Snoring
|
||||
trait-snoring-desc = You will snore while sleeping.
|
||||
|
||||
trait-liar-name = Pathological liar
|
||||
trait-liar-desc = You can hardly bring yourself to tell the truth. Sometimes you lie anyway.
|
||||
@@ -425,3 +425,50 @@
|
||||
chatsan-word-42: chatsan-replacement-42
|
||||
chatsan-word-43: chatsan-replacement-43
|
||||
chatsan-word-44: chatsan-replacement-44
|
||||
|
||||
- type: accent
|
||||
id: liar
|
||||
wordReplacements:
|
||||
liar-word-1: liar-word-replacement-1
|
||||
liar-word-2: liar-word-replacement-2
|
||||
liar-word-3: liar-word-replacement-3
|
||||
liar-word-4: liar-word-replacement-4
|
||||
liar-word-5: liar-word-replacement-5
|
||||
liar-word-6: liar-word-replacement-6
|
||||
liar-word-7: liar-word-replacement-7
|
||||
liar-word-8: liar-word-replacement-8
|
||||
liar-word-9: liar-word-replacement-9
|
||||
liar-word-10: liar-word-replacement-10
|
||||
liar-word-11: liar-word-replacement-11
|
||||
liar-word-12: liar-word-replacement-12
|
||||
liar-word-13: liar-word-replacement-13
|
||||
liar-word-14: liar-word-replacement-14
|
||||
liar-word-15: liar-word-replacement-15
|
||||
liar-word-16: liar-word-replacement-16
|
||||
liar-word-17: liar-word-replacement-17
|
||||
liar-word-18: liar-word-replacement-18
|
||||
liar-word-19: liar-word-replacement-19
|
||||
liar-word-20: liar-word-replacement-20
|
||||
liar-word-21: liar-word-replacement-21
|
||||
liar-word-22: liar-word-replacement-22
|
||||
liar-word-23: liar-word-replacement-23
|
||||
liar-word-24: liar-word-replacement-24
|
||||
liar-word-25: liar-word-replacement-25
|
||||
liar-word-26: liar-word-replacement-26
|
||||
liar-word-27: liar-word-replacement-27
|
||||
liar-word-28: liar-word-replacement-28
|
||||
liar-word-29: liar-word-replacement-29
|
||||
liar-word-30: liar-word-replacement-30
|
||||
liar-word-31: liar-word-replacement-31
|
||||
liar-word-32: liar-word-replacement-32
|
||||
liar-word-33: liar-word-replacement-33
|
||||
liar-word-34: liar-word-replacement-34
|
||||
liar-word-34-2: liar-word-replacement-34
|
||||
liar-word-35: liar-word-replacement-35
|
||||
liar-word-36: liar-word-replacement-36
|
||||
liar-word-37: liar-word-replacement-37
|
||||
liar-word-38: liar-word-replacement-38
|
||||
liar-word-39: liar-word-replacement-39
|
||||
liar-word-40: liar-word-replacement-40
|
||||
liar-word-41: liar-word-replacement-41
|
||||
liar-word-42: liar-word-replacement-42
|
||||
@@ -129,6 +129,7 @@
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: InstantAction
|
||||
checkCanInteract: false
|
||||
charges: 3
|
||||
useDelay: 5
|
||||
itemIconStyle: BigAction
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
- DrinkColaBottleFull
|
||||
- DrinkCreamCartonXL
|
||||
- DrinkDrGibbJug
|
||||
- DrinkEnergyDrinkJug
|
||||
- DrinkGreenTeaJug
|
||||
- DrinkIceJug
|
||||
- DrinkJuiceLimeCartonXL
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
DrinkCognacBottleFull: 4
|
||||
DrinkCoconutWaterCarton: 3
|
||||
DrinkColaBottleFull: 4
|
||||
DrinkEnergyDrinkCan: 8
|
||||
DrinkMilkCarton: 2
|
||||
DrinkCreamCarton: 5
|
||||
DrinkGinBottleFull: 3
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
FoodSnackCheesie: 3
|
||||
FoodSnackChips: 3
|
||||
FoodSnackBoritos: 3
|
||||
DrinkEnergyDrinkCan: 4
|
||||
FoodSnackPopcorn: 3
|
||||
FoodSnackEnergy: 3
|
||||
CigPackMixed: 2
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
- DrinkBloodyMaryGlass
|
||||
- DrinkBooger
|
||||
- DrinkBraveBullGlass
|
||||
- BudgetInsulsDrinkGlass
|
||||
- DrinkCarrotJuice
|
||||
- DrinkCoconutRum
|
||||
- DrinkChocolateGlass
|
||||
@@ -57,6 +58,7 @@
|
||||
- DrinkIcedGreenTeaGlass
|
||||
- DrinkIcedBeerGlass
|
||||
- DrinkIceCreamGlass
|
||||
- IrishBoolGlass
|
||||
- DrinkIrishCarBomb
|
||||
- DrinkIrishCoffeeGlass
|
||||
- DrinkLemonadeGlass
|
||||
@@ -78,6 +80,7 @@
|
||||
- DrinkRewriter
|
||||
- DrinkRoyRogersGlass
|
||||
- DrinkRootBeerFloatGlass
|
||||
- RubberneckGlass
|
||||
- DrinkRumGlass
|
||||
- DrinkSakeGlass
|
||||
- DrinkSbitenGlass
|
||||
@@ -91,12 +94,15 @@
|
||||
- DrinkThreeMileIslandGlass
|
||||
- DrinkToxinsSpecialGlass
|
||||
- DrinkVodkaMartiniGlass
|
||||
- DrinkVodkaRedBool
|
||||
- DrinkVodkaTonicGlass
|
||||
- DrinkWatermelonJuice
|
||||
- DrinkWatermelonWakeup
|
||||
- DrinkWhiskeyColaGlass
|
||||
- DrinkWhiskeySodaGlass
|
||||
- DrinkWhiteRussianGlass
|
||||
- DrinkWineGlass
|
||||
- XenoBasherGlass
|
||||
- DrinkShakeBlue
|
||||
- DrinkShakeWhite
|
||||
- DrinkTheMartinez
|
||||
|
||||
@@ -1,27 +1,3 @@
|
||||
- type: marking
|
||||
id: VoxFacialHairColonel
|
||||
bodyPart: FacialHair
|
||||
markingCategory: FacialHair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_facial_hair.rsi
|
||||
state: vox_colonel_s
|
||||
- type: marking
|
||||
id: VoxFacialHairFu
|
||||
bodyPart: FacialHair
|
||||
markingCategory: FacialHair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_facial_hair.rsi
|
||||
state: vox_fu_s
|
||||
- type: marking
|
||||
id: VoxFacialHairNeck
|
||||
bodyPart: FacialHair
|
||||
markingCategory: FacialHair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_facial_hair.rsi
|
||||
state: vox_neck_s
|
||||
- type: marking
|
||||
id: VoxFacialHairBeard
|
||||
bodyPart: FacialHair
|
||||
@@ -29,12 +5,40 @@
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_facial_hair.rsi
|
||||
state: vox_beard_s
|
||||
state: beard_s
|
||||
|
||||
- type: marking
|
||||
id: VoxFacialHairRuffBeard
|
||||
id: VoxFacialHairColonel
|
||||
bodyPart: FacialHair
|
||||
markingCategory: FacialHair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_facial_hair.rsi
|
||||
state: vox_ruff_beard_s
|
||||
state: colonel_s
|
||||
|
||||
- type: marking
|
||||
id: VoxFacialHairFu
|
||||
bodyPart: FacialHair
|
||||
markingCategory: FacialHair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_facial_hair.rsi
|
||||
state: fu_s
|
||||
|
||||
- type: marking
|
||||
id: VoxFacialHairMane
|
||||
bodyPart: FacialHair
|
||||
markingCategory: FacialHair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_facial_hair.rsi
|
||||
state: mane_s
|
||||
|
||||
- type: marking
|
||||
id: VoxFacialHairNeck
|
||||
bodyPart: FacialHair
|
||||
markingCategory: FacialHair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_facial_hair.rsi
|
||||
state: neck_s
|
||||
|
||||
@@ -1,19 +1,3 @@
|
||||
- type: marking
|
||||
id: VoxHairShortQuills
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: vox_shortquills_s
|
||||
- type: marking
|
||||
id: VoxHairKingly
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: vox_kingly_s
|
||||
- type: marking
|
||||
id: VoxHairAfro
|
||||
bodyPart: Hair
|
||||
@@ -21,23 +5,53 @@
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: vox_afro_s
|
||||
state: afro_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairMohawk
|
||||
id: VoxHairBraids
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: vox_mohawk_s
|
||||
state: braid_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairYasuhiro
|
||||
id: VoxHairCrestedQuills
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: vox_yasu_s
|
||||
state: crestedquills_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairEmperorQuills
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: emperorquills_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairFlowing
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: flowing_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairHawk
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: hawk_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairHorns
|
||||
bodyPart: Hair
|
||||
@@ -45,47 +59,44 @@
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: vox_horns_s
|
||||
state: horns_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairNights
|
||||
id: VoxHairKeelQuills
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: vox_nights_s
|
||||
state: keelquills_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairSurf
|
||||
id: VoxHairKeetQuills
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: vox_surf_s
|
||||
state: keetquills_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairCropped
|
||||
id: VoxHairKingly
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: vox_cropped_s
|
||||
state: kingly_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairRuffhawk
|
||||
id: VoxHairLongBraid
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: vox_ruff_hawk_s
|
||||
- type: marking
|
||||
id: VoxHairRows
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: vox_rows_s
|
||||
state: afro_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairMange
|
||||
bodyPart: Hair
|
||||
@@ -93,7 +104,26 @@
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: vox_mange_s
|
||||
state: mange_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairMohawk
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: mohawk_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairNights
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: nights_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairPony
|
||||
bodyPart: Hair
|
||||
@@ -101,4 +131,67 @@
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: vox_pony_s
|
||||
state: ponytail_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairRazorClipped
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: razor_clipped_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairRazor
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: razor_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairSortBraid
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: short_braid_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairShortQuills
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: shortquills_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairSurf
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: surf_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairTielQuills
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: tielquills_s
|
||||
|
||||
- type: marking
|
||||
id: VoxHairYasu
|
||||
bodyPart: Hair
|
||||
markingCategory: Hair
|
||||
speciesRestriction: [Vox]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_hair.rsi
|
||||
state: yasu_s
|
||||
@@ -0,0 +1,55 @@
|
||||
- type: marking
|
||||
id: TattooVoxHeartLeftArm
|
||||
bodyPart: LArm
|
||||
markingCategory: Arms
|
||||
speciesRestriction: [Vox]
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:TattooColoring
|
||||
fallbackColor: "#666666"
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_tattoos.rsi
|
||||
state: heart_l_arm
|
||||
|
||||
- type: marking
|
||||
id: TattooVoxHeartRightArm
|
||||
bodyPart: RArm
|
||||
markingCategory: Arms
|
||||
speciesRestriction: [Vox]
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:TattooColoring
|
||||
fallbackColor: "#666666"
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_tattoos.rsi
|
||||
state: heart_r_arm
|
||||
|
||||
- type: marking
|
||||
id: TattooVoxHiveChest
|
||||
bodyPart: Chest
|
||||
markingCategory: Chest
|
||||
speciesRestriction: [Vox]
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:TattooColoring
|
||||
fallbackColor: "#666666"
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_tattoos.rsi
|
||||
state: hive_s
|
||||
|
||||
- type: marking
|
||||
id: TattooVoxNightlingChest
|
||||
bodyPart: Chest
|
||||
markingCategory: Chest
|
||||
speciesRestriction: [Vox]
|
||||
coloring:
|
||||
default:
|
||||
type:
|
||||
!type:TattooColoring
|
||||
fallbackColor: "#666666"
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/vox_tattoos.rsi
|
||||
state: nightling_s
|
||||
@@ -147,6 +147,16 @@
|
||||
noSpawn: true
|
||||
components:
|
||||
# they portable...
|
||||
- type: MovementSpeedModifier
|
||||
baseWalkSpeed: 3
|
||||
baseSprintSpeed: 5 # +.5 from normal movement speed
|
||||
- type: MobThresholds
|
||||
thresholds:
|
||||
0: Alive
|
||||
80: Dead # weak af tho
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- NanoTrasen
|
||||
- type: MultiHandedItem
|
||||
- type: Item
|
||||
size: Huge
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
- type: entity
|
||||
save: false
|
||||
name: Urisst' Mzhand
|
||||
name: Urist McScales
|
||||
suffix: Urisst' Mzhand
|
||||
parent: BaseMobReptilian
|
||||
id: MobReptilian
|
||||
|
||||
|
||||
@@ -503,6 +503,22 @@
|
||||
sprite: Objects/Consumable/Drinks/bravebullglass.rsi
|
||||
state: icon
|
||||
|
||||
- type: entity
|
||||
parent: DrinkGlass
|
||||
id: BudgetInsulsDrinkGlass
|
||||
suffix: budget insuls
|
||||
components:
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
drink:
|
||||
maxVol: 30
|
||||
reagents:
|
||||
- ReagentId: BudgetInsulsDrink
|
||||
Quantity: 30
|
||||
- type: Icon
|
||||
sprite: Objects/Consumable/Drinks/budgetinsulsdrink.rsi
|
||||
state: icon
|
||||
|
||||
- type: entity
|
||||
parent: DrinkGlass
|
||||
id: DrinkCarrotJuice
|
||||
@@ -535,6 +551,22 @@
|
||||
sprite: Objects/Consumable/Drinks/chocolateglass.rsi
|
||||
state: icon
|
||||
|
||||
- type: entity
|
||||
parent: DrinkGlass
|
||||
id: RubberneckGlass
|
||||
suffix: rubberneck
|
||||
components:
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
drink:
|
||||
maxVol: 30
|
||||
reagents:
|
||||
- ReagentId: Rubberneck
|
||||
Quantity: 30
|
||||
- type: Icon
|
||||
sprite: Objects/Consumable/Drinks/rubberneck.rsi
|
||||
state: icon
|
||||
|
||||
- type: entity
|
||||
parent: DrinkGlass
|
||||
id: DrinkCoconutRum
|
||||
@@ -1061,6 +1093,22 @@
|
||||
sprite: Objects/Consumable/Drinks/icecreamglass.rsi
|
||||
state: icon
|
||||
|
||||
- type: entity
|
||||
parent: DrinkGlass
|
||||
id: IrishBoolGlass
|
||||
suffix: irish bool
|
||||
components:
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
drink:
|
||||
maxVol: 30
|
||||
reagents:
|
||||
- ReagentId: IrishBool
|
||||
Quantity: 30
|
||||
- type: Icon
|
||||
sprite: Objects/Consumable/Drinks/beerglass.rsi
|
||||
state: icon
|
||||
|
||||
- type: entity
|
||||
parent: DrinkGlass
|
||||
id: DrinkIrishCarBomb
|
||||
@@ -2054,6 +2102,22 @@
|
||||
sprite: Objects/Consumable/Drinks/martiniglass.rsi
|
||||
state: icon
|
||||
|
||||
- type: entity
|
||||
parent: DrinkGlass
|
||||
id: DrinkVodkaRedBool
|
||||
suffix: vodka red bool
|
||||
components:
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
drink:
|
||||
maxVol: 30
|
||||
reagents:
|
||||
- ReagentId: VodkaRedBool
|
||||
Quantity: 30
|
||||
- type: Icon
|
||||
sprite: Objects/Consumable/Drinks/ginvodkaglass.rsi
|
||||
state: icon
|
||||
|
||||
- type: entity
|
||||
parent: DrinkGlass
|
||||
id: DrinkVodkaTonicGlass
|
||||
@@ -2100,6 +2164,22 @@
|
||||
- ReagentId: JuiceWatermelon
|
||||
Quantity: 30
|
||||
|
||||
- type: entity
|
||||
parent: DrinkGlass
|
||||
id: DrinkWatermelonWakeup
|
||||
suffix: watermelon wakeup
|
||||
components:
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
drink:
|
||||
maxVol: 30
|
||||
reagents:
|
||||
- ReagentId: WatermelonWakeup
|
||||
Quantity: 30
|
||||
- type: Icon
|
||||
sprite: Objects/Consumable/Drinks/champagneglass.rsi
|
||||
state: icon
|
||||
|
||||
- type: entity
|
||||
parent: DrinkGlass
|
||||
id: DrinkWhiskeyColaGlass
|
||||
@@ -2180,6 +2260,22 @@
|
||||
sprite: Objects/Consumable/Drinks/wineglass.rsi
|
||||
state: icon
|
||||
|
||||
- type: entity
|
||||
parent: DrinkGlass
|
||||
id: XenoBasherGlass
|
||||
suffix: xeno basher
|
||||
components:
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
drink:
|
||||
maxVol: 30
|
||||
reagents:
|
||||
- ReagentId: XenoBasher
|
||||
Quantity: 30
|
||||
- type: Icon
|
||||
sprite: Objects/Consumable/Drinks/xenobasher.rsi
|
||||
state: icon
|
||||
|
||||
# TODO: MOVE
|
||||
|
||||
- type: entity
|
||||
|
||||
@@ -106,5 +106,5 @@
|
||||
- type: Icon
|
||||
state: pinpointer-station
|
||||
- type: Pinpointer
|
||||
component: BecomesStation
|
||||
component: ResearchServer
|
||||
targetName: the station
|
||||
|
||||
@@ -165,7 +165,6 @@
|
||||
emagStaticRecipes:
|
||||
- BoxLethalshot
|
||||
- BoxShotgunFlare
|
||||
- GrenadeBlast
|
||||
- MagazineBoxLightRifle
|
||||
- MagazineBoxMagnum
|
||||
- MagazineBoxPistol
|
||||
@@ -187,6 +186,7 @@
|
||||
- BoxBeanbag
|
||||
- BoxShotgunIncendiary
|
||||
- BoxShotgunUranium
|
||||
- GrenadeBlast
|
||||
- GrenadeEMP
|
||||
- GrenadeFlash
|
||||
- MagazineBoxLightRifleIncendiary
|
||||
@@ -711,6 +711,7 @@
|
||||
- BoxShotgunUranium
|
||||
- ExplosivePayload
|
||||
- FlashPayload
|
||||
- GrenadeBlast
|
||||
- GrenadeEMP
|
||||
- GrenadeFlash
|
||||
- HoloprojectorSecurity
|
||||
@@ -731,6 +732,7 @@
|
||||
- MagazineRifleUranium
|
||||
- MagazineShotgunBeanbag
|
||||
- MagazineShotgunIncendiary
|
||||
- PortableRecharger
|
||||
- PowerCageHigh
|
||||
- PowerCageMedium
|
||||
- PowerCageSmall
|
||||
@@ -753,14 +755,6 @@
|
||||
- WeaponLaserCannon
|
||||
- WeaponLaserCarbine
|
||||
- WeaponXrayCannon
|
||||
- PowerCageSmall
|
||||
- PowerCageMedium
|
||||
- PowerCageHigh
|
||||
- ShuttleGunSvalinnMachineGunCircuitboard
|
||||
- ShuttleGunPerforatorCircuitboard
|
||||
- ShuttleGunFriendshipCircuitboard
|
||||
- ShuttleGunDusterCircuitboard
|
||||
- PortableRecharger
|
||||
- type: MaterialStorage
|
||||
whitelist:
|
||||
tags:
|
||||
|
||||
@@ -589,6 +589,36 @@
|
||||
flavorType: Complex
|
||||
description: flavor-complex-irish-car-bomb
|
||||
|
||||
- type: flavor
|
||||
id: vodkaredbool
|
||||
flavorType: Complex
|
||||
description: flavor-complex-vodka-red-bool
|
||||
|
||||
- type: flavor
|
||||
id: xenobasher
|
||||
flavorType: Complex
|
||||
description: flavor-complex-xeno-basher
|
||||
|
||||
- type: flavor
|
||||
id: irishbool
|
||||
flavorType: Complex
|
||||
description: flavor-complex-irish-bool
|
||||
|
||||
- type: flavor
|
||||
id: budgetinsulsdrink
|
||||
flavorType: Complex
|
||||
description: flavor-complex-budget-insuls-drink
|
||||
|
||||
- type: flavor
|
||||
id: watermelonwakeup
|
||||
flavorType: Complex
|
||||
description: flavor-complex-watermelon-wakeup
|
||||
|
||||
- type: flavor
|
||||
id: rubberneck
|
||||
flavorType: Complex
|
||||
description: flavor-complex-rubberneck
|
||||
|
||||
- type: flavor
|
||||
id: blackrussian
|
||||
flavorType: Complex
|
||||
|
||||
@@ -454,6 +454,31 @@
|
||||
- type: NukeopsRole
|
||||
prototype: Nukeops
|
||||
|
||||
- type: entity
|
||||
id: SleeperAgentsRule
|
||||
parent: BaseGameRule
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: StationEvent
|
||||
earliestStart: 25
|
||||
weight: 15
|
||||
minimumPlayers: 15
|
||||
reoccurrenceDelay: 60
|
||||
startAnnouncement: station-event-communication-interception
|
||||
startAudio:
|
||||
path: /Audio/Announcements/intercept.ogg
|
||||
- type: AlertLevelInterceptionRule
|
||||
- type: TraitorRule
|
||||
- type: AntagSelection
|
||||
definitions:
|
||||
- prefRoles: [ Traitor ]
|
||||
min: 1
|
||||
max: 2
|
||||
playerRatio: 10
|
||||
mindComponents:
|
||||
- type: TraitorRole
|
||||
prototype: Traitor
|
||||
|
||||
- type: entity
|
||||
id: MassHallucinations
|
||||
parent: BaseGameRule
|
||||
@@ -476,11 +501,11 @@
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: StationEvent
|
||||
endAnnouncement: station-event-immovable-rod-start-announcement
|
||||
endAudio:
|
||||
startAnnouncement: station-event-immovable-rod-start-announcement
|
||||
startAudio:
|
||||
path: /Audio/Announcements/attention.ogg
|
||||
weight: 5
|
||||
duration: 25
|
||||
duration: 1
|
||||
earliestStart: 45
|
||||
minimumPlayers: 20
|
||||
- type: ImmovableRodRule
|
||||
|
||||
@@ -16,4 +16,4 @@
|
||||
# - Saltern
|
||||
# - Packed
|
||||
# - Reach
|
||||
#- Train <- return after station anchoring PR is finished and merged
|
||||
# - Train
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
# #security
|
||||
# HeadOfSecurity: [ 1, 1 ]
|
||||
# Warden: [ 1, 1 ]
|
||||
# SecurityOfficer: [ 4, 4 ]
|
||||
# SecurityOfficer: [ 6, 6 ]
|
||||
# SecurityCadet: [ 2, 3 ]
|
||||
# Lawyer: [ 1, 2 ]
|
||||
# #supply
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
id: SlimeMorphGeras
|
||||
configuration:
|
||||
entity: MobSlimesGeras
|
||||
transferName: false
|
||||
transferName: true
|
||||
transferHumanoidAppearance: false
|
||||
inventory: Drop
|
||||
transferDamage: true
|
||||
|
||||
@@ -1769,3 +1769,165 @@
|
||||
- !type:AdjustReagent
|
||||
reagent: Ethanol
|
||||
amount: 0.15
|
||||
|
||||
- type: reagent
|
||||
id: VodkaRedBool
|
||||
name: reagent-name-vodka-red-bool
|
||||
parent: BaseAlcohol
|
||||
desc: reagent-desc-vodka-red-bool
|
||||
physicalDesc: reagent-physical-desc-strong-smelling
|
||||
flavor: vodkaredbool
|
||||
color: "#c4c27655"
|
||||
metamorphicSprite:
|
||||
sprite: Objects/Consumable/Drinks/ginvodkaglass.rsi
|
||||
state: icon_empty
|
||||
metamorphicMaxFillLevels: 4
|
||||
metamorphicFillBaseName: fill-
|
||||
metamorphicChangeColor: true
|
||||
metabolisms:
|
||||
Drink:
|
||||
effects:
|
||||
- !type:SatiateThirst
|
||||
factor: 1
|
||||
- !type:AdjustReagent
|
||||
reagent: Ethanol
|
||||
amount: 0.10
|
||||
- !type:AdjustReagent
|
||||
reagent: Theobromine
|
||||
amount: 0.05
|
||||
fizziness: 0.25
|
||||
|
||||
- type: reagent
|
||||
id: XenoBasher
|
||||
name: reagent-name-xeno-basher
|
||||
parent: BaseAlcohol
|
||||
desc: reagent-desc-xeno-basher
|
||||
physicalDesc: reagent-physical-desc-fizzy-and-creamy
|
||||
flavor: xenobasher
|
||||
color: "#4d6600"
|
||||
metamorphicSprite:
|
||||
sprite: Objects/Consumable/Drinks/xenobasher.rsi
|
||||
state: icon_empty
|
||||
metamorphicMaxFillLevels: 2
|
||||
metamorphicFillBaseName: fill-
|
||||
metamorphicChangeColor: false
|
||||
metabolisms:
|
||||
Drink:
|
||||
effects:
|
||||
- !type:SatiateThirst
|
||||
factor: 1
|
||||
- !type:AdjustReagent
|
||||
reagent: Ethanol
|
||||
amount: 0.15
|
||||
- !type:AdjustReagent
|
||||
reagent: Theobromine
|
||||
amount: 0.05
|
||||
fizziness: 0.15
|
||||
|
||||
- type: reagent
|
||||
id: IrishBool
|
||||
name: reagent-name-irish-bool
|
||||
parent: BaseAlcohol
|
||||
desc: reagent-desc-irish-bool
|
||||
physicalDesc: reagent-physical-desc-bubbly
|
||||
flavor: irishbool
|
||||
color: "#71672e99"
|
||||
metamorphicSprite:
|
||||
sprite: Objects/Consumable/Drinks/beerglass.rsi
|
||||
state: icon_empty
|
||||
metamorphicMaxFillLevels: 6
|
||||
metamorphicFillBaseName: fill-
|
||||
metamorphicChangeColor: true
|
||||
metabolisms:
|
||||
Drink:
|
||||
effects:
|
||||
- !type:SatiateThirst
|
||||
factor: 1
|
||||
- !type:AdjustReagent
|
||||
reagent: Ethanol
|
||||
amount: 0.10
|
||||
- !type:AdjustReagent
|
||||
reagent: Theobromine
|
||||
amount: 0.05
|
||||
fizziness: 0.15
|
||||
|
||||
- type: reagent
|
||||
id: BudgetInsulsDrink
|
||||
name: reagent-name-budget-insuls
|
||||
parent: BaseAlcohol
|
||||
desc: reagent-desc-budget-insuls
|
||||
physicalDesc: reagent-physical-desc-strong-smelling
|
||||
flavor: budgetinsulsdrink
|
||||
color: "#dede73"
|
||||
metamorphicSprite:
|
||||
sprite: Objects/Consumable/Drinks/budgetinsulsdrink.rsi
|
||||
state: icon_empty
|
||||
metamorphicMaxFillLevels: 3
|
||||
metamorphicFillBaseName: fill-
|
||||
metamorphicChangeColor: false
|
||||
metabolisms:
|
||||
Drink:
|
||||
effects:
|
||||
- !type:SatiateThirst
|
||||
factor: 1
|
||||
- !type:AdjustReagent
|
||||
reagent: Ethanol
|
||||
amount: 0.15
|
||||
- !type:AdjustReagent
|
||||
reagent: Theobromine
|
||||
amount: 0.05
|
||||
fizziness: 0.25
|
||||
|
||||
- type: reagent
|
||||
id: WatermelonWakeup
|
||||
name: reagent-name-watermelon-wakeup
|
||||
parent: BaseAlcohol
|
||||
desc: reagent-desc-watermelon-wakeup
|
||||
physicalDesc: reagent-physical-desc-sweet
|
||||
flavor: watermelonwakeup
|
||||
color: "#d49dca"
|
||||
metamorphicSprite:
|
||||
sprite: Objects/Consumable/Drinks/champagneglass.rsi
|
||||
state: icon_empty
|
||||
metamorphicMaxFillLevels: 4
|
||||
metamorphicFillBaseName: fill-
|
||||
metamorphicChangeColor: true
|
||||
metabolisms:
|
||||
Drink:
|
||||
effects:
|
||||
- !type:SatiateThirst
|
||||
factor: 1
|
||||
- !type:AdjustReagent
|
||||
reagent: Ethanol
|
||||
amount: 0.07
|
||||
- !type:AdjustReagent
|
||||
reagent: Theobromine
|
||||
amount: 0.05
|
||||
fizziness: 0.15
|
||||
|
||||
- type: reagent
|
||||
id: Rubberneck
|
||||
name: reagent-name-rubberneck
|
||||
parent: BaseAlcohol
|
||||
desc: reagent-desc-rubberneck
|
||||
physicalDesc: reagent-physical-desc-strong-smelling
|
||||
flavor: rubberneck
|
||||
color: "#f0d74a"
|
||||
metamorphicSprite:
|
||||
sprite: Objects/Consumable/Drinks/rubberneck.rsi
|
||||
state: icon_empty
|
||||
metamorphicMaxFillLevels: 3
|
||||
metamorphicFillBaseName: fill-
|
||||
metamorphicChangeColor: false
|
||||
metabolisms:
|
||||
Drink:
|
||||
effects:
|
||||
- !type:SatiateThirst
|
||||
factor: 1
|
||||
- !type:AdjustReagent
|
||||
reagent: Ethanol
|
||||
amount: 0.15
|
||||
- !type:AdjustReagent
|
||||
reagent: Theobromine
|
||||
amount: 0.05
|
||||
fizziness: 0.25
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
factor: 2
|
||||
- !type:AdjustReagent
|
||||
reagent: Theobromine
|
||||
amount: 0.05
|
||||
amount: 0.1
|
||||
fizziness: 0.4
|
||||
|
||||
- type: reagent
|
||||
|
||||
@@ -678,9 +678,9 @@
|
||||
result: GrenadeBlast
|
||||
completetime: 3
|
||||
materials:
|
||||
Steel: 150
|
||||
Plastic: 100
|
||||
Gold: 50
|
||||
Steel: 450
|
||||
Plastic: 300
|
||||
Gold: 150
|
||||
|
||||
- type: latheRecipe
|
||||
id: GrenadeFlash
|
||||
@@ -700,4 +700,4 @@
|
||||
Uranium: 2000
|
||||
Plastic: 1000
|
||||
Plasma: 500
|
||||
Glass: 500
|
||||
Glass: 500
|
||||
|
||||
@@ -86,6 +86,16 @@
|
||||
products:
|
||||
B52: 3
|
||||
|
||||
- type: reaction
|
||||
id: BudgetInsulsDrink
|
||||
reactants:
|
||||
Tequila:
|
||||
amount: 1
|
||||
VodkaRedBool:
|
||||
amount: 2
|
||||
products:
|
||||
BudgetInsulsDrink: 3
|
||||
|
||||
- type: reaction
|
||||
id: BlueHawaiian
|
||||
reactants:
|
||||
@@ -516,6 +526,16 @@
|
||||
products:
|
||||
IcedTea: 3
|
||||
|
||||
- type: reaction
|
||||
id: IrishBool
|
||||
reactants:
|
||||
EnergyDrink:
|
||||
amount: 1
|
||||
IrishCarBomb:
|
||||
amount: 1
|
||||
products:
|
||||
IrishBool: 2
|
||||
|
||||
- type: reaction
|
||||
id: IrishCarBomb
|
||||
reactants:
|
||||
@@ -794,6 +814,18 @@
|
||||
products:
|
||||
RoyRogers: 3
|
||||
|
||||
- type: reaction
|
||||
id: Rubberneck
|
||||
reactants:
|
||||
EnergyDrink:
|
||||
amount: 2
|
||||
Moonshine:
|
||||
amount: 1
|
||||
Sugar:
|
||||
amount: 1
|
||||
products:
|
||||
Rubberneck: 4
|
||||
|
||||
- type: reaction
|
||||
id: Sbiten
|
||||
reactants:
|
||||
@@ -943,6 +975,16 @@
|
||||
products:
|
||||
VodkaMartini: 3
|
||||
|
||||
- type: reaction
|
||||
id: VodkaRedBool
|
||||
reactants:
|
||||
Vodka:
|
||||
amount: 1
|
||||
EnergyDrink:
|
||||
amount: 2
|
||||
products:
|
||||
VodkaRedBool: 3
|
||||
|
||||
- type: reaction
|
||||
id: VodkaTonic
|
||||
reactants:
|
||||
@@ -963,6 +1005,18 @@
|
||||
products:
|
||||
WhiskeyCola: 3
|
||||
|
||||
- type: reaction
|
||||
id: WatermelonWakeup
|
||||
reactants:
|
||||
JuiceWatermelon:
|
||||
amount: 1
|
||||
Whiskey:
|
||||
amount: 1
|
||||
EnergyDrink:
|
||||
amount: 1
|
||||
products:
|
||||
WatermelonWakeup: 3
|
||||
|
||||
- type: reaction
|
||||
id: WhiteRussian
|
||||
reactants:
|
||||
@@ -983,6 +1037,16 @@
|
||||
products:
|
||||
WhiskeySoda: 3
|
||||
|
||||
- type: reaction
|
||||
id: XenoBasher
|
||||
reactants:
|
||||
ManlyDorf:
|
||||
amount: 2
|
||||
EnergyDrink:
|
||||
amount: 1
|
||||
products:
|
||||
XenoBasher: 3
|
||||
|
||||
- type: reaction
|
||||
id: HotRamen
|
||||
minTemp: 323.15
|
||||
|
||||
@@ -156,6 +156,7 @@
|
||||
- PowerCageMedium
|
||||
- MagazineGrenadeEmpty
|
||||
- GrenadeFlash
|
||||
- GrenadeBlast
|
||||
- ShuttleGunSvalinnMachineGunCircuitboard
|
||||
- ShuttleGunPerforatorCircuitboard
|
||||
- ShuttleGunFriendshipCircuitboard
|
||||
|
||||
@@ -23,3 +23,12 @@
|
||||
description: trait-southern-desc
|
||||
components:
|
||||
- type: SouthernAccent
|
||||
|
||||
- type: trait
|
||||
id: Liar
|
||||
name: trait-liar-name
|
||||
description: trait-liar-desc
|
||||
components:
|
||||
- type: ReplacementAccent
|
||||
replacementChance: 0.15
|
||||
accent: liar
|
||||
|
||||
|
After Width: | Height: | Size: 273 B |
|
After Width: | Height: | Size: 257 B |
|
After Width: | Height: | Size: 271 B |
|
After Width: | Height: | Size: 412 B |
@@ -1 +1,31 @@
|
||||
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "https://github.com/vgstation-coders/vgstation13/blob/02ff588d59b3c560c685d9ca75e882d32a72d8cb/icons/mob/human_face.dmi", "states": [{"name": "vox_beard_s", "directions": 4}, {"name": "vox_colonel_s", "directions": 4}, {"name": "vox_fu_s", "directions": 4}, {"name": "vox_neck_s", "directions": 4}, {"name": "vox_ruff_beard_s", "directions": 4}, {"name": "vox_ruff_beard_s2", "directions": 4}]}
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/0f9ef5962f4422836c0a42f289fb24d018918cbc/icons/mob/sprite_accessories/vox/vox_facial_hair.dmi and greyscaled",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "colonel_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "fu_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "neck_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "beard_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "mane_s",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 302 B |
|
Before Width: | Height: | Size: 159 B |
|
Before Width: | Height: | Size: 150 B |
|
Before Width: | Height: | Size: 169 B |
|
Before Width: | Height: | Size: 186 B |
|
Before Width: | Height: | Size: 314 B |
|
Before Width: | Height: | Size: 96 B |
BIN
Resources/Textures/Mobs/Customization/vox_hair.rsi/afro_s.png
Normal file
|
After Width: | Height: | Size: 436 B |
BIN
Resources/Textures/Mobs/Customization/vox_hair.rsi/braid_s.png
Normal file
|
After Width: | Height: | Size: 347 B |
|
After Width: | Height: | Size: 420 B |
|
After Width: | Height: | Size: 287 B |
BIN
Resources/Textures/Mobs/Customization/vox_hair.rsi/flowing_s.png
Normal file
|
After Width: | Height: | Size: 515 B |
BIN
Resources/Textures/Mobs/Customization/vox_hair.rsi/hawk_s.png
Normal file
|
After Width: | Height: | Size: 336 B |
BIN
Resources/Textures/Mobs/Customization/vox_hair.rsi/horns_s.png
Normal file
|
After Width: | Height: | Size: 347 B |
|
After Width: | Height: | Size: 397 B |
|
After Width: | Height: | Size: 381 B |
BIN
Resources/Textures/Mobs/Customization/vox_hair.rsi/kingly_s.png
Normal file
|
After Width: | Height: | Size: 457 B |
|
After Width: | Height: | Size: 913 B |
BIN
Resources/Textures/Mobs/Customization/vox_hair.rsi/mange_s.png
Normal file
|
After Width: | Height: | Size: 636 B |
@@ -1 +1,99 @@
|
||||
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "https://github.com/vgstation-coders/vgstation13/blob/02ff588d59b3c560c685d9ca75e882d32a72d8cb/icons/mob/human_face.dmi", "states": [{"name": "vox_afro_s", "directions": 4}, {"name": "vox_afro_s2", "directions": 4}, {"name": "vox_bald_s", "directions": 4}, {"name": "vox_cropped_s", "directions": 4}, {"name": "vox_cropped_s2", "directions": 4}, {"name": "vox_horns_s", "directions": 4}, {"name": "vox_horns_s2", "directions": 4}, {"name": "vox_kingly_s", "directions": 4}, {"name": "vox_kingly_s2", "directions": 4}, {"name": "vox_mange_s", "directions": 4}, {"name": "vox_mange_s2", "directions": 4}, {"name": "vox_mohawk_s", "directions": 4}, {"name": "vox_mohawk_s2", "directions": 4}, {"name": "vox_nights_s", "directions": 4}, {"name": "vox_nights_s2", "directions": 4}, {"name": "vox_pony_s", "directions": 4}, {"name": "vox_pony_s2", "directions": 4}, {"name": "vox_rows_s", "directions": 4}, {"name": "vox_rows_s2", "directions": 4}, {"name": "vox_ruff_hawk_s", "directions": 4}, {"name": "vox_ruff_hawk_s2", "directions": 4}, {"name": "vox_shortquills_s", "directions": 4}, {"name": "vox_shortquills_s2", "directions": 4}, {"name": "vox_surf_s", "directions": 4}, {"name": "vox_surf_s2", "directions": 4}, {"name": "vox_yasu_s", "directions": 4}, {"name": "vox_yasu_s2", "directions": 4}]}
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/dcd1f5d88a8c5ba9634fc3fce67a76ada45f71dc/icons/mob/sprite_accessories/vox/vox_hair.dmi and greyscaled",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "crestedquills_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "emperorquills_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "keelquills_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "keetquills_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "shortquills_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "tielquills_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "kingly_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "afro_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "yasu_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "razor_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "razor_clipped_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "mohawk_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "horns_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "nights_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "hawk_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "long_braid_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "short_braid_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "mange_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "ponytail_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "braid_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "surf_s",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "flowing_s",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
Resources/Textures/Mobs/Customization/vox_hair.rsi/mohawk_s.png
Normal file
|
After Width: | Height: | Size: 337 B |
BIN
Resources/Textures/Mobs/Customization/vox_hair.rsi/nights_s.png
Normal file
|
After Width: | Height: | Size: 369 B |
|
After Width: | Height: | Size: 747 B |
|
After Width: | Height: | Size: 399 B |
BIN
Resources/Textures/Mobs/Customization/vox_hair.rsi/razor_s.png
Normal file
|
After Width: | Height: | Size: 411 B |
|
After Width: | Height: | Size: 427 B |
|
After Width: | Height: | Size: 391 B |
BIN
Resources/Textures/Mobs/Customization/vox_hair.rsi/surf_s.png
Normal file
|
After Width: | Height: | Size: 519 B |
|
After Width: | Height: | Size: 373 B |
|
Before Width: | Height: | Size: 298 B |
|
Before Width: | Height: | Size: 96 B |
|
Before Width: | Height: | Size: 96 B |
|
Before Width: | Height: | Size: 262 B |
|
Before Width: | Height: | Size: 96 B |
|
Before Width: | Height: | Size: 236 B |
|
Before Width: | Height: | Size: 96 B |
|
Before Width: | Height: | Size: 309 B |