Merge remote-tracking branch 'refs/remotes/wizards/master'
# Conflicts: # Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs # Resources/Prototypes/Entities/Structures/Machines/nuke.yml # Resources/migration.yml
This commit is contained in:
commit
e99ff5dc82
73 changed files with 5584 additions and 3437 deletions
|
|
@ -259,13 +259,13 @@ namespace Content.Client.Actions
|
|||
|
||||
public void LinkAllActions(ActionsComponent? actions = null)
|
||||
{
|
||||
if (_playerManager.LocalEntity is not { } user ||
|
||||
!Resolve(user, ref actions, false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (_playerManager.LocalEntity is not { } user ||
|
||||
!Resolve(user, ref actions, false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LinkActions?.Invoke(actions);
|
||||
LinkActions?.Invoke(actions);
|
||||
}
|
||||
|
||||
public override void Shutdown()
|
||||
|
|
|
|||
|
|
@ -1,8 +1,4 @@
|
|||
using Robust.Shared.GameObjects;
|
||||
|
||||
namespace Content.Client.Atmos.Components;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class PipeColorVisualsComponent : Component
|
||||
{
|
||||
}
|
||||
public sealed partial class PipeColorVisualsComponent : Component;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
<BoxContainer xmlns="https://spacestation14.io"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:s="clr-namespace:Content.Client.Stylesheets"
|
||||
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
|
||||
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
|
||||
Orientation="Vertical" HorizontalExpand ="True" Margin="0 0 0 3">
|
||||
|
|
@ -62,7 +61,7 @@
|
|||
</PanelContainer>
|
||||
</BoxContainer>
|
||||
|
||||
<!-- If the alarm is inactive, this is label is diplayed instead -->
|
||||
<!-- If the alarm is inactive, this is label is displayed instead -->
|
||||
<Label Name="NoDataLabel" Text="{Loc 'atmos-alerts-window-no-data-available'}" HorizontalAlignment="Center" Margin="0 15" FontColorOverride="#a9a9a9" ReservesSpace="False" Visible="False"></Label>
|
||||
|
||||
<!-- Silencing progress bar -->
|
||||
|
|
|
|||
|
|
@ -136,8 +136,9 @@ public sealed partial class AtmosAlarmEntryContainer : BoxContainer
|
|||
GasGridContainer.RemoveAllChildren();
|
||||
|
||||
var gasData = focusData.Value.GasData.Where(g => g.Key != Gas.Oxygen);
|
||||
var keyValuePairs = gasData.ToList();
|
||||
|
||||
if (gasData.Count() == 0)
|
||||
if (keyValuePairs.Count == 0)
|
||||
{
|
||||
// No other gases
|
||||
var gasLabel = new Label()
|
||||
|
|
@ -158,13 +159,11 @@ public sealed partial class AtmosAlarmEntryContainer : BoxContainer
|
|||
else
|
||||
{
|
||||
// Add an entry for each gas
|
||||
foreach ((var gas, (var mol, var percent, var alert)) in gasData)
|
||||
foreach ((var gas, (var mol, var percent, var alert)) in keyValuePairs)
|
||||
{
|
||||
var gasPercent = (FixedPoint2)0f;
|
||||
gasPercent = percent * 100f;
|
||||
FixedPoint2 gasPercent = percent * 100f;
|
||||
|
||||
if (!_gasShorthands.TryGetValue(gas, out var gasShorthand))
|
||||
gasShorthand = "X";
|
||||
var gasShorthand = _gasShorthands.GetValueOrDefault(gas, "X");
|
||||
|
||||
var gasLabel = new Label()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -14,8 +14,6 @@ public sealed class AtmosAlertsComputerBoundUserInterface : BoundUserInterface
|
|||
_menu = new AtmosAlertsComputerWindow(this, Owner);
|
||||
_menu.OpenCentered();
|
||||
_menu.OnClose += Close;
|
||||
|
||||
EntMan.TryGetComponent<TransformComponent>(Owner, out var xform);
|
||||
}
|
||||
|
||||
protected override void UpdateState(BoundUserInterfaceState state)
|
||||
|
|
@ -24,9 +22,6 @@ public sealed class AtmosAlertsComputerBoundUserInterface : BoundUserInterface
|
|||
|
||||
var castState = (AtmosAlertsComputerBoundInterfaceState) state;
|
||||
|
||||
if (castState == null)
|
||||
return;
|
||||
|
||||
EntMan.TryGetComponent<TransformComponent>(Owner, out var xform);
|
||||
_menu?.UpdateUI(xform?.Coordinates, castState.AirAlarms, castState.FireAlarms, castState.FocusData);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<controls:FancyWindow xmlns="https://spacestation14.io"
|
||||
xmlns:ui="clr-namespace:Content.Client.Pinpointer.UI"
|
||||
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
|
||||
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
|
||||
Title="{Loc 'atmos-alerts-window-title'}"
|
||||
Resizable="False"
|
||||
SetSize="1120 750"
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@ using Content.Shared.Atmos.Components;
|
|||
using Content.Shared.Atmos.Piping;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Client.ResourceManagement;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations;
|
||||
|
||||
namespace Content.Client.Atmos.EntitySystems;
|
||||
|
||||
|
|
@ -19,7 +17,7 @@ public sealed class AtmosPipeAppearanceSystem : EntitySystem
|
|||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<PipeAppearanceComponent, ComponentInit>(OnInit);
|
||||
SubscribeLocalEvent<PipeAppearanceComponent, AppearanceChangeEvent>(OnAppearanceChanged, after: new[] { typeof(SubFloorHideSystem) });
|
||||
SubscribeLocalEvent<PipeAppearanceComponent, AppearanceChangeEvent>(OnAppearanceChanged, after: [typeof(SubFloorHideSystem)]);
|
||||
}
|
||||
|
||||
private void OnInit(EntityUid uid, PipeAppearanceComponent component, ComponentInit args)
|
||||
|
|
@ -84,7 +82,8 @@ public sealed class AtmosPipeAppearanceSystem : EntitySystem
|
|||
|
||||
layer.Visible &= visible;
|
||||
|
||||
if (!visible) continue;
|
||||
if (!visible)
|
||||
continue;
|
||||
|
||||
layer.Color = color;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,7 @@
|
|||
using System.Collections.Generic;
|
||||
using Content.Shared.Atmos.Monitor;
|
||||
using Content.Shared.Power;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Client.Graphics;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Maths;
|
||||
using Robust.Shared.Serialization.Manager.Attributes;
|
||||
|
||||
namespace Content.Client.Atmos.Monitor;
|
||||
|
||||
|
|
@ -27,7 +22,7 @@ public sealed class AtmosAlarmableVisualsSystem : VisualizerSystem<AtmosAlarmabl
|
|||
{
|
||||
foreach (var visLayer in component.HideOnDepowered)
|
||||
{
|
||||
if (args.Sprite.LayerMapTryGet(visLayer, out int powerVisibilityLayer))
|
||||
if (args.Sprite.LayerMapTryGet(visLayer, out var powerVisibilityLayer))
|
||||
args.Sprite.LayerSetVisible(powerVisibilityLayer, powered);
|
||||
}
|
||||
}
|
||||
|
|
@ -36,7 +31,7 @@ public sealed class AtmosAlarmableVisualsSystem : VisualizerSystem<AtmosAlarmabl
|
|||
{
|
||||
foreach (var (setLayer, powerState) in component.SetOnDepowered)
|
||||
{
|
||||
if (args.Sprite.LayerMapTryGet(setLayer, out int setStateLayer))
|
||||
if (args.Sprite.LayerMapTryGet(setLayer, out var setStateLayer))
|
||||
args.Sprite.LayerSetState(setStateLayer, new RSI.StateId(powerState));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,7 @@
|
|||
using Content.Shared.Atmos;
|
||||
using Content.Shared.Atmos.Monitor;
|
||||
using Content.Shared.Atmos.Monitor.Components;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Client.UserInterface;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Log;
|
||||
|
||||
namespace Content.Client.Atmos.Monitor.UI;
|
||||
|
||||
|
|
@ -78,6 +74,7 @@ public sealed class AirAlarmBoundUserInterface : BoundUserInterface
|
|||
{
|
||||
base.Dispose(disposing);
|
||||
|
||||
if (disposing) _window?.Dispose();
|
||||
if (disposing)
|
||||
_window?.Dispose();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ using Content.Shared.Atmos.Monitor.Components;
|
|||
using Content.Shared.Atmos.Piping.Unary.Components;
|
||||
using Content.Shared.Temperature;
|
||||
using Robust.Client.AutoGenerated;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Client.UserInterface.Controls;
|
||||
using Robust.Client.UserInterface.XAML;
|
||||
|
||||
|
|
@ -59,7 +58,7 @@ public sealed partial class AirAlarmWindow : FancyWindow
|
|||
AirAlarmMode.Fill => "air-alarm-ui-mode-fill",
|
||||
AirAlarmMode.Panic => "air-alarm-ui-mode-panic",
|
||||
AirAlarmMode.None => "air-alarm-ui-mode-none",
|
||||
_ => "error"
|
||||
_ => "error",
|
||||
};
|
||||
_modes.AddItem(Loc.GetString(text));
|
||||
}
|
||||
|
|
@ -70,7 +69,7 @@ public sealed partial class AirAlarmWindow : FancyWindow
|
|||
AirAlarmModeChanged!.Invoke((AirAlarmMode) args.Id);
|
||||
};
|
||||
|
||||
_autoMode.OnToggled += args =>
|
||||
_autoMode.OnToggled += _ =>
|
||||
{
|
||||
AutoModeChanged!.Invoke(_autoMode.Pressed);
|
||||
};
|
||||
|
|
@ -176,22 +175,18 @@ public sealed partial class AirAlarmWindow : FancyWindow
|
|||
|
||||
public static Color ColorForThreshold(float amount, AtmosAlarmThreshold threshold)
|
||||
{
|
||||
threshold.CheckThreshold(amount, out AtmosAlarmType curAlarm);
|
||||
threshold.CheckThreshold(amount, out var curAlarm);
|
||||
return ColorForAlarm(curAlarm);
|
||||
}
|
||||
|
||||
public static Color ColorForAlarm(AtmosAlarmType curAlarm)
|
||||
{
|
||||
if(curAlarm == AtmosAlarmType.Danger)
|
||||
return curAlarm switch
|
||||
{
|
||||
return StyleNano.DangerousRedFore;
|
||||
}
|
||||
else if(curAlarm == AtmosAlarmType.Warning)
|
||||
{
|
||||
return StyleNano.ConcerningOrangeFore;
|
||||
}
|
||||
|
||||
return StyleNano.GoodGreenFore;
|
||||
AtmosAlarmType.Danger => StyleNano.DangerousRedFore,
|
||||
AtmosAlarmType.Warning => StyleNano.ConcerningOrangeFore,
|
||||
_ => StyleNano.GoodGreenFore,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,8 @@
|
|||
using System;
|
||||
using Content.Shared.Atmos.Monitor;
|
||||
using Content.Shared.Atmos.Monitor.Components;
|
||||
using Content.Shared.Atmos.Piping.Unary.Components;
|
||||
using Robust.Client.AutoGenerated;
|
||||
using Robust.Client.UserInterface.Controls;
|
||||
using Robust.Client.UserInterface.CustomControls;
|
||||
using Robust.Client.UserInterface.XAML;
|
||||
using Robust.Shared.Localization;
|
||||
|
||||
namespace Content.Client.Atmos.Monitor.UI.Widgets;
|
||||
|
||||
|
|
@ -25,7 +21,7 @@ public sealed partial class PumpControl : BoxContainer
|
|||
private OptionButton _pressureCheck => CPressureCheck;
|
||||
private FloatSpinBox _externalBound => CExternalBound;
|
||||
private FloatSpinBox _internalBound => CInternalBound;
|
||||
private Button _copySettings => CCopySettings;
|
||||
private Button _copySettings => CCopySettings;
|
||||
|
||||
public PumpControl(GasVentPumpData data, string address)
|
||||
{
|
||||
|
|
@ -86,7 +82,7 @@ public sealed partial class PumpControl : BoxContainer
|
|||
_data.PressureChecks = (VentPressureBound) args.Id;
|
||||
PumpDataChanged?.Invoke(_address, _data);
|
||||
};
|
||||
|
||||
|
||||
_copySettings.OnPressed += _ =>
|
||||
{
|
||||
PumpDataCopied?.Invoke(_data);
|
||||
|
|
|
|||
|
|
@ -1,15 +1,9 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Content.Shared.Atmos;
|
||||
using Content.Shared.Atmos.Monitor;
|
||||
using Content.Shared.Atmos.Monitor.Components;
|
||||
using Content.Shared.Atmos.Piping.Unary.Components;
|
||||
using Robust.Client.AutoGenerated;
|
||||
using Robust.Client.UserInterface.Controls;
|
||||
using Robust.Client.UserInterface.CustomControls;
|
||||
using Robust.Client.UserInterface.XAML;
|
||||
using Robust.Shared.Localization;
|
||||
|
||||
namespace Content.Client.Atmos.Monitor.UI.Widgets;
|
||||
|
||||
|
|
@ -27,7 +21,7 @@ public sealed partial class ScrubberControl : BoxContainer
|
|||
private OptionButton _pumpDirection => CPumpDirection;
|
||||
private FloatSpinBox _volumeRate => CVolumeRate;
|
||||
private CheckBox _wideNet => CWideNet;
|
||||
private Button _copySettings => CCopySettings;
|
||||
private Button _copySettings => CCopySettings;
|
||||
|
||||
private GridContainer _gases => CGasContainer;
|
||||
private Dictionary<Gas, Button> _gasControls = new();
|
||||
|
|
@ -77,7 +71,7 @@ public sealed partial class ScrubberControl : BoxContainer
|
|||
_data.PumpDirection = (ScrubberPumpDirection) args.Id;
|
||||
ScrubberDataChanged?.Invoke(_address, _data);
|
||||
};
|
||||
|
||||
|
||||
_copySettings.OnPressed += _ =>
|
||||
{
|
||||
ScrubberDataCopied?.Invoke(_data);
|
||||
|
|
|
|||
|
|
@ -43,7 +43,8 @@ public sealed partial class SensorInfo : BoxContainer
|
|||
var label = new RichTextLabel();
|
||||
|
||||
var fractionGas = amount / data.TotalMoles;
|
||||
label.SetMarkup(Loc.GetString("air-alarm-ui-gases-indicator", ("gas", $"{gas}"),
|
||||
label.SetMarkup(Loc.GetString("air-alarm-ui-gases-indicator",
|
||||
("gas", $"{gas}"),
|
||||
("color", AirAlarmWindow.ColorForThreshold(fractionGas, data.GasThresholds[gas])),
|
||||
("amount", $"{amount:0.####}"),
|
||||
("percentage", $"{(100 * fractionGas):0.##}")));
|
||||
|
|
@ -53,9 +54,9 @@ public sealed partial class SensorInfo : BoxContainer
|
|||
var threshold = data.GasThresholds[gas];
|
||||
var gasThresholdControl = new ThresholdControl(Loc.GetString($"air-alarm-ui-thresholds-gas-title", ("gas", $"{gas}")), threshold, AtmosMonitorThresholdType.Gas, gas, 100);
|
||||
gasThresholdControl.Margin = new Thickness(20, 2, 2, 2);
|
||||
gasThresholdControl.ThresholdDataChanged += (type, threshold, arg3) =>
|
||||
gasThresholdControl.ThresholdDataChanged += (type, alarmThreshold, arg3) =>
|
||||
{
|
||||
OnThresholdUpdate!(_address, type, threshold, arg3);
|
||||
OnThresholdUpdate!(_address, type, alarmThreshold, arg3);
|
||||
};
|
||||
|
||||
_gasThresholds.Add(gas, gasThresholdControl);
|
||||
|
|
@ -64,7 +65,8 @@ public sealed partial class SensorInfo : BoxContainer
|
|||
|
||||
_pressureThreshold = new ThresholdControl(Loc.GetString("air-alarm-ui-thresholds-pressure-title"), data.PressureThreshold, AtmosMonitorThresholdType.Pressure);
|
||||
PressureThresholdContainer.AddChild(_pressureThreshold);
|
||||
_temperatureThreshold = new ThresholdControl(Loc.GetString("air-alarm-ui-thresholds-temperature-title"), data.TemperatureThreshold,
|
||||
_temperatureThreshold = new ThresholdControl(Loc.GetString("air-alarm-ui-thresholds-temperature-title"),
|
||||
data.TemperatureThreshold,
|
||||
AtmosMonitorThresholdType.Temperature);
|
||||
TemperatureThresholdContainer.AddChild(_temperatureThreshold);
|
||||
|
||||
|
|
@ -103,7 +105,8 @@ public sealed partial class SensorInfo : BoxContainer
|
|||
}
|
||||
|
||||
var fractionGas = amount / data.TotalMoles;
|
||||
label.SetMarkup(Loc.GetString("air-alarm-ui-gases-indicator", ("gas", $"{gas}"),
|
||||
label.SetMarkup(Loc.GetString("air-alarm-ui-gases-indicator",
|
||||
("gas", $"{gas}"),
|
||||
("color", AirAlarmWindow.ColorForThreshold(fractionGas, data.GasThresholds[gas])),
|
||||
("amount", $"{amount:0.####}"),
|
||||
("percentage", $"{(100 * fractionGas):0.##}")));
|
||||
|
|
|
|||
|
|
@ -1,7 +1,4 @@
|
|||
using Content.Client.Message;
|
||||
using Content.Shared.Atmos;
|
||||
using Content.Shared.Atmos.Monitor;
|
||||
using Content.Shared.Temperature;
|
||||
using Robust.Client.AutoGenerated;
|
||||
using Robust.Client.UserInterface.Controls;
|
||||
using Robust.Client.UserInterface.XAML;
|
||||
|
|
|
|||
|
|
@ -1,12 +1,8 @@
|
|||
using System;
|
||||
using Content.Shared.Atmos;
|
||||
using Content.Shared.Atmos.Monitor;
|
||||
using Content.Shared.Atmos.Monitor.Components;
|
||||
using Robust.Client.AutoGenerated;
|
||||
using Robust.Client.UserInterface.Controls;
|
||||
using Robust.Client.UserInterface.CustomControls;
|
||||
using Robust.Client.UserInterface.XAML;
|
||||
using Robust.Shared.Localization;
|
||||
|
||||
// holy FUCK
|
||||
// this technically works because some of this you can *not* do in XAML but holy FUCK
|
||||
|
|
@ -115,29 +111,38 @@ public sealed partial class ThresholdControl : BoxContainer
|
|||
_enabled.Pressed = !_threshold.Ignore;
|
||||
}
|
||||
|
||||
private String LabelForBound(string boundType) //<todo.eoin Replace this with enums
|
||||
private string LabelForBound(string boundType) //<todo.eoin Replace this with enums
|
||||
{
|
||||
return Loc.GetString($"air-alarm-ui-thresholds-{boundType}");
|
||||
}
|
||||
|
||||
public void UpdateThresholdData(AtmosAlarmThreshold threshold, float currentAmount)
|
||||
{
|
||||
threshold.CheckThreshold(currentAmount, out AtmosAlarmType alarm, out AtmosMonitorThresholdBound which);
|
||||
threshold.CheckThreshold(currentAmount, out var alarm, out var bound);
|
||||
|
||||
var upperDangerState = AtmosAlarmType.Normal;
|
||||
var lowerDangerState = AtmosAlarmType.Normal;
|
||||
var upperWarningState = AtmosAlarmType.Normal;
|
||||
var lowerWarningState = AtmosAlarmType.Normal;
|
||||
|
||||
if(alarm == AtmosAlarmType.Danger)
|
||||
switch (alarm)
|
||||
{
|
||||
if(which == AtmosMonitorThresholdBound.Upper) upperDangerState = alarm;
|
||||
else lowerDangerState = alarm;
|
||||
}
|
||||
else if(alarm == AtmosAlarmType.Warning)
|
||||
{
|
||||
if(which == AtmosMonitorThresholdBound.Upper) upperWarningState = alarm;
|
||||
else lowerWarningState = alarm;
|
||||
case AtmosAlarmType.Danger:
|
||||
{
|
||||
if (bound == AtmosMonitorThresholdBound.Upper)
|
||||
upperDangerState = alarm;
|
||||
else
|
||||
lowerDangerState = alarm;
|
||||
break;
|
||||
}
|
||||
case AtmosAlarmType.Warning:
|
||||
{
|
||||
if (bound == AtmosMonitorThresholdBound.Upper)
|
||||
upperWarningState = alarm;
|
||||
else
|
||||
lowerWarningState = alarm;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
_upperBoundControl.SetValue(threshold.UpperBound.Value);
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
using Content.Client.Atmos.EntitySystems;
|
||||
|
|
@ -101,14 +102,9 @@ public sealed class AtmosDebugOverlay : Overlay
|
|||
else
|
||||
{
|
||||
// Red-Green-Blue interpolation
|
||||
if (interp < 0.5f)
|
||||
{
|
||||
res = Color.InterpolateBetween(Color.Red, Color.LimeGreen, interp * 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
res = Color.InterpolateBetween(Color.LimeGreen, Color.Blue, (interp - 0.5f) * 2);
|
||||
}
|
||||
res = interp < 0.5f
|
||||
? Color.InterpolateBetween(Color.Red, Color.LimeGreen, interp * 2)
|
||||
: Color.InterpolateBetween(Color.LimeGreen, Color.Blue, (interp - 0.5f) * 2);
|
||||
}
|
||||
|
||||
res = res.WithAlpha(0.75f);
|
||||
|
|
@ -181,7 +177,10 @@ public sealed class AtmosDebugOverlay : Overlay
|
|||
handle.DrawCircle(tileCentre, 0.05f, Color.Black);
|
||||
}
|
||||
|
||||
private void CheckAndShowBlockDir(AtmosDebugOverlayData data, DrawingHandleWorld handle, AtmosDirection dir,
|
||||
private void CheckAndShowBlockDir(
|
||||
AtmosDebugOverlayData data,
|
||||
DrawingHandleWorld handle,
|
||||
AtmosDirection dir,
|
||||
Vector2 tileCentre)
|
||||
{
|
||||
if (!data.BlockDirection.HasFlag(dir))
|
||||
|
|
@ -243,7 +242,7 @@ public sealed class AtmosDebugOverlay : Overlay
|
|||
|
||||
var moles = data.Moles == null
|
||||
? "No Air"
|
||||
: data.Moles.Sum().ToString();
|
||||
: data.Moles.Sum().ToString(CultureInfo.InvariantCulture);
|
||||
|
||||
handle.DrawString(_font, pos, $"Moles: {moles}");
|
||||
pos += offset;
|
||||
|
|
@ -263,7 +262,12 @@ public sealed class AtmosDebugOverlay : Overlay
|
|||
private void GetGrids(MapId mapId, Box2Rotated box)
|
||||
{
|
||||
_grids.Clear();
|
||||
_mapManager.FindGridsIntersecting(mapId, box, ref _grids, (EntityUid uid, MapGridComponent grid,
|
||||
_mapManager.FindGridsIntersecting(
|
||||
mapId,
|
||||
box,
|
||||
ref _grids,
|
||||
(EntityUid uid,
|
||||
MapGridComponent grid,
|
||||
ref List<(Entity<MapGridComponent>, DebugMessage)> state) =>
|
||||
{
|
||||
if (_system.TileData.TryGetValue(uid, out var data))
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ using Robust.Client.GameObjects;
|
|||
|
||||
namespace Content.Client.Clothing;
|
||||
|
||||
public sealed class FlippableClothingVisualizerSystem : VisualizerSystem<FlippableClothingVisualsComponent>
|
||||
public sealed class FlippableClothingVisualizerSystem : VisualizerSystem<FlippableClothingVisualsComponent>
|
||||
{
|
||||
[Dependency] private readonly SharedItemSystem _itemSys = default!;
|
||||
|
||||
|
|
|
|||
|
|
@ -191,9 +191,15 @@ namespace Content.Client.Inventory
|
|||
return;
|
||||
|
||||
if (ev.Function == ContentKeyFunctions.ExamineEntity)
|
||||
{
|
||||
_examine.DoExamine(slot.Entity.Value);
|
||||
ev.Handle();
|
||||
}
|
||||
else if (ev.Function == EngineKeyFunctions.UseSecondary)
|
||||
{
|
||||
_ui.GetUIController<VerbMenuUIController>().OpenVerbMenu(slot.Entity.Value);
|
||||
ev.Handle();
|
||||
}
|
||||
}
|
||||
|
||||
private void AddInventoryButton(EntityUid invUid, string slotId, InventoryComponent inv)
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ public sealed partial class StencilOverlay
|
|||
var matty = Matrix3x2.Multiply(matrix, invMatrix);
|
||||
worldHandle.SetTransform(matty);
|
||||
|
||||
foreach (var tile in grid.Comp.GetTilesIntersecting(worldAABB))
|
||||
foreach (var tile in _map.GetTilesIntersecting(grid.Owner, grid, worldAABB))
|
||||
{
|
||||
// Ignored tiles for stencil
|
||||
if (_weather.CanWeatherAffect(grid.Owner, grid, tile))
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ public sealed partial class StencilOverlay : Overlay
|
|||
[Dependency] private readonly IPrototypeManager _protoManager = default!;
|
||||
private readonly ParallaxSystem _parallax;
|
||||
private readonly SharedTransformSystem _transform;
|
||||
private readonly SharedMapSystem _map;
|
||||
private readonly SpriteSystem _sprite;
|
||||
private readonly WeatherSystem _weather;
|
||||
|
||||
|
|
@ -33,11 +34,12 @@ public sealed partial class StencilOverlay : Overlay
|
|||
|
||||
private readonly ShaderInstance _shader;
|
||||
|
||||
public StencilOverlay(ParallaxSystem parallax, SharedTransformSystem transform, SpriteSystem sprite, WeatherSystem weather)
|
||||
public StencilOverlay(ParallaxSystem parallax, SharedTransformSystem transform, SharedMapSystem map, SpriteSystem sprite, WeatherSystem weather)
|
||||
{
|
||||
ZIndex = ParallaxSystem.ParallaxZIndex + 1;
|
||||
_parallax = parallax;
|
||||
_transform = transform;
|
||||
_map = map;
|
||||
_sprite = sprite;
|
||||
_weather = weather;
|
||||
IoCManager.InjectDependencies(this);
|
||||
|
|
|
|||
|
|
@ -10,13 +10,14 @@ public sealed class StencilOverlaySystem : EntitySystem
|
|||
[Dependency] private readonly IOverlayManager _overlay = default!;
|
||||
[Dependency] private readonly ParallaxSystem _parallax = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
[Dependency] private readonly SharedMapSystem _map = default!;
|
||||
[Dependency] private readonly SpriteSystem _sprite = default!;
|
||||
[Dependency] private readonly WeatherSystem _weather = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
_overlay.AddOverlay(new StencilOverlay(_parallax, _transform, _sprite, _weather));
|
||||
_overlay.AddOverlay(new StencilOverlay(_parallax, _transform, _map, _sprite, _weather));
|
||||
}
|
||||
|
||||
public override void Shutdown()
|
||||
|
|
|
|||
|
|
@ -83,22 +83,27 @@ public sealed class HandsUIController : UIController, IOnStateEntered<GameplaySt
|
|||
if (args.Function == EngineKeyFunctions.UIClick)
|
||||
{
|
||||
_handsSystem.UIHandClick(_playerHandsComponent, hand.SlotName);
|
||||
args.Handle();
|
||||
}
|
||||
else if (args.Function == EngineKeyFunctions.UseSecondary)
|
||||
{
|
||||
_handsSystem.UIHandOpenContextMenu(hand.SlotName);
|
||||
args.Handle();
|
||||
}
|
||||
else if (args.Function == ContentKeyFunctions.ActivateItemInWorld)
|
||||
{
|
||||
_handsSystem.UIHandActivate(hand.SlotName);
|
||||
args.Handle();
|
||||
}
|
||||
else if (args.Function == ContentKeyFunctions.AltActivateItemInWorld)
|
||||
{
|
||||
_handsSystem.UIHandAltActivateItem(hand.SlotName);
|
||||
args.Handle();
|
||||
}
|
||||
else if (args.Function == ContentKeyFunctions.ExamineEntity)
|
||||
{
|
||||
_handsSystem.UIInventoryExamine(hand.SlotName);
|
||||
args.Handle();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ public sealed class GasProducerAnomalySystem : EntitySystem
|
|||
{
|
||||
[Dependency] private readonly AtmosphereSystem _atmosphere = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly SharedMapSystem _map = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
|
|
@ -56,8 +57,11 @@ public sealed class GasProducerAnomalySystem : EntitySystem
|
|||
return;
|
||||
|
||||
var localpos = xform.Coordinates.Position;
|
||||
var tilerefs = grid.GetLocalTilesIntersecting(
|
||||
new Box2(localpos + new Vector2(-radius, -radius), localpos + new Vector2(radius, radius))).ToArray();
|
||||
var tilerefs = _map.GetLocalTilesIntersecting(
|
||||
xform.GridUid.Value,
|
||||
grid,
|
||||
new Box2(localpos + new Vector2(-radius, -radius), localpos + new Vector2(radius, radius)))
|
||||
.ToArray();
|
||||
|
||||
if (tilerefs.Length == 0)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ public sealed partial class DragonSystem : EntitySystem
|
|||
[Dependency] private readonly SharedActionsSystem _actions = default!;
|
||||
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
[Dependency] private readonly SharedMapSystem _map = default!;
|
||||
[Dependency] private readonly MobStateSystem _mobState = default!;
|
||||
|
||||
private EntityQuery<CarpRiftsConditionComponent> _objQuery;
|
||||
|
|
@ -156,7 +157,7 @@ public sealed partial class DragonSystem : EntitySystem
|
|||
}
|
||||
|
||||
// cant put a rift on solars
|
||||
foreach (var tile in grid.GetTilesIntersecting(new Circle(_transform.GetWorldPosition(xform), RiftTileRadius), false))
|
||||
foreach (var tile in _map.GetTilesIntersecting(xform.GridUid.Value, grid, new Circle(_transform.GetWorldPosition(xform), RiftTileRadius), false))
|
||||
{
|
||||
if (!tile.IsSpace(_tileDef))
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
using System.Linq;
|
||||
using System.Numerics;
|
||||
using Content.Server.Administration.Logs;
|
||||
using Content.Server.Chat.Managers;
|
||||
using Content.Server.GameTicking;
|
||||
|
|
@ -32,14 +34,13 @@ using Robust.Shared.Physics.Systems;
|
|||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Timing;
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
|
||||
namespace Content.Server.Ghost
|
||||
{
|
||||
public sealed class GhostSystem : SharedGhostSystem
|
||||
{
|
||||
[Dependency] private readonly SharedActionsSystem _actions = default!;
|
||||
[Dependency] private readonly IAdminLogManager _adminLog = default!;
|
||||
[Dependency] private readonly SharedEyeSystem _eye = default!;
|
||||
[Dependency] private readonly FollowerSystem _followerSystem = default!;
|
||||
[Dependency] private readonly IGameTiming _gameTiming = default!;
|
||||
|
|
@ -323,6 +324,8 @@ namespace Content.Server.Ghost
|
|||
|
||||
private void WarpTo(EntityUid uid, EntityUid target)
|
||||
{
|
||||
_adminLog.Add(LogType.GhostWarp, $"{ToPrettyString(uid)} ghost warped to {ToPrettyString(target)}");
|
||||
|
||||
if ((TryComp(target, out WarpPointComponent? warp) && warp.Follow) || HasComp<MobStateComponent>(target))
|
||||
{
|
||||
_followerSystem.StartFollowingEntity(uid, target);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System.Linq;
|
||||
using System.Linq;
|
||||
using Content.Server.Administration;
|
||||
using Content.Server.Ghost.Roles.Components;
|
||||
using Content.Server.Ghost.Roles.Raffles;
|
||||
|
|
@ -77,13 +77,13 @@ namespace Content.Server.Ghost.Roles
|
|||
|
||||
if (isProto)
|
||||
{
|
||||
if (!_protoManager.TryIndex<GhostRoleRaffleSettingsPrototype>(args[4], out var proto))
|
||||
if (!_protoManager.TryIndex<GhostRoleRaffleSettingsPrototype>(args[3], out var proto))
|
||||
{
|
||||
var validProtos = string.Join(", ",
|
||||
_protoManager.EnumeratePrototypes<GhostRoleRaffleSettingsPrototype>().Select(p => p.ID)
|
||||
);
|
||||
|
||||
shell.WriteLine($"{args[4]} is not a valid raffle settings prototype. Valid options: {validProtos}");
|
||||
shell.WriteLine($"{args[3]} is not a valid raffle settings prototype. Valid options: {validProtos}");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ public sealed class NukeSystem : EntitySystem
|
|||
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
[Dependency] private readonly SharedMapSystem _map = default!;
|
||||
[Dependency] private readonly StationSystem _station = default!;
|
||||
[Dependency] private readonly UserInterfaceSystem _ui = default!;
|
||||
[Dependency] private readonly AppearanceSystem _appearance = default!;
|
||||
|
|
@ -190,7 +191,7 @@ public sealed class NukeSystem : EntitySystem
|
|||
|
||||
var worldPos = _transform.GetWorldPosition(xform);
|
||||
|
||||
foreach (var tile in grid.GetTilesIntersecting(new Circle(worldPos, component.RequiredFloorRadius), false))
|
||||
foreach (var tile in _map.GetTilesIntersecting(xform.GridUid.Value, grid, new Circle(worldPos, component.RequiredFloorRadius), false))
|
||||
{
|
||||
if (!tile.IsSpace(_tileDefManager))
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ public sealed class SpecialRespawnSystem : SharedSpecialRespawnSystem
|
|||
[Dependency] private readonly AtmosphereSystem _atmosphere = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
[Dependency] private readonly SharedMapSystem _map = default!;
|
||||
[Dependency] private readonly TurfSystem _turf = default!;
|
||||
[Dependency] private readonly IChatManager _chat = default!;
|
||||
[Dependency] private readonly IPrototypeManager _proto = default!;
|
||||
|
|
@ -105,7 +106,7 @@ public sealed class SpecialRespawnSystem : SharedSpecialRespawnSystem
|
|||
|
||||
var found = false;
|
||||
|
||||
foreach (var tile in grid.GetTilesIntersecting(circle))
|
||||
foreach (var tile in _map.GetTilesIntersecting(entityGridUid.Value, grid, circle))
|
||||
{
|
||||
if (tile.IsSpace(_tileDefinitionManager)
|
||||
|| _turf.IsTileBlocked(tile, CollisionGroup.MobMask)
|
||||
|
|
@ -176,7 +177,7 @@ public sealed class SpecialRespawnSystem : SharedSpecialRespawnSystem
|
|||
var mapTarget = grid.WorldToTile(mapPos);
|
||||
var circle = new Circle(mapPos, 2);
|
||||
|
||||
foreach (var newTileRef in grid.GetTilesIntersecting(circle))
|
||||
foreach (var newTileRef in _map.GetTilesIntersecting(targetGrid, grid, circle))
|
||||
{
|
||||
if (newTileRef.IsSpace(_tileDefinitionManager) || _turf.IsTileBlocked(newTileRef, CollisionGroup.MobMask) || !_atmosphere.IsTileMixtureProbablySafe(targetGrid, targetMap, mapTarget))
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ public sealed partial class RevenantSystem
|
|||
[Dependency] private readonly TileSystem _tile = default!;
|
||||
[Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _transformSystem = default!;
|
||||
[Dependency] private readonly SharedMapSystem _mapSystem = default!;
|
||||
[Dependency] private readonly DoorSystem _doorSystem = default!; // Sunrise-Edit
|
||||
|
||||
private void InitializeAbilities()
|
||||
|
|
@ -232,8 +233,12 @@ public sealed partial class RevenantSystem
|
|||
var xform = Transform(uid);
|
||||
if (!TryComp<MapGridComponent>(xform.GridUid, out var map))
|
||||
return;
|
||||
var tiles = map.GetTilesIntersecting(Box2.CenteredAround(_transformSystem.GetWorldPosition(xform),
|
||||
new Vector2(component.DefileRadius * 2, component.DefileRadius))).ToArray();
|
||||
var tiles = _mapSystem.GetTilesIntersecting(
|
||||
xform.GridUid.Value,
|
||||
map,
|
||||
Box2.CenteredAround(_transformSystem.GetWorldPosition(xform),
|
||||
new Vector2(component.DefileRadius * 2, component.DefileRadius)))
|
||||
.ToArray();
|
||||
|
||||
_random.Shuffle(tiles);
|
||||
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ public sealed class SpawnSalvageMissionJob : Job<bool>
|
|||
|
||||
List<Vector2i> reservedTiles = new();
|
||||
|
||||
foreach (var tile in grid.GetTilesIntersecting(new Circle(Vector2.Zero, landingPadRadius), false))
|
||||
foreach (var tile in _map.GetTilesIntersecting(mapUid, grid, new Circle(Vector2.Zero, landingPadRadius), false))
|
||||
{
|
||||
if (!_biome.TryGetBiomeTile(mapUid, grid, tile.GridIndices, out _))
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -1030,6 +1030,7 @@ public sealed partial class ShuttleSystem
|
|||
continue;
|
||||
}
|
||||
|
||||
// If it has the FTLSmashImmuneComponent ignore it.
|
||||
if (_immuneQuery.HasComponent(ent))
|
||||
{
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -308,7 +308,7 @@ public sealed class EventHorizonSystem : SharedEventHorizonSystem
|
|||
foreach (var grid in grids)
|
||||
{
|
||||
// TODO: Remover grid.Owner when this iterator returns entityuids as well.
|
||||
AttemptConsumeTiles(uid, grid.Comp.GetTilesIntersecting(circle), grid, grid, eventHorizon);
|
||||
AttemptConsumeTiles(uid, _mapSystem.GetTilesIntersecting(grid.Owner, grid.Comp, circle), grid, grid, eventHorizon);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ using Content.Server.Xenoarchaeology.XenoArtifacts.Events;
|
|||
using Content.Shared.Maps;
|
||||
using Content.Shared.Physics;
|
||||
using Content.Shared.Throwing;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Shared.Map.Components;
|
||||
using Robust.Shared.Physics.Components;
|
||||
using Robust.Shared.Random;
|
||||
|
|
@ -17,7 +16,8 @@ public sealed class ThrowArtifactSystem : EntitySystem
|
|||
[Dependency] private readonly EntityLookupSystem _lookup = default!;
|
||||
[Dependency] private readonly ThrowingSystem _throwing = default!;
|
||||
[Dependency] private readonly TileSystem _tile = default!;
|
||||
[Dependency] private readonly TransformSystem _transform = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
[Dependency] private readonly SharedMapSystem _mapSystem = default!;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override void Initialize()
|
||||
|
|
@ -30,7 +30,9 @@ public sealed class ThrowArtifactSystem : EntitySystem
|
|||
var xform = Transform(uid);
|
||||
if (TryComp<MapGridComponent>(xform.GridUid, out var grid))
|
||||
{
|
||||
var tiles = grid.GetTilesIntersecting(
|
||||
var tiles = _mapSystem.GetTilesIntersecting(
|
||||
xform.GridUid.Value,
|
||||
grid,
|
||||
Box2.CenteredAround(_transform.GetWorldPosition(xform), new Vector2(component.Range * 2, component.Range)));
|
||||
|
||||
foreach (var tile in tiles)
|
||||
|
|
|
|||
|
|
@ -115,10 +115,14 @@ public enum LogType
|
|||
/// Storage & entity-storage related interactions
|
||||
/// </summary>
|
||||
Storage = 93,
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A player got hit by an explosion and was dealt damage.
|
||||
/// </summary>
|
||||
ExplosionHit = 94,
|
||||
|
||||
/// <summary>
|
||||
/// A ghost warped to an entity through the ghost warp menu.
|
||||
/// </summary>
|
||||
GhostWarp = 95,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ public abstract class SharedAnomalySystem : EntitySystem
|
|||
[Dependency] protected readonly SharedPopupSystem Popup = default!;
|
||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
[Dependency] private readonly SharedMapSystem _map = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
|
|
@ -358,8 +359,11 @@ public abstract class SharedAnomalySystem : EntitySystem
|
|||
var amount = (int) (MathHelper.Lerp(settings.MinAmount, settings.MaxAmount, severity * stability * powerModifier) + 0.5f);
|
||||
|
||||
var localpos = xform.Coordinates.Position;
|
||||
var tilerefs = grid.GetLocalTilesIntersecting(
|
||||
new Box2(localpos + new Vector2(-settings.MaxRange, -settings.MaxRange), localpos + new Vector2(settings.MaxRange, settings.MaxRange))).ToList();
|
||||
var tilerefs = _map.GetLocalTilesIntersecting(
|
||||
xform.GridUid.Value,
|
||||
grid,
|
||||
new Box2(localpos + new Vector2(-settings.MaxRange, -settings.MaxRange), localpos + new Vector2(settings.MaxRange, settings.MaxRange)))
|
||||
.ToList();
|
||||
|
||||
if (tilerefs.Count == 0)
|
||||
return null;
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ public sealed class SelfBeforeHyposprayInjectsEvent : BeforeHyposprayInjectsTarg
|
|||
/// This event is raised on the target before the hypospray is injected.
|
||||
/// The event is triggered on the target itself and all its clothing.
|
||||
/// </summary>
|
||||
public sealed class TargetBeforeHyposprayInjectsEvent : BeforeHyposprayInjectsTargetEvent
|
||||
public sealed class TargetBeforeHyposprayInjectsEvent : BeforeHyposprayInjectsTargetEvent
|
||||
{
|
||||
public TargetBeforeHyposprayInjectsEvent (EntityUid user, EntityUid hypospray, EntityUid target) : base(user, hypospray, target) { }
|
||||
public TargetBeforeHyposprayInjectsEvent(EntityUid user, EntityUid hypospray, EntityUid target) : base(user, hypospray, target) { }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -468,6 +468,12 @@ namespace Content.Shared.Cuffs
|
|||
if (!_interaction.InRangeUnobstructed(handcuff, target))
|
||||
return false;
|
||||
|
||||
// if the amount of hands the target has is equal to or less than the amount of hands that are cuffed
|
||||
// don't apply the new set of cuffs
|
||||
// (how would you even end up with more cuffed hands than actual hands? either way accounting for it)
|
||||
if (TryComp<HandsComponent>(target, out var hands) && hands.Count <= component.CuffedHandCount)
|
||||
return false;
|
||||
|
||||
// Success!
|
||||
_hands.TryDrop(user, handcuff);
|
||||
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@ public sealed partial class NearbyTilesPercentRule : RulesRule
|
|||
[DataField]
|
||||
public float Range = 10f;
|
||||
|
||||
private readonly SharedMapSystem _map;
|
||||
|
||||
public override bool Check(EntityManager entManager, EntityUid uid)
|
||||
{
|
||||
if (!entManager.TryGetComponent(uid, out TransformComponent? xform) ||
|
||||
|
|
@ -38,7 +40,7 @@ public sealed partial class NearbyTilesPercentRule : RulesRule
|
|||
var tileCount = 0;
|
||||
var matchingTileCount = 0;
|
||||
|
||||
foreach (var tile in grid.GetTilesIntersecting(new Circle(transform.GetWorldPosition(xform),
|
||||
foreach (var tile in _map.GetTilesIntersecting(xform.GridUid.Value, grid, new Circle(transform.GetWorldPosition(xform),
|
||||
Range)))
|
||||
{
|
||||
// Only consider collidable anchored (for reasons some subfloor stuff has physics but non-collidable)
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ namespace Content.Shared.Traits.Assorted;
|
|||
public sealed class PermanentBlindnessSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly INetManager _net = default!;
|
||||
[Dependency] private readonly IEntityManager _entityManager = default!;
|
||||
[Dependency] private readonly BlindableSystem _blinding = default!;
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
|
@ -33,20 +32,26 @@ public sealed class PermanentBlindnessSystem : EntitySystem
|
|||
|
||||
private void OnShutdown(Entity<PermanentBlindnessComponent> blindness, ref ComponentShutdown args)
|
||||
{
|
||||
_blinding.UpdateIsBlind(blindness.Owner);
|
||||
if (!TryComp<BlindableComponent>(blindness.Owner, out var blindable))
|
||||
return;
|
||||
|
||||
if (blindable.MinDamage != 0)
|
||||
{
|
||||
_blinding.SetMinDamage((blindness.Owner, blindable), 0);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnMapInit(Entity<PermanentBlindnessComponent> blindness, ref MapInitEvent args)
|
||||
{
|
||||
if (!_entityManager.TryGetComponent<BlindableComponent>(blindness, out var blindable))
|
||||
if(!TryComp<BlindableComponent>(blindness.Owner, out var blindable))
|
||||
return;
|
||||
|
||||
if (blindness.Comp.Blindness != 0)
|
||||
_blinding.SetMinDamage(new Entity<BlindableComponent?>(blindness.Owner, blindable), blindness.Comp.Blindness);
|
||||
_blinding.SetMinDamage((blindness.Owner, blindable), blindness.Comp.Blindness);
|
||||
else
|
||||
{
|
||||
var maxMagnitudeInt = (int) BlurryVisionComponent.MaxMagnitude;
|
||||
_blinding.SetMinDamage(new Entity<BlindableComponent?>(blindness.Owner, blindable), maxMagnitudeInt);
|
||||
_blinding.SetMinDamage((blindness.Owner, blindable), maxMagnitudeInt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -620,5 +620,12 @@ Entries:
|
|||
id: 77
|
||||
time: '2024-11-20T07:55:12.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33311
|
||||
- author: TokenStyle
|
||||
changes:
|
||||
- message: makeghostroleraffled admin command now works with few arguments!
|
||||
type: Fix
|
||||
id: 78
|
||||
time: '2024-11-30T20:11:44.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/31836
|
||||
Name: Admin
|
||||
Order: 1
|
||||
|
|
|
|||
|
|
@ -1,107 +1,4 @@
|
|||
Entries:
|
||||
- author: EmoGarbage404
|
||||
changes:
|
||||
- message: The recycler can now be broken down and repaired.
|
||||
type: Add
|
||||
- message: Breaking the recycler now removes the EMAG effect.
|
||||
type: Add
|
||||
- message: The material-reclaiming efficiency of the recycler has been increased.
|
||||
type: Tweak
|
||||
- message: Fixed a bug where inaccessible solutions could be extracted from entities
|
||||
via the recycler.
|
||||
type: Fix
|
||||
- message: Removed the material reclaimer.
|
||||
type: Remove
|
||||
id: 7159
|
||||
time: '2024-08-19T03:39:00.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/30802
|
||||
- author: lzk228
|
||||
changes:
|
||||
- message: Cheese wheel now Normal sized and slices in 4 slices instead of 3.
|
||||
type: Tweak
|
||||
id: 7160
|
||||
time: '2024-08-19T07:54:35.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/31168
|
||||
- author: Beck Thompson
|
||||
changes:
|
||||
- message: Slightly increased the price of the seed restock.
|
||||
type: Tweak
|
||||
id: 7161
|
||||
time: '2024-08-19T10:33:41.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/31185
|
||||
- author: Boaz1111
|
||||
changes:
|
||||
- message: The HoS has been given a new experimental weapon:An energy shotgun with
|
||||
multiple fire modes. This experimental tech is highly wanted by the syndicate,
|
||||
and agents will try to steal it.
|
||||
type: Add
|
||||
- message: Removed the Head of Security's Emergency Orders.
|
||||
type: Remove
|
||||
id: 7162
|
||||
time: '2024-08-19T11:14:30.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/30643
|
||||
- author: tosatur
|
||||
changes:
|
||||
- message: Added more words to chat sanitisation
|
||||
type: Tweak
|
||||
id: 7163
|
||||
time: '2024-08-19T14:03:07.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/31085
|
||||
- author: tosatur
|
||||
changes:
|
||||
- message: Changed text for ghost visibility toggle
|
||||
type: Tweak
|
||||
id: 7164
|
||||
time: '2024-08-19T17:51:55.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/30998
|
||||
- author: themias
|
||||
changes:
|
||||
- message: Lizards can now eat meat dumplings.
|
||||
type: Fix
|
||||
id: 7165
|
||||
time: '2024-08-19T18:17:28.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/31212
|
||||
- author: slarticodefast
|
||||
changes:
|
||||
- message: Made the straitjacked non-printable again.
|
||||
type: Remove
|
||||
id: 7166
|
||||
time: '2024-08-19T18:47:24.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/31197
|
||||
- author: themias
|
||||
changes:
|
||||
- message: Added the Combat Bakery Kit to the syndicate uplink. Includes a deadly
|
||||
edible baguette sword and throwing star croissants for 3 TC.
|
||||
type: Add
|
||||
- message: Baguettes can be worn on the belt and normal ones do one blunt damage.
|
||||
type: Tweak
|
||||
- message: Mimes have a baguette instead of an MRE in their survival kits.
|
||||
type: Tweak
|
||||
id: 7167
|
||||
time: '2024-08-19T18:57:30.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/31179
|
||||
- author: metalgearsloth
|
||||
changes:
|
||||
- message: Fix wire sounds not playing.
|
||||
type: Fix
|
||||
id: 7168
|
||||
time: '2024-08-19T19:50:03.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/31067
|
||||
- author: redmushie
|
||||
changes:
|
||||
- message: Communications console buttons now have descriptive tooltips
|
||||
type: Add
|
||||
id: 7169
|
||||
time: '2024-08-19T20:36:36.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/31217
|
||||
- author: Mephisto72
|
||||
changes:
|
||||
- message: The Detective can now access Externals and Cryogenics like their Officer
|
||||
counterpart.
|
||||
type: Tweak
|
||||
id: 7170
|
||||
time: '2024-08-19T23:44:51.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/30203
|
||||
- author: Vermidia
|
||||
changes:
|
||||
- message: Mothroaches can now wear anything hamlet can wear
|
||||
|
|
@ -3920,3 +3817,96 @@
|
|||
id: 7658
|
||||
time: '2024-11-28T13:41:01.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33622
|
||||
- author: arimah
|
||||
changes:
|
||||
- message: GPS coordinates are now more readable.
|
||||
type: Tweak
|
||||
id: 7659
|
||||
time: '2024-11-29T08:14:14.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33625
|
||||
- author: DrSmugleaf
|
||||
changes:
|
||||
- message: Added admin log for ghost warping.
|
||||
type: Add
|
||||
id: 7660
|
||||
time: '2024-11-29T09:46:24.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33636
|
||||
- author: MossyGreySlope
|
||||
changes:
|
||||
- message: Rename the "slimeperson life support crate" to "internals crate (nitrogen)".
|
||||
type: Tweak
|
||||
id: 7661
|
||||
time: '2024-11-29T12:51:15.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33545
|
||||
- author: GansuLalan
|
||||
changes:
|
||||
- message: The arrival shuttle will no longer smash the nuke
|
||||
type: Fix
|
||||
id: 7662
|
||||
time: '2024-11-30T02:48:04.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33659
|
||||
- author: VlaDOS1408
|
||||
changes:
|
||||
- message: Locale to shuttle-ftl-status-Invalid
|
||||
type: Add
|
||||
id: 7663
|
||||
time: '2024-11-30T02:54:37.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33651
|
||||
- author: jbox144
|
||||
changes:
|
||||
- message: Fixed the link on Marathon's TEG exterior airlock
|
||||
type: Fix
|
||||
- message: Fixed Cog's exterior atmospherics airlock
|
||||
type: Fix
|
||||
id: 7664
|
||||
time: '2024-11-30T06:23:50.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33621
|
||||
- author: Plykiya
|
||||
changes:
|
||||
- message: You can no longer cuff someone multiple times if multiple cuff do-afters
|
||||
are completed at the exact same time.
|
||||
type: Fix
|
||||
id: 7665
|
||||
time: '2024-11-30T15:58:56.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33646
|
||||
- author: Plykiya
|
||||
changes:
|
||||
- message: You can now inspect the entity in your hand instead of the entity that
|
||||
happened to be underneath your hand.
|
||||
type: Fix
|
||||
id: 7666
|
||||
time: '2024-11-30T16:14:39.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33642
|
||||
- author: Plykiya
|
||||
changes:
|
||||
- message: You can now inspect entities in the stripping window instead of the entity
|
||||
that happened to be underneath the window.
|
||||
type: Fix
|
||||
id: 7667
|
||||
time: '2024-11-30T16:23:27.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33644
|
||||
- author: Winkarst-cpu
|
||||
changes:
|
||||
- message: Now borgs get names on roundstart.
|
||||
type: Fix
|
||||
id: 7668
|
||||
time: '2024-11-30T17:25:09.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33578
|
||||
- author: thetolbean
|
||||
changes:
|
||||
- message: The double-bladed esword now can only be activated when wielded.
|
||||
type: Tweak
|
||||
id: 7669
|
||||
time: '2024-11-30T19:31:40.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/32869
|
||||
- author: IProduceWidgets
|
||||
changes:
|
||||
- message: Reindeer.
|
||||
type: Add
|
||||
- message: the legally distinct cookie monster.
|
||||
type: Add
|
||||
- message: cargo order for holiday light tubes.
|
||||
type: Add
|
||||
id: 7670
|
||||
time: '2024-12-01T06:30:01.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33364
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ panic_bunker.enabled = true
|
|||
panic_bunker.disable_with_admins = true
|
||||
panic_bunker.enable_without_admins = true
|
||||
panic_bunker.show_reason = true
|
||||
panic_bunker.custom_reason = "You have not played on a Wizard's Den server long enough to connect to this server. Please play on Wizard's Den Lizard or Farm Grass Hopper until you have more playtime."
|
||||
panic_bunker.custom_reason = "You have not played on a Wizard's Den server long enough to connect to this server. Please play on Wizard's Den Lizard until you have more playtime."
|
||||
|
||||
[infolinks]
|
||||
bug_report = "https://github.com/space-wizards/space-station-14/issues/new/choose"
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1 +1,3 @@
|
|||
handheld-gps-coordinates-title = Coords: {$coordinates}
|
||||
handheld-gps-coordinates-title =
|
||||
Coords:
|
||||
{$coordinates}
|
||||
|
|
|
|||
|
|
@ -314,3 +314,7 @@ ghost-role-information-artifact-description = Enact your eldritch whims. Forcibl
|
|||
ghost-role-information-tomatokiller-name = Tomato killer
|
||||
ghost-role-information-tomatokiller-description = This little tomato will serve the botanist for the rest of his life... that is, a couple of minutes
|
||||
|
||||
ghost-role-information-gingerbread-name = Gingerbread Man
|
||||
ghost-role-information-gingerbread-description = A being of pure holiday spirit.
|
||||
Spread molassesy goodness and to all good cheer.
|
||||
|
||||
|
|
|
|||
|
|
@ -5,5 +5,6 @@ humanoid-character-profile-summary =
|
|||
This is {$name}. {$gender ->
|
||||
[male] He is
|
||||
[female] She is
|
||||
*[other] They are
|
||||
[epicene] They are
|
||||
*[other] It is
|
||||
} {$age} years old.
|
||||
|
|
@ -15,7 +15,7 @@ humanoid-profile-editor-pronouns-label = Pronouns:
|
|||
humanoid-profile-editor-pronouns-male-text = He / Him
|
||||
humanoid-profile-editor-pronouns-female-text = She / Her
|
||||
humanoid-profile-editor-pronouns-epicene-text = They / Them
|
||||
humanoid-profile-editor-pronouns-neuter-text = It / It
|
||||
humanoid-profile-editor-pronouns-neuter-text = It / Its
|
||||
humanoid-profile-editor-import-button = Import
|
||||
humanoid-profile-editor-export-button = Export
|
||||
humanoid-profile-editor-export-image-button = Export image
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ shuttle-console-ftl-state-Starting = Starting
|
|||
shuttle-console-ftl-state-Travelling = Travelling
|
||||
shuttle-console-ftl-state-Arriving = Arriving
|
||||
shuttle-console-ftl-state-Cooldown = Cooldown
|
||||
shuttle-console-ftl-state-Invalid = Invalid
|
||||
|
||||
shuttle-console-map-settings = Settings
|
||||
shuttle-console-ftl-button = FTL
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ species-name-arachnid = Arachnid
|
|||
species-name-moth = Moth Person
|
||||
species-name-skeleton = Skeleton
|
||||
species-name-vox = Vox
|
||||
species-name-gingerbread = delicious baked good
|
||||
|
||||
## Misc species things
|
||||
|
||||
|
|
|
|||
|
|
@ -15048,12 +15048,24 @@ entities:
|
|||
rot: -1.5707963267948966 rad
|
||||
pos: 15.5,6.5
|
||||
parent: 12
|
||||
- type: DeviceLinkSink
|
||||
invokeCounter: 1
|
||||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
26626:
|
||||
- DoorStatus: DoorBolt
|
||||
- uid: 26626
|
||||
components:
|
||||
- type: Transform
|
||||
rot: -1.5707963267948966 rad
|
||||
pos: 15.5,8.5
|
||||
parent: 12
|
||||
- type: DeviceLinkSink
|
||||
invokeCounter: 1
|
||||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
26625:
|
||||
- DoorStatus: DoorBolt
|
||||
- uid: 28301
|
||||
components:
|
||||
- type: Transform
|
||||
|
|
|
|||
|
|
@ -9815,6 +9815,8 @@ entities:
|
|||
rot: 3.141592653589793 rad
|
||||
pos: 5.5,-44.5
|
||||
parent: 30
|
||||
- type: DeviceLinkSink
|
||||
invokeCounter: 1
|
||||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
10559:
|
||||
|
|
@ -9827,6 +9829,12 @@ entities:
|
|||
parent: 30
|
||||
- type: DeviceLinkSink
|
||||
invokeCounter: 1
|
||||
- type: DeviceLinkSource
|
||||
linkedPorts:
|
||||
9342:
|
||||
- DoorStatus: DoorBolt
|
||||
lastSignals:
|
||||
DoorStatus: True
|
||||
- uid: 20059
|
||||
components:
|
||||
- type: Transform
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -63,7 +63,7 @@
|
|||
icon:
|
||||
sprite: Objects/Tanks/red.rsi
|
||||
state: icon
|
||||
product: CrateSlimepersonLifeSupport
|
||||
product: CrateNitrogenInternals
|
||||
cost: 350
|
||||
category: cargoproduct-category-name-emergency
|
||||
group: market
|
||||
|
|
|
|||
|
|
@ -18,6 +18,16 @@
|
|||
category: cargoproduct-category-name-service
|
||||
group: market
|
||||
|
||||
- type: cargoProduct
|
||||
id: ServiceLightsHoliday
|
||||
icon:
|
||||
sprite: Objects/Power/light_bulb.rsi
|
||||
state: normal
|
||||
product: CrateServiceHolidayLights
|
||||
cost: 800
|
||||
category: cargoproduct-category-name-service
|
||||
group: market
|
||||
|
||||
- type: cargoProduct
|
||||
id: MousetrapBoxes
|
||||
icon:
|
||||
|
|
@ -207,3 +217,5 @@
|
|||
cost: 500
|
||||
category: cargoproduct-category-name-service
|
||||
group: market
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -84,6 +84,26 @@
|
|||
- id: LightBulb
|
||||
amount: 6
|
||||
|
||||
- type: entity
|
||||
name: holiday lighttube box
|
||||
parent: BoxLightbulb
|
||||
id: BoxLighttubeHoliday
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: LightTubeCrystalRed # Its alternating on purpose for the light replacer.
|
||||
- id: LightTubeCrystalGreen
|
||||
- id: LightTubeCrystalRed
|
||||
- id: LightTubeCrystalGreen
|
||||
- id: LightTubeCrystalRed
|
||||
- id: LightTubeCrystalGreen
|
||||
- id: LightTubeCrystalRed
|
||||
- id: LightTubeCrystalGreen
|
||||
- id: LightTubeCrystalRed
|
||||
- id: LightTubeCrystalGreen
|
||||
- id: LightTubeCrystalRed
|
||||
- id: LightTubeCrystalGreen
|
||||
|
||||
- type: entity
|
||||
name: PDA box
|
||||
parent: BoxCardboard
|
||||
|
|
|
|||
|
|
@ -73,10 +73,10 @@
|
|||
amount: 6
|
||||
|
||||
- type: entity
|
||||
id: CrateSlimepersonLifeSupport
|
||||
id: CrateNitrogenInternals
|
||||
parent: CrateInternals
|
||||
name: slimeperson life support crate
|
||||
description: Contains four breath masks and four large nitrogen tanks.
|
||||
name: internals crate (nitrogen)
|
||||
description: Contains four breath masks and four large nitrogen tanks. Intended for Slimepeople and Vox.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
|
|
|
|||
|
|
@ -32,6 +32,17 @@
|
|||
- id: BoxLighttube
|
||||
- id: BoxLightbulb
|
||||
|
||||
- type: entity
|
||||
id: CrateServiceHolidayLights
|
||||
parent: CrateGenericSteel
|
||||
name: holiday lights crate
|
||||
description: Deck the halls with these festive holiday lights!
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: BoxLighttubeHoliday
|
||||
- id: BoxLighttubeHoliday
|
||||
|
||||
- type: entity
|
||||
id: CrateMousetrapBoxes
|
||||
parent: CrateGenericSteel
|
||||
|
|
|
|||
|
|
@ -880,3 +880,46 @@
|
|||
- type: ConditionalSpawner
|
||||
prototypes:
|
||||
- MobHonkBot
|
||||
|
||||
- type: entity
|
||||
name: gingerbread man Spawner
|
||||
id: SpawnMobGingerbreadAI
|
||||
suffix: Ghostrole
|
||||
parent: MarkerBase
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: green
|
||||
- state: full
|
||||
sprite: Mobs/Species/Gingerbread/parts.rsi
|
||||
- type: ConditionalSpawner
|
||||
prototypes:
|
||||
- MobGingerbreadAI
|
||||
|
||||
- type: entity
|
||||
name: Reindeer Buck Spawner
|
||||
id: SpawnMobReindeerBuck
|
||||
parent: MarkerBase
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: green
|
||||
- state: reindeer_buck_still
|
||||
sprite: Mobs/Animals/reindeer_buck.rsi
|
||||
- type: ConditionalSpawner
|
||||
prototypes:
|
||||
- MobReindeerBuck
|
||||
|
||||
- type: entity
|
||||
name: Reindeer Doe Spawner
|
||||
id: SpawnMobReindeerDoe
|
||||
parent: MarkerBase
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: green
|
||||
- state: reindeer_doe_still
|
||||
sprite: Mobs/Animals/reindeer_doe.rsi
|
||||
- type: ConditionalSpawner
|
||||
prototypes:
|
||||
- MobReindeerDoe
|
||||
|
|
@ -299,6 +299,9 @@
|
|||
parent: [BaseBorgChassis, BaseBorgTransponder]
|
||||
abstract: true
|
||||
components:
|
||||
- type: RandomMetadata
|
||||
nameSegments:
|
||||
- names_borg
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- NanoTrasen
|
||||
|
|
|
|||
|
|
@ -3494,3 +3494,97 @@
|
|||
components:
|
||||
- type: ReplacementAccent
|
||||
accent: nymph
|
||||
|
||||
- type: entity
|
||||
name: reindeer buck
|
||||
parent: [ SimpleMobBase, MobCombat ]
|
||||
id: MobReindeerBuck
|
||||
description: You think it can pull a sleigh?
|
||||
components:
|
||||
- type: Sprite
|
||||
drawdepth: Mobs
|
||||
layers:
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: reindeer_buck
|
||||
sprite: Mobs/Animals/reindeer_buck.rsi
|
||||
# - type: SpriteMovement # One day when this shit isnt broken as hell. For now they hoppity hop.
|
||||
# movementLayers:
|
||||
# movement:
|
||||
# state: reindeer_buck
|
||||
# noMovementLayers:
|
||||
# movement:
|
||||
# state: reindeer_buck_still
|
||||
- type: Physics
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
fix1:
|
||||
shape:
|
||||
!type:PhysShapeCircle
|
||||
radius: 0.48
|
||||
density: 200
|
||||
mask:
|
||||
- MobMask
|
||||
layer:
|
||||
- MobLayer
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
Base: reindeer_buck
|
||||
Critical:
|
||||
Base: reindeer_buck_dead
|
||||
Dead:
|
||||
Base: reindeer_buck_dead
|
||||
- type: Butcherable
|
||||
spawned:
|
||||
- id: FoodMeat
|
||||
amount: 4
|
||||
- type: Bloodstream
|
||||
bloodMaxVolume: 300
|
||||
# Horns though
|
||||
- type: MeleeWeapon
|
||||
damage:
|
||||
types:
|
||||
Piercing: 22
|
||||
animation: WeaponArcFist
|
||||
- type: NPCRetaliation
|
||||
- type: FactionException
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- Passive
|
||||
- type: HTN
|
||||
rootTask:
|
||||
task: SimpleHostileCompound
|
||||
- type: Puller
|
||||
needsHands: false
|
||||
|
||||
- type: entity
|
||||
name: reindeer doe
|
||||
parent: MobReindeerBuck
|
||||
id: MobReindeerDoe
|
||||
components:
|
||||
- type: MeleeWeapon
|
||||
damage:
|
||||
types:
|
||||
Blunt: 15
|
||||
animation: WeaponArcFist
|
||||
- type: Sprite
|
||||
drawdepth: Mobs
|
||||
layers:
|
||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||
state: reindeer_doe
|
||||
sprite: Mobs/Animals/reindeer_doe.rsi
|
||||
# - type: SpriteMovement # One day when this shit isnt broken as hell. For now they hoppity hop.
|
||||
# movementLayers:
|
||||
# movement:
|
||||
# state: reindeer_doe
|
||||
# noMovementLayers:
|
||||
# movement:
|
||||
# state: reindeer_doe_still
|
||||
- type: DamageStateVisuals
|
||||
states:
|
||||
Alive:
|
||||
Base: reindeer_doe
|
||||
Critical:
|
||||
Base: reindeer_doe_dead
|
||||
Dead:
|
||||
Base: reindeer_doe_dead
|
||||
|
|
|
|||
|
|
@ -11,3 +11,23 @@
|
|||
damageRecovery:
|
||||
types:
|
||||
Asphyxiation: -1.0
|
||||
|
||||
- type: entity
|
||||
name: gingerbread man
|
||||
id: MobGingerbreadAI
|
||||
parent: [ MobGingerbread, MobCombat]
|
||||
components:
|
||||
- type: GhostRole
|
||||
name: ghost-role-information-gingerbread-name
|
||||
description: ghost-role-information-gingerbread-description
|
||||
rules: ghost-role-information-nonantagonist-rules
|
||||
- type: GhostTakeoverAvailable
|
||||
- type: NPCRetaliation
|
||||
- type: FactionException
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- Passive
|
||||
- type: HTN
|
||||
rootTask:
|
||||
task: SimpleHostileCompound
|
||||
|
||||
|
|
@ -280,6 +280,7 @@
|
|||
components:
|
||||
- type: ItemToggle
|
||||
onUse: false # wielding events control it instead
|
||||
onActivate: false # prevents the weapon from being able to be turned on when it is on the ground
|
||||
soundActivate:
|
||||
path: /Audio/Weapons/ebladeon.ogg
|
||||
params:
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@
|
|||
Nuke: !type:ContainerSlot
|
||||
- type: Construction
|
||||
node: nuke
|
||||
- type: FTLSmashImmune
|
||||
|
||||
- type: entity
|
||||
parent: NuclearBomb
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
- type: species
|
||||
id: Gingerbread
|
||||
name: species-name-human
|
||||
name: species-name-gingerbread
|
||||
roundStart: false
|
||||
prototype: MobGingerbread
|
||||
sprites: MobGingerbreadSprites
|
||||
|
|
|
|||
52
Resources/Textures/Mobs/Animals/reindeer_buck.rsi/meta.json
Normal file
52
Resources/Textures/Mobs/Animals/reindeer_buck.rsi/meta.json
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
{
|
||||
"version": 1,
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Deer by Calciumtrice, usable under Creative Commons Attribution 3.0 license, from https://opengameart.org/content/deer, edited by IProduceWidgets (github)",
|
||||
"states": [
|
||||
{
|
||||
"name": "reindeer_buck",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
1,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2
|
||||
],
|
||||
[
|
||||
1,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2
|
||||
],
|
||||
[
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
1
|
||||
],
|
||||
[
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
1
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "reindeer_buck_still",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "reindeer_buck_dead"
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
52
Resources/Textures/Mobs/Animals/reindeer_doe.rsi/meta.json
Normal file
52
Resources/Textures/Mobs/Animals/reindeer_doe.rsi/meta.json
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
{
|
||||
"version": 1,
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Deer by Calciumtrice, usable under Creative Commons Attribution 3.0 license, from https://opengameart.org/content/deer, edited by IProduceWidgets (github)",
|
||||
"states": [
|
||||
{
|
||||
"name": "reindeer_doe",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
1,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2
|
||||
],
|
||||
[
|
||||
1,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2
|
||||
],
|
||||
[
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
1
|
||||
],
|
||||
[
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
0.2,
|
||||
1
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "reindeer_doe_still",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "reindeer_doe_dead"
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1 KiB |
|
|
@ -287,49 +287,50 @@ BriefcaseSyndieBase: null
|
|||
BodyBag_Container: BodyBag
|
||||
BodyBag_Folded: BodyBagFolded
|
||||
|
||||
# Sunrise-Edit: Возвращены резиновые боеприпасы.
|
||||
# 2024-04-26
|
||||
BaseBulletRubber: null
|
||||
BulletPistolRubber: BulletPistol
|
||||
BulletMagnumRubber: BulletMagnum
|
||||
BulletLightRifleRubber: BulletLightRifle
|
||||
BulletRifleRubber: BulletRifle
|
||||
BulletCaselessRifleRubber: BulletCaselessRifle
|
||||
CartridgePistolRubber: CartridgePistol
|
||||
CartridgeMagnumRubber: CartridgeMagnum
|
||||
CartridgeLightRifleRubber: CartridgeLightRifle
|
||||
CartridgeRifleRubber: CartridgeRifle
|
||||
CartridgeCaselessRifleRubber: CartridgeCaselessRifle
|
||||
MagazinePistolRubber: MagazinePistol
|
||||
MagazinePistolSubMachineGunRubber: MagazinePistolSubMachineGun
|
||||
MagazinePistolCaselessRifleRubber: MagazinePistolCaselessRifle
|
||||
MagazineMagnumRubber: MagazineMagnum
|
||||
MagazineMagnumSubMachineGunRubber: MagazineMagnumSubMachineGun
|
||||
MagazineLightRifleRubber: MagazineLightRifle
|
||||
MagazineRifleRubber: MagazineRifle
|
||||
MagazineCaselessRifleRubber: MagazineCaselessRifle
|
||||
MagazineCaselessRifleShortRubber: MagazineCaselessRifleShort
|
||||
SpeedLoaderPistolRubber: SpeedLoaderPistol
|
||||
SpeedLoaderMagnumRubber: SpeedLoaderMagnum
|
||||
MagazineBoxPistolRubber: MagazineBoxPistol
|
||||
#BaseBulletRubber: null
|
||||
#BulletPistolRubber: BulletPistol
|
||||
#BulletMagnumRubber: BulletMagnum
|
||||
#BulletLightRifleRubber: BulletLightRifle
|
||||
#BulletRifleRubber: BulletRifle
|
||||
#BulletCaselessRifleRubber: BulletCaselessRifle
|
||||
#CartridgePistolRubber: CartridgePistol
|
||||
#CartridgeMagnumRubber: CartridgeMagnum
|
||||
#CartridgeLightRifleRubber: CartridgeLightRifle
|
||||
#CartridgeRifleRubber: CartridgeRifle
|
||||
#CartridgeCaselessRifleRubber: CartridgeCaselessRifle
|
||||
#MagazinePistolRubber: MagazinePistol
|
||||
#MagazinePistolSubMachineGunRubber: MagazinePistolSubMachineGun
|
||||
#MagazinePistolCaselessRifleRubber: MagazinePistolCaselessRifle
|
||||
#MagazineMagnumRubber: MagazineMagnum
|
||||
#MagazineMagnumSubMachineGunRubber: MagazineMagnumSubMachineGun
|
||||
#MagazineLightRifleRubber: MagazineLightRifle
|
||||
#MagazineRifleRubber: MagazineRifle
|
||||
#MagazineCaselessRifleRubber: MagazineCaselessRifle
|
||||
#MagazineCaselessRifleShortRubber: MagazineCaselessRifleShort
|
||||
#SpeedLoaderPistolRubber: SpeedLoaderPistol
|
||||
#SpeedLoaderMagnumRubber: SpeedLoaderMagnum
|
||||
#MagazineBoxPistolRubber: MagazineBoxPistol
|
||||
# RIP box of magnum rubbers 202X to 2024
|
||||
MagazineBoxMagnumRubber: MagazineBoxMagnum
|
||||
MagazineBoxLightRifleRubber: MagazineBoxLightRifle
|
||||
MagazineBoxRifleRubber: MagazineBoxRifle
|
||||
MagazineBoxRifleBigRubber: MagazineBoxRifleBig
|
||||
MagazineBoxCaselessRifleRubber: MagazineBoxCaselessRifle
|
||||
MagazineBoxCaselessRifleBigRubber: MagazineBoxCaselessRifle10x24
|
||||
BoxMagazinePistolRubber: BoxMagazinePistol
|
||||
BoxMagazinePistolHighCapacityRubber: BoxMagazinePistolHighCapacity
|
||||
BoxMagazinePistolSubMachineGunRubber: BoxMagazinePistolSubMachineGun
|
||||
BoxMagazineLightRifleRubber: BoxMagazineLightRifle
|
||||
BoxMagazineRifleRubber: BoxMagazineRifle
|
||||
BoxMagazineCaselessRifleRubber: BoxMagazinePistolCaselessRifle
|
||||
BoxMagazineMagnumSubMachineGunRubber: BoxMagazineMagnumSubMachineGun
|
||||
WeaponPistolMk58Nonlethal: WeaponPistolMk58
|
||||
WeaponPistolN1984Nonlethal: WeaponPistolN1984
|
||||
WeaponSubMachineGunVectorRubber: WeaponSubMachineGunVector
|
||||
WeaponSubMachineGunDrozdRubber: WeaponSubMachineGunDrozd
|
||||
WeaponRifleLecterRubber: WeaponRifleLecter
|
||||
#MagazineBoxMagnumRubber: MagazineBoxMagnum
|
||||
#MagazineBoxLightRifleRubber: MagazineBoxLightRifle
|
||||
#MagazineBoxRifleRubber: MagazineBoxRifle
|
||||
#MagazineBoxRifleBigRubber: MagazineBoxRifleBig
|
||||
#MagazineBoxCaselessRifleRubber: MagazineBoxCaselessRifle
|
||||
#MagazineBoxCaselessRifleBigRubber: MagazineBoxCaselessRifle10x24
|
||||
#BoxMagazinePistolRubber: BoxMagazinePistol
|
||||
#BoxMagazinePistolHighCapacityRubber: BoxMagazinePistolHighCapacity
|
||||
#BoxMagazinePistolSubMachineGunRubber: BoxMagazinePistolSubMachineGun
|
||||
#BoxMagazineLightRifleRubber: BoxMagazineLightRifle
|
||||
#BoxMagazineRifleRubber: BoxMagazineRifle
|
||||
#BoxMagazineCaselessRifleRubber: BoxMagazinePistolCaselessRifle
|
||||
#BoxMagazineMagnumSubMachineGunRubber: BoxMagazineMagnumSubMachineGun
|
||||
#WeaponPistolMk58Nonlethal: WeaponPistolMk58
|
||||
#WeaponPistolN1984Nonlethal: WeaponPistolN1984
|
||||
#WeaponSubMachineGunVectorRubber: WeaponSubMachineGunVector
|
||||
#WeaponSubMachineGunDrozdRubber: WeaponSubMachineGunDrozd
|
||||
#WeaponRifleLecterRubber: WeaponRifleLecter
|
||||
|
||||
# 2024-04-26
|
||||
GlassBoxLaserBroken: GlassBoxBroken
|
||||
|
|
@ -478,9 +479,13 @@ TorsoBorgJanitor: TorsoBorg
|
|||
|
||||
# 2024-11-17
|
||||
PresentRandomAsh: PresentRandomCoal
|
||||
|
||||
# 2024-11-19
|
||||
CrateCrewMonitoringBoards: CrateCrewMonitoring
|
||||
|
||||
# 2024-11-25
|
||||
CrateSlimepersonLifeSupport: CrateNitrogenInternals
|
||||
|
||||
# Sunrise migrations
|
||||
AirlockExternalGlassShuttleArrivals: AirlockExternalGlassShuttleArrivalsLocked
|
||||
AirlockHatchSyndicate: AirlockHatchSyndicateLocked
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue