Merge remote-tracking branch 'refs/remotes/wizards/master'
This commit is contained in:
commit
e3d0eb3821
36 changed files with 369 additions and 639 deletions
|
|
@ -1,5 +1,6 @@
|
|||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
using Content.Client.Inventory;
|
||||
using Content.Shared.Clothing;
|
||||
using Content.Shared.Clothing.Components;
|
||||
|
|
@ -116,6 +117,7 @@ public sealed class ClientClothingSystem : ClothingSystem
|
|||
i++;
|
||||
}
|
||||
|
||||
item.MappedLayer = key;
|
||||
args.Layers.Add((key, layer));
|
||||
}
|
||||
}
|
||||
|
|
@ -156,13 +158,9 @@ public sealed class ClientClothingSystem : ClothingSystem
|
|||
|
||||
// species specific
|
||||
if (speciesId != null && rsi.TryGetState($"{state}-{speciesId}", out _))
|
||||
{
|
||||
state = $"{state}-{speciesId}";
|
||||
}
|
||||
else if (!rsi.TryGetState(state, out _))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var layer = new PrototypeLayerData();
|
||||
layer.RsiPath = rsi.Path.ToString();
|
||||
|
|
@ -290,6 +288,8 @@ public sealed class ClientClothingSystem : ClothingSystem
|
|||
|
||||
if (layerData.Color != null)
|
||||
sprite.LayerSetColor(key, layerData.Color.Value);
|
||||
if (layerData.Scale != null)
|
||||
sprite.LayerSetScale(key, layerData.Scale.Value);
|
||||
}
|
||||
else
|
||||
index = sprite.LayerMapReserveBlank(key);
|
||||
|
|
|
|||
48
Content.Client/Clothing/FlippableClothingVisualizerSystem.cs
Normal file
48
Content.Client/Clothing/FlippableClothingVisualizerSystem.cs
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
using Content.Shared.Clothing;
|
||||
using Content.Shared.Clothing.Components;
|
||||
using Content.Shared.Clothing.EntitySystems;
|
||||
using Content.Shared.Foldable;
|
||||
using Content.Shared.Item;
|
||||
using Robust.Client.GameObjects;
|
||||
|
||||
namespace Content.Client.Clothing;
|
||||
|
||||
public sealed class FlippableClothingVisualizerSystem : VisualizerSystem<FlippableClothingVisualsComponent>
|
||||
{
|
||||
[Dependency] private readonly SharedItemSystem _itemSys = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<FlippableClothingVisualsComponent, GetEquipmentVisualsEvent>(OnGetVisuals, after: [typeof(ClothingSystem)]);
|
||||
SubscribeLocalEvent<FlippableClothingVisualsComponent, FoldedEvent>(OnFolded);
|
||||
}
|
||||
|
||||
private void OnFolded(Entity<FlippableClothingVisualsComponent> ent, ref FoldedEvent args)
|
||||
{
|
||||
_itemSys.VisualsChanged(ent);
|
||||
}
|
||||
|
||||
private void OnGetVisuals(Entity<FlippableClothingVisualsComponent> ent, ref GetEquipmentVisualsEvent args)
|
||||
{
|
||||
if (!TryComp(ent, out SpriteComponent? sprite) ||
|
||||
!TryComp(ent, out ClothingComponent? clothing))
|
||||
return;
|
||||
|
||||
if (clothing.MappedLayer == null ||
|
||||
!AppearanceSystem.TryGetData<bool>(ent, FoldableSystem.FoldedVisuals.State, out var folding) ||
|
||||
!sprite.LayerMapTryGet(folding ? ent.Comp.FoldingLayer : ent.Comp.UnfoldingLayer, out var idx))
|
||||
return;
|
||||
|
||||
// add each layer to the visuals
|
||||
var spriteLayer = sprite[idx];
|
||||
foreach (var layer in args.Layers)
|
||||
{
|
||||
if (layer.Item1 != clothing.MappedLayer)
|
||||
continue;
|
||||
|
||||
layer.Item2.Scale = spriteLayer.Scale;
|
||||
}
|
||||
}
|
||||
}
|
||||
16
Content.Client/Clothing/FlippableClothingVisualsComponent.cs
Normal file
16
Content.Client/Clothing/FlippableClothingVisualsComponent.cs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
namespace Content.Client.Clothing;
|
||||
|
||||
/// <summary>
|
||||
/// Communicates folded layers data (currently only Scale to handle flipping)
|
||||
/// to the wearer clothing sprite layer
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
[Access(typeof(FlippableClothingVisualizerSystem))]
|
||||
public sealed partial class FlippableClothingVisualsComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public string FoldingLayer = "foldedLayer";
|
||||
|
||||
[DataField]
|
||||
public string UnfoldingLayer = "unfoldedLayer";
|
||||
}
|
||||
|
|
@ -134,7 +134,7 @@ public sealed partial class RoboticsConsoleWindow : FancyWindow
|
|||
BorgInfo.SetMessage(text);
|
||||
|
||||
// how the turntables
|
||||
DisableButton.Disabled = !data.HasBrain;
|
||||
DisableButton.Disabled = !(data.HasBrain && data.CanDisable);
|
||||
DestroyButton.Disabled = _timing.CurTime < _console.Comp1.NextDestroy;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -43,9 +43,6 @@ public sealed class RandomSpriteSystem : SharedRandomSpriteSystem
|
|||
if (!Resolve(uid, ref clothing, false))
|
||||
return;
|
||||
|
||||
if (clothing.ClothingVisuals == null)
|
||||
return;
|
||||
|
||||
foreach (var slotPair in clothing.ClothingVisuals)
|
||||
{
|
||||
foreach (var keyColorPair in component.Selected)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
namespace Content.Server.Explosion.Components;
|
||||
|
||||
/// <summary>
|
||||
/// Disallows starting the timer by hand, must be stuck or triggered by a system.
|
||||
/// Disallows starting the timer by hand, must be stuck or triggered by a system using <c>StartTimer</c>.
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class AutomatedTimerComponent : Component
|
||||
|
|
|
|||
|
|
@ -26,13 +26,7 @@ public sealed partial class TriggerSystem
|
|||
if (!component.StartOnStick)
|
||||
return;
|
||||
|
||||
HandleTimerTrigger(
|
||||
uid,
|
||||
args.User,
|
||||
component.Delay,
|
||||
component.BeepInterval,
|
||||
component.InitialBeepDelay,
|
||||
component.BeepSound);
|
||||
StartTimer((uid, component), args.User);
|
||||
}
|
||||
|
||||
private void OnExamined(EntityUid uid, OnUseTimerTriggerComponent component, ExaminedEvent args)
|
||||
|
|
@ -54,14 +48,7 @@ public sealed partial class TriggerSystem
|
|||
args.Verbs.Add(new AlternativeVerb()
|
||||
{
|
||||
Text = Loc.GetString("verb-start-detonation"),
|
||||
Act = () => HandleTimerTrigger(
|
||||
uid,
|
||||
args.User,
|
||||
component.Delay,
|
||||
component.BeepInterval,
|
||||
component.InitialBeepDelay,
|
||||
component.BeepSound
|
||||
),
|
||||
Act = () => StartTimer((uid, component), args.User),
|
||||
Priority = 2
|
||||
});
|
||||
}
|
||||
|
|
@ -174,13 +161,7 @@ public sealed partial class TriggerSystem
|
|||
if (component.DoPopup)
|
||||
_popupSystem.PopupEntity(Loc.GetString("trigger-activated", ("device", uid)), args.User, args.User);
|
||||
|
||||
HandleTimerTrigger(
|
||||
uid,
|
||||
args.User,
|
||||
component.Delay,
|
||||
component.BeepInterval,
|
||||
component.InitialBeepDelay,
|
||||
component.BeepSound);
|
||||
StartTimer((uid, component), args.User);
|
||||
|
||||
args.Handled = true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -265,6 +265,18 @@ namespace Content.Server.Explosion.EntitySystems
|
|||
comp.TimeRemaining += amount;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Start the timer for triggering the device.
|
||||
/// </summary>
|
||||
public void StartTimer(Entity<OnUseTimerTriggerComponent?> ent, EntityUid? user)
|
||||
{
|
||||
if (!Resolve(ent, ref ent.Comp, false))
|
||||
return;
|
||||
|
||||
var comp = ent.Comp;
|
||||
HandleTimerTrigger(ent, user, comp.Delay, comp.BeepInterval, comp.InitialBeepDelay, comp.BeepSound);
|
||||
}
|
||||
|
||||
public void HandleTimerTrigger(EntityUid uid, EntityUid? user, float delay, float beepInterval, float? initialBeepDelay, SoundSpecifier? beepSound)
|
||||
{
|
||||
if (delay <= 0)
|
||||
|
|
|
|||
|
|
@ -179,7 +179,7 @@ public sealed class TegSystem : EntitySystem
|
|||
component.LastGeneration = electricalEnergy;
|
||||
|
||||
// Turn energy (at atmos tick rate) into wattage.
|
||||
var power = electricalEnergy * _atmosphere.AtmosTickRate;
|
||||
var power = electricalEnergy / args.dt;
|
||||
// Add ramp factor. This magics slight power into existence, but allows us to ramp up.
|
||||
supplier.MaxSupply = power * component.RampFactor;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using Content.Shared.DeviceNetwork;
|
||||
using Content.Shared.Emag.Components;
|
||||
using Content.Shared.Movement.Components;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.Robotics;
|
||||
using Content.Shared.Silicons.Borgs.Components;
|
||||
|
|
@ -26,6 +27,9 @@ public sealed partial class BorgSystem
|
|||
var query = EntityQueryEnumerator<BorgTransponderComponent, BorgChassisComponent, DeviceNetworkComponent, MetaDataComponent>();
|
||||
while (query.MoveNext(out var uid, out var comp, out var chassis, out var device, out var meta))
|
||||
{
|
||||
if (comp.NextDisable is {} nextDisable && now >= nextDisable)
|
||||
DoDisable((uid, comp, chassis, meta));
|
||||
|
||||
if (now < comp.NextBroadcast)
|
||||
continue;
|
||||
|
||||
|
|
@ -33,13 +37,16 @@ public sealed partial class BorgSystem
|
|||
if (_powerCell.TryGetBatteryFromSlot(uid, out var battery))
|
||||
charge = battery.CurrentCharge / battery.MaxCharge;
|
||||
|
||||
var hasBrain = chassis.BrainEntity != null && !comp.FakeDisabled;
|
||||
var canDisable = comp.NextDisable == null && !comp.FakeDisabling;
|
||||
var data = new CyborgControlData(
|
||||
comp.Sprite,
|
||||
comp.Name,
|
||||
meta.EntityName,
|
||||
charge,
|
||||
chassis.ModuleCount,
|
||||
chassis.BrainEntity != null);
|
||||
hasBrain,
|
||||
canDisable);
|
||||
|
||||
var payload = new NetworkPayload()
|
||||
{
|
||||
|
|
@ -52,6 +59,24 @@ public sealed partial class BorgSystem
|
|||
}
|
||||
}
|
||||
|
||||
private void DoDisable(Entity<BorgTransponderComponent, BorgChassisComponent, MetaDataComponent> ent)
|
||||
{
|
||||
ent.Comp1.NextDisable = null;
|
||||
if (ent.Comp1.FakeDisabling)
|
||||
{
|
||||
ent.Comp1.FakeDisabled = true;
|
||||
ent.Comp1.FakeDisabling = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (ent.Comp2.BrainEntity is not {} brain)
|
||||
return;
|
||||
|
||||
var message = Loc.GetString(ent.Comp1.DisabledPopup, ("name", Name(ent, ent.Comp3)));
|
||||
Popup.PopupEntity(message, ent);
|
||||
_container.Remove(brain, ent.Comp2.BrainContainer);
|
||||
}
|
||||
|
||||
private void OnPacketReceived(Entity<BorgTransponderComponent> ent, ref DeviceNetworkPacketEvent args)
|
||||
{
|
||||
var payload = args.Data;
|
||||
|
|
@ -61,28 +86,28 @@ public sealed partial class BorgSystem
|
|||
if (command == RoboticsConsoleConstants.NET_DISABLE_COMMAND)
|
||||
Disable(ent);
|
||||
else if (command == RoboticsConsoleConstants.NET_DESTROY_COMMAND)
|
||||
Destroy(ent.Owner);
|
||||
Destroy(ent);
|
||||
}
|
||||
|
||||
private void Disable(Entity<BorgTransponderComponent, BorgChassisComponent?> ent)
|
||||
{
|
||||
if (!Resolve(ent, ref ent.Comp2) || ent.Comp2.BrainEntity is not {} brain)
|
||||
if (!Resolve(ent, ref ent.Comp2) || ent.Comp2.BrainEntity == null || ent.Comp1.NextDisable != null)
|
||||
return;
|
||||
|
||||
// this won't exactly be stealthy but if you are malf its better than actually disabling you
|
||||
// update ui immediately
|
||||
ent.Comp1.NextBroadcast = _timing.CurTime;
|
||||
|
||||
// pretend the borg is being disabled forever now
|
||||
if (CheckEmagged(ent, "disabled"))
|
||||
return;
|
||||
ent.Comp1.FakeDisabling = true;
|
||||
else
|
||||
Popup.PopupEntity(Loc.GetString(ent.Comp1.DisablingPopup), ent);
|
||||
|
||||
var message = Loc.GetString(ent.Comp1.DisabledPopup, ("name", Name(ent)));
|
||||
Popup.PopupEntity(message, ent);
|
||||
_container.Remove(brain, ent.Comp2.BrainContainer);
|
||||
ent.Comp1.NextDisable = _timing.CurTime + ent.Comp1.DisableDelay;
|
||||
}
|
||||
|
||||
private void Destroy(Entity<ExplosiveComponent?> ent)
|
||||
private void Destroy(Entity<BorgTransponderComponent> ent)
|
||||
{
|
||||
if (!Resolve(ent, ref ent.Comp))
|
||||
return;
|
||||
|
||||
// this is stealthy until someone realises you havent exploded
|
||||
if (CheckEmagged(ent, "destroyed"))
|
||||
{
|
||||
|
|
@ -91,7 +116,12 @@ public sealed partial class BorgSystem
|
|||
return;
|
||||
}
|
||||
|
||||
_explosion.TriggerExplosive(ent, ent.Comp, delete: false);
|
||||
var message = Loc.GetString(ent.Comp.DestroyingPopup, ("name", Name(ent)));
|
||||
Popup.PopupEntity(message, ent);
|
||||
_trigger.StartTimer(ent.Owner, user: null);
|
||||
|
||||
// prevent a shitter borg running into people
|
||||
RemComp<InputMoverComponent>(ent);
|
||||
}
|
||||
|
||||
private bool CheckEmagged(EntityUid uid, string name)
|
||||
|
|
|
|||
|
|
@ -43,8 +43,8 @@ public sealed partial class BorgSystem : SharedBorgSystem
|
|||
[Dependency] private readonly ActionsSystem _actions = default!;
|
||||
[Dependency] private readonly AlertsSystem _alerts = default!;
|
||||
[Dependency] private readonly DeviceNetworkSystem _deviceNetwork = default!;
|
||||
[Dependency] private readonly ExplosionSystem _explosion = default!;
|
||||
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
|
||||
[Dependency] private readonly TriggerSystem _trigger = default!;
|
||||
[Dependency] private readonly HandsSystem _hands = default!;
|
||||
[Dependency] private readonly MetaDataSystem _metaData = default!;
|
||||
[Dependency] private readonly SharedMindSystem _mind = default!;
|
||||
|
|
|
|||
|
|
@ -62,7 +62,14 @@ public sealed class MeteorSwarmSystem : GameRuleSystem<MeteorSwarmComponent>
|
|||
: new Random(uid.Id).NextAngle();
|
||||
|
||||
var offset = angle.RotateVec(new Vector2((maximumDistance - minimumDistance) * RobustRandom.NextFloat() + minimumDistance, 0));
|
||||
var subOffset = RobustRandom.NextAngle().RotateVec(new Vector2( (playableArea.TopRight - playableArea.Center).Length() / 2 * RobustRandom.NextFloat(), 0));
|
||||
|
||||
// the line at which spawns occur is perpendicular to the offset.
|
||||
// This means the meteors are less likely to bunch up and hit the same thing.
|
||||
var subOffsetAngle = RobustRandom.Prob(0.5f)
|
||||
? angle + Math.PI / 2
|
||||
: angle - Math.PI / 2;
|
||||
var subOffset = subOffsetAngle.RotateVec(new Vector2( (playableArea.TopRight - playableArea.Center).Length() / 3 * RobustRandom.NextFloat(), 0));
|
||||
|
||||
var spawnPosition = new MapCoordinates(center + offset + subOffset, mapId);
|
||||
var meteor = Spawn(spawnProto, spawnPosition);
|
||||
var physics = Comp<PhysicsComponent>(meteor);
|
||||
|
|
|
|||
|
|
@ -16,9 +16,14 @@ namespace Content.Shared.Clothing.Components;
|
|||
public sealed partial class ClothingComponent : Component
|
||||
{
|
||||
[DataField("clothingVisuals")]
|
||||
[Access(typeof(ClothingSystem), typeof(InventorySystem), Other = AccessPermissions.ReadExecute)] // TODO remove execute permissions.
|
||||
public Dictionary<string, List<PrototypeLayerData>> ClothingVisuals = new();
|
||||
|
||||
/// <summary>
|
||||
/// The name of the layer in the user that this piece of clothing will map to
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public string? MappedLayer;
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField("quickEquip")]
|
||||
public bool QuickEquip = true;
|
||||
|
|
@ -121,4 +126,3 @@ public sealed partial class ClothingUnequipDoAfterEvent : DoAfterEvent
|
|||
|
||||
public override DoAfterEvent Clone() => this;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -241,9 +241,6 @@ public abstract class ClothingSystem : EntitySystem
|
|||
|
||||
public void SetLayerColor(ClothingComponent clothing, string slot, string mapKey, Color? color)
|
||||
{
|
||||
if (clothing.ClothingVisuals == null)
|
||||
return;
|
||||
|
||||
foreach (var layer in clothing.ClothingVisuals[slot])
|
||||
{
|
||||
if (layer.MapKeys == null)
|
||||
|
|
@ -257,9 +254,6 @@ public abstract class ClothingSystem : EntitySystem
|
|||
}
|
||||
public void SetLayerState(ClothingComponent clothing, string slot, string mapKey, string state)
|
||||
{
|
||||
if (clothing.ClothingVisuals == null)
|
||||
return;
|
||||
|
||||
foreach (var layer in clothing.ClothingVisuals[slot])
|
||||
{
|
||||
if (layer.MapKeys == null)
|
||||
|
|
|
|||
|
|
@ -33,32 +33,32 @@ public sealed class FoldableClothingSystem : EntitySystem
|
|||
|
||||
private void OnFolded(Entity<FoldableClothingComponent> ent, ref FoldedEvent args)
|
||||
{
|
||||
if (TryComp<ClothingComponent>(ent.Owner, out var clothingComp) &&
|
||||
TryComp<ItemComponent>(ent.Owner, out var itemComp))
|
||||
if (!TryComp<ClothingComponent>(ent.Owner, out var clothingComp) ||
|
||||
!TryComp<ItemComponent>(ent.Owner, out var itemComp))
|
||||
return;
|
||||
|
||||
if (args.IsFolded)
|
||||
{
|
||||
if (args.IsFolded)
|
||||
{
|
||||
if (ent.Comp.FoldedSlots.HasValue)
|
||||
_clothingSystem.SetSlots(ent.Owner, ent.Comp.FoldedSlots.Value, clothingComp);
|
||||
if (ent.Comp.FoldedSlots.HasValue)
|
||||
_clothingSystem.SetSlots(ent.Owner, ent.Comp.FoldedSlots.Value, clothingComp);
|
||||
|
||||
if (ent.Comp.FoldedEquippedPrefix != null)
|
||||
_clothingSystem.SetEquippedPrefix(ent.Owner, ent.Comp.FoldedEquippedPrefix, clothingComp);
|
||||
if (ent.Comp.FoldedEquippedPrefix != null)
|
||||
_clothingSystem.SetEquippedPrefix(ent.Owner, ent.Comp.FoldedEquippedPrefix, clothingComp);
|
||||
|
||||
if (ent.Comp.FoldedHeldPrefix != null)
|
||||
_itemSystem.SetHeldPrefix(ent.Owner, ent.Comp.FoldedHeldPrefix, false, itemComp);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ent.Comp.UnfoldedSlots.HasValue)
|
||||
_clothingSystem.SetSlots(ent.Owner, ent.Comp.UnfoldedSlots.Value, clothingComp);
|
||||
if (ent.Comp.FoldedHeldPrefix != null)
|
||||
_itemSystem.SetHeldPrefix(ent.Owner, ent.Comp.FoldedHeldPrefix, false, itemComp);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ent.Comp.UnfoldedSlots.HasValue)
|
||||
_clothingSystem.SetSlots(ent.Owner, ent.Comp.UnfoldedSlots.Value, clothingComp);
|
||||
|
||||
if (ent.Comp.FoldedEquippedPrefix != null)
|
||||
_clothingSystem.SetEquippedPrefix(ent.Owner, null, clothingComp);
|
||||
if (ent.Comp.FoldedEquippedPrefix != null)
|
||||
_clothingSystem.SetEquippedPrefix(ent.Owner, null, clothingComp);
|
||||
|
||||
if (ent.Comp.FoldedHeldPrefix != null)
|
||||
_itemSystem.SetHeldPrefix(ent.Owner, null, false, itemComp);
|
||||
if (ent.Comp.FoldedHeldPrefix != null)
|
||||
_itemSystem.SetHeldPrefix(ent.Owner, null, false, itemComp);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ public sealed partial class RoboticsConsoleComponent : Component
|
|||
/// Radio message sent when destroying a borg.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public LocId DestroyMessage = "robotics-console-cyborg-destroyed";
|
||||
public LocId DestroyMessage = "robotics-console-cyborg-destroying";
|
||||
|
||||
/// <summary>
|
||||
/// Cooldown on destroying borgs to prevent complete abuse.
|
||||
|
|
|
|||
|
|
@ -97,6 +97,13 @@ public record struct CyborgControlData
|
|||
[DataField]
|
||||
public bool HasBrain;
|
||||
|
||||
/// <summary>
|
||||
/// Whether the borg can currently be disabled if the brain is installed,
|
||||
/// if on cooldown then can't queue up multiple disables.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public bool CanDisable;
|
||||
|
||||
/// <summary>
|
||||
/// When this cyborg's data will be deleted.
|
||||
/// Set by the console when receiving the packet.
|
||||
|
|
@ -104,7 +111,7 @@ public record struct CyborgControlData
|
|||
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
|
||||
public TimeSpan Timeout = TimeSpan.Zero;
|
||||
|
||||
public CyborgControlData(SpriteSpecifier? chassisSprite, string chassisName, string name, float charge, int moduleCount, bool hasBrain)
|
||||
public CyborgControlData(SpriteSpecifier? chassisSprite, string chassisName, string name, float charge, int moduleCount, bool hasBrain, bool canDisable)
|
||||
{
|
||||
ChassisSprite = chassisSprite;
|
||||
ChassisName = chassisName;
|
||||
|
|
@ -112,6 +119,7 @@ public record struct CyborgControlData
|
|||
Charge = charge;
|
||||
ModuleCount = moduleCount;
|
||||
HasBrain = hasBrain;
|
||||
CanDisable = canDisable;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,12 +23,25 @@ public sealed partial class BorgTransponderComponent : Component
|
|||
public string Name = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Popup shown to everyone when a borg is disabled.
|
||||
/// Popup shown to everyone after a borg is disabled.
|
||||
/// Gets passed a string "name".
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public LocId DisabledPopup = "borg-transponder-disabled-popup";
|
||||
|
||||
/// <summary>
|
||||
/// Popup shown to the borg when it is being disabled.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public LocId DisablingPopup = "borg-transponder-disabling-popup";
|
||||
|
||||
/// <summary>
|
||||
/// Popup shown to everyone when a borg is being destroyed.
|
||||
/// Gets passed a string "name".
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public LocId DestroyingPopup = "borg-transponder-destroying-popup";
|
||||
|
||||
/// <summary>
|
||||
/// How long to wait between each broadcast.
|
||||
/// </summary>
|
||||
|
|
@ -40,4 +53,28 @@ public sealed partial class BorgTransponderComponent : Component
|
|||
/// </summary>
|
||||
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
|
||||
public TimeSpan NextBroadcast = TimeSpan.Zero;
|
||||
|
||||
/// <summary>
|
||||
/// When to next disable the borg.
|
||||
/// </summary>
|
||||
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
|
||||
public TimeSpan? NextDisable;
|
||||
|
||||
/// <summary>
|
||||
/// How long to wait to disable the borg after RD has ordered it.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public TimeSpan DisableDelay = TimeSpan.FromSeconds(5);
|
||||
|
||||
/// <summary>
|
||||
/// Pretend that the borg cannot be disabled due to being on delay.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public bool FakeDisabling;
|
||||
|
||||
/// <summary>
|
||||
/// Pretend that the borg has no brain inserted.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public bool FakeDisabled;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,50 +1,4 @@
|
|||
Entries:
|
||||
- author: Flareguy
|
||||
changes:
|
||||
- message: Removed SCAF armor.
|
||||
type: Remove
|
||||
id: 6261
|
||||
time: '2024-03-31T02:01:28.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/26566
|
||||
- author: lzk228
|
||||
changes:
|
||||
- message: Syndicate duffelbag storage increased from 8x5 to 9x5.
|
||||
type: Tweak
|
||||
id: 6262
|
||||
time: '2024-03-31T02:21:31.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/26565
|
||||
- author: Velcroboy
|
||||
changes:
|
||||
- message: Changed plastic flaps to be completely constructable/deconstructable
|
||||
type: Tweak
|
||||
id: 6263
|
||||
time: '2024-03-31T02:24:39.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/26341
|
||||
- author: Flareguy
|
||||
changes:
|
||||
- message: Security glasses have been moved from research to roundstart gear. All
|
||||
officers now start with them instead of sunglasses by default.
|
||||
type: Tweak
|
||||
- message: You can now craft security glasses.
|
||||
type: Add
|
||||
id: 6264
|
||||
time: '2024-03-31T03:00:45.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/26487
|
||||
- author: brainfood1183
|
||||
changes:
|
||||
- message: Toilets can now be connected to the disposal system.
|
||||
type: Add
|
||||
id: 6265
|
||||
time: '2024-03-31T03:21:18.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/22133
|
||||
- author: DrMelon
|
||||
changes:
|
||||
- message: Syndicate Uplinks now have a searchbar to help those dirty, rotten antagonists
|
||||
find appropriate equipment more easily!
|
||||
type: Tweak
|
||||
id: 6266
|
||||
time: '2024-03-31T04:09:15.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/24287
|
||||
- author: chromiumboy
|
||||
changes:
|
||||
- message: Additional construction options have been added to the Rapid Construction
|
||||
|
|
@ -3859,3 +3813,48 @@
|
|||
id: 6760
|
||||
time: '2024-06-16T11:57:57.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/25155
|
||||
- author: Futuristic
|
||||
changes:
|
||||
- message: RandomSentience event was removed
|
||||
type: Remove
|
||||
id: 6761
|
||||
time: '2024-06-16T23:24:29.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/28982
|
||||
- author: notafet
|
||||
changes:
|
||||
- message: Adjust TEG power generation levels.
|
||||
type: Tweak
|
||||
id: 6762
|
||||
time: '2024-06-17T01:13:33.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/29112
|
||||
- author: Cojoke-dot, AJCM-git
|
||||
changes:
|
||||
- message: You can now flip your eyepatches to the other eye! Yarrrrr!
|
||||
type: Add
|
||||
id: 6763
|
||||
time: '2024-06-17T03:21:29.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/26277
|
||||
- author: deltanedas
|
||||
changes:
|
||||
- message: Borgs now have a 10 second beeping timer that paralyzes them when being
|
||||
exploded with the robotics console and a 5 second delay when being disabled
|
||||
with it.
|
||||
type: Tweak
|
||||
id: 6764
|
||||
time: '2024-06-17T03:30:10.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/27876
|
||||
- author: EmoGarbage404
|
||||
changes:
|
||||
- message: Changed meteor swarm spawning to be less clumped up and favor hitting
|
||||
multiple areas more.
|
||||
type: Tweak
|
||||
id: 6765
|
||||
time: '2024-06-17T05:20:47.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/29057
|
||||
- author: Ubaser
|
||||
changes:
|
||||
- message: Added new reptilian horns, "Demonic".
|
||||
type: Add
|
||||
id: 6766
|
||||
time: '2024-06-17T10:53:47.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/29022
|
||||
|
|
|
|||
|
|
@ -21,5 +21,7 @@ borg-ui-module-counter = {$actual}/{$max}
|
|||
|
||||
# Transponder
|
||||
borg-transponder-disabled-popup = A brain shoots out the top of {$name}!
|
||||
borg-transponder-disabling-popup = Your transponder begins to lock you out of the chassis!
|
||||
borg-transponder-destroying-popup = The self destruct of {$name} starts beeping!
|
||||
borg-transponder-emagged-disabled-popup = Your transponder's lights go out!
|
||||
borg-transponder-emagged-destroyed-popup = Your transponder's fuse blows!
|
||||
|
|
|
|||
|
|
@ -93,6 +93,9 @@ marking-LizardHornsMyrsore = Lizard Horns (Myrsore)
|
|||
marking-LizardHornsBighorn-horns_bighorn = Lizard Horns (Bighorn)
|
||||
marking-LizardHornsBighorn = Lizard Horns (Bighorn)
|
||||
|
||||
marking-LizardHornsDemonic-horns_demonic = Lizard Horns (Demonic)
|
||||
marking-LizardHornsDemonic = Lizard Horns (Demonic)
|
||||
|
||||
marking-LizardHornsKoboldEars-horns_kobold_ears = Lizard Ears (Kobold)
|
||||
marking-LizardHornsKoboldEars = Lizard Ears (Kobold)
|
||||
|
||||
|
|
|
|||
|
|
@ -16,4 +16,4 @@ robotics-console-locked-message = Controls locked, swipe ID.
|
|||
robotics-console-disable = Disable
|
||||
robotics-console-destroy = Destroy
|
||||
|
||||
robotics-console-cyborg-destroyed = The cyborg {$name} has been remotely destroyed.
|
||||
robotics-console-cyborg-destroying = {$name} is being remotely detonated!
|
||||
|
|
|
|||
|
|
@ -465,85 +465,6 @@ entities:
|
|||
- type: RadiationGridResistance
|
||||
- type: GravityShake
|
||||
shakeTimes: 10
|
||||
- proto: ActionToggleLight
|
||||
entities:
|
||||
- uid: 4
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 3
|
||||
- type: InstantAction
|
||||
container: 3
|
||||
- uid: 5
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 3
|
||||
- type: InstantAction
|
||||
container: 3
|
||||
- uid: 12
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 11
|
||||
- type: InstantAction
|
||||
container: 11
|
||||
- uid: 13
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 11
|
||||
- type: InstantAction
|
||||
container: 11
|
||||
- uid: 22
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 21
|
||||
- type: InstantAction
|
||||
container: 21
|
||||
- uid: 23
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 21
|
||||
- type: InstantAction
|
||||
container: 21
|
||||
- uid: 32
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 31
|
||||
- type: InstantAction
|
||||
container: 31
|
||||
- uid: 33
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 31
|
||||
- type: InstantAction
|
||||
container: 31
|
||||
- uid: 42
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 41
|
||||
- type: InstantAction
|
||||
container: 41
|
||||
- uid: 43
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 41
|
||||
- type: InstantAction
|
||||
container: 41
|
||||
- proto: ActionToggleSuitPiece
|
||||
entities:
|
||||
- uid: 51
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 50
|
||||
- type: InstantAction
|
||||
container: 50
|
||||
entIcon: 52
|
||||
- proto: ActionVendingThrow
|
||||
entities:
|
||||
- uid: 54
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 53
|
||||
- type: InstantAction
|
||||
container: 53
|
||||
- proto: AirCanister
|
||||
entities:
|
||||
- uid: 55
|
||||
|
|
@ -2604,27 +2525,8 @@ entities:
|
|||
components:
|
||||
- type: Transform
|
||||
parent: 2
|
||||
- type: HandheldLight
|
||||
selfToggleActionEntity: 5
|
||||
toggleActionEntity: 4
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ent: 6
|
||||
actions: !type:Container
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ents:
|
||||
- 4
|
||||
- 5
|
||||
- type: Physics
|
||||
canCollide: False
|
||||
- type: ActionsContainer
|
||||
- type: Actions
|
||||
actions:
|
||||
- 5
|
||||
- type: InsideEntityStorage
|
||||
- proto: ClothingMaskBreath
|
||||
entities:
|
||||
|
|
@ -2755,23 +2657,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: 11.467667,-10.363369
|
||||
parent: 1
|
||||
- type: ToggleableClothing
|
||||
clothingUid: 52
|
||||
actionEntity: 51
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
toggleable-clothing: !type:ContainerSlot
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ent: 52
|
||||
actions: !type:Container
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ents:
|
||||
- 51
|
||||
- type: Physics
|
||||
canCollide: False
|
||||
- type: ActionsContainer
|
||||
- proto: ClothingOuterSuitFire
|
||||
entities:
|
||||
- uid: 8
|
||||
|
|
@ -3291,102 +3178,26 @@ entities:
|
|||
components:
|
||||
- type: Transform
|
||||
parent: 10
|
||||
- type: HandheldLight
|
||||
selfToggleActionEntity: 13
|
||||
toggleActionEntity: 12
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ent: 14
|
||||
actions: !type:Container
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ents:
|
||||
- 12
|
||||
- 13
|
||||
- type: Physics
|
||||
canCollide: False
|
||||
- type: ActionsContainer
|
||||
- type: Actions
|
||||
actions:
|
||||
- 13
|
||||
- uid: 21
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 20
|
||||
- type: HandheldLight
|
||||
selfToggleActionEntity: 23
|
||||
toggleActionEntity: 22
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ent: 24
|
||||
actions: !type:Container
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ents:
|
||||
- 22
|
||||
- 23
|
||||
- type: Physics
|
||||
canCollide: False
|
||||
- type: ActionsContainer
|
||||
- type: Actions
|
||||
actions:
|
||||
- 23
|
||||
- uid: 31
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 30
|
||||
- type: HandheldLight
|
||||
selfToggleActionEntity: 33
|
||||
toggleActionEntity: 32
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ent: 34
|
||||
actions: !type:Container
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ents:
|
||||
- 32
|
||||
- 33
|
||||
- type: Physics
|
||||
canCollide: False
|
||||
- type: ActionsContainer
|
||||
- type: Actions
|
||||
actions:
|
||||
- 33
|
||||
- uid: 41
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 40
|
||||
- type: HandheldLight
|
||||
selfToggleActionEntity: 43
|
||||
toggleActionEntity: 42
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ent: 44
|
||||
actions: !type:Container
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ents:
|
||||
- 42
|
||||
- 43
|
||||
- type: Physics
|
||||
canCollide: False
|
||||
- type: ActionsContainer
|
||||
- type: Actions
|
||||
actions:
|
||||
- 43
|
||||
- proto: FoodBoxDonut
|
||||
entities:
|
||||
- uid: 583
|
||||
|
|
@ -7517,17 +7328,6 @@ entities:
|
|||
- type: Transform
|
||||
pos: 16.5,-0.5
|
||||
parent: 1
|
||||
- type: VendingMachine
|
||||
actionEntity: 54
|
||||
- type: Actions
|
||||
actions:
|
||||
- 54
|
||||
- type: ActionsContainer
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
actions: !type:Container
|
||||
ents:
|
||||
- 54
|
||||
- proto: VendingMachineWallMedical
|
||||
entities:
|
||||
- uid: 926
|
||||
|
|
|
|||
|
|
@ -2855,14 +2855,6 @@ entities:
|
|||
- type: GasTileOverlay
|
||||
- type: RadiationGridResistance
|
||||
- type: NavMap
|
||||
- proto: ActionToggleLight
|
||||
entities:
|
||||
- uid: 7876
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 7875
|
||||
- type: InstantAction
|
||||
container: 7875
|
||||
- proto: AirAlarm
|
||||
entities:
|
||||
- uid: 1942
|
||||
|
|
@ -39104,22 +39096,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: -43.645462,-17.224262
|
||||
parent: 30
|
||||
- type: HandheldLight
|
||||
toggleActionEntity: 7876
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ent: null
|
||||
actions: !type:Container
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ents:
|
||||
- 7876
|
||||
- type: Physics
|
||||
canCollide: True
|
||||
- type: ActionsContainer
|
||||
- proto: LemonSeeds
|
||||
entities:
|
||||
- uid: 8448
|
||||
|
|
|
|||
|
|
@ -9395,14 +9395,6 @@ entities:
|
|||
- type: Transform
|
||||
pos: 31.477634,-79.4623
|
||||
parent: 60
|
||||
- proto: ActionToggleLight
|
||||
entities:
|
||||
- uid: 3189
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 19193
|
||||
- type: InstantAction
|
||||
container: 19193
|
||||
- proto: AirAlarm
|
||||
entities:
|
||||
- uid: 249
|
||||
|
|
@ -70806,20 +70798,6 @@ entities:
|
|||
- type: Transform
|
||||
pos: 20.983997,21.51571
|
||||
parent: 60
|
||||
- type: HandheldLight
|
||||
toggleActionEntity: 3189
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ent: null
|
||||
actions: !type:Container
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ents:
|
||||
- 3189
|
||||
- type: ActionsContainer
|
||||
- uid: 21240
|
||||
components:
|
||||
- type: Transform
|
||||
|
|
|
|||
|
|
@ -4499,20 +4499,6 @@ entities:
|
|||
- type: Transform
|
||||
pos: 3.5402613,7.6028175
|
||||
parent: 1
|
||||
- proto: ActionToggleLight
|
||||
entities:
|
||||
- uid: 9312
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 12532
|
||||
- type: InstantAction
|
||||
container: 12532
|
||||
- uid: 9313
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 12533
|
||||
- type: InstantAction
|
||||
container: 12533
|
||||
- proto: AirAlarm
|
||||
entities:
|
||||
- uid: 8049
|
||||
|
|
@ -35985,39 +35971,11 @@ entities:
|
|||
- type: Transform
|
||||
pos: 16.59333,23.726284
|
||||
parent: 1
|
||||
- type: HandheldLight
|
||||
toggleActionEntity: 9312
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ent: null
|
||||
actions: !type:Container
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ents:
|
||||
- 9312
|
||||
- type: ActionsContainer
|
||||
- uid: 12533
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 16.59333,23.476284
|
||||
parent: 1
|
||||
- type: HandheldLight
|
||||
toggleActionEntity: 9313
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ent: null
|
||||
actions: !type:Container
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ents:
|
||||
- 9313
|
||||
- type: ActionsContainer
|
||||
- proto: Floodlight
|
||||
entities:
|
||||
- uid: 7307
|
||||
|
|
|
|||
|
|
@ -7773,14 +7773,6 @@ entities:
|
|||
- type: Transform
|
||||
pos: -19.30925,-35.362278
|
||||
parent: 30
|
||||
- proto: ActionToggleLight
|
||||
entities:
|
||||
- uid: 3117
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 5704
|
||||
- type: InstantAction
|
||||
container: 5704
|
||||
- proto: AirAlarm
|
||||
entities:
|
||||
- uid: 6224
|
||||
|
|
@ -98436,22 +98428,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: 2.4391665,31.963726
|
||||
parent: 30
|
||||
- type: HandheldLight
|
||||
toggleActionEntity: 3117
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ent: null
|
||||
actions: !type:Container
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ents:
|
||||
- 3117
|
||||
- type: Physics
|
||||
canCollide: True
|
||||
- type: ActionsContainer
|
||||
- uid: 7472
|
||||
components:
|
||||
- type: Transform
|
||||
|
|
|
|||
|
|
@ -9688,70 +9688,6 @@ entities:
|
|||
- type: Transform
|
||||
pos: 19.476593,-4.469906
|
||||
parent: 21002
|
||||
- proto: ActionToggleInternals
|
||||
entities:
|
||||
- uid: 23831
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 23830
|
||||
- type: InstantAction
|
||||
container: 23830
|
||||
- uid: 23833
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 23832
|
||||
- type: InstantAction
|
||||
container: 23832
|
||||
- uid: 23835
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 23834
|
||||
- type: InstantAction
|
||||
container: 23834
|
||||
- uid: 23837
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 23836
|
||||
- type: InstantAction
|
||||
container: 23836
|
||||
- uid: 23839
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 23838
|
||||
- type: InstantAction
|
||||
container: 23838
|
||||
- uid: 28282
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 28281
|
||||
- type: InstantAction
|
||||
container: 28281
|
||||
- uid: 28284
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 28283
|
||||
- type: InstantAction
|
||||
container: 28283
|
||||
- proto: ActionToggleLight
|
||||
entities:
|
||||
- uid: 2263
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 2262
|
||||
- type: InstantAction
|
||||
container: 2262
|
||||
- uid: 6624
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 6623
|
||||
- type: InstantAction
|
||||
container: 6623
|
||||
- uid: 23803
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 23802
|
||||
- type: InstantAction
|
||||
container: 23802
|
||||
- proto: AirAlarm
|
||||
entities:
|
||||
- uid: 5583
|
||||
|
|
@ -74652,20 +74588,6 @@ entities:
|
|||
- type: Transform
|
||||
pos: -1.6524403,40.692146
|
||||
parent: 2
|
||||
- type: HandheldLight
|
||||
toggleActionEntity: 23803
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ent: null
|
||||
actions: !type:Container
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ents:
|
||||
- 23803
|
||||
- type: ActionsContainer
|
||||
- proto: ClothingHeadHelmetRiot
|
||||
entities:
|
||||
- uid: 4267
|
||||
|
|
@ -86086,14 +86008,6 @@ entities:
|
|||
- type: Transform
|
||||
pos: -26.335854,15.494169
|
||||
parent: 2
|
||||
- type: GasTank
|
||||
toggleActionEntity: 23839
|
||||
- type: ActionsContainer
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
actions: !type:Container
|
||||
ents:
|
||||
- 23839
|
||||
- proto: DoubleEmergencyOxygenTankFilled
|
||||
entities:
|
||||
- uid: 23832
|
||||
|
|
@ -86101,14 +86015,6 @@ entities:
|
|||
- type: Transform
|
||||
pos: -26.606686,15.712919
|
||||
parent: 2
|
||||
- type: GasTank
|
||||
toggleActionEntity: 23833
|
||||
- type: ActionsContainer
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
actions: !type:Container
|
||||
ents:
|
||||
- 23833
|
||||
- proto: Dresser
|
||||
entities:
|
||||
- uid: 22340
|
||||
|
|
@ -87717,14 +87623,6 @@ entities:
|
|||
- type: Transform
|
||||
pos: -26.28377,14.921253
|
||||
parent: 2
|
||||
- type: GasTank
|
||||
toggleActionEntity: 23837
|
||||
- type: ActionsContainer
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
actions: !type:Container
|
||||
ents:
|
||||
- 23837
|
||||
- uid: 28423
|
||||
components:
|
||||
- type: Transform
|
||||
|
|
@ -87747,40 +87645,16 @@ entities:
|
|||
- type: Transform
|
||||
pos: -26.481686,14.431669
|
||||
parent: 2
|
||||
- type: GasTank
|
||||
toggleActionEntity: 23835
|
||||
- type: ActionsContainer
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
actions: !type:Container
|
||||
ents:
|
||||
- 23835
|
||||
- uid: 28281
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 43.584152,5.432804
|
||||
parent: 21002
|
||||
- type: GasTank
|
||||
toggleActionEntity: 28282
|
||||
- type: ActionsContainer
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
actions: !type:Container
|
||||
ents:
|
||||
- 28282
|
||||
- uid: 28283
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 64.58009,6.520523
|
||||
parent: 21002
|
||||
- type: GasTank
|
||||
toggleActionEntity: 28284
|
||||
- type: ActionsContainer
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
actions: !type:Container
|
||||
ents:
|
||||
- 28284
|
||||
- uid: 28286
|
||||
components:
|
||||
- type: Transform
|
||||
|
|
@ -87989,14 +87863,6 @@ entities:
|
|||
- type: Transform
|
||||
pos: -26.606686,14.921253
|
||||
parent: 2
|
||||
- type: GasTank
|
||||
toggleActionEntity: 23831
|
||||
- type: ActionsContainer
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
actions: !type:Container
|
||||
ents:
|
||||
- 23831
|
||||
- proto: ExtinguisherCabinetFilled
|
||||
entities:
|
||||
- uid: 5804
|
||||
|
|
@ -134748,22 +134614,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: -31.387814,-44.28387
|
||||
parent: 2
|
||||
- type: HandheldLight
|
||||
toggleActionEntity: 2263
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ent: null
|
||||
actions: !type:Container
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ents:
|
||||
- 2263
|
||||
- type: Physics
|
||||
canCollide: True
|
||||
- type: ActionsContainer
|
||||
- proto: LampGold
|
||||
entities:
|
||||
- uid: 1597
|
||||
|
|
@ -134788,22 +134640,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: 3.4081588,44.633736
|
||||
parent: 2
|
||||
- type: HandheldLight
|
||||
toggleActionEntity: 6624
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ent: null
|
||||
actions: !type:Container
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ents:
|
||||
- 6624
|
||||
- type: Physics
|
||||
canCollide: True
|
||||
- type: ActionsContainer
|
||||
- uid: 7981
|
||||
components:
|
||||
- type: Transform
|
||||
|
|
|
|||
|
|
@ -3401,14 +3401,6 @@ entities:
|
|||
- type: Transform
|
||||
pos: -11.470391,11.486723
|
||||
parent: 31
|
||||
- proto: ActionToggleLight
|
||||
entities:
|
||||
- uid: 7544
|
||||
components:
|
||||
- type: Transform
|
||||
parent: 9761
|
||||
- type: InstantAction
|
||||
container: 9761
|
||||
- proto: AirAlarm
|
||||
entities:
|
||||
- uid: 5107
|
||||
|
|
@ -48902,20 +48894,6 @@ entities:
|
|||
- type: Transform
|
||||
pos: -16.721703,-38.96948
|
||||
parent: 31
|
||||
- type: HandheldLight
|
||||
toggleActionEntity: 7544
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ent: null
|
||||
actions: !type:Container
|
||||
showEnts: False
|
||||
occludes: True
|
||||
ents:
|
||||
- 7544
|
||||
- type: ActionsContainer
|
||||
- proto: LargeBeaker
|
||||
entities:
|
||||
- uid: 5074
|
||||
|
|
|
|||
|
|
@ -10,3 +10,42 @@
|
|||
- type: Item
|
||||
size: Small
|
||||
storedRotation: -90
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingEyesBase, BaseFoldable]
|
||||
id: ClothingHeadEyeBaseFlippable
|
||||
abstract: true
|
||||
components:
|
||||
- type: Appearance
|
||||
- type: FlippableClothingVisuals
|
||||
- type: Foldable
|
||||
canFoldInsideContainer: true
|
||||
unfoldVerbText: fold-flip-verb
|
||||
foldVerbText: fold-flip-verb
|
||||
- type: FoldableClothing
|
||||
- type: Sprite
|
||||
layers:
|
||||
- map: [ "unfoldedLayer" ]
|
||||
state: icon
|
||||
- map: ["foldedLayer"]
|
||||
state: icon
|
||||
visible: false
|
||||
scale: -1,1
|
||||
|
||||
- type: entity
|
||||
parent: ClothingHeadEyeBaseFlippable
|
||||
id: ClothingHeadEyeBaseFlipped
|
||||
suffix: flipped
|
||||
abstract: true
|
||||
components:
|
||||
- type: Foldable
|
||||
folded: true
|
||||
- type: Sprite
|
||||
layers:
|
||||
- map: [ "unfoldedLayer" ]
|
||||
state: icon
|
||||
visible: false
|
||||
- map: ["foldedLayer"]
|
||||
state: icon
|
||||
visible: true
|
||||
scale: -1,1
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@
|
|||
suffix: Syndicate
|
||||
|
||||
- type: entity
|
||||
parent: ClothingEyesHudMedical
|
||||
parent: [ClothingEyesHudMedical, ClothingHeadEyeBaseFlippable]
|
||||
id: ClothingEyesEyepatchHudMedical
|
||||
name: medical hud eyepatch
|
||||
description: A heads-up display that scans the humanoids in view and provides accurate data about their health status. For true patriots.
|
||||
|
|
@ -231,7 +231,12 @@
|
|||
sprite: Clothing/Eyes/Hud/medpatch.rsi
|
||||
|
||||
- type: entity
|
||||
parent: ClothingEyesHudSecurity
|
||||
parent: [ClothingEyesEyepatchHudMedical, ClothingHeadEyeBaseFlipped]
|
||||
id: ClothingEyesEyepatchHudMedicalFlipped
|
||||
name: medical hud eyepatch
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingEyesHudSecurity, ClothingHeadEyeBaseFlippable]
|
||||
id: ClothingEyesEyepatchHudSecurity
|
||||
name: security hud eyepatch
|
||||
description: A heads-up display that scans the humanoids in view and provides accurate data about their ID status and security records. For true patriots.
|
||||
|
|
@ -242,7 +247,12 @@
|
|||
sprite: Clothing/Eyes/Hud/secpatch.rsi
|
||||
|
||||
- type: entity
|
||||
parent: ClothingEyesHudBeer
|
||||
parent: [ClothingEyesEyepatchHudSecurity, ClothingHeadEyeBaseFlipped]
|
||||
id: ClothingEyesEyepatchHudSecurityFlipped
|
||||
name: security hud eyepatch
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingEyesHudBeer, ClothingHeadEyeBaseFlippable]
|
||||
id: ClothingEyesEyepatchHudBeer
|
||||
name: beer hud eyepatch
|
||||
description: A pair of sunHud outfitted with apparatus to scan reagents, as well as providing an innate understanding of liquid viscosity while in motion. For true patriots.
|
||||
|
|
@ -253,7 +263,12 @@
|
|||
sprite: Clothing/Eyes/Hud/beerpatch.rsi
|
||||
|
||||
- type: entity
|
||||
parent: ClothingEyesBase
|
||||
parent: [ClothingEyesEyepatchHudBeer, ClothingHeadEyeBaseFlipped]
|
||||
id: ClothingEyesEyepatchHudBeerFlipped
|
||||
name: beer hud eyepatch
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingEyesHudDiagnostic, ClothingHeadEyeBaseFlippable]
|
||||
id: ClothingEyesEyepatchHudDiag
|
||||
name: diagnostic hud eyepatch
|
||||
description: A heads-up display capable of analyzing the integrity and status of robotics and exosuits. Made out of see-borg-ium.
|
||||
|
|
@ -262,7 +277,8 @@
|
|||
sprite: Clothing/Eyes/Hud/diagpatch.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Eyes/Hud/diagpatch.rsi
|
||||
- type: ShowHealthBars
|
||||
damageContainers:
|
||||
- Inorganic
|
||||
- Silicon
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingEyesEyepatchHudDiag, ClothingHeadEyeBaseFlipped]
|
||||
id: ClothingEyesEyepatchHudDiagFlipped
|
||||
name: diagnostic hud eyepatch
|
||||
|
|
|
|||
|
|
@ -1,16 +1,3 @@
|
|||
- type: entity
|
||||
parent: ClothingEyesBase
|
||||
id: ClothingEyesEyepatch
|
||||
name: eyepatch
|
||||
description: Yarr.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Eyes/Misc/eyepatch.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Eyes/Misc/eyepatch.rsi
|
||||
- type: EyeProtection
|
||||
protectionTime: 5
|
||||
|
||||
- type: entity
|
||||
parent: ClothingEyesBase
|
||||
id: ClothingEyesBlindfold
|
||||
|
|
@ -26,3 +13,21 @@
|
|||
graph: Blindfold
|
||||
node: blindfold
|
||||
- type: FlashImmunity
|
||||
|
||||
- type: entity
|
||||
parent: ClothingHeadEyeBaseFlippable
|
||||
id: ClothingEyesEyepatch
|
||||
name: eyepatch
|
||||
description: Yarr.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Eyes/Misc/eyepatch.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Eyes/Misc/eyepatch.rsi
|
||||
- type: EyeProtection
|
||||
protectionTime: 5
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingEyesEyepatch, ClothingHeadEyeBaseFlipped]
|
||||
id: ClothingEyesEyepatchFlipped
|
||||
suffix: flipped
|
||||
|
|
|
|||
|
|
@ -294,6 +294,15 @@
|
|||
- sprite: Mobs/Customization/reptilian_parts.rsi
|
||||
state: horns_bighorn
|
||||
|
||||
- type: marking
|
||||
id: LizardHornsDemonic
|
||||
bodyPart: HeadTop
|
||||
markingCategory: HeadTop
|
||||
speciesRestriction: [Reptilian]
|
||||
sprites:
|
||||
- sprite: Mobs/Customization/reptilian_parts.rsi
|
||||
state: horns_demonic
|
||||
|
||||
- type: marking
|
||||
id: LizardHornsKoboldEars
|
||||
bodyPart: HeadTop
|
||||
|
|
|
|||
|
|
@ -233,9 +233,20 @@
|
|||
deviceNetId: Wireless
|
||||
receiveFrequencyId: CyborgControl
|
||||
transmitFrequencyId: RoboticsConsole
|
||||
- type: OnUseTimerTrigger
|
||||
delay: 10
|
||||
examinable: false
|
||||
beepSound:
|
||||
path: /Audio/Effects/Cargo/buzz_two.ogg
|
||||
params:
|
||||
volume: -4
|
||||
# prevent any funnies if someone makes a cyborg item...
|
||||
- type: AutomatedTimer
|
||||
- type: ExplodeOnTrigger
|
||||
# explosion does most of its damage in the center and less at the edges
|
||||
- type: Explosive
|
||||
explosionType: Minibomb
|
||||
deleteAfterExplosion: false # let damage threshold gib the borg
|
||||
totalIntensity: 30
|
||||
intensitySlope: 20
|
||||
maxIntensity: 20
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "https://github.com/Skyrat-SS13/Skyrat-tg/tree/40e3cdbb15b8bc0d5ef2fb46133adf805bda5297, while Argali, Ayrshire, Myrsore and Bighorn are drawn by Ubaser, and Kobold Ears are drawn by Pigeonpeas. Body_underbelly made by Nairod(github) for SS14. Large drawn by Ubaser. Wagging tail by SonicDC. Splotch modified from Sharp by KittenColony(github). Frills neckfull come from: https://github.com/Bubberstation/Bubberstation/commit/8bc6b83404803466a560b694bf22ef3c0ac266a2",
|
||||
"copyright": "https://github.com/Skyrat-SS13/Skyrat-tg/tree/40e3cdbb15b8bc0d5ef2fb46133adf805bda5297, while Argali, Ayrshire, Myrsore, Bighorn and Demonic are drawn by Ubaser, and Kobold Ears are drawn by Pigeonpeas. Body_underbelly made by Nairod(github) for SS14. Large drawn by Ubaser. Wagging tail by SonicDC. Splotch modified from Sharp by KittenColony(github). Frills neckfull come from: https://github.com/Bubberstation/Bubberstation/commit/8bc6b83404803466a560b694bf22ef3c0ac266a2",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
|
|
@ -581,6 +581,10 @@
|
|||
"name": "horns_bighorn",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "horns_demonic",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "horns_kobold_ears",
|
||||
"directions": 4
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue