Merge remote-tracking branch 'space-wizards/master'
# Conflicts: # Resources/Textures/Clothing/Hands/Gloves/Color/black.rsi/meta.json # Resources/Textures/Clothing/Hands/Gloves/Color/color.rsi/meta.json # Resources/Textures/Clothing/Hands/Gloves/captain.rsi/inhand-left.png # Resources/Textures/Clothing/Hands/Gloves/captain.rsi/inhand-right.png # Resources/Textures/Clothing/Hands/Gloves/captain.rsi/meta.json # Resources/Textures/Clothing/Hands/Gloves/combat.rsi/inhand-left.png # Resources/Textures/Clothing/Hands/Gloves/combat.rsi/inhand-right.png # Resources/Textures/Clothing/Hands/Gloves/combat.rsi/meta.json # Resources/Textures/Clothing/Hands/Gloves/fingerless.rsi/meta.json # Resources/Textures/Clothing/Hands/Gloves/fingerlessinsuls.rsi/meta.json # Resources/Textures/Clothing/Hands/Gloves/janitor.rsi/inhand-left.png # Resources/Textures/Clothing/Hands/Gloves/janitor.rsi/inhand-right.png # Resources/Textures/Clothing/Hands/Gloves/janitor.rsi/meta.json # Resources/Textures/Clothing/Hands/Gloves/latex.rsi/meta.json # Resources/Textures/Clothing/Hands/Gloves/leather.rsi/meta.json # Resources/Textures/Clothing/Hands/Gloves/mercfingerless.rsi/meta.json # Resources/Textures/Clothing/Hands/Gloves/nitrile.rsi/inhand-left.png # Resources/Textures/Clothing/Hands/Gloves/nitrile.rsi/inhand-right.png # Resources/Textures/Clothing/Hands/Gloves/nitrile.rsi/meta.json # Resources/Textures/Clothing/Hands/Gloves/robohands.rsi/meta.json # Resources/Textures/Clothing/Head/Hardsuits/cybersun.rsi/meta.json # Resources/Textures/Clothing/OuterClothing/Hardsuits/cybersun.rsi/meta.json # Resources/Textures/Mobs/Aliens/Xenos/purple_snake.rsi/meta.json
|
|
@ -1,59 +0,0 @@
|
|||
using System.Threading;
|
||||
using Content.Client.Stylesheets;
|
||||
using Robust.Client.UserInterface.Controls;
|
||||
using Timer = Robust.Shared.Timing.Timer;
|
||||
|
||||
namespace Content.Client.Administration.UI;
|
||||
|
||||
public static class AdminUIHelpers
|
||||
{
|
||||
private static void ResetButton(Button button, ConfirmationData data)
|
||||
{
|
||||
data.Cancellation.Cancel();
|
||||
button.ModulateSelfOverride = null;
|
||||
button.Text = data.OriginalText;
|
||||
}
|
||||
|
||||
public static bool RemoveConfirm(Button button, Dictionary<Button, ConfirmationData> confirmations)
|
||||
{
|
||||
if (confirmations.Remove(button, out var data))
|
||||
{
|
||||
ResetButton(button, data);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void RemoveAllConfirms(Dictionary<Button, ConfirmationData> confirmations)
|
||||
{
|
||||
foreach (var (button, confirmation) in confirmations)
|
||||
{
|
||||
ResetButton(button, confirmation);
|
||||
}
|
||||
|
||||
confirmations.Clear();
|
||||
}
|
||||
|
||||
public static bool TryConfirm(Button button, Dictionary<Button, ConfirmationData> confirmations)
|
||||
{
|
||||
if (RemoveConfirm(button, confirmations))
|
||||
return true;
|
||||
|
||||
var data = new ConfirmationData(new CancellationTokenSource(), button.Text);
|
||||
confirmations[button] = data;
|
||||
|
||||
Timer.Spawn(TimeSpan.FromSeconds(5), () =>
|
||||
{
|
||||
confirmations.Remove(button);
|
||||
button.ModulateSelfOverride = null;
|
||||
button.Text = data.OriginalText;
|
||||
}, data.Cancellation.Token);
|
||||
|
||||
button.ModulateSelfOverride = StyleNano.ButtonColorCautionDefault;
|
||||
button.Text = Loc.GetString("admin-player-actions-confirm");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public readonly record struct ConfirmationData(CancellationTokenSource Cancellation, string? OriginalText);
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
<Control
|
||||
xmlns="https://spacestation14.io"
|
||||
xmlns:cc="clr-namespace:Content.Client.Administration.UI.CustomControls">
|
||||
xmlns:cc="clr-namespace:Content.Client.Administration.UI.CustomControls"
|
||||
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls">
|
||||
<PanelContainer StyleClasses="BackgroundDark">
|
||||
<SplitContainer Orientation="Vertical" ResizeMode="NotResizable">
|
||||
<SplitContainer Orientation="Horizontal" VerticalExpand="True">
|
||||
|
|
@ -18,9 +19,9 @@
|
|||
<Control HorizontalExpand="True" />
|
||||
<Button Visible="False" Name="Bans" Text="{Loc 'admin-player-actions-bans'}" StyleClasses="OpenRight" />
|
||||
<Button Visible="False" Name="Notes" Text="{Loc 'admin-player-actions-notes'}" StyleClasses="OpenBoth" />
|
||||
<Button Visible="False" Name="Kick" Text="{Loc 'admin-player-actions-kick'}" StyleClasses="OpenBoth" />
|
||||
<controls:ConfirmButton Visible="False" Name="Kick" Text="{Loc 'admin-player-actions-kick'}" ConfirmationText="{Loc 'admin-player-actions-confirm'}" StyleClasses="OpenBoth" />
|
||||
<Button Visible="False" Name="Ban" Text="{Loc 'admin-player-actions-ban'}" StyleClasses="OpenBoth" />
|
||||
<Button Visible="False" Name="Respawn" Text="{Loc 'admin-player-actions-respawn'}" StyleClasses="OpenBoth" />
|
||||
<controls:ConfirmButton Visible="False" Name="Respawn" Text="{Loc 'admin-player-actions-respawn'}" ConfirmationText="{Loc 'admin-player-actions-confirm'}" StyleClasses="OpenBoth" />
|
||||
<Button Visible="False" Name="Follow" Text="{Loc 'admin-player-actions-follow'}" StyleClasses="OpenLeft" />
|
||||
</BoxContainer>
|
||||
</SplitContainer>
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@ namespace Content.Client.Administration.UI.Bwoink
|
|||
public AdminAHelpUIHandler AHelpHelper = default!;
|
||||
|
||||
private PlayerInfo? _currentPlayer;
|
||||
private readonly Dictionary<Button, ConfirmationData> _confirmations = new();
|
||||
|
||||
public BwoinkControl()
|
||||
{
|
||||
|
|
@ -183,11 +182,6 @@ namespace Content.Client.Administration.UI.Bwoink
|
|||
|
||||
Kick.OnPressed += _ =>
|
||||
{
|
||||
if (!AdminUIHelpers.TryConfirm(Kick, _confirmations))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Reason field
|
||||
if (_currentPlayer is not null)
|
||||
_console.ExecuteCommand($"kick \"{_currentPlayer.Username}\"");
|
||||
|
|
@ -201,11 +195,6 @@ namespace Content.Client.Administration.UI.Bwoink
|
|||
|
||||
Respawn.OnPressed += _ =>
|
||||
{
|
||||
if (!AdminUIHelpers.TryConfirm(Respawn, _confirmations))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_currentPlayer is not null)
|
||||
_console.ExecuteCommand($"respawn \"{_currentPlayer.Username}\"");
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
<Popup xmlns="https://spacestation14.io"
|
||||
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client">
|
||||
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
|
||||
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls">
|
||||
<PanelContainer>
|
||||
<PanelContainer.PanelOverride>
|
||||
<gfx:StyleBoxFlat BorderThickness="2" BorderColor="#18181B" BackgroundColor="#25252a"/>
|
||||
|
|
@ -19,7 +20,7 @@
|
|||
<BoxContainer Orientation="Horizontal">
|
||||
<Button Name="EditButton" Text="{Loc admin-notes-edit}"/>
|
||||
<Control HorizontalExpand="True"/>
|
||||
<Button Name="DeleteButton" Text="{Loc admin-notes-delete}" HorizontalAlignment="Right"/>
|
||||
<controls:ConfirmButton Name="DeleteButton" Text="{Loc admin-notes-delete}" ConfirmationText="{Loc 'admin-player-actions-confirm'}" HorizontalAlignment="Right"/>
|
||||
</BoxContainer>
|
||||
</BoxContainer>
|
||||
</PanelContainer>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<DefaultWindow
|
||||
xmlns="https://spacestation14.io"
|
||||
xmlns:cc="clr-namespace:Content.Client.Administration.UI.CustomControls"
|
||||
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
|
||||
Title="{Loc admin-player-actions-window-title}" MinSize="425 272">
|
||||
<BoxContainer Orientation="Vertical">
|
||||
<BoxContainer Orientation="Horizontal">
|
||||
|
|
@ -10,9 +11,9 @@
|
|||
</BoxContainer>
|
||||
<cc:PlayerListControl Name="PlayerList" VerticalExpand="True" />
|
||||
<BoxContainer Orientation="Horizontal">
|
||||
<Button Name="SubmitKickButton" Text="{Loc admin-player-actions-kick}" Disabled="True"/>
|
||||
<controls:ConfirmButton Name="SubmitKickButton" Text="{Loc admin-player-actions-kick}" ConfirmationText="{Loc 'admin-player-actions-confirm'}" Disabled="True"/>
|
||||
<Button Name="SubmitAHelpButton" Text="{Loc admin-player-actions-ahelp}" Disabled="True"/>
|
||||
<Button Name="SubmitRespawnButton" Text="{Loc admin-player-actions-respawn}" Disabled="True"/>
|
||||
<controls:ConfirmButton Name="SubmitRespawnButton" Text="{Loc admin-player-actions-respawn}" ConfirmationText="{Loc 'admin-player-actions-confirm'}" Disabled="True"/>
|
||||
</BoxContainer>
|
||||
</BoxContainer>
|
||||
</DefaultWindow>
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ namespace Content.Client.Administration.UI.Tabs.AdminTab
|
|||
public sealed partial class PlayerActionsWindow : DefaultWindow
|
||||
{
|
||||
private PlayerInfo? _selectedPlayer;
|
||||
private readonly Dictionary<Button, ConfirmationData> _confirmations = new();
|
||||
|
||||
public PlayerActionsWindow()
|
||||
{
|
||||
|
|
@ -28,9 +27,6 @@ namespace Content.Client.Administration.UI.Tabs.AdminTab
|
|||
|
||||
private void OnListOnOnSelectionChanged(PlayerInfo? obj)
|
||||
{
|
||||
if (_selectedPlayer != obj)
|
||||
AdminUIHelpers.RemoveAllConfirms(_confirmations);
|
||||
|
||||
_selectedPlayer = obj;
|
||||
var disableButtons = _selectedPlayer == null;
|
||||
SubmitKickButton.Disabled = disableButtons;
|
||||
|
|
@ -43,9 +39,6 @@ namespace Content.Client.Administration.UI.Tabs.AdminTab
|
|||
if (_selectedPlayer == null)
|
||||
return;
|
||||
|
||||
if (!AdminUIHelpers.TryConfirm(SubmitKickButton, _confirmations))
|
||||
return;
|
||||
|
||||
IoCManager.Resolve<IClientConsoleHost>().ExecuteCommand(
|
||||
$"kick \"{_selectedPlayer.Username}\" \"{CommandParsing.Escape(ReasonLine.Text)}\"");
|
||||
}
|
||||
|
|
@ -64,9 +57,6 @@ namespace Content.Client.Administration.UI.Tabs.AdminTab
|
|||
if (_selectedPlayer == null)
|
||||
return;
|
||||
|
||||
if (!AdminUIHelpers.TryConfirm(SubmitRespawnButton, _confirmations))
|
||||
return;
|
||||
|
||||
IoCManager.Resolve<IClientConsoleHost>().ExecuteCommand(
|
||||
$"respawn \"{_selectedPlayer.Username}\"");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ public sealed partial class ObjectsTabEntry : PanelContainer
|
|||
|
||||
public Action<NetEntity>? OnTeleport;
|
||||
public Action<NetEntity>? OnDelete;
|
||||
private readonly Dictionary<Button, ConfirmationData> _confirmations = new();
|
||||
|
||||
public ObjectsTabEntry(IClientAdminManager manager, string name, NetEntity nent, StyleBox styleBox)
|
||||
{
|
||||
|
|
@ -28,13 +27,6 @@ public sealed partial class ObjectsTabEntry : PanelContainer
|
|||
DeleteButton.Disabled = !manager.CanCommand("delete");
|
||||
|
||||
TeleportButton.OnPressed += _ => OnTeleport?.Invoke(nent);
|
||||
DeleteButton.OnPressed += _ =>
|
||||
{
|
||||
if (!AdminUIHelpers.TryConfirm(DeleteButton, _confirmations))
|
||||
{
|
||||
return;
|
||||
}
|
||||
OnDelete?.Invoke(nent);
|
||||
};
|
||||
DeleteButton.OnPressed += _ => OnDelete?.Invoke(nent);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,10 +79,28 @@ public sealed partial class CrewMonitoringWindow : FancyWindow
|
|||
|
||||
NoServerLabel.Visible = false;
|
||||
|
||||
// Collect one status per user, using the sensor with the most data available.
|
||||
Dictionary<NetEntity, SuitSensorStatus> uniqueSensorsMap = new();
|
||||
foreach (var sensor in sensors)
|
||||
{
|
||||
if (uniqueSensorsMap.TryGetValue(sensor.OwnerUid, out var existingSensor))
|
||||
{
|
||||
// Skip if we already have a sensor with more data for this mob.
|
||||
if (existingSensor.Coordinates != null && sensor.Coordinates == null)
|
||||
continue;
|
||||
|
||||
if (existingSensor.DamagePercentage != null && sensor.DamagePercentage == null)
|
||||
continue;
|
||||
}
|
||||
|
||||
uniqueSensorsMap[sensor.OwnerUid] = sensor;
|
||||
}
|
||||
var uniqueSensors = uniqueSensorsMap.Values.ToList();
|
||||
|
||||
// Order sensor data
|
||||
var orderedSensors = sensors.OrderBy(n => n.Name).OrderBy(j => j.Job);
|
||||
var orderedSensors = uniqueSensors.OrderBy(n => n.Name).OrderBy(j => j.Job);
|
||||
var assignedSensors = new HashSet<SuitSensorStatus>();
|
||||
var departments = sensors.SelectMany(d => d.JobDepartments).Distinct().OrderBy(n => n);
|
||||
var departments = uniqueSensors.SelectMany(d => d.JobDepartments).Distinct().OrderBy(n => n);
|
||||
|
||||
// Create department labels and populate lists
|
||||
foreach (var department in departments)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using Content.Client.Viewport;
|
||||
|
|
@ -8,8 +7,6 @@ using Robust.Client.Input;
|
|||
using Robust.Client.State;
|
||||
using Robust.Shared.ContentPack;
|
||||
using Robust.Shared.Input.Binding;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Log;
|
||||
using Robust.Shared.Utility;
|
||||
using SixLabors.ImageSharp;
|
||||
using SixLabors.ImageSharp.PixelFormats;
|
||||
|
|
@ -25,8 +22,13 @@ namespace Content.Client.Screenshot
|
|||
[Dependency] private readonly IResourceManager _resourceManager = default!;
|
||||
[Dependency] private readonly IStateManager _stateManager = default!;
|
||||
|
||||
private ISawmill _sawmill = default!;
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
_sawmill = Logger.GetSawmill("screenshot");
|
||||
_sawmill.Level = LogLevel.Info;
|
||||
|
||||
_inputManager.SetInputCommand(ContentKeyFunctions.TakeScreenshot, InputCmdHandler.FromDelegate(_ =>
|
||||
{
|
||||
_clyde.Screenshot(ScreenshotType.Final, Take);
|
||||
|
|
@ -40,7 +42,7 @@ namespace Content.Client.Screenshot
|
|||
}
|
||||
else
|
||||
{
|
||||
Logger.InfoS("screenshot", "Can't take no-UI screenshot: current state is not GameScreen");
|
||||
_sawmill.Info("Can't take no-UI screenshot: current state is not GameScreen");
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
|
@ -74,16 +76,16 @@ namespace Content.Client.Screenshot
|
|||
screenshot.SaveAsPng(file);
|
||||
});
|
||||
|
||||
Logger.InfoS("screenshot", "Screenshot taken as {0}.png", filename);
|
||||
_sawmill.Info("Screenshot taken as {0}.png", filename);
|
||||
return;
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
Logger.WarningS("screenshot", "Failed to save screenshot, retrying?:\n{0}", e);
|
||||
_sawmill.Warning("Failed to save screenshot, retrying?:\n{0}", e);
|
||||
}
|
||||
}
|
||||
|
||||
Logger.ErrorS("screenshot", "Unable to save screenshot.");
|
||||
_sawmill.Error("Unable to save screenshot.");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -163,14 +163,16 @@ public sealed class ItemGridPiece : Control, IEntityControl
|
|||
}
|
||||
|
||||
// typically you'd divide by two, but since the textures are half a tile, this is done implicitly
|
||||
var iconPosition = new Vector2((boundingGrid.Width + 1) * size.X + itemComponent.StoredOffset.X * 2,
|
||||
(boundingGrid.Height + 1) * size.Y + itemComponent.StoredOffset.Y * 2);
|
||||
var iconOffset = Location.Rotation.RotateVec(itemComponent.StoredOffset) * 2 * UIScale;
|
||||
var iconPosition = new Vector2(
|
||||
(boundingGrid.Width + 1) * size.X + iconOffset.X,
|
||||
(boundingGrid.Height + 1) * size.Y + iconOffset.Y);
|
||||
var iconRotation = Location.Rotation + Angle.FromDegrees(itemComponent.StoredRotation);
|
||||
|
||||
if (itemComponent.StoredSprite is { } storageSprite)
|
||||
{
|
||||
var scale = 2 * UIScale;
|
||||
var offset = (((Box2) boundingGrid).Size - Vector2.One) * size;
|
||||
var offset = (((Box2) boundingGrid).Size - Vector2.One) * size + iconOffset;
|
||||
var sprite = _entityManager.System<SpriteSystem>().Frame0(storageSprite);
|
||||
|
||||
var spriteBox = new Box2Rotated(new Box2(0f, sprite.Height * scale, sprite.Width * scale, 0f), -iconRotation, Vector2.Zero);
|
||||
|
|
|
|||
|
|
@ -330,7 +330,12 @@ public sealed partial class AdminLogManager : SharedAdminLogManager, IAdminLogMa
|
|||
var cachedInfo = adminSys.GetCachedPlayerInfo(new NetUserId(id));
|
||||
if (cachedInfo != null && cachedInfo.Antag)
|
||||
{
|
||||
logMessage += " [ANTAG: " + cachedInfo.CharacterName + "]";
|
||||
var subtype = Loc.GetString(cachedInfo.Subtype ?? cachedInfo.RoleProto.Name);
|
||||
logMessage = Loc.GetString(
|
||||
"admin-alert-antag-label",
|
||||
("message", logMessage),
|
||||
("name", cachedInfo.CharacterName),
|
||||
("subtype", subtype));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -406,7 +406,7 @@ public sealed class SuitSensorSystem : EntitySystem
|
|||
totalDamageThreshold = critThreshold.Value.Int();
|
||||
|
||||
// finally, form suit sensor status
|
||||
var status = new SuitSensorStatus(GetNetEntity(uid), userName, userJob, userJobIcon, userJobDepartments);
|
||||
var status = new SuitSensorStatus(GetNetEntity(sensor.User.Value), GetNetEntity(uid), userName, userJob, userJobIcon, userJobDepartments);
|
||||
switch (sensor.Mode)
|
||||
{
|
||||
case SuitSensorMode.SensorBinary:
|
||||
|
|
@ -461,6 +461,7 @@ public sealed class SuitSensorSystem : EntitySystem
|
|||
[SuitSensorConstants.NET_JOB_DEPARTMENTS] = status.JobDepartments,
|
||||
[SuitSensorConstants.NET_IS_ALIVE] = status.IsAlive,
|
||||
[SuitSensorConstants.NET_SUIT_SENSOR_UID] = status.SuitSensorUid,
|
||||
[SuitSensorConstants.NET_OWNER_UID] = status.OwnerUid,
|
||||
};
|
||||
|
||||
if (status.TotalDamage != null)
|
||||
|
|
@ -491,13 +492,14 @@ public sealed class SuitSensorSystem : EntitySystem
|
|||
if (!payload.TryGetValue(SuitSensorConstants.NET_JOB_DEPARTMENTS, out List<string>? jobDepartments)) return null;
|
||||
if (!payload.TryGetValue(SuitSensorConstants.NET_IS_ALIVE, out bool? isAlive)) return null;
|
||||
if (!payload.TryGetValue(SuitSensorConstants.NET_SUIT_SENSOR_UID, out NetEntity suitSensorUid)) return null;
|
||||
if (!payload.TryGetValue(SuitSensorConstants.NET_OWNER_UID, out NetEntity ownerUid)) return null;
|
||||
|
||||
// try get total damage and cords (optionals)
|
||||
payload.TryGetValue(SuitSensorConstants.NET_TOTAL_DAMAGE, out int? totalDamage);
|
||||
payload.TryGetValue(SuitSensorConstants.NET_TOTAL_DAMAGE_THRESHOLD, out int? totalDamageThreshold);
|
||||
payload.TryGetValue(SuitSensorConstants.NET_COORDINATES, out NetCoordinates? coords);
|
||||
|
||||
var status = new SuitSensorStatus(suitSensorUid, name, job, jobIcon, jobDepartments)
|
||||
var status = new SuitSensorStatus(ownerUid, suitSensorUid, name, job, jobIcon, jobDepartments)
|
||||
{
|
||||
IsAlive = isAlive.Value,
|
||||
TotalDamage = totalDamage,
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ using Content.Shared.Power.EntitySystems;
|
|||
using Content.Shared.Power.Generation.Teg;
|
||||
using Content.Shared.Rounding;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Server.Power.Generation.Teg;
|
||||
|
||||
|
|
@ -260,13 +261,16 @@ public sealed class TegSystem : EntitySystem
|
|||
// Otherwise, make sure circulator is set to nothing.
|
||||
if (!group.IsFullyBuilt)
|
||||
{
|
||||
UpdateCirculatorAppearance(uid, false);
|
||||
UpdateCirculatorAppearance((uid, component), false);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateCirculatorAppearance(EntityUid uid, bool powered)
|
||||
private void UpdateCirculatorAppearance(Entity<TegCirculatorComponent?> ent, bool powered)
|
||||
{
|
||||
var circ = Comp<TegCirculatorComponent>(uid);
|
||||
if (!Resolve(ent, ref ent.Comp))
|
||||
return;
|
||||
|
||||
var circ = ent.Comp;
|
||||
|
||||
TegCirculatorSpeed speed;
|
||||
if (powered && circ.LastPressureDelta > 0 && circ.LastMolesTransferred > 0)
|
||||
|
|
@ -281,13 +285,13 @@ public sealed class TegSystem : EntitySystem
|
|||
speed = TegCirculatorSpeed.SpeedStill;
|
||||
}
|
||||
|
||||
_appearance.SetData(uid, TegVisuals.CirculatorSpeed, speed);
|
||||
_appearance.SetData(uid, TegVisuals.CirculatorPower, powered);
|
||||
_appearance.SetData(ent, TegVisuals.CirculatorSpeed, speed);
|
||||
_appearance.SetData(ent, TegVisuals.CirculatorPower, powered);
|
||||
|
||||
if (_pointLight.TryGetLight(uid, out var pointLight))
|
||||
if (_pointLight.TryGetLight(ent, out var pointLight))
|
||||
{
|
||||
_pointLight.SetEnabled(uid, powered, pointLight);
|
||||
_pointLight.SetColor(uid, speed == TegCirculatorSpeed.SpeedFast ? circ.LightColorFast : circ.LightColorSlow, pointLight);
|
||||
_pointLight.SetEnabled(ent, powered, pointLight);
|
||||
_pointLight.SetColor(ent, speed == TegCirculatorSpeed.SpeedFast ? circ.LightColorFast : circ.LightColorSlow, pointLight);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ using Content.Shared.Damage;
|
|||
using Content.Shared.Destructible;
|
||||
using Content.Shared.DoAfter;
|
||||
using Content.Shared.Emp;
|
||||
using Content.Shared.IdentityManagement;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.Power;
|
||||
using Content.Shared.Throwing;
|
||||
|
|
@ -15,6 +16,7 @@ using Content.Shared.UserInterface;
|
|||
using Content.Shared.VendingMachines;
|
||||
using Content.Shared.Wall;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Timing;
|
||||
|
|
@ -141,7 +143,9 @@ namespace Content.Server.VendingMachines
|
|||
|
||||
TryRestockInventory(uid, component);
|
||||
|
||||
Popup.PopupEntity(Loc.GetString("vending-machine-restock-done", ("this", args.Args.Used), ("user", args.Args.User), ("target", uid)), args.Args.User, PopupType.Medium);
|
||||
Popup.PopupEntity(Loc.GetString("vending-machine-restock-done-self", ("target", uid)), args.Args.User, args.Args.User, PopupType.Medium);
|
||||
var othersFilter = Filter.PvsExcept(args.Args.User);
|
||||
Popup.PopupEntity(Loc.GetString("vending-machine-restock-done-others", ("user", Identity.Entity(args.User, EntityManager)), ("target", uid)), args.Args.User, othersFilter, true, PopupType.Medium);
|
||||
|
||||
Audio.PlayPvs(restockComponent.SoundRestockDone, uid, AudioParams.Default.WithVolume(-2f).WithVariation(0.2f));
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,8 @@ public sealed class ArtifactAnalyzerSystem : SharedArtifactAnalyzerSystem
|
|||
sumResearch += research;
|
||||
}
|
||||
|
||||
if (sumResearch == 0)
|
||||
// 4-16-25: It's a sad day when a scientist makes negative 5k research
|
||||
if (sumResearch <= 0)
|
||||
return;
|
||||
|
||||
_research.ModifyServerPoints(server.Value, sumResearch, serverComponent);
|
||||
|
|
|
|||
|
|
@ -55,6 +55,20 @@ public abstract class SharedItemSystem : EntitySystem
|
|||
Dirty(uid, component);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the offset used for the item's sprite inside the storage UI.
|
||||
/// Dirties.
|
||||
/// </summary>
|
||||
[PublicAPI]
|
||||
public void SetStoredOffset(EntityUid uid, Vector2i newOffset, ItemComponent? component = null)
|
||||
{
|
||||
if (!Resolve(uid, ref component, false))
|
||||
return;
|
||||
|
||||
component.StoredOffset = newOffset;
|
||||
Dirty(uid, component);
|
||||
}
|
||||
|
||||
public void SetHeldPrefix(EntityUid uid, string? heldPrefix, bool force = false, ItemComponent? component = null)
|
||||
{
|
||||
if (!Resolve(uid, ref component, false))
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@ namespace Content.Shared.Medical.SuitSensor;
|
|||
[Serializable, NetSerializable]
|
||||
public sealed class SuitSensorStatus
|
||||
{
|
||||
public SuitSensorStatus(NetEntity suitSensorUid, string name, string job, string jobIcon, List<string> jobDepartments)
|
||||
public SuitSensorStatus(NetEntity ownerUid, NetEntity suitSensorUid, string name, string job, string jobIcon, List<string> jobDepartments)
|
||||
{
|
||||
OwnerUid = ownerUid;
|
||||
SuitSensorUid = suitSensorUid;
|
||||
Name = name;
|
||||
Job = job;
|
||||
|
|
@ -18,6 +19,7 @@ public sealed class SuitSensorStatus
|
|||
|
||||
public TimeSpan Timestamp;
|
||||
public NetEntity SuitSensorUid;
|
||||
public NetEntity OwnerUid;
|
||||
public string Name;
|
||||
public string Job;
|
||||
public string JobIcon;
|
||||
|
|
@ -55,6 +57,7 @@ public enum SuitSensorMode : byte
|
|||
|
||||
public static class SuitSensorConstants
|
||||
{
|
||||
public const string NET_OWNER_UID = "ownerUid";
|
||||
public const string NET_NAME = "name";
|
||||
public const string NET_JOB = "job";
|
||||
public const string NET_JOB_ICON = "jobIcon";
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using Content.Shared.DoAfter;
|
||||
using Content.Shared.IdentityManagement;
|
||||
using Content.Shared.Interaction;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.Wires;
|
||||
|
|
@ -72,8 +73,10 @@ public abstract partial class SharedVendingMachineSystem
|
|||
if (!_doAfter.TryStartDoAfter(doAfterArgs))
|
||||
return;
|
||||
|
||||
Popup.PopupPredicted(Loc.GetString("vending-machine-restock-start", ("this", uid), ("user", args.User),
|
||||
("target", target)),
|
||||
var selfMessage = Loc.GetString("vending-machine-restock-start-self", ("target", target));
|
||||
var othersMessage = Loc.GetString("vending-machine-restock-start-others", ("user", Identity.Entity(args.User, EntityManager)), ("target", target));
|
||||
Popup.PopupPredicted(selfMessage,
|
||||
othersMessage,
|
||||
uid,
|
||||
args.User,
|
||||
PopupType.Medium);
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ public abstract partial class SharedXenoArtifactSystem
|
|||
if (ent.Comp.Locked)
|
||||
return 0;
|
||||
|
||||
return ent.Comp.ResearchValue - ent.Comp.ConsumedResearchValue;
|
||||
return Math.Max(0, ent.Comp.ResearchValue - ent.Comp.ConsumedResearchValue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -1057,5 +1057,13 @@ Entries:
|
|||
id: 128
|
||||
time: '2025-04-16T17:04:48.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/35359
|
||||
- author: Errant
|
||||
changes:
|
||||
- message: Antag tags on admin notices now show exactly what kind of antag that
|
||||
mob is.
|
||||
type: Tweak
|
||||
id: 129
|
||||
time: '2025-04-16T22:59:36.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/36640
|
||||
Name: Admin
|
||||
Order: 1
|
||||
|
|
|
|||
|
|
@ -1,48 +1,4 @@
|
|||
Entries:
|
||||
- author: Southbridge
|
||||
changes:
|
||||
- message: Paper documents now support the [mono] tag.
|
||||
type: Add
|
||||
id: 7703
|
||||
time: '2024-12-13T14:24:35.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33830
|
||||
- author: yuitop
|
||||
changes:
|
||||
- message: Anchoring now has higher priority over stashing.
|
||||
type: Tweak
|
||||
id: 7704
|
||||
time: '2024-12-13T23:00:46.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/31779
|
||||
- author: Nimfar11
|
||||
changes:
|
||||
- message: Changes the colour of the Borg binary channel to a different shade of
|
||||
blue.
|
||||
type: Tweak
|
||||
id: 7705
|
||||
time: '2024-12-14T16:03:18.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33841
|
||||
- author: Litraxx
|
||||
changes:
|
||||
- message: Renamed the Dungeon Master lawset to Game Master lawset
|
||||
type: Fix
|
||||
id: 7706
|
||||
time: '2024-12-16T11:52:03.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33678
|
||||
- author: psykana
|
||||
changes:
|
||||
- message: Zombies can now see initial infected
|
||||
type: Add
|
||||
id: 7707
|
||||
time: '2024-12-16T11:53:13.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33665
|
||||
- author: Plykiya
|
||||
changes:
|
||||
- message: Bombs like stingers and clustergrenades now trigger when destroyed due
|
||||
to damage.
|
||||
type: Fix
|
||||
id: 7708
|
||||
time: '2024-12-16T12:08:08.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/31108
|
||||
- author: Beck Thompson
|
||||
changes:
|
||||
- message: Added some new scrap that contains uranium and plasma that can be found
|
||||
|
|
@ -3910,3 +3866,46 @@
|
|||
id: 8202
|
||||
time: '2025-04-16T20:26:25.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/34955
|
||||
- author: ciaran
|
||||
changes:
|
||||
- message: Fixed duplicate crew monitor console entries for crew with tracking implants
|
||||
type: Fix
|
||||
id: 8203
|
||||
time: '2025-04-16T21:14:05.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/35918
|
||||
- author: Seam_Less
|
||||
changes:
|
||||
- message: Standardized the In-Hand Sprites for all gloves
|
||||
type: Tweak
|
||||
id: 8204
|
||||
time: '2025-04-16T22:15:38.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/35997
|
||||
- author: DissidentBullet
|
||||
changes:
|
||||
- message: Monkeys can now wear juggernaut suits
|
||||
type: Add
|
||||
id: 8205
|
||||
time: '2025-04-16T23:14:28.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/34121
|
||||
- author: SpaceRox1244
|
||||
changes:
|
||||
- message: Cargo can now order handheld artifact containers for transporting small
|
||||
artifacts.
|
||||
type: Add
|
||||
id: 8206
|
||||
time: '2025-04-16T23:35:57.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/33327
|
||||
- author: ScarKy0
|
||||
changes:
|
||||
- message: Hydroponics tray flatpacks can now be bought for 750 spesos.
|
||||
type: Add
|
||||
id: 8207
|
||||
time: '2025-04-16T23:51:00.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/36630
|
||||
- author: EmoGarbage404
|
||||
changes:
|
||||
- message: Fixed artifacts sometimes having negative research values.
|
||||
type: Fix
|
||||
id: 8208
|
||||
time: '2025-04-17T03:14:17.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/36642
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
admin-alert-shared-connection = {$player} is sharing a connection with {$otherCount} connected player(s): {$otherList}
|
||||
admin-alert-ipintel-blocked = {$player} was rejected from joining due to their IP having a {TOSTRING($percent, "P2")} confidence of being a VPN/Datacenter.
|
||||
admin-alert-ipintel-warning = {$player} IP has a {TOSTRING($percent, "P2")} confidence of being a VPN/Datacenter. Please watch them.
|
||||
admin-alert-antag-label = {$message} [ANTAG: {$name}, {$subtype}]
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
vending-machine-restock-invalid-inventory = { CAPITALIZE(THE($this)) } isn't the right package to restock { THE($target) }.
|
||||
vending-machine-restock-needs-panel-open = { CAPITALIZE($target) } needs { POSS-ADJ($target) } maintenance panel opened first.
|
||||
vending-machine-restock-start = { $user } starts restocking { $target }.
|
||||
vending-machine-restock-done = { $user } finishes restocking { $target }.
|
||||
vending-machine-restock-needs-panel-open = { CAPITALIZE(THE($target)) } needs { POSS-ADJ($target) } maintenance panel opened first.
|
||||
vending-machine-restock-start-self = You start restocking { THE($target) }.
|
||||
vending-machine-restock-start-others = { CAPITALIZE(THE($user)) } starts restocking { THE($target) }.
|
||||
vending-machine-restock-done-self = You finish restocking { THE($target) }.
|
||||
vending-machine-restock-done-others = { CAPITALIZE(THE($user)) } finishes restocking { THE($target) }.
|
||||
|
|
|
|||
|
|
@ -47,3 +47,13 @@
|
|||
cost: 750
|
||||
category: cargoproduct-category-name-hydroponics
|
||||
group: market
|
||||
|
||||
- type: cargoProduct
|
||||
id: HydroponicsTray
|
||||
icon:
|
||||
sprite: Structures/Hydroponics/containers.rsi
|
||||
state: hydrotray3
|
||||
product: CrateHydroponicsTray
|
||||
cost: 750
|
||||
category: cargoproduct-category-name-hydroponics
|
||||
group: market
|
||||
|
|
|
|||
|
|
@ -8,6 +8,16 @@
|
|||
category: cargoproduct-category-name-science
|
||||
group: market
|
||||
|
||||
- type: cargoProduct
|
||||
id: HandheldArtifactContainer
|
||||
icon:
|
||||
sprite: Objects/Storage/artifact_container.rsi
|
||||
state: icon
|
||||
product: HandheldArtifactContainer
|
||||
cost: 500
|
||||
category: cargoproduct-category-name-science
|
||||
group: market
|
||||
|
||||
- type: cargoProduct
|
||||
id: RandomArtifact
|
||||
icon:
|
||||
|
|
|
|||
|
|
@ -94,3 +94,13 @@
|
|||
- id: WatermelonSeeds
|
||||
- id: PeaSeeds
|
||||
- id: CherrySeeds
|
||||
|
||||
- type: entity
|
||||
id: CrateHydroponicsTray
|
||||
parent: CrateHydroponics
|
||||
name: hydroponics tray crate
|
||||
description: Contains a hydroponics tray flatpack.
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: HydroponicsTrayFlatpack
|
||||
|
|
|
|||
|
|
@ -737,6 +737,9 @@
|
|||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitCybersun
|
||||
- type: Tag
|
||||
tags:
|
||||
- MonkeyWearable
|
||||
|
||||
#Wizard Hardsuit
|
||||
- type: entity
|
||||
|
|
|
|||
|
|
@ -250,3 +250,19 @@
|
|||
components:
|
||||
- type: Flatpack
|
||||
entity: ComputerCrewMonitoring
|
||||
|
||||
- type: entity
|
||||
parent: BaseFlatpack
|
||||
id: HydroponicsTrayFlatpack
|
||||
name: hydroponics tray flatpack
|
||||
description: A flatpack used for constructing a hydroponics tray.
|
||||
components:
|
||||
- type: Flatpack
|
||||
entity: hydroponicsTray
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: hydroponics-tray
|
||||
- type: GuideHelp
|
||||
guides:
|
||||
- Botany
|
||||
- Chemicals
|
||||
|
|
|
|||
|
|
@ -100,7 +100,6 @@
|
|||
enum.PaperLabelVisuals.Layer:
|
||||
True: { offset: "0.0,0.3125" }
|
||||
False: { offset: "0.0,0.0" }
|
||||
|
||||
- type: LockVisuals
|
||||
- type: ItemSlots
|
||||
- type: ContainerContainer
|
||||
|
|
@ -109,3 +108,93 @@
|
|||
paper_label: !type:ContainerSlot
|
||||
- type: StaticPrice
|
||||
price: 250
|
||||
|
||||
- type: entity
|
||||
parent: BaseStorageItem
|
||||
id: HandheldArtifactContainer
|
||||
name: handheld artifact container
|
||||
description: A handheld case used to safely contain and move small artifacts.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Storage/artifact_container.rsi
|
||||
state: icon
|
||||
layers:
|
||||
- state: icon
|
||||
map: [ base ]
|
||||
- state: locked
|
||||
map: ["enum.LockVisualLayers.Lock"]
|
||||
shader: unshaded
|
||||
- type: Storage
|
||||
maxItemSize: Normal
|
||||
grid:
|
||||
- 0,0,1,1
|
||||
whitelist:
|
||||
components:
|
||||
- Artifact
|
||||
- type: Item
|
||||
sprite: Objects/Storage/artifact_container.rsi
|
||||
size: Huge
|
||||
- type: MeleeWeapon
|
||||
damage:
|
||||
types:
|
||||
Blunt: 12
|
||||
soundHit:
|
||||
path: "/Audio/Weapons/smash.ogg"
|
||||
- type: Appearance
|
||||
- type: AccessReader
|
||||
access: [["Research"], ["Cargo"]]
|
||||
- type: Lock
|
||||
- type: SuppressArtifactContainer
|
||||
- type: RadiationBlockingContainer
|
||||
resistance: 5
|
||||
- type: EmitSoundOnLand
|
||||
sound:
|
||||
path: /Audio/Items/toolbox_drop.ogg
|
||||
- type: LockVisuals
|
||||
- type: Damageable
|
||||
damageContainer: StructuralInorganic
|
||||
damageModifierSet: StructuralMetallicStrong
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 50
|
||||
behaviors:
|
||||
- !type:DoActsBehavior
|
||||
acts: ["Destruction"]
|
||||
- type: PaperLabel
|
||||
labelSlot:
|
||||
insertVerbText: Attach Label
|
||||
ejectVerbText: Remove Label
|
||||
whitelist:
|
||||
components:
|
||||
- Paper
|
||||
blacklist:
|
||||
tags:
|
||||
- Book
|
||||
- type: GenericVisualizer
|
||||
visuals:
|
||||
enum.StorageVisuals.Open:
|
||||
base:
|
||||
True: { state: icon-open }
|
||||
False: { state: icon }
|
||||
enum.PaperLabelVisuals.HasLabel:
|
||||
enum.PaperLabelVisuals.Layer:
|
||||
True: { visible: true }
|
||||
False: { visible: false }
|
||||
enum.PaperLabelVisuals.LabelType:
|
||||
enum.PaperLabelVisuals.Layer:
|
||||
Paper: { state: paper }
|
||||
Bounty: { state: bounty }
|
||||
CaptainsPaper: { state: captain }
|
||||
Invoice: { state: invoice }
|
||||
- type: ItemSlots
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
paper_label: !type:ContainerSlot
|
||||
storagebase: !type:Container
|
||||
ents: []
|
||||
- type: UseDelay
|
||||
delay: 0.3
|
||||
- type: StaticPrice
|
||||
price: 250
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 205 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 214 B After Width: | Height: | Size: 16 KiB |
|
|
@ -23,4 +23,4 @@
|
|||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 218 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 225 B After Width: | Height: | Size: 16 KiB |
|
|
@ -23,4 +23,4 @@
|
|||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 291 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 294 B After Width: | Height: | Size: 16 KiB |
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e",
|
||||
"copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Inhand sprites by SeamLesss (Github)",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 527 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 513 B After Width: | Height: | Size: 16 KiB |
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/2fea0a59470c476cf3f927833d3918d89cbe6af8",
|
||||
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/69842/commits/d8138946b0ed06fced522729ac8eaa0596864329, edited by Skarletto (github). Inhand sprites by SeamLesss (Github)",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 205 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 214 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 205 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 214 B After Width: | Height: | Size: 16 KiB |
|
|
@ -23,4 +23,4 @@
|
|||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 291 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 294 B After Width: | Height: | Size: 16 KiB |
|
|
@ -1 +1,27 @@
|
|||
{"version": 1, "license": "CC-BY-SA-3.0", "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/2fea0a59470c476cf3f927833d3918d89cbe6af8, edited by Discord .kreks.", "size": {"x": 32, "y": 32}, "states": [{"name": "icon"}, {"name": "equipped-HAND", "directions": 4}, {"name": "inhand-left", "directions": 4}, {"name": "inhand-right", "directions": 4}]}
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Inhand sprites by SeamLesss (Github)",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "equipped-HAND",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-right",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 450 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 451 B After Width: | Height: | Size: 16 KiB |
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from paradise station at https://github.com/ss220-space/Paradise/blob/e13af16eec39b663112e014901960c89fb09ef8b/icons/obj/clothing/gloves.dmi",
|
||||
"copyright": "Taken from paradise station at https://github.com/ss220-space/Paradise/blob/e13af16eec39b663112e014901960c89fb09ef8b/icons/obj/clothing/gloves.dmi. Inhand sprites by SeamLesss (Github)",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 16 KiB |
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Drawn by Ubaser",
|
||||
"copyright": "Drawn by Ubaser. Inhand sprites by SeamLesss (Github)",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 314 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 333 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 218 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 225 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 437 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 444 B After Width: | Height: | Size: 16 KiB |
|
|
@ -23,4 +23,4 @@
|
|||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 278 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 286 B After Width: | Height: | Size: 16 KiB |
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "modified sprite from Jackal298 based on the sprite from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e and paradise station https://github.com/ParadiseSS13/Paradise/blob/master/icons/obj/clothing/gloves.dmi",
|
||||
"copyright": "modified sprite from Jackal298 based on the sprite from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e and paradise station https://github.com/ParadiseSS13/Paradise/blob/master/icons/obj/clothing/gloves.dmi. Inhand sprites by SeamLesss (Github)",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 278 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 286 B After Width: | Height: | Size: 16 KiB |
|
|
@ -23,4 +23,4 @@
|
|||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 249 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 254 B After Width: | Height: | Size: 16 KiB |
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/37864/commits/efdef3f1f997d1c0575c36cd31a5db575d1df0ca#diff-a4eb7c89f7231f0aaf0c2f69d730dea56383019f2aa5c6a1d91a82c781b528e6. Modified by hercoyote23 (github) for SS14",
|
||||
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/37864/commits/efdef3f1f997d1c0575c36cd31a5db575d1df0ca#diff-a4eb7c89f7231f0aaf0c2f69d730dea56383019f2aa5c6a1d91a82c781b528e6. Modified by hercoyote23 (github) for SS14, inhand sprites by SeamLesss (Github)",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 463 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 461 B After Width: | Height: | Size: 16 KiB |
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from cev-eris at commit https://github.com/discordia-space/CEV-Eris/commit/55d823b97dda098a1b2ee9edfca7155c753e456e",
|
||||
"copyright": "Taken from cev-eris at commit https://github.com/discordia-space/CEV-Eris/commit/55d823b97dda098a1b2ee9edfca7155c753e456e. Inhand sprites by SeamLesss (Github)",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 458 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 16 KiB |
|
|
@ -23,4 +23,4 @@
|
|||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 403 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 411 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 205 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 214 B After Width: | Height: | Size: 16 KiB |
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e",
|
||||
"copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Inhand sprites by SeamLesss (Github)",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 408 B After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 416 B After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
|
@ -36,6 +36,10 @@
|
|||
{
|
||||
"name": "on-equipped-HELMET-vox",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "equipped-HELMET-monkey",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 1.6 KiB |
|
|
@ -22,6 +22,10 @@
|
|||
"name": "equipped-OUTERCLOTHING-vox",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "equipped-OUTERCLOTHING-monkey",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 523 B |
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "From user named CAROU in Discord",
|
||||
"copyright": "From user named CAROU in Discord, purple_snake & dead_purple_snake edited by mubururu_ (github)",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
|
|
@ -11,42 +11,10 @@
|
|||
"name": "purple_snake",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
0.3,
|
||||
0.2,
|
||||
0.2,
|
||||
0.4,
|
||||
0.2,
|
||||
0.2,
|
||||
0.3
|
||||
],
|
||||
[
|
||||
0.3,
|
||||
0.2,
|
||||
0.2,
|
||||
0.4,
|
||||
0.2,
|
||||
0.2,
|
||||
0.3
|
||||
],
|
||||
[
|
||||
0.3,
|
||||
0.2,
|
||||
0.2,
|
||||
0.4,
|
||||
0.2,
|
||||
0.2,
|
||||
0.3
|
||||
],
|
||||
[
|
||||
0.3,
|
||||
0.2,
|
||||
0.2,
|
||||
0.4,
|
||||
0.2,
|
||||
0.2,
|
||||
0.3
|
||||
]
|
||||
[ 0.3, 0.2, 0.2, 0.4, 0.2, 0.2, 0.3 ],
|
||||
[ 0.3, 0.2, 0.2, 0.4, 0.2, 0.2, 0.3 ],
|
||||
[ 0.3, 0.2, 0.2, 0.4, 0.2, 0.2, 0.3 ],
|
||||
[ 0.3, 0.2, 0.2, 0.4, 0.2, 0.2, 0.3 ]
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -56,42 +24,10 @@
|
|||
"name": "small_purple_snake",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
0.3,
|
||||
0.2,
|
||||
0.2,
|
||||
0.4,
|
||||
0.2,
|
||||
0.2,
|
||||
0.3
|
||||
],
|
||||
[
|
||||
0.3,
|
||||
0.2,
|
||||
0.2,
|
||||
0.4,
|
||||
0.2,
|
||||
0.2,
|
||||
0.3
|
||||
],
|
||||
[
|
||||
0.3,
|
||||
0.2,
|
||||
0.2,
|
||||
0.4,
|
||||
0.2,
|
||||
0.2,
|
||||
0.3
|
||||
],
|
||||
[
|
||||
0.3,
|
||||
0.2,
|
||||
0.2,
|
||||
0.4,
|
||||
0.2,
|
||||
0.2,
|
||||
0.3
|
||||
]
|
||||
[ 0.3, 0.2, 0.2, 0.4, 0.2, 0.2, 0.3 ],
|
||||
[ 0.3, 0.2, 0.2, 0.4, 0.2, 0.2, 0.3 ],
|
||||
[ 0.3, 0.2, 0.2, 0.4, 0.2, 0.2, 0.3 ],
|
||||
[ 0.3, 0.2, 0.2, 0.4, 0.2, 0.2, 0.3 ]
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC0-1.0",
|
||||
"copyright": "Created by EmoGarbage404 (github) for SS14, solar-assembly-part taken from tgstation and modified at https://tgstation13.org/wiki/Guide_to_construction#Solar_Panels_and_Trackers, ame-part taken from vgstation at https://github.com/vgstation-coders/vgstation13/commit/1b7952787c06c21ef1623e494dcfe7cb1f46e041; singularity-generator, tesla-generator, radiation-collector, containment-field-generator, tesla-coil, grounding-rod inner icons made by lzk228; emitter made by pigeonpeas. fax-machine made by moomoobeef, modified by ps3moira",
|
||||
"copyright": "Created by EmoGarbage404 (github) for SS14, solar-assembly-part taken from tgstation and modified at https://tgstation13.org/wiki/Guide_to_construction#Solar_Panels_and_Trackers, ame-part taken from vgstation at https://github.com/vgstation-coders/vgstation13/commit/1b7952787c06c21ef1623e494dcfe7cb1f46e041; singularity-generator, tesla-generator, radiation-collector, containment-field-generator, tesla-coil, grounding-rod inner icons made by lzk228; emitter made by pigeonpeas. fax-machine made by moomoobeef, modified by ps3moira. hydroponics-tray modified by ScarKy0 (Github).",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
|
|
@ -45,6 +45,9 @@
|
|||
},
|
||||
{
|
||||
"name": "fax-machine"
|
||||
},
|
||||
{
|
||||
"name": "hydroponics-tray"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 188 B |
|
After Width: | Height: | Size: 188 B |
|
After Width: | Height: | Size: 632 B |
|
After Width: | Height: | Size: 520 B |
|
After Width: | Height: | Size: 593 B |