Merge remote-tracking branch 'space-wizards/master'
# Conflicts: # .github/CODEOWNERS # Content.Client/Movement/Systems/EyeCursorOffsetSystem.cs # Resources/Maps/_Sunrise/Station/bagel.yml
This commit is contained in:
commit
a3d094ba50
53 changed files with 586 additions and 426 deletions
|
|
@ -1,5 +1,6 @@
|
|||
using Content.Shared.Drunk;
|
||||
using Content.Shared.StatusEffect;
|
||||
using Content.Shared.StatusEffectNew;
|
||||
using Robust.Client.Graphics;
|
||||
using Robust.Client.Player;
|
||||
using Robust.Shared.Enums;
|
||||
|
|
@ -43,19 +44,21 @@ public sealed class DrunkOverlay : Overlay
|
|||
if (playerEntity == null)
|
||||
return;
|
||||
|
||||
if (!_entityManager.HasComponent<DrunkComponent>(playerEntity)
|
||||
|| !_entityManager.TryGetComponent<StatusEffectsComponent>(playerEntity, out var status))
|
||||
var statusSys = _sysMan.GetEntitySystem<Shared.StatusEffectNew.StatusEffectsSystem>();
|
||||
if (!statusSys.TryGetMaxTime<DrunkStatusEffectComponent>(playerEntity.Value, out var status))
|
||||
return;
|
||||
|
||||
var statusSys = _sysMan.GetEntitySystem<StatusEffectsSystem>();
|
||||
if (!statusSys.TryGetTime(playerEntity.Value, SharedDrunkSystem.DrunkKey, out var time, status))
|
||||
return;
|
||||
var time = status.Item2;
|
||||
|
||||
var power = SharedDrunkSystem.MagicNumber;
|
||||
|
||||
if (time != null)
|
||||
{
|
||||
var curTime = _timing.CurTime;
|
||||
var timeLeft = (float) (time.Value.Item2 - curTime).TotalSeconds;
|
||||
power = (float) (time - curTime).Value.TotalSeconds;
|
||||
}
|
||||
|
||||
|
||||
CurrentBoozePower += 8f * (0.5f*timeLeft - CurrentBoozePower) * args.DeltaSeconds / (timeLeft+1);
|
||||
CurrentBoozePower += 8f * (power * 0.5f - CurrentBoozePower) * args.DeltaSeconds / (power+1);
|
||||
}
|
||||
|
||||
protected override bool BeforeDraw(in OverlayDrawArgs args)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using Content.Shared.Drunk;
|
||||
using Content.Shared.StatusEffectNew;
|
||||
using Robust.Client.Graphics;
|
||||
using Robust.Client.Player;
|
||||
using Robust.Shared.Player;
|
||||
|
|
@ -16,38 +17,41 @@ public sealed class DrunkSystem : SharedDrunkSystem
|
|||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<DrunkComponent, ComponentInit>(OnDrunkInit);
|
||||
SubscribeLocalEvent<DrunkComponent, ComponentShutdown>(OnDrunkShutdown);
|
||||
SubscribeLocalEvent<DrunkStatusEffectComponent, StatusEffectAppliedEvent>(OnStatusApplied);
|
||||
SubscribeLocalEvent<DrunkStatusEffectComponent, StatusEffectRemovedEvent>(OnStatusRemoved);
|
||||
|
||||
SubscribeLocalEvent<DrunkComponent, LocalPlayerAttachedEvent>(OnPlayerAttached);
|
||||
SubscribeLocalEvent<DrunkComponent, LocalPlayerDetachedEvent>(OnPlayerDetached);
|
||||
SubscribeLocalEvent<DrunkStatusEffectComponent, StatusEffectRelayedEvent<LocalPlayerAttachedEvent>>(OnPlayerAttached);
|
||||
SubscribeLocalEvent<DrunkStatusEffectComponent, StatusEffectRelayedEvent<LocalPlayerDetachedEvent>>(OnPlayerDetached);
|
||||
|
||||
_overlay = new();
|
||||
}
|
||||
|
||||
private void OnPlayerAttached(EntityUid uid, DrunkComponent component, LocalPlayerAttachedEvent args)
|
||||
private void OnStatusApplied(Entity<DrunkStatusEffectComponent> entity, ref StatusEffectAppliedEvent args)
|
||||
{
|
||||
if (!_overlayMan.HasOverlay<DrunkOverlay>())
|
||||
_overlayMan.AddOverlay(_overlay);
|
||||
}
|
||||
|
||||
private void OnPlayerDetached(EntityUid uid, DrunkComponent component, LocalPlayerDetachedEvent args)
|
||||
private void OnStatusRemoved(Entity<DrunkStatusEffectComponent> entity, ref StatusEffectRemovedEvent args)
|
||||
{
|
||||
if (Status.HasEffectComp<DrunkStatusEffectComponent>(args.Target))
|
||||
return;
|
||||
|
||||
if (_player.LocalEntity != args.Target)
|
||||
return;
|
||||
|
||||
_overlay.CurrentBoozePower = 0;
|
||||
_overlayMan.RemoveOverlay(_overlay);
|
||||
}
|
||||
|
||||
private void OnDrunkInit(EntityUid uid, DrunkComponent component, ComponentInit args)
|
||||
private void OnPlayerAttached(Entity<DrunkStatusEffectComponent> entity, ref StatusEffectRelayedEvent<LocalPlayerAttachedEvent> args)
|
||||
{
|
||||
if (_player.LocalEntity == uid)
|
||||
_overlayMan.AddOverlay(_overlay);
|
||||
}
|
||||
|
||||
private void OnDrunkShutdown(EntityUid uid, DrunkComponent component, ComponentShutdown args)
|
||||
{
|
||||
if (_player.LocalEntity == uid)
|
||||
private void OnPlayerDetached(Entity<DrunkStatusEffectComponent> entity, ref StatusEffectRelayedEvent<LocalPlayerDetachedEvent> args)
|
||||
{
|
||||
_overlay.CurrentBoozePower = 0;
|
||||
_overlayMan.RemoveOverlay(_overlay);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ namespace Content.Client.Inventory
|
|||
{
|
||||
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
||||
[Dependency] private readonly IUserInterfaceManager _ui = default!;
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly ClientClothingSystem _clothingVisualsSystem = default!;
|
||||
[Dependency] private readonly ExamineSystem _examine = default!;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
using System.Numerics;
|
||||
using Content.Shared.Movement.Components;
|
||||
using Content.Shared.Movement.Systems;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Client.Player;
|
||||
|
||||
namespace Content.Client.Movement.Systems;
|
||||
|
|
@ -63,4 +62,15 @@ public sealed class ContentEyeSystem : SharedContentEyeSystem
|
|||
UpdateEyeOffset((entity, eyeComponent));
|
||||
}
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
base.Update(frameTime);
|
||||
// TODO: Ideally we wouldn't want this to run in both FrameUpdate and Update, but we kind of have to since the visual update happens in FrameUpdate, but interaction update happens in Update. It's a workaround and a better solution should be found.
|
||||
var eyeEntities = AllEntityQuery<ContentEyeComponent, EyeComponent>();
|
||||
while (eyeEntities.MoveNext(out var entity, out ContentEyeComponent? contentComponent, out EyeComponent? eyeComponent))
|
||||
{
|
||||
UpdateEyeOffset((entity, eyeComponent));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using System.Numerics;
|
||||
using Content.Client.Movement.Components;
|
||||
using Content.Shared._Sunrise.SunriseCCVars;
|
||||
using Content.Client.Viewport;
|
||||
using Content.Shared.Camera;
|
||||
using Content.Shared.Input;
|
||||
using Robust.Client.GameObjects;
|
||||
|
|
@ -31,7 +32,7 @@ public sealed partial class EyeCursorOffsetSystem : EntitySystem
|
|||
|
||||
// This value is here to make sure the user doesn't have to move their mouse
|
||||
// all the way out to the edge of the screen to get the full offset.
|
||||
private readonly float _edgeOffset = 0.9f;
|
||||
private static float _edgeOffset = 0.8f;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
|
|
@ -63,6 +64,10 @@ public sealed partial class EyeCursorOffsetSystem : EntitySystem
|
|||
|
||||
public Vector2? OffsetAfterMouse(EntityUid uid, EyeCursorOffsetComponent? component)
|
||||
{
|
||||
// We need the main viewport where the game content is displayed, as certain UI layouts (e.g. Separated HUD) can make it a different size to the game window.
|
||||
if (_eyeManager.MainViewport is not ScalingViewport vp)
|
||||
return null;
|
||||
|
||||
// Sunrise-Start
|
||||
if (_holdLookUp)
|
||||
{
|
||||
|
|
@ -77,24 +82,25 @@ public sealed partial class EyeCursorOffsetSystem : EntitySystem
|
|||
}
|
||||
// Sunrise-End
|
||||
|
||||
var localPlayer = _player.LocalEntity;
|
||||
var mousePos = _inputManager.MouseScreenPosition;
|
||||
var screenControl = _eyeManager.MainViewport as Control;
|
||||
var screenSize = screenControl?.PixelSize ?? _clyde.MainWindow.Size;
|
||||
var minValue = MathF.Min(screenSize.X / 2, screenSize.Y / 2) * _edgeOffset;
|
||||
var mousePos = _inputManager.MouseScreenPosition.Position; // TODO: If we ever get a right-aligned Separated HUD setting, this might need to be adjusted for that.
|
||||
|
||||
var mouseNormalizedPos = new Vector2(-(mousePos.X - screenSize.X / 2) / minValue, (mousePos.Y - screenSize.Y / 2) / minValue); // X needs to be inverted here for some reason, otherwise it ends up flipped.
|
||||
var viewportSize = vp.PixelSize; // The size of the game viewport, including black bars - does not include the chatbox in Separated HUD view.
|
||||
var scalingViewportSize = vp.ViewportSize * vp.CurrentRenderScale; // The size of the viewport in which the game is rendered (i.e. not including black bars). Note! Can extend outside the game window with certain zoom settings!
|
||||
var visibleViewportSize = Vector2.Min(viewportSize, scalingViewportSize); // The size of the game viewport that is "actually visible" to the player, cutting off over-extensions and not counting black bar padding.
|
||||
|
||||
if (localPlayer == null)
|
||||
return null;
|
||||
Matrix3x2.Invert(_eyeManager.MainViewport.GetLocalToScreenMatrix(), out var matrix);
|
||||
var mouseCoords = Vector2.Transform(mousePos, matrix); // Gives the mouse position inside of the *scaling viewport*, i.e. 0,0 is inside the black bars. Note! 0,0 can be outside the game window with certain zoom settings!
|
||||
|
||||
var boundedMousePos = Vector2.Clamp(Vector2.Min(mouseCoords, mousePos), Vector2.Zero, visibleViewportSize); // Mouse position inside the visible game viewport's bounds.
|
||||
|
||||
var offsetRadius = MathF.Min(visibleViewportSize.X / 2f, visibleViewportSize.Y / 2f) * _edgeOffset;
|
||||
var mouseNormalizedPos = new Vector2(-(boundedMousePos.X - visibleViewportSize.X / 2f) / offsetRadius, (boundedMousePos.Y - visibleViewportSize.Y / 2f) / offsetRadius);
|
||||
|
||||
if (component == null)
|
||||
{
|
||||
component = EnsureComp<EyeCursorOffsetComponent>(uid);
|
||||
}
|
||||
|
||||
// Doesn't move the offset if the mouse has left the game window!
|
||||
if (mousePos.Window != WindowId.Invalid)
|
||||
if (_inputManager.MouseScreenPosition.Window != WindowId.Invalid)
|
||||
{
|
||||
// The offset must account for the in-world rotation.
|
||||
var eyeRotation = _eyeManager.CurrentEye.Rotation;
|
||||
|
|
@ -115,7 +121,7 @@ public sealed partial class EyeCursorOffsetSystem : EntitySystem
|
|||
var vectorOffset = component.TargetPosition - component.CurrentPosition;
|
||||
if (vectorOffset.Length() > component.OffsetSpeed)
|
||||
{
|
||||
vectorOffset = vectorOffset.Normalized() * component.OffsetSpeed;
|
||||
vectorOffset = vectorOffset.Normalized() * component.OffsetSpeed; // TODO: Probably needs to properly account for time delta or something.
|
||||
}
|
||||
component.CurrentPosition += vectorOffset;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ namespace Content.Client.Stack
|
|||
{
|
||||
[Dependency] private readonly AppearanceSystem _appearanceSystem = default!;
|
||||
[Dependency] private readonly ItemCounterSystem _counterSystem = default!;
|
||||
[Dependency] private readonly SpriteSystem _sprite = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ public sealed class MenuButton : ContainerButton
|
|||
private Color NormalColor => HasStyleClass(StyleClassRedTopButton) ? ColorRedNormal : ColorNormal;
|
||||
private Color HoveredColor => HasStyleClass(StyleClassRedTopButton) ? ColorRedHovered : ColorHovered;
|
||||
|
||||
private BoundKeyFunction _function;
|
||||
private BoundKeyFunction? _function;
|
||||
private readonly BoxContainer _root;
|
||||
private readonly TextureRect? _buttonIcon;
|
||||
private readonly Label? _buttonLabel;
|
||||
|
|
@ -33,13 +33,13 @@ public sealed class MenuButton : ContainerButton
|
|||
public string AppendStyleClass { set => AddStyleClass(value); }
|
||||
public Texture? Icon { get => _buttonIcon!.Texture; set => _buttonIcon!.Texture = value; }
|
||||
|
||||
public BoundKeyFunction BoundKey
|
||||
public BoundKeyFunction? BoundKey
|
||||
{
|
||||
get => _function;
|
||||
set
|
||||
{
|
||||
_function = value;
|
||||
_buttonLabel!.Text = BoundKeyHelper.ShortKeyName(value);
|
||||
_buttonLabel!.Text = _function == null ? "" : BoundKeyHelper.ShortKeyName(_function.Value);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -95,12 +95,12 @@ public sealed class MenuButton : ContainerButton
|
|||
|
||||
private void OnKeyBindingChanged(IKeyBinding obj)
|
||||
{
|
||||
_buttonLabel!.Text = BoundKeyHelper.ShortKeyName(_function);
|
||||
_buttonLabel!.Text = _function == null ? "" : BoundKeyHelper.ShortKeyName(_function.Value);
|
||||
}
|
||||
|
||||
private void OnKeyBindingChanged()
|
||||
{
|
||||
_buttonLabel!.Text = BoundKeyHelper.ShortKeyName(_function);
|
||||
_buttonLabel!.Text = _function == null ? "" : BoundKeyHelper.ShortKeyName(_function.Value);
|
||||
}
|
||||
|
||||
protected override void StylePropertiesChanged()
|
||||
|
|
|
|||
|
|
@ -29,7 +29,10 @@ public sealed class WieldableSystem : SharedWieldableSystem
|
|||
return;
|
||||
|
||||
if (_gameTiming.IsFirstTimePredicted)
|
||||
{
|
||||
cursorOffsetComp.CurrentPosition = Vector2.Zero;
|
||||
cursorOffsetComp.TargetPosition = Vector2.Zero;
|
||||
}
|
||||
}
|
||||
|
||||
public void OnGetEyeOffset(Entity<CursorOffsetRequiresWieldComponent> entity, ref HeldRelayedEvent<GetEyeOffsetRelayedEvent> args)
|
||||
|
|
|
|||
|
|
@ -29,12 +29,10 @@ public sealed partial class ParrotMemorySystem : SharedParrotMemorySystem
|
|||
{
|
||||
[Dependency] private readonly EntityWhitelistSystem _whitelist = default!;
|
||||
[Dependency] private readonly IAdminLogManager _adminLogger = default!;
|
||||
[Dependency] private readonly IAdminManager _admin = default!;
|
||||
[Dependency] private readonly IGameTiming _gameTiming = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly MindSystem _mind = default!;
|
||||
[Dependency] private readonly MobStateSystem _mobState = default!;
|
||||
[Dependency] private readonly PopupSystem _popup = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -418,7 +418,7 @@ public sealed class ElectrocutionSystem : SharedElectrocutionSystem
|
|||
}
|
||||
}
|
||||
|
||||
_stuttering.DoStutter(uid, time * StutteringTimeMultiplier, refresh, statusEffects);
|
||||
_stuttering.DoStutter(uid, time * StutteringTimeMultiplier, refresh);
|
||||
_jittering.DoJitter(uid, time * JitterTimeMultiplier, refresh, JitterAmplitude, JitterFrequency, true, statusEffects);
|
||||
|
||||
_popup.PopupEntity(Loc.GetString("electrocuted-component-mob-shocked-popup-player"), uid, uid);
|
||||
|
|
|
|||
|
|
@ -42,14 +42,12 @@ public sealed class NPCUtilitySystem : EntitySystem
|
|||
{
|
||||
[Dependency] private readonly IPrototypeManager _proto = default!;
|
||||
[Dependency] private readonly ContainerSystem _container = default!;
|
||||
[Dependency] private readonly DrinkSystem _drink = default!;
|
||||
[Dependency] private readonly EntityLookupSystem _lookup = default!;
|
||||
[Dependency] private readonly HandsSystem _hands = default!;
|
||||
[Dependency] private readonly InventorySystem _inventory = default!;
|
||||
[Dependency] private readonly IngestionSystem _ingestion = default!;
|
||||
[Dependency] private readonly MobStateSystem _mobState = default!;
|
||||
[Dependency] private readonly NpcFactionSystem _npcFaction = default!;
|
||||
[Dependency] private readonly OpenableSystem _openable = default!;
|
||||
[Dependency] private readonly PuddleSystem _puddle = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
[Dependency] private readonly SharedSolutionContainerSystem _solutions = default!;
|
||||
|
|
|
|||
|
|
@ -16,8 +16,6 @@ public sealed class PickObjectiveTargetSystem : EntitySystem
|
|||
{
|
||||
[Dependency] private readonly TargetObjectiveSystem _target = default!;
|
||||
[Dependency] private readonly SharedMindSystem _mind = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly TraitorRuleSystem _traitorRule = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ namespace Content.Server.Silicons.Borgs;
|
|||
public sealed partial class BorgSystem
|
||||
{
|
||||
[Dependency] private readonly EmagSystem _emag = default!;
|
||||
[Dependency] private readonly IEntityManager _entityManager = default!;
|
||||
[Dependency] private readonly MobThresholdSystem _mobThresholdSystem = default!;
|
||||
[Dependency] private readonly ItemSlotsSystem _itemSlotsSystem = default!;
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ namespace Content.Server.Singularity.EntitySystems
|
|||
public sealed class EmitterSystem : SharedEmitterSystem
|
||||
{
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
||||
[Dependency] private readonly IAdminLogManager _adminLogger = default!;
|
||||
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||
|
|
|
|||
|
|
@ -6,29 +6,25 @@ namespace Content.Server.Speech.Components
|
|||
/// <summary>
|
||||
/// Percentage chance that a stutter will occur if it matches.
|
||||
/// </summary>
|
||||
[DataField("matchRandomProb")]
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField]
|
||||
public float MatchRandomProb = 0.8f;
|
||||
|
||||
/// <summary>
|
||||
/// Percentage chance that a stutter occurs f-f-f-f-four times.
|
||||
/// </summary>
|
||||
[DataField("fourRandomProb")]
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField]
|
||||
public float FourRandomProb = 0.1f;
|
||||
|
||||
/// <summary>
|
||||
/// Percentage chance that a stutter occurs t-t-t-three times.
|
||||
/// </summary>
|
||||
[DataField("threeRandomProb")]
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField]
|
||||
public float ThreeRandomProb = 0.2f;
|
||||
|
||||
/// <summary>
|
||||
/// Percentage chance that a stutter cut off.
|
||||
/// </summary>
|
||||
[DataField("cutRandomProb")]
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField]
|
||||
public float CutRandomProb = 0.05f;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,8 +3,7 @@ using Content.Server.Speech.Components;
|
|||
using Content.Shared.Drunk;
|
||||
using Content.Shared.Speech;
|
||||
using Content.Shared.Speech.EntitySystems;
|
||||
using Content.Shared.StatusEffect;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Content.Shared.StatusEffectNew;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
|
|
@ -12,26 +11,15 @@ namespace Content.Server.Speech.EntitySystems;
|
|||
|
||||
public sealed class SlurredSystem : SharedSlurredSystem
|
||||
{
|
||||
[Dependency] private readonly StatusEffectsSystem _statusEffectsSystem = default!;
|
||||
[Dependency] private readonly StatusEffectsSystem _status = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
|
||||
private static readonly ProtoId<StatusEffectPrototype> SlurKey = "SlurredSpeech";
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<SlurredAccentComponent, AccentGetEvent>(OnAccent);
|
||||
}
|
||||
|
||||
public override void DoSlur(EntityUid uid, TimeSpan time, StatusEffectsComponent? status = null)
|
||||
{
|
||||
if (!Resolve(uid, ref status, false))
|
||||
return;
|
||||
|
||||
if (!_statusEffectsSystem.HasStatusEffect(uid, SlurKey, status))
|
||||
_statusEffectsSystem.TryAddStatusEffect<SlurredAccentComponent>(uid, SlurKey, time, true, status);
|
||||
else
|
||||
_statusEffectsSystem.TryAddTime(uid, SlurKey, time, status);
|
||||
SubscribeLocalEvent<SlurredAccentComponent, StatusEffectRelayedEvent<AccentGetEvent>>(OnAccentRelayed);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -39,15 +27,33 @@ public sealed class SlurredSystem : SharedSlurredSystem
|
|||
/// </summary>
|
||||
private float GetProbabilityScale(EntityUid uid)
|
||||
{
|
||||
if (!_statusEffectsSystem.TryGetTime(uid, SharedDrunkSystem.DrunkKey, out var time))
|
||||
if (!_status.TryGetMaxTime<DrunkStatusEffectComponent>(uid, out var time))
|
||||
return 0;
|
||||
|
||||
// This is a magic number. Why this value? No clue it was made 3 years before I refactored this.
|
||||
var magic = SharedDrunkSystem.MagicNumber;
|
||||
|
||||
if (time.Item2 != null)
|
||||
{
|
||||
var curTime = _timing.CurTime;
|
||||
var timeLeft = (float) (time.Value.Item2 - curTime).TotalSeconds;
|
||||
return Math.Clamp((timeLeft - 80) / 1100, 0f, 1f);
|
||||
magic = (float) (time.Item2 - curTime).Value.TotalSeconds - 80f;
|
||||
}
|
||||
|
||||
private void OnAccent(EntityUid uid, SlurredAccentComponent component, AccentGetEvent args)
|
||||
return Math.Clamp(magic / SharedDrunkSystem.MagicNumber, 0f, 1f);
|
||||
}
|
||||
|
||||
private void OnAccent(Entity<SlurredAccentComponent> entity, ref AccentGetEvent args)
|
||||
{
|
||||
GetAccent(entity, ref args);
|
||||
}
|
||||
|
||||
private void OnAccentRelayed(Entity<SlurredAccentComponent> entity, ref StatusEffectRelayedEvent<AccentGetEvent> args)
|
||||
{
|
||||
var ev = args.Args;
|
||||
GetAccent(args.Args.Entity, ref ev);
|
||||
}
|
||||
|
||||
private void GetAccent(EntityUid uid, ref AccentGetEvent args)
|
||||
{
|
||||
var scale = GetProbabilityScale(uid);
|
||||
args.Message = Accentuate(args.Message, scale);
|
||||
|
|
|
|||
|
|
@ -3,14 +3,13 @@ using System.Text.RegularExpressions;
|
|||
using Content.Server.Speech.Components;
|
||||
using Content.Shared.Speech;
|
||||
using Content.Shared.Speech.EntitySystems;
|
||||
using Content.Shared.StatusEffect;
|
||||
using Content.Shared.StatusEffectNew;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Server.Speech.EntitySystems
|
||||
{
|
||||
public sealed class StutteringSystem : SharedStutteringSystem
|
||||
{
|
||||
[Dependency] private readonly StatusEffectsSystem _statusEffectsSystem = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
|
||||
// Regex of characters to stutter.
|
||||
|
|
@ -20,19 +19,36 @@ namespace Content.Server.Speech.EntitySystems
|
|||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<StutteringAccentComponent, AccentGetEvent>(OnAccent);
|
||||
|
||||
SubscribeLocalEvent<StutteringAccentComponent, StatusEffectRelayedEvent<AccentGetEvent>>(OnAccent);
|
||||
}
|
||||
|
||||
public override void DoStutter(EntityUid uid, TimeSpan time, bool refresh, StatusEffectsComponent? status = null)
|
||||
public override void DoStutter(EntityUid uid, TimeSpan time, bool refresh)
|
||||
{
|
||||
if (!Resolve(uid, ref status, false))
|
||||
return;
|
||||
|
||||
_statusEffectsSystem.TryAddStatusEffect<StutteringAccentComponent>(uid, StutterKey, time, refresh, status);
|
||||
if (refresh)
|
||||
Status.TryUpdateStatusEffectDuration(uid, Stuttering, time);
|
||||
else
|
||||
Status.TryAddStatusEffectDuration(uid, Stuttering, time);
|
||||
}
|
||||
|
||||
private void OnAccent(EntityUid uid, StutteringAccentComponent component, AccentGetEvent args)
|
||||
public override void DoRemoveStutterTime(EntityUid uid, TimeSpan timeRemoved)
|
||||
{
|
||||
args.Message = Accentuate(args.Message, component);
|
||||
Status.TryAddTime(uid, Stuttering, -timeRemoved);
|
||||
}
|
||||
|
||||
public override void DoRemoveStutter(EntityUid uid)
|
||||
{
|
||||
Status.TryRemoveStatusEffect(uid, Stuttering);
|
||||
}
|
||||
|
||||
private void OnAccent(Entity<StutteringAccentComponent> entity, ref AccentGetEvent args)
|
||||
{
|
||||
args.Message = Accentuate(args.Message, entity.Comp);
|
||||
}
|
||||
|
||||
private void OnAccent(Entity<StutteringAccentComponent> entity, ref StatusEffectRelayedEvent<AccentGetEvent> args)
|
||||
{
|
||||
args.Args.Message = Accentuate(args.Args.Message, entity.Comp);
|
||||
}
|
||||
|
||||
public string Accentuate(string message, StutteringAccentComponent component)
|
||||
|
|
|
|||
|
|
@ -16,13 +16,9 @@ namespace Content.Server.Stack
|
|||
{
|
||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||
|
||||
public static readonly int[] DefaultSplitAmounts = { 1, 5, 10, 20, 30, 50 };
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<StackComponent, GetVerbsEvent<AlternativeVerb>>(OnStackAlternativeInteract);
|
||||
}
|
||||
|
||||
public override void SetCount(EntityUid uid, int amount, StackComponent? component = null)
|
||||
|
|
@ -165,42 +161,7 @@ namespace Content.Server.Stack
|
|||
return amounts;
|
||||
}
|
||||
|
||||
private void OnStackAlternativeInteract(EntityUid uid, StackComponent stack, GetVerbsEvent<AlternativeVerb> args)
|
||||
{
|
||||
if (!args.CanAccess || !args.CanInteract || args.Hands == null || stack.Count == 1)
|
||||
return;
|
||||
|
||||
AlternativeVerb halve = new()
|
||||
{
|
||||
Text = Loc.GetString("comp-stack-split-halve"),
|
||||
Category = VerbCategory.Split,
|
||||
Act = () => UserSplit(uid, args.User, stack.Count / 2, stack),
|
||||
Priority = 1
|
||||
};
|
||||
args.Verbs.Add(halve);
|
||||
|
||||
var priority = 0;
|
||||
foreach (var amount in DefaultSplitAmounts)
|
||||
{
|
||||
if (amount >= stack.Count)
|
||||
continue;
|
||||
|
||||
AlternativeVerb verb = new()
|
||||
{
|
||||
Text = amount.ToString(),
|
||||
Category = VerbCategory.Split,
|
||||
Act = () => UserSplit(uid, args.User, amount, stack),
|
||||
// we want to sort by size, not alphabetically by the verb text.
|
||||
Priority = priority
|
||||
};
|
||||
|
||||
priority--;
|
||||
|
||||
args.Verbs.Add(verb);
|
||||
}
|
||||
}
|
||||
|
||||
private void UserSplit(EntityUid uid, EntityUid userUid, int amount,
|
||||
protected override void UserSplit(EntityUid uid, EntityUid userUid, int amount,
|
||||
StackComponent? stack = null,
|
||||
TransformComponent? userTransform = null)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -198,12 +198,6 @@ public sealed partial class BloodstreamComponent : Component
|
|||
[ViewVariables]
|
||||
public Entity<SolutionComponent>? TemporarySolution;
|
||||
|
||||
/// <summary>
|
||||
/// Variable that stores the amount of status time added by having a low blood level.
|
||||
/// </summary>
|
||||
[DataField, AutoNetworkedField]
|
||||
public TimeSpan StatusTime;
|
||||
|
||||
/// <summary>
|
||||
/// Alert to show when bleeding.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ using Content.Shared.Chemistry.EntitySystems;
|
|||
using Content.Shared.Chemistry.Reaction;
|
||||
using Content.Shared.Chemistry.Reagent;
|
||||
using Content.Shared.Damage;
|
||||
using Content.Shared.Drunk;
|
||||
using Content.Shared.EntityEffects.Effects;
|
||||
using Content.Shared.FixedPoint;
|
||||
using Content.Shared.Fluids;
|
||||
|
|
@ -16,7 +15,7 @@ using Content.Shared.Mobs.Systems;
|
|||
using Content.Shared.Popups;
|
||||
using Content.Shared.Random.Helpers;
|
||||
using Content.Shared.Rejuvenate;
|
||||
using Content.Shared.Speech.EntitySystems;
|
||||
using Content.Shared.StatusEffectNew;
|
||||
using Robust.Shared.Audio.Systems;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
|
@ -27,17 +26,18 @@ namespace Content.Shared.Body.Systems;
|
|||
|
||||
public abstract class SharedBloodstreamSystem : EntitySystem
|
||||
{
|
||||
public static readonly EntProtoId Bloodloss = "StatusEffectBloodloss";
|
||||
|
||||
[Dependency] protected readonly SharedSolutionContainerSystem SolutionContainer = default!;
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||
[Dependency] private readonly SharedPuddleSystem _puddle = default!;
|
||||
[Dependency] private readonly StatusEffectsSystem _status = default!;
|
||||
[Dependency] private readonly AlertsSystem _alertsSystem = default!;
|
||||
[Dependency] private readonly MobStateSystem _mobStateSystem = default!;
|
||||
[Dependency] private readonly DamageableSystem _damageableSystem = default!;
|
||||
[Dependency] private readonly SharedDrunkSystem _drunkSystem = default!;
|
||||
[Dependency] private readonly SharedStutteringSystem _stutteringSystem = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
|
|
@ -100,15 +100,7 @@ public abstract class SharedBloodstreamSystem : EntitySystem
|
|||
// Apply dizziness as a symptom of bloodloss.
|
||||
// The effect is applied in a way that it will never be cleared without being healthy.
|
||||
// Multiplying by 2 is arbitrary but works for this case, it just prevents the time from running out
|
||||
_drunkSystem.TryApplyDrunkenness(
|
||||
uid,
|
||||
(float)bloodstream.AdjustedUpdateInterval.TotalSeconds * 2,
|
||||
applySlur: false);
|
||||
_stutteringSystem.DoStutter(uid, bloodstream.AdjustedUpdateInterval * 2, refresh: false);
|
||||
|
||||
// storing the drunk and stutter time so we can remove it independently from other effects additions
|
||||
bloodstream.StatusTime += bloodstream.AdjustedUpdateInterval * 2;
|
||||
DirtyField(uid, bloodstream, nameof(BloodstreamComponent.StatusTime));
|
||||
_status.TrySetStatusEffectDuration(uid, Bloodloss);
|
||||
}
|
||||
else if (!_mobStateSystem.IsDead(uid))
|
||||
{
|
||||
|
|
@ -118,12 +110,7 @@ public abstract class SharedBloodstreamSystem : EntitySystem
|
|||
bloodstream.BloodlossHealDamage * bloodPercentage,
|
||||
ignoreResistances: true, interruptsDoAfters: false);
|
||||
|
||||
// Remove the drunk effect when healthy. Should only remove the amount of drunk and stutter added by low blood level
|
||||
_drunkSystem.TryRemoveDrunkenessTime(uid, bloodstream.StatusTime.TotalSeconds);
|
||||
_stutteringSystem.DoRemoveStutterTime(uid, bloodstream.StatusTime.TotalSeconds);
|
||||
// Reset the drunk and stutter time to zero
|
||||
bloodstream.StatusTime = TimeSpan.Zero;
|
||||
DirtyField(uid, bloodstream, nameof(BloodstreamComponent.StatusTime));
|
||||
_status.TryRemoveStatusEffect(uid, Bloodloss);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -207,7 +207,7 @@ public sealed class HypospraySystem : EntitySystem
|
|||
return returnValue;
|
||||
// Sunrise-End
|
||||
|
||||
_popup.PopupClient(Loc.GetString(msgFormat ?? "hypospray-component-inject-other-message", ("other", target)), target, user);
|
||||
_popup.PopupClient(Loc.GetString(msgFormat ?? "hypospray-component-inject-other-message", ("other", Identity.Entity(target, EntityManager))), target, user);
|
||||
|
||||
if (target != user)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,6 +0,0 @@
|
|||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Shared.Drunk;
|
||||
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
public sealed partial class DrunkComponent : Component { }
|
||||
11
Content.Shared/Drunk/DrunkStatusEffectComponent.cs
Normal file
11
Content.Shared/Drunk/DrunkStatusEffectComponent.cs
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Shared.Drunk;
|
||||
|
||||
/// <summary>
|
||||
/// This is used by a status effect entity to apply the <see cref="DrunkComponent"/> to an entity.
|
||||
/// </summary>
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
public sealed partial class DrunkStatusEffectComponent : Component
|
||||
{
|
||||
}
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
using Content.Shared.Speech.EntitySystems;
|
||||
using Content.Shared.StatusEffect;
|
||||
using Content.Shared.Traits.Assorted;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared.Drunk;
|
||||
|
||||
public abstract class SharedDrunkSystem : EntitySystem
|
||||
{
|
||||
public static readonly ProtoId<StatusEffectPrototype> DrunkKey = "Drunk";
|
||||
|
||||
[Dependency] private readonly StatusEffectsSystem _statusEffectsSystem = default!;
|
||||
[Dependency] private readonly SharedSlurredSystem _slurredSystem = default!;
|
||||
|
||||
public void TryApplyDrunkenness(EntityUid uid, float boozePower, bool applySlur = true,
|
||||
StatusEffectsComponent? status = null)
|
||||
{
|
||||
if (!Resolve(uid, ref status, false))
|
||||
return;
|
||||
|
||||
if (TryComp<LightweightDrunkComponent>(uid, out var trait))
|
||||
boozePower *= trait.BoozeStrengthMultiplier;
|
||||
|
||||
if (applySlur)
|
||||
{
|
||||
_slurredSystem.DoSlur(uid, TimeSpan.FromSeconds(boozePower), status);
|
||||
}
|
||||
|
||||
if (!_statusEffectsSystem.HasStatusEffect(uid, DrunkKey, status))
|
||||
{
|
||||
_statusEffectsSystem.TryAddStatusEffect<DrunkComponent>(uid, DrunkKey, TimeSpan.FromSeconds(boozePower), true, status);
|
||||
}
|
||||
else
|
||||
{
|
||||
_statusEffectsSystem.TryAddTime(uid, DrunkKey, TimeSpan.FromSeconds(boozePower), status);
|
||||
}
|
||||
}
|
||||
|
||||
public void TryRemoveDrunkenness(EntityUid uid)
|
||||
{
|
||||
_statusEffectsSystem.TryRemoveStatusEffect(uid, DrunkKey);
|
||||
}
|
||||
public void TryRemoveDrunkenessTime(EntityUid uid, double timeRemoved)
|
||||
{
|
||||
_statusEffectsSystem.TryRemoveTime(uid, DrunkKey, TimeSpan.FromSeconds(timeRemoved));
|
||||
}
|
||||
|
||||
}
|
||||
50
Content.Shared/Drunk/SharedDrunkSystem.cs
Normal file
50
Content.Shared/Drunk/SharedDrunkSystem.cs
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
using Content.Shared.Speech.EntitySystems;
|
||||
using Content.Shared.StatusEffectNew;
|
||||
using Content.Shared.Traits.Assorted;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared.Drunk;
|
||||
|
||||
public abstract class SharedDrunkSystem : EntitySystem
|
||||
{
|
||||
public static EntProtoId Drunk = "StatusEffectDrunk";
|
||||
public static EntProtoId Woozy = "StatusEffectWoozy";
|
||||
|
||||
/* I have no clue why this magic number was chosen, I copied it from slur system and needed it for the overlay
|
||||
If you have a more intelligent magic number be my guest to completely explode this value.
|
||||
There were no comments as to why this value was chosen three years ago. */
|
||||
public static float MagicNumber = 1100f;
|
||||
|
||||
[Dependency] protected readonly StatusEffectsSystem Status = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<LightweightDrunkComponent, DrunkEvent>(OnLightweightDrinking);
|
||||
}
|
||||
|
||||
public void TryApplyDrunkenness(EntityUid uid, TimeSpan boozePower)
|
||||
{
|
||||
var ev = new DrunkEvent(boozePower);
|
||||
RaiseLocalEvent(uid, ref ev);
|
||||
|
||||
Status.TryAddStatusEffectDuration(uid, Drunk, ev.Duration);
|
||||
}
|
||||
|
||||
public void TryRemoveDrunkenness(EntityUid uid)
|
||||
{
|
||||
Status.TryRemoveStatusEffect(uid, Drunk);
|
||||
}
|
||||
|
||||
public void TryRemoveDrunkennessTime(EntityUid uid, TimeSpan boozePower)
|
||||
{
|
||||
Status.TryAddTime(uid, Drunk, - boozePower);
|
||||
}
|
||||
|
||||
private void OnLightweightDrinking(Entity<LightweightDrunkComponent> entity, ref DrunkEvent args)
|
||||
{
|
||||
args.Duration *= entity.Comp.BoozeStrengthMultiplier;
|
||||
}
|
||||
|
||||
[ByRefEvent]
|
||||
public record struct DrunkEvent(TimeSpan Duration);
|
||||
}
|
||||
|
|
@ -9,13 +9,7 @@ public sealed partial class Drunk : EntityEffect
|
|||
/// BoozePower is how long each metabolism cycle will make the drunk effect last for.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public float BoozePower = 3f;
|
||||
|
||||
/// <summary>
|
||||
/// Whether speech should be slurred.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public bool SlurSpeech = true;
|
||||
public TimeSpan BoozePower = TimeSpan.FromSeconds(3f);
|
||||
|
||||
protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys)
|
||||
=> Loc.GetString("reagent-effect-guidebook-drunk", ("chance", Probability));
|
||||
|
|
@ -24,11 +18,10 @@ public sealed partial class Drunk : EntityEffect
|
|||
{
|
||||
var boozePower = BoozePower;
|
||||
|
||||
if (args is EntityEffectReagentArgs reagentArgs) {
|
||||
if (args is EntityEffectReagentArgs reagentArgs)
|
||||
boozePower *= reagentArgs.Scale.Float();
|
||||
}
|
||||
|
||||
var drunkSys = args.EntityManager.EntitySysManager.GetEntitySystem<SharedDrunkSystem>();
|
||||
drunkSys.TryApplyDrunkenness(args.TargetEntity, boozePower, SlurSpeech);
|
||||
drunkSys.TryApplyDrunkenness(args.TargetEntity, boozePower);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ namespace Content.Shared.Movement.Systems;
|
|||
public sealed class WormSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly AlertsSystem _alerts = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||
[Dependency] private readonly SharedStunSystem _stun = default!;
|
||||
|
||||
public override void Initialize()
|
||||
|
|
|
|||
|
|
@ -1,8 +1,11 @@
|
|||
using Content.Shared.StatusEffect;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared.Speech.EntitySystems;
|
||||
|
||||
public abstract class SharedSlurredSystem : EntitySystem
|
||||
{
|
||||
public static readonly EntProtoId Stutter = "StatusEffectSlurred";
|
||||
|
||||
public virtual void DoSlur(EntityUid uid, TimeSpan time, StatusEffectsComponent? status = null) { }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,26 +1,24 @@
|
|||
using Content.Shared.StatusEffect;
|
||||
using Content.Shared.StatusEffectNew;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared.Speech.EntitySystems;
|
||||
|
||||
public abstract class SharedStutteringSystem : EntitySystem
|
||||
{
|
||||
public static readonly ProtoId<StatusEffectPrototype> StutterKey = "Stutter";
|
||||
public static readonly EntProtoId Stuttering = "StatusEffectStutter";
|
||||
|
||||
[Dependency] private readonly StatusEffectsSystem _statusEffectsSystem = default!;
|
||||
[Dependency] protected readonly StatusEffectsSystem Status = default!;
|
||||
|
||||
// For code in shared... I imagine we ain't getting accent prediction anytime soon so let's not bother.
|
||||
public virtual void DoStutter(EntityUid uid, TimeSpan time, bool refresh, StatusEffectsComponent? status = null)
|
||||
public virtual void DoStutter(EntityUid uid, TimeSpan time, bool refresh)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void DoRemoveStutterTime(EntityUid uid, double timeRemoved)
|
||||
public virtual void DoRemoveStutterTime(EntityUid uid, TimeSpan timeRemoved)
|
||||
{
|
||||
_statusEffectsSystem.TryRemoveTime(uid, StutterKey, TimeSpan.FromSeconds(timeRemoved));
|
||||
}
|
||||
|
||||
public void DoRemoveStutter(EntityUid uid, double timeRemoved)
|
||||
public virtual void DoRemoveStutter(EntityUid uid)
|
||||
{
|
||||
_statusEffectsSystem.TryRemoveStatusEffect(uid, StutterKey);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ using Content.Shared.Interaction;
|
|||
using Content.Shared.Nutrition;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.Storage.EntitySystems;
|
||||
using Content.Shared.Verbs;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Physics.Systems;
|
||||
|
|
@ -29,6 +30,8 @@ namespace Content.Shared.Stacks
|
|||
[Dependency] protected readonly SharedPopupSystem Popup = default!;
|
||||
[Dependency] private readonly SharedStorageSystem _storage = default!;
|
||||
|
||||
public static readonly int[] DefaultSplitAmounts = { 1, 5, 10, 20, 30, 50 };
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
|
@ -40,6 +43,7 @@ namespace Content.Shared.Stacks
|
|||
SubscribeLocalEvent<StackComponent, InteractUsingEvent>(OnStackInteractUsing);
|
||||
SubscribeLocalEvent<StackComponent, BeforeIngestedEvent>(OnBeforeEaten);
|
||||
SubscribeLocalEvent<StackComponent, IngestedEvent>(OnEaten);
|
||||
SubscribeLocalEvent<StackComponent, GetVerbsEvent<AlternativeVerb>>(OnStackAlternativeInteract);
|
||||
|
||||
_vvm.GetTypeHandler<StackComponent>()
|
||||
.AddPath(nameof(StackComponent.Count), (_, comp) => comp.Count, SetCount);
|
||||
|
|
@ -432,6 +436,55 @@ namespace Content.Shared.Stacks
|
|||
// Here to tell the food system to do destroy stuff.
|
||||
args.Destroy = true;
|
||||
}
|
||||
|
||||
private void OnStackAlternativeInteract(EntityUid uid, StackComponent stack, GetVerbsEvent<AlternativeVerb> args)
|
||||
{
|
||||
if (!args.CanAccess || !args.CanInteract || args.Hands == null || stack.Count == 1)
|
||||
return;
|
||||
|
||||
AlternativeVerb halve = new()
|
||||
{
|
||||
Text = Loc.GetString("comp-stack-split-halve"),
|
||||
Category = VerbCategory.Split,
|
||||
Act = () => UserSplit(uid, args.User, stack.Count / 2, stack),
|
||||
Priority = 1
|
||||
};
|
||||
args.Verbs.Add(halve);
|
||||
|
||||
var priority = 0;
|
||||
foreach (var amount in DefaultSplitAmounts)
|
||||
{
|
||||
if (amount >= stack.Count)
|
||||
continue;
|
||||
|
||||
AlternativeVerb verb = new()
|
||||
{
|
||||
Text = amount.ToString(),
|
||||
Category = VerbCategory.Split,
|
||||
Act = () => UserSplit(uid, args.User, amount, stack),
|
||||
// we want to sort by size, not alphabetically by the verb text.
|
||||
Priority = priority
|
||||
};
|
||||
|
||||
priority--;
|
||||
|
||||
args.Verbs.Add(verb);
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks>
|
||||
/// OnStackAlternativeInteract() was moved to shared in order to faciliate prediction of stack splitting verbs.
|
||||
/// However, prediction of interacitons with spawned entities is non-functional (or so i'm told)
|
||||
/// So, UserSplit() and Split() should remain on the server for the time being.
|
||||
/// This empty virtual method allows for UserSplit() to be called on the server from the client.
|
||||
/// When prediction is improved, those two methods should be moved to shared, in order to predict the splitting itself (not just the verbs)
|
||||
/// </remarks>
|
||||
protected virtual void UserSplit(EntityUid uid, EntityUid userUid, int amount,
|
||||
StackComponent? stack = null,
|
||||
TransformComponent? userTransform = null)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
using Content.Shared.Alert;
|
||||
using Content.Shared.Whitelist;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using Content.Shared.Movement.Events;
|
||||
using Content.Shared.Movement.Systems;
|
||||
using Content.Shared.Rejuvenate;
|
||||
using Content.Shared.Speech;
|
||||
using Content.Shared.StatusEffectNew.Components;
|
||||
using Content.Shared.Stunnable;
|
||||
using Robust.Shared.Player;
|
||||
|
|
@ -23,6 +24,8 @@ public sealed partial class StatusEffectsSystem
|
|||
|
||||
SubscribeLocalEvent<StatusEffectContainerComponent, StandUpAttemptEvent>(RefRelayStatusEffectEvent);
|
||||
SubscribeLocalEvent<StatusEffectContainerComponent, StunEndAttemptEvent>(RefRelayStatusEffectEvent);
|
||||
|
||||
SubscribeLocalEvent<StatusEffectContainerComponent, AccentGetEvent>(RelayStatusEffectEvent);
|
||||
}
|
||||
|
||||
private void RefRelayStatusEffectEvent<T>(EntityUid uid, StatusEffectContainerComponent component, ref T args) where T : struct
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ using Content.Shared.Interaction;
|
|||
using Content.Shared.Item;
|
||||
using Content.Shared.Materials;
|
||||
using Content.Shared.Nutrition;
|
||||
using Content.Shared.Nutrition.EntitySystems;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.Storage.Components;
|
||||
using Content.Shared.Tools.EntitySystems;
|
||||
|
|
@ -26,7 +25,6 @@ namespace Content.Shared.Storage.EntitySystems;
|
|||
/// </summary>
|
||||
public sealed class SecretStashSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly IngestionSystem _ingestion = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popupSystem = default!;
|
||||
[Dependency] private readonly SharedHandsSystem _handsSystem = default!;
|
||||
[Dependency] private readonly SharedContainerSystem _containerSystem = default!;
|
||||
|
|
|
|||
|
|
@ -1,13 +1,21 @@
|
|||
using Content.Shared.Lock;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared.Trigger.Components.Effects;
|
||||
|
||||
/// <summary>
|
||||
/// Will lock, unlock or toggle an entity with the <see cref="LockComponent"/>.
|
||||
/// If TargetUser is true then they will be (un)locked instead.
|
||||
/// </summary>
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
||||
public sealed partial class LockOnTriggerComponent : BaseXOnTriggerComponent
|
||||
{
|
||||
/// <summary>
|
||||
/// If the trigger will lock, unlock or toggle the lock.
|
||||
/// </summary>
|
||||
[DataField, AutoNetworkedField]
|
||||
public LockAction LockOnTrigger = LockAction.Toggle;
|
||||
public LockAction LockMode = LockAction.Toggle;
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
|
|
|
|||
|
|
@ -19,16 +19,21 @@ public sealed class LockOnTriggerSystem : EntitySystem
|
|||
if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
|
||||
return;
|
||||
|
||||
switch (ent.Comp.LockOnTrigger)
|
||||
var target = ent.Comp.TargetUser ? args.User : ent.Owner;
|
||||
|
||||
if (!TryComp<LockComponent>(target, out var lockComp))
|
||||
return; // prevent the Resolve in Lock/Unlock/ToggleLock from logging errors in case the user does not have the component
|
||||
|
||||
switch (ent.Comp.LockMode)
|
||||
{
|
||||
case LockAction.Lock:
|
||||
_lock.Lock(ent.Owner, args.User);
|
||||
_lock.Lock(target.Value, args.User, lockComp);
|
||||
break;
|
||||
case LockAction.Unlock:
|
||||
_lock.Unlock(ent, args.User);
|
||||
_lock.Unlock(target.Value, args.User, lockComp);
|
||||
break;
|
||||
case LockAction.Toggle:
|
||||
_lock.ToggleLock(ent, args.User);
|
||||
_lock.ToggleLock(target.Value, args.User, lockComp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,46 +1,4 @@
|
|||
Entries:
|
||||
- author: EmoGarbage404
|
||||
changes:
|
||||
- message: Added 3 modkits for the proto-kinetic accelerator, granting increased
|
||||
damage, range, and fire rate. They can be researched via the new "Kinetic Modifications"
|
||||
arsenal tech.
|
||||
type: Add
|
||||
- message: Reduced damage and range on the proto-kinetic accelerator.
|
||||
type: Tweak
|
||||
id: 8351
|
||||
time: '2025-04-25T18:18:24.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/31247
|
||||
- author: Wolfkey-SomeoneElseTookMyUsername
|
||||
changes:
|
||||
- message: Added cotton buns, which can be be used for the creation of custom burgers
|
||||
that can be eaten by moths.
|
||||
type: Add
|
||||
id: 8352
|
||||
time: '2025-04-26T01:54:14.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/36405
|
||||
- author: Booblesnoot42
|
||||
changes:
|
||||
- message: Due to a lack of functionality, light-switches have temporarily been
|
||||
removed from the construction menu.
|
||||
type: Remove
|
||||
id: 8353
|
||||
time: '2025-04-26T01:54:23.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/34664
|
||||
- author: OnyxTheBrave
|
||||
changes:
|
||||
- message: Cloth is now able to be made in the Sheet-Meister 2000
|
||||
type: Add
|
||||
id: 8354
|
||||
time: '2025-04-26T03:22:52.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/32676
|
||||
- author: SyaoranFox
|
||||
changes:
|
||||
- message: Pulse Pistol, Pulse Carbine, and Pulse Rifle now share the same sound
|
||||
file.
|
||||
type: Tweak
|
||||
id: 8355
|
||||
time: '2025-04-26T13:36:51.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/36952
|
||||
- author: RedBookcase
|
||||
changes:
|
||||
- message: Various changes to edged weapons, including new storage sprites and new
|
||||
|
|
@ -3953,3 +3911,44 @@
|
|||
id: 8863
|
||||
time: '2025-08-18T14:33:16.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/39727
|
||||
- author: SlamBamActionman
|
||||
changes:
|
||||
- message: Aiming with the Hristov is now working correctly when using the Separated
|
||||
Chat HUD mode.
|
||||
type: Fix
|
||||
- message: Cursor targetting with the Hristov now correctly selects the target underneath
|
||||
the cursor.
|
||||
type: Fix
|
||||
id: 8864
|
||||
time: '2025-08-18T18:22:02.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/35087
|
||||
- author: Zokkie
|
||||
changes:
|
||||
- message: Lone Operative is now assigned the Solo Antagonist role ingame instead
|
||||
of the Team Antagonist role.
|
||||
type: Fix
|
||||
id: 8865
|
||||
time: '2025-08-18T18:57:30.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/36521
|
||||
- author: beck-thompson, slarticodefast
|
||||
changes:
|
||||
- message: Fixed rebinding keys crashing the client.
|
||||
type: Fix
|
||||
id: 8866
|
||||
time: '2025-08-18T18:58:30.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/39732
|
||||
- author: Princess-Cheeseballs
|
||||
changes:
|
||||
- message: Being a Lightweight drunk no longer extends your bloodloss
|
||||
type: Fix
|
||||
id: 8867
|
||||
time: '2025-08-18T20:26:29.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/38678
|
||||
- author: SlamBamActionman
|
||||
changes:
|
||||
- message: Auto-injector/medipen pop-ups now show the correct identity when injecting
|
||||
someone else.
|
||||
type: Fix
|
||||
id: 8868
|
||||
time: '2025-08-18T20:42:41.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/39735
|
||||
|
|
|
|||
|
|
@ -538,4 +538,17 @@
|
|||
id: 66
|
||||
time: '2025-08-18T04:33:37.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/39090
|
||||
- author: beck-thompson
|
||||
changes:
|
||||
- message: Replaced the guaranteed explosives on the infiltrator with a random grenade
|
||||
spawner and ammo bundle.
|
||||
type: Tweak
|
||||
- message: Replaced the guaranteed med spawns on the infiltrator with random med
|
||||
kit spawners.
|
||||
type: Tweak
|
||||
- message: Added a random loot spawner to the infiltrator.
|
||||
type: Add
|
||||
id: 67
|
||||
time: '2025-08-18T18:22:15.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/39091
|
||||
Order: 1
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ hypospray-volume-label = Volume: [color=white]{$currentVolume}/{$totalVolume}u[/
|
|||
|
||||
## Entity
|
||||
|
||||
hypospray-component-inject-other-message = You inject {$other}.
|
||||
hypospray-component-inject-other-message = You inject {THE($other)}.
|
||||
hypospray-component-inject-self-message = You inject yourself.
|
||||
hypospray-component-empty-message = Nothing to inject.
|
||||
hypospray-component-feel-prick-message = You feel a tiny prick!
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
roles-antag-changeling-objective = A intelligent predator that assumes the identities of its victims.
|
||||
|
||||
changeling-devour-attempt-failed-rotting = This corpse has only rotted biomass.
|
||||
changeling-devour-attempt-failed-protected = This victim's biomass is protected.
|
||||
changeling-devour-attempt-failed-protected = This victim's biomass is protected by armor!
|
||||
|
||||
changeling-devour-begin-windup-self = Our uncanny mouth reveals itself with otherworldly hunger.
|
||||
changeling-devour-begin-windup-others = { CAPITALIZE(POSS-ADJ($user)) } uncanny mouth reveals itself with otherworldly hunger.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,17 @@
|
|||
meta:
|
||||
format: 6
|
||||
postmapinit: false
|
||||
format: 7
|
||||
category: Grid
|
||||
engineVersion: 266.0.0
|
||||
forkId: ""
|
||||
forkVersion: ""
|
||||
time: 08/18/2025 05:46:30
|
||||
entityCount: 822
|
||||
maps: []
|
||||
grids:
|
||||
- 1
|
||||
orphans:
|
||||
- 1
|
||||
nullspace: []
|
||||
tilemap:
|
||||
0: Space
|
||||
3: FloorArcadeRed
|
||||
|
|
@ -34,20 +45,20 @@ entities:
|
|||
chunks:
|
||||
-1,-1:
|
||||
ind: -1,-1
|
||||
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAABHwAAAAACHwAAAAABHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAWAAAAAAAHwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAWAAAAAAAHwAAAAACfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAWAAAAAAAHwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAABHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACWAAAAAAAHwAAAAACHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAACaAAAAAAAWQAAAAAAHwAAAAADHwAAAAAAHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADWQAAAAAAaAAAAAABWAAAAAAAHwAAAAAAHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAADWAAAAAAAHwAAAAACHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAWAAAAAAAWAAAAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
version: 6
|
||||
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAAfAAAAAAMAHwAAAAABAB8AAAAAAgAfAAAAAAEAHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAbgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAB8AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAWAAAAAAAAB8AAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAFgAAAAAAAAfAAAAAAIAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAABYAAAAAAAAHwAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAB8AAAAAAgAfAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH4AAAAAAAAfAAAAAAEAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAH4AAAAAAAB+AAAAAAAAHwAAAAACAB8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAAfAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAXQAAAAACAFgAAAAAAAAfAAAAAAIAHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAABdAAAAAAIAaAAAAAAAAFkAAAAAAAAfAAAAAAMAHwAAAAAAAB8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAXQAAAAADAFkAAAAAAABoAAAAAAEAWAAAAAAAAB8AAAAAAAAfAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH4AAAAAAABdAAAAAAAAXQAAAAADAFgAAAAAAAAfAAAAAAIAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAABYAAAAAAAAWAAAAAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
|
||||
version: 7
|
||||
0,-1:
|
||||
ind: 0,-1
|
||||
tiles: HwAAAAABHwAAAAABHwAAAAABHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACWAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACWAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAABWAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAABfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAABWAAAAAAAegAAAAADfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADHwAAAAAAHwAAAAAAegAAAAADegAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAWAAAAAAAegAAAAAAAwAAAAAAegAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADWAAAAAAAfgAAAAAAAwAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAAAAWAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
version: 6
|
||||
tiles: HwAAAAABAB8AAAAAAQAfAAAAAAEAHwAAAAABAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAG4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAIAWAAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACAFgAAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAQBYAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAABAH4AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAwB+AAAAAAAAfgAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAABAFgAAAAAAAB6AAAAAAMAfgAAAAAAAH4AAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAwAfAAAAAAAAHwAAAAAAAHoAAAAAAwB6AAAAAAEAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAWAAAAAAAAHoAAAAAAAADAAAAAAAAegAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADAFgAAAAAAAB+AAAAAAAAAwAAAAAAAH4AAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAABYAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
|
||||
version: 7
|
||||
-1,-2:
|
||||
ind: -1,-2
|
||||
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAWAAAAAAAWAAAAAAAWAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAOAAAAAAAJAAAAAAAOAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAOAAAAAAAJAAAAAAAOAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAOAAAAAAAJAAAAAAAOAAAAAAAWAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAADWAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAACTwAAAAAAHwAAAAABWAAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAWAAAAAAAfgAAAAAAHwAAAAAAHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAKAAAAAAAKAAAAAAAWAAAAAAAHwAAAAADHwAAAAAAHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAWAAAAAAAHwAAAAAAWAAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAAAHwAAAAADHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAHwAAAAAAHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAA
|
||||
version: 6
|
||||
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAFgAAAAAAABYAAAAAAAAWAAAAAAAAH4AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAA4AAAAAAAAJAAAAAAAADgAAAAAAAB+AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAOAAAAAAAACQAAAAAAAA4AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAADgAAAAAAAAkAAAAAAAAOAAAAAAAAFgAAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAfAAAAAAIAHwAAAAAAAB8AAAAAAwBYAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAHwAAAAACAE8AAAAAAAAfAAAAAAEAWAAAAAAAAH4AAAAAAAB+AAAAAAAAbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAB8AAAAAAAAfAAAAAAAAHwAAAAAAAFgAAAAAAAB+AAAAAAAAHwAAAAAAAB8AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAB+AAAAAAAAKAAAAAAAACgAAAAAAABYAAAAAAAAHwAAAAADAB8AAAAAAAAfAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9AAAAAAAAfgAAAAAAAFgAAAAAAAAfAAAAAAAAWAAAAAAAAH4AAAAAAAAfAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAB8AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAB8AAAAAAgAfAAAAAAEAHwAAAAAAAB8AAAAAAwAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAG4AAAAAAAAfAAAAAAAAHwAAAAABAH4AAAAAAAB+AAAAAAAAfgAAAAAAAA==
|
||||
version: 7
|
||||
0,-2:
|
||||
ind: 0,-2
|
||||
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAABHwAAAAADHwAAAAABHwAAAAADHwAAAAABWAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADHwAAAAACHwAAAAAAHwAAAAACHwAAAAADfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAHwAAAAACHwAAAAAAHwAAAAADHwAAAAABfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAABHwAAAAAAHwAAAAABHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAACbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
version: 6
|
||||
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAAAAAB9AAAAAAAAfgAAAAAAAE8AAAAAAAB+AAAAAAAATwAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9AAAAAAAAfQAAAAAAAH4AAAAAAABPAAAAAAAAfgAAAAAAAE8AAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAATwAAAAAAAH4AAAAAAABPAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAHwAAAAABAH4AAAAAAAB+AAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAQAfAAAAAAMAHwAAAAABAB8AAAAAAwAfAAAAAAEAWAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAMAHwAAAAACAB8AAAAAAAAfAAAAAAIAHwAAAAADAH4AAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAB8AAAAAAgAfAAAAAAAAHwAAAAADAB8AAAAAAQB+AAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAEAHwAAAAAAAB8AAAAAAQAfAAAAAAMAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH4AAAAAAAAfAAAAAAAAHwAAAAACAG4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
|
||||
version: 7
|
||||
- type: Broadphase
|
||||
- type: Physics
|
||||
bodyStatus: InAir
|
||||
|
|
@ -576,12 +587,14 @@ entities:
|
|||
flags: Hide
|
||||
- type: OccluderTree
|
||||
- type: Shuttle
|
||||
dampingModifier: 0.25
|
||||
- type: RadiationGridResistance
|
||||
- type: GravityShake
|
||||
shakeTimes: 10
|
||||
- type: GasTileOverlay
|
||||
- type: SpreaderGrid
|
||||
- type: GridPathfinding
|
||||
- type: ImplicitRoof
|
||||
- proto: AirlockExternalGlassShuttleSyndicateLocked
|
||||
entities:
|
||||
- uid: 8
|
||||
|
|
@ -593,7 +606,8 @@ entities:
|
|||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
13:
|
||||
- DoorStatus: Close
|
||||
- - DoorStatus
|
||||
- Close
|
||||
- type: DeviceLinkSink
|
||||
invokeCounter: 1
|
||||
- uid: 10
|
||||
|
|
@ -605,7 +619,8 @@ entities:
|
|||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
3:
|
||||
- DoorStatus: Close
|
||||
- - DoorStatus
|
||||
- Close
|
||||
- type: DeviceLinkSink
|
||||
invokeCounter: 1
|
||||
- proto: AirlockExternalSyndicateLocked
|
||||
|
|
@ -618,7 +633,8 @@ entities:
|
|||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
14:
|
||||
- DoorStatus: DoorBolt
|
||||
- - DoorStatus
|
||||
- DoorBolt
|
||||
- uid: 3
|
||||
components:
|
||||
- type: Transform
|
||||
|
|
@ -629,7 +645,8 @@ entities:
|
|||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
10:
|
||||
- DoorStatus: Close
|
||||
- - DoorStatus
|
||||
- Close
|
||||
- uid: 7
|
||||
components:
|
||||
- type: Transform
|
||||
|
|
@ -638,7 +655,8 @@ entities:
|
|||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
12:
|
||||
- DoorStatus: DoorBolt
|
||||
- - DoorStatus
|
||||
- DoorBolt
|
||||
- uid: 9
|
||||
components:
|
||||
- type: Transform
|
||||
|
|
@ -647,7 +665,8 @@ entities:
|
|||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
22:
|
||||
- DoorStatus: DoorBolt
|
||||
- - DoorStatus
|
||||
- DoorBolt
|
||||
- uid: 12
|
||||
components:
|
||||
- type: Transform
|
||||
|
|
@ -656,7 +675,8 @@ entities:
|
|||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
7:
|
||||
- DoorStatus: DoorBolt
|
||||
- - DoorStatus
|
||||
- DoorBolt
|
||||
- uid: 13
|
||||
components:
|
||||
- type: Transform
|
||||
|
|
@ -667,7 +687,8 @@ entities:
|
|||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
8:
|
||||
- DoorStatus: Close
|
||||
- - DoorStatus
|
||||
- Close
|
||||
- uid: 14
|
||||
components:
|
||||
- type: Transform
|
||||
|
|
@ -676,7 +697,8 @@ entities:
|
|||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
2:
|
||||
- DoorStatus: DoorBolt
|
||||
- - DoorStatus
|
||||
- DoorBolt
|
||||
- uid: 22
|
||||
components:
|
||||
- type: Transform
|
||||
|
|
@ -685,7 +707,8 @@ entities:
|
|||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
9:
|
||||
- DoorStatus: DoorBolt
|
||||
- - DoorStatus
|
||||
- DoorBolt
|
||||
- proto: AirlockSyndicateGlassLocked
|
||||
entities:
|
||||
- uid: 4
|
||||
|
|
@ -727,12 +750,16 @@ entities:
|
|||
- type: Transform
|
||||
pos: -3.5,-18.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- uid: 19
|
||||
components:
|
||||
- type: Transform
|
||||
rot: -1.5707963267948966 rad
|
||||
pos: 1.5,-8.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: AtmosFixNitrogenMarker
|
||||
entities:
|
||||
- uid: 25
|
||||
|
|
@ -820,45 +847,6 @@ entities:
|
|||
- type: Transform
|
||||
pos: 1.4510483,-2.399527
|
||||
parent: 1
|
||||
- proto: Brutepack
|
||||
entities:
|
||||
- uid: 44
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -3.292087,-4.1600046
|
||||
parent: 1
|
||||
- uid: 45
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -3.354587,-4.4256296
|
||||
parent: 1
|
||||
- proto: C4
|
||||
entities:
|
||||
- uid: 46
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 1.7857682,-12.631323
|
||||
parent: 1
|
||||
- uid: 47
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 1.5045182,-12.646948
|
||||
parent: 1
|
||||
- uid: 48
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 1.5982682,-12.646948
|
||||
parent: 1
|
||||
- uid: 49
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 1.4107682,-12.646948
|
||||
parent: 1
|
||||
- uid: 50
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 1.6920182,-12.631323
|
||||
parent: 1
|
||||
- proto: CableApcExtension
|
||||
entities:
|
||||
- uid: 51
|
||||
|
|
@ -2210,26 +2198,26 @@ entities:
|
|||
rot: 3.141592653589793 rad
|
||||
pos: -0.5,-3.5
|
||||
parent: 1
|
||||
- proto: CigPackSyndicate
|
||||
- proto: ClothingBackpackDuffelSyndicateAmmoFilled
|
||||
entities:
|
||||
- uid: 313
|
||||
- uid: 49
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -3.5658307,-17.516623
|
||||
pos: 1.4468282,-11.670399
|
||||
parent: 1
|
||||
- proto: ClothingBackpackDuffelSyndicateFilledMedical
|
||||
entities:
|
||||
- uid: 314
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -3.5044222,-6.293252
|
||||
pos: -5.6167116,-4.2485933
|
||||
parent: 1
|
||||
- proto: ClothingHeadHatSyndie
|
||||
entities:
|
||||
- uid: 315
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -3.1200604,-17.289778
|
||||
pos: -3.0420556,-17.469692
|
||||
parent: 1
|
||||
- proto: ClothingHeadHatSyndieMAA
|
||||
entities:
|
||||
|
|
@ -3617,18 +3605,6 @@ entities:
|
|||
- type: Transform
|
||||
pos: -4.5,-3.5
|
||||
parent: 1
|
||||
- proto: MedkitCombatFilled
|
||||
entities:
|
||||
- uid: 501
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -3.401462,-3.5350046
|
||||
parent: 1
|
||||
- uid: 502
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -3.557712,-3.4256296
|
||||
parent: 1
|
||||
- proto: Mirror
|
||||
entities:
|
||||
- uid: 503
|
||||
|
|
@ -3636,6 +3612,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: 4.5,-3.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: Multitool
|
||||
entities:
|
||||
- uid: 504
|
||||
|
|
@ -3672,17 +3650,38 @@ entities:
|
|||
- type: Transform
|
||||
pos: -2.5,-12.5
|
||||
parent: 1
|
||||
- proto: Ointment
|
||||
- proto: NukeOpsGrenadeSpawner
|
||||
entities:
|
||||
- uid: 511
|
||||
- uid: 44
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -3.651462,-4.5193796
|
||||
pos: 1.5,-12.5
|
||||
parent: 1
|
||||
- uid: 512
|
||||
- proto: NukeOpsLootSpawner
|
||||
entities:
|
||||
- uid: 46
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -3.667087,-4.2225046
|
||||
pos: -3.5,-17.5
|
||||
parent: 1
|
||||
- proto: NukeOpsMedkitBruteSpawner
|
||||
entities:
|
||||
- uid: 48
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -3.5,-3.5
|
||||
parent: 1
|
||||
- uid: 50
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -3.5,-6.5
|
||||
parent: 1
|
||||
- proto: NukeOpsMedkitSpawner
|
||||
entities:
|
||||
- uid: 47
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -3.5,-4.5
|
||||
parent: 1
|
||||
- proto: OperatingTable
|
||||
entities:
|
||||
|
|
@ -3761,6 +3760,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: 1.5,-14.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: PosterContrabandCC64KAd
|
||||
entities:
|
||||
- uid: 525
|
||||
|
|
@ -3768,6 +3769,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: -5.5,-18.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: PosterContrabandCybersun600
|
||||
entities:
|
||||
- uid: 526
|
||||
|
|
@ -3775,6 +3778,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: 2.5,-6.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: PosterContrabandDonk
|
||||
entities:
|
||||
- uid: 527
|
||||
|
|
@ -3783,6 +3788,8 @@ entities:
|
|||
rot: 3.141592653589793 rad
|
||||
pos: 3.5,-18.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: PosterContrabandDonutCorp
|
||||
entities:
|
||||
- uid: 528
|
||||
|
|
@ -3791,6 +3798,8 @@ entities:
|
|||
rot: 3.141592653589793 rad
|
||||
pos: 1.5,-22.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: PosterContrabandEnergySwords
|
||||
entities:
|
||||
- uid: 529
|
||||
|
|
@ -3798,6 +3807,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: 2.5,-18.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: PosterContrabandEnlistGorlex
|
||||
entities:
|
||||
- uid: 530
|
||||
|
|
@ -3806,6 +3817,8 @@ entities:
|
|||
rot: 3.141592653589793 rad
|
||||
pos: 2.5,-13.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: PosterContrabandFreeSyndicateEncryptionKey
|
||||
entities:
|
||||
- uid: 531
|
||||
|
|
@ -3813,6 +3826,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: -2.5,-8.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: PosterContrabandInterdyne
|
||||
entities:
|
||||
- uid: 532
|
||||
|
|
@ -3821,6 +3836,8 @@ entities:
|
|||
rot: 3.141592653589793 rad
|
||||
pos: -4.5,-6.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: PosterContrabandKosmicheskayaStantsiya
|
||||
entities:
|
||||
- uid: 533
|
||||
|
|
@ -3828,6 +3845,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: -2.5,-22.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: PosterContrabandMoth
|
||||
entities:
|
||||
- uid: 534
|
||||
|
|
@ -3835,11 +3854,15 @@ entities:
|
|||
- type: Transform
|
||||
pos: -2.5,-14.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- uid: 535
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 2.5,-3.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: PosterContrabandNuclearDeviceInformational
|
||||
entities:
|
||||
- uid: 536
|
||||
|
|
@ -3848,11 +3871,15 @@ entities:
|
|||
rot: 3.141592653589793 rad
|
||||
pos: -3.5,-13.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- uid: 537
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 0.5,-14.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: PosterContrabandSyndicatePistol
|
||||
entities:
|
||||
- uid: 538
|
||||
|
|
@ -3860,6 +3887,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: 1.5,-10.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: PosterContrabandSyndicateRecruitment
|
||||
entities:
|
||||
- uid: 539
|
||||
|
|
@ -3867,6 +3896,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: -1.5,-14.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: PosterContrabandWaffleCorp
|
||||
entities:
|
||||
- uid: 540
|
||||
|
|
@ -3875,6 +3906,8 @@ entities:
|
|||
rot: 3.141592653589793 rad
|
||||
pos: -2.5,-23.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: Poweredlight
|
||||
entities:
|
||||
- uid: 541
|
||||
|
|
@ -4302,9 +4335,13 @@ entities:
|
|||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
600:
|
||||
- Pressed: Toggle
|
||||
- - Pressed
|
||||
- Toggle
|
||||
599:
|
||||
- Pressed: Toggle
|
||||
- - Pressed
|
||||
- Toggle
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- uid: 611
|
||||
components:
|
||||
- type: Transform
|
||||
|
|
@ -4313,7 +4350,10 @@ entities:
|
|||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
605:
|
||||
- Pressed: Toggle
|
||||
- - Pressed
|
||||
- Toggle
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: SignalButtonDirectional
|
||||
entities:
|
||||
- uid: 20
|
||||
|
|
@ -4325,9 +4365,13 @@ entities:
|
|||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
602:
|
||||
- Pressed: Toggle
|
||||
- - Pressed
|
||||
- Toggle
|
||||
598:
|
||||
- Pressed: Toggle
|
||||
- - Pressed
|
||||
- Toggle
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- uid: 21
|
||||
components:
|
||||
- type: Transform
|
||||
|
|
@ -4337,19 +4381,28 @@ entities:
|
|||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
597:
|
||||
- Pressed: Toggle
|
||||
- - Pressed
|
||||
- Toggle
|
||||
601:
|
||||
- Pressed: Toggle
|
||||
- - Pressed
|
||||
- Toggle
|
||||
608:
|
||||
- Pressed: Toggle
|
||||
- - Pressed
|
||||
- Toggle
|
||||
606:
|
||||
- Pressed: Toggle
|
||||
- - Pressed
|
||||
- Toggle
|
||||
604:
|
||||
- Pressed: Toggle
|
||||
- - Pressed
|
||||
- Toggle
|
||||
607:
|
||||
- Pressed: Toggle
|
||||
- - Pressed
|
||||
- Toggle
|
||||
603:
|
||||
- Pressed: Toggle
|
||||
- - Pressed
|
||||
- Toggle
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: SignDirectionalEvac
|
||||
entities:
|
||||
- uid: 613
|
||||
|
|
@ -4357,30 +4410,40 @@ entities:
|
|||
- type: Transform
|
||||
pos: 0.5,-22.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- uid: 614
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 4.5,-15.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- uid: 615
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: -5.5,-14.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- uid: 616
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 4.5,-14.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- uid: 617
|
||||
components:
|
||||
- type: Transform
|
||||
rot: -1.5707963267948966 rad
|
||||
pos: -5.5,-15.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: SignElectricalMed
|
||||
entities:
|
||||
- uid: 618
|
||||
|
|
@ -4388,6 +4451,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: -2.5,-18.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: SignNosmoking
|
||||
entities:
|
||||
- uid: 619
|
||||
|
|
@ -4395,6 +4460,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: 5.5,-22.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: SignSecureSmallRed
|
||||
entities:
|
||||
- uid: 620
|
||||
|
|
@ -4402,16 +4469,22 @@ entities:
|
|||
- type: Transform
|
||||
pos: -3.5,-11.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- uid: 621
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 4.5,-17.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- uid: 622
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 2.5,-11.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: SMESBasic
|
||||
entities:
|
||||
- uid: 623
|
||||
|
|
@ -4481,30 +4554,6 @@ entities:
|
|||
- type: Transform
|
||||
pos: 3.5,-19.5
|
||||
parent: 1
|
||||
- proto: SyndieMiniBomb
|
||||
entities:
|
||||
- uid: 633
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 1.4127003,-11.973867
|
||||
parent: 1
|
||||
- uid: 634
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 1.6939503,-11.973867
|
||||
parent: 1
|
||||
- proto: SyringeInaprovaline
|
||||
entities:
|
||||
- uid: 635
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -3.510837,-4.3787546
|
||||
parent: 1
|
||||
- uid: 636
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -3.510837,-4.0193796
|
||||
parent: 1
|
||||
- proto: Table
|
||||
entities:
|
||||
- uid: 637
|
||||
|
|
@ -4689,14 +4738,7 @@ entities:
|
|||
- uid: 669
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -2.5731854,-17.414778
|
||||
parent: 1
|
||||
- proto: ToolboxSyndicateFilled
|
||||
entities:
|
||||
- uid: 670
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 1.5034143,-11.298322
|
||||
pos: -2.468854,-17.396727
|
||||
parent: 1
|
||||
- proto: VendingMachineTankDispenserEVA
|
||||
entities:
|
||||
|
|
@ -5516,6 +5558,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: 4.5,-25.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: WarningO2
|
||||
entities:
|
||||
- uid: 828
|
||||
|
|
@ -5523,6 +5567,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: 2.5,-25.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: WarningWaste
|
||||
entities:
|
||||
- uid: 829
|
||||
|
|
@ -5530,6 +5576,8 @@ entities:
|
|||
- type: Transform
|
||||
pos: 4.5,-18.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: WaterCooler
|
||||
entities:
|
||||
- uid: 830
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@
|
|||
raffle:
|
||||
settings: default
|
||||
mindRoles:
|
||||
- MindRoleGhostRoleSoloAntagonist
|
||||
- MindRoleLoneops
|
||||
- type: Sprite
|
||||
sprite: Markers/jobs.rsi
|
||||
layers:
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
group: GenericNumber
|
||||
- type: StatusEffects
|
||||
allowed:
|
||||
- Stutter
|
||||
- Electrocution
|
||||
- TemporaryBlindness
|
||||
- RadiationProtection
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@
|
|||
bodyType: KinematicController # Same for all inheritors
|
||||
- type: StatusEffects
|
||||
allowed:
|
||||
- Stutter
|
||||
- Electrocution
|
||||
- type: Pullable
|
||||
- type: Tag
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
bodyType: KinematicController # Same for all inheritors
|
||||
- type: StatusEffects
|
||||
allowed:
|
||||
- Stutter
|
||||
- Electrocution
|
||||
- Jump # Sunrise-Edit
|
||||
- Fall # Sunrise-Edit
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
baseSprintSpeed : 4
|
||||
- type: StatusEffects
|
||||
allowed:
|
||||
- Stutter
|
||||
- Electrocution
|
||||
- TemporaryBlindness
|
||||
- Pacified
|
||||
|
|
@ -97,7 +96,6 @@
|
|||
baseDecayRate: 0.04
|
||||
- type: StatusEffects
|
||||
allowed:
|
||||
- Stutter
|
||||
- Electrocution
|
||||
- TemporaryBlindness
|
||||
- Pacified
|
||||
|
|
|
|||
|
|
@ -104,7 +104,6 @@
|
|||
types: {}
|
||||
- type: StatusEffects # Overwriting basesimplemob to remove flash, getting flashed as dragon just feelsbad
|
||||
allowed:
|
||||
- Stutter
|
||||
- Electrocution
|
||||
- TemporaryBlindness
|
||||
- Pacified
|
||||
|
|
|
|||
|
|
@ -125,10 +125,7 @@
|
|||
- !type:WashCreamPieReaction
|
||||
- type: StatusEffects
|
||||
allowed:
|
||||
- Stutter
|
||||
- Electrocution
|
||||
- Drunk
|
||||
- SlurredSpeech
|
||||
- RatvarianLanguage
|
||||
- PressureImmunity
|
||||
- Muted
|
||||
|
|
|
|||
18
Resources/Prototypes/Entities/StatusEffects/body.yml
Normal file
18
Resources/Prototypes/Entities/StatusEffects/body.yml
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
- type: entity
|
||||
parent: MobStatusEffectBase
|
||||
id: BloodstreamStatusEffectBase
|
||||
abstract: true
|
||||
components:
|
||||
- type: StatusEffect
|
||||
whitelist:
|
||||
components:
|
||||
- Bloodstream
|
||||
|
||||
- type: entity
|
||||
parent: [ BloodstreamStatusEffectBase ]
|
||||
id: StatusEffectBloodloss
|
||||
name: bloodloss
|
||||
components:
|
||||
- type: StutteringAccent
|
||||
- type: DrunkStatusEffect
|
||||
- type: RejuvenateRemovedStatusEffect
|
||||
|
|
@ -78,3 +78,17 @@
|
|||
name: hallucinations
|
||||
components:
|
||||
- type: SeeingRainbowsStatusEffect
|
||||
|
||||
# Causes your vision to become blurry and gives me a headache.
|
||||
- type: entity
|
||||
parent: MobStatusEffectDebuff
|
||||
id: StatusEffectWoozy
|
||||
name: woozy
|
||||
components:
|
||||
- type: DrunkStatusEffect
|
||||
|
||||
# Causes you to get drunk
|
||||
- type: entity
|
||||
parent: [ StatusEffectWoozy, StatusEffectSlurred ]
|
||||
id: StatusEffectDrunk
|
||||
name: drunk
|
||||
|
|
|
|||
27
Resources/Prototypes/Entities/StatusEffects/speech.yml
Normal file
27
Resources/Prototypes/Entities/StatusEffects/speech.yml
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
- type: entity
|
||||
parent: MobStatusEffectDebuff
|
||||
id: SpeechStatusEffectBase
|
||||
abstract: true
|
||||
components:
|
||||
- type: StatusEffect
|
||||
whitelist:
|
||||
components:
|
||||
- MobState
|
||||
- Speech
|
||||
requireAll: true
|
||||
|
||||
# Causes you to st-t-u-t-t-t-er randomly when talking.
|
||||
- type: entity
|
||||
parent: SpeechStatusEffectBase
|
||||
id: StatusEffectStutter
|
||||
name: stutter
|
||||
components:
|
||||
- type: StutteringAccent
|
||||
|
||||
# Causes you to schlur your words schwhen talking.
|
||||
- type: entity
|
||||
parent: SpeechStatusEffectBase
|
||||
id: StatusEffectSlurred
|
||||
name: slurred
|
||||
components:
|
||||
- type: SlurredAccent
|
||||
|
|
@ -588,7 +588,7 @@
|
|||
factions:
|
||||
- Syndicate
|
||||
mindRoles:
|
||||
- MindRoleNukeops
|
||||
- MindRoleLoneops
|
||||
- type: DynamicRuleCost
|
||||
cost: 75
|
||||
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@
|
|||
- !type:GenericStatusEffect
|
||||
key: Stutter
|
||||
component: ScrambledAccent
|
||||
- !type:Drunk
|
||||
slurSpeech: false
|
||||
boozePower: 20
|
||||
- !type:ModifyStatusEffect
|
||||
effectProto: StatusEffectSlurred
|
||||
time: 20.0
|
||||
|
||||
- type: reagent
|
||||
id: Dylovene
|
||||
|
|
@ -106,8 +106,8 @@
|
|||
metabolisms:
|
||||
Medicine:
|
||||
effects:
|
||||
- !type:GenericStatusEffect
|
||||
key: Drunk
|
||||
- !type:ModifyStatusEffect
|
||||
effectProto: StatusEffectDrunk
|
||||
time: 6.0
|
||||
type: Remove
|
||||
- !type:HealthChange
|
||||
|
|
@ -1461,8 +1461,8 @@
|
|||
key: Jitter
|
||||
time: 2.0
|
||||
type: Remove
|
||||
- !type:GenericStatusEffect
|
||||
key: Drunk
|
||||
- !type:ModifyStatusEffect
|
||||
effectProto: StatusEffectDrunk
|
||||
time: 6.0
|
||||
type: Remove
|
||||
- !type:PopupMessage # we dont have sanity/mood so this will have to do
|
||||
|
|
|
|||
|
|
@ -197,6 +197,14 @@
|
|||
- type: MindRole
|
||||
antagPrototype: NukeopsCommander
|
||||
|
||||
- type: entity
|
||||
parent: MindRoleNukeops
|
||||
id: MindRoleLoneops
|
||||
name: Loneops Operative Role
|
||||
components:
|
||||
- type: MindRole
|
||||
roleType: SoloAntagonist
|
||||
|
||||
# Revolutionaries
|
||||
- type: entity
|
||||
parent: BaseMindRoleAntag
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue