Merge remote-tracking branch 'WD-core/master' into upstream-core
57
Content.Client/_White/DeepSpaceCom/DeepSpaceComBoundUI.cs
Normal file
@@ -0,0 +1,57 @@
|
||||
using Content.Shared._White.DeepSpaceCom;
|
||||
using JetBrains.Annotations;
|
||||
|
||||
namespace Content.Client._White.DeepSpaceCom;
|
||||
|
||||
[UsedImplicitly]
|
||||
public sealed class DeepSpaceComBoundUI : BoundUserInterface
|
||||
{
|
||||
[ViewVariables]
|
||||
private DeepSpaceComMenu? _menu;
|
||||
|
||||
public DeepSpaceComBoundUI(EntityUid owner, Enum uiKey) : base(owner, uiKey)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
protected override void Open()
|
||||
{
|
||||
base.Open();
|
||||
|
||||
_menu = new();
|
||||
|
||||
_menu.OnMicPressed += enabled =>
|
||||
{
|
||||
SendMessage(new ToggleDeepSpaceComMicrophoneMessage(enabled));
|
||||
};
|
||||
_menu.OnSpeakerPressed += enabled =>
|
||||
{
|
||||
SendMessage(new ToggleDeepSpaceComSpeakerMessage(enabled));
|
||||
};
|
||||
_menu.OnChannelSelected += channel =>
|
||||
{
|
||||
SendMessage(new SelectDeepSpaceComChannelMessage(channel));
|
||||
};
|
||||
|
||||
_menu.OnClose += Close;
|
||||
_menu.OpenCentered();
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
base.Dispose(disposing);
|
||||
if (!disposing)
|
||||
return;
|
||||
_menu?.Close();
|
||||
}
|
||||
|
||||
protected override void UpdateState(BoundUserInterfaceState state)
|
||||
{
|
||||
base.UpdateState(state);
|
||||
|
||||
if (state is not DeepSpaceComBoundUIState msg)
|
||||
return;
|
||||
|
||||
_menu?.Update(msg);
|
||||
}
|
||||
}
|
||||
29
Content.Client/_White/DeepSpaceCom/DeepSpaceComMenu.xaml
Normal file
@@ -0,0 +1,29 @@
|
||||
<controls:FancyWindow xmlns="https://spacestation14.io"
|
||||
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
|
||||
Title="{Loc 'deepspacecom-menu-title'}"
|
||||
MinSize="355 150"
|
||||
SetSize="355 150">
|
||||
<BoxContainer Orientation="Vertical"
|
||||
HorizontalExpand="True"
|
||||
VerticalExpand="True"
|
||||
Margin="5 0 5 0">
|
||||
<BoxContainer Orientation="Horizontal" HorizontalExpand="True" VerticalExpand="True">
|
||||
<BoxContainer Orientation="Vertical" HorizontalExpand="True" VerticalExpand="False" HorizontalAlignment="Left">
|
||||
<Label Text="{Loc 'deepspacecom-channel-label'}" HorizontalAlignment="Center"/>
|
||||
<OptionButton Name="ChannelOptions" VerticalExpand="True" MinWidth="125"/>
|
||||
</BoxContainer>
|
||||
</BoxContainer>
|
||||
<Control MinHeight="10"/>
|
||||
<BoxContainer Orientation="Horizontal" HorizontalExpand="True" HorizontalAlignment="Right" Margin="5 0 5 5">
|
||||
<Button Name="MicButton" ToggleMode="True" Text="{Loc 'deepspacecom-button-text-mic'}" StyleClasses="OpenRight" MinWidth="70"/>
|
||||
<Button Name="SpeakerButton" ToggleMode="True" Text="{Loc 'deepspacecom-button-text-speaker'}" StyleClasses="OpenLeft" MinWidth="70"/>
|
||||
</BoxContainer>
|
||||
<BoxContainer Orientation="Vertical">
|
||||
<PanelContainer StyleClasses="LowDivider" />
|
||||
<BoxContainer Orientation="Horizontal" Margin="10 2 5 0" VerticalAlignment="Bottom">
|
||||
<Label Text="{Loc 'deepspacecom-flavor-text'}" StyleClasses="WindowFooterText"
|
||||
HorizontalAlignment="Right" HorizontalExpand="True" Margin="0 0 5 0" />
|
||||
</BoxContainer>
|
||||
</BoxContainer>
|
||||
</BoxContainer>
|
||||
</controls:FancyWindow>
|
||||
59
Content.Client/_White/DeepSpaceCom/DeepSpaceComMenu.xaml.cs
Normal file
@@ -0,0 +1,59 @@
|
||||
using Content.Client.UserInterface.Controls;
|
||||
using Content.Shared._White.DeepSpaceCom;
|
||||
using Content.Shared.Radio;
|
||||
using Robust.Client.AutoGenerated;
|
||||
using Robust.Client.UserInterface.XAML;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Client._White.DeepSpaceCom;
|
||||
|
||||
[GenerateTypedNameReferences]
|
||||
public sealed partial class DeepSpaceComMenu : FancyWindow
|
||||
{
|
||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
||||
|
||||
public event Action<bool>? OnMicPressed;
|
||||
public event Action<bool>? OnSpeakerPressed;
|
||||
public event Action<string>? OnChannelSelected;
|
||||
|
||||
private readonly List<string> _channels = new();
|
||||
|
||||
public DeepSpaceComMenu()
|
||||
{
|
||||
RobustXamlLoader.Load(this);
|
||||
IoCManager.InjectDependencies(this);
|
||||
|
||||
MicButton.OnPressed += args => OnMicPressed?.Invoke(args.Button.Pressed);
|
||||
SpeakerButton.OnPressed += args => OnSpeakerPressed?.Invoke(args.Button.Pressed);
|
||||
}
|
||||
|
||||
public void Update(DeepSpaceComBoundUIState state)
|
||||
{
|
||||
MicButton.Pressed = state.MicEnabled;
|
||||
SpeakerButton.Pressed = state.SpeakerEnabled;
|
||||
|
||||
ChannelOptions.Clear();
|
||||
_channels.Clear();
|
||||
for (var i = 0; i < state.AvailableChannels.Count; i++)
|
||||
{
|
||||
var channel = state.AvailableChannels[i];
|
||||
if (!_prototype.TryIndex<RadioChannelPrototype>(channel, out var prototype))
|
||||
continue;
|
||||
|
||||
_channels.Add(channel);
|
||||
ChannelOptions.AddItem(Loc.GetString(prototype.Name), i);
|
||||
|
||||
if (channel == state.SelectedChannel)
|
||||
ChannelOptions.Select(i);
|
||||
}
|
||||
ChannelOptions.OnItemSelected += args =>
|
||||
{
|
||||
ChannelOptions.SelectId(args.Id);
|
||||
OnChannelSelected?.Invoke(_channels[args.Id]);
|
||||
MicButton.Pressed = false;
|
||||
SpeakerButton.Pressed = false;
|
||||
OnMicPressed?.Invoke(false);
|
||||
OnSpeakerPressed?.Invoke(false);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ using Content.Server.Popups;
|
||||
using Content.Server.Power.Components;
|
||||
using Content.Server.Power.EntitySystems;
|
||||
using Content.Server.Radio.Components;
|
||||
using Content.Shared._White.DeepSpaceCom; // WD
|
||||
using Content.Server.Speech;
|
||||
using Content.Server.Speech.Components;
|
||||
using Content.Shared.UserInterface;
|
||||
@@ -51,6 +52,11 @@ public sealed class RadioDeviceSystem : EntitySystem
|
||||
SubscribeLocalEvent<IntercomComponent, ToggleIntercomMicMessage>(OnToggleIntercomMic);
|
||||
SubscribeLocalEvent<IntercomComponent, ToggleIntercomSpeakerMessage>(OnToggleIntercomSpeaker);
|
||||
SubscribeLocalEvent<IntercomComponent, SelectIntercomChannelMessage>(OnSelectIntercomChannel);
|
||||
|
||||
SubscribeLocalEvent<DeepSpaceComComponent, BeforeActivatableUIOpenEvent>(OnBeforeDeepSpaceComUiOpen); // WD start
|
||||
SubscribeLocalEvent<DeepSpaceComComponent, ToggleDeepSpaceComMicrophoneMessage>(OnToggleDeepSpaceComMic);
|
||||
SubscribeLocalEvent<DeepSpaceComComponent, ToggleDeepSpaceComSpeakerMessage>(OnToggleDeepSpaceComSpeaker);
|
||||
SubscribeLocalEvent<DeepSpaceComComponent, SelectDeepSpaceComChannelMessage>(OnSelectDeepSpaceComChannel); // WD end
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
@@ -264,4 +270,55 @@ public sealed class RadioDeviceSystem : EntitySystem
|
||||
var state = new IntercomBoundUIState(micEnabled, speakerEnabled, availableChannels, selectedChannel);
|
||||
_ui.SetUiState(uid, IntercomUiKey.Key, state);
|
||||
}
|
||||
|
||||
private void OnBeforeDeepSpaceComUiOpen(EntityUid uid, DeepSpaceComComponent component, BeforeActivatableUIOpenEvent args) // WD start
|
||||
{
|
||||
UpdateDeepSpaceComUi(uid, component);
|
||||
}
|
||||
|
||||
private void OnToggleDeepSpaceComMic(EntityUid uid, DeepSpaceComComponent component, ToggleDeepSpaceComMicrophoneMessage args)
|
||||
{
|
||||
if (component.RequiresPower && !this.IsPowered(uid, EntityManager))
|
||||
return;
|
||||
|
||||
SetMicrophoneEnabled(uid, args.Actor, args.Enabled, true);
|
||||
UpdateDeepSpaceComUi(uid, component);
|
||||
}
|
||||
|
||||
private void OnToggleDeepSpaceComSpeaker(EntityUid uid, DeepSpaceComComponent component, ToggleDeepSpaceComSpeakerMessage args)
|
||||
{
|
||||
if (component.RequiresPower && !this.IsPowered(uid, EntityManager))
|
||||
return;
|
||||
|
||||
SetSpeakerEnabled(uid, args.Actor, args.Enabled, true);
|
||||
UpdateDeepSpaceComUi(uid, component);
|
||||
}
|
||||
|
||||
private void OnSelectDeepSpaceComChannel(EntityUid uid, DeepSpaceComComponent component, SelectDeepSpaceComChannelMessage args)
|
||||
{
|
||||
if (component.RequiresPower && !this.IsPowered(uid, EntityManager))
|
||||
return;
|
||||
|
||||
if (!_protoMan.TryIndex<RadioChannelPrototype>(args.Channel, out _) || !component.SupportedChannels.Contains(args.Channel))
|
||||
return;
|
||||
|
||||
if (TryComp<RadioMicrophoneComponent>(uid, out var mic))
|
||||
mic.BroadcastChannel = args.Channel;
|
||||
if (TryComp<RadioSpeakerComponent>(uid, out var speaker))
|
||||
speaker.Channels = new(){ args.Channel };
|
||||
UpdateDeepSpaceComUi(uid, component);
|
||||
}
|
||||
|
||||
private void UpdateDeepSpaceComUi(EntityUid uid, DeepSpaceComComponent component)
|
||||
{
|
||||
var micComp = CompOrNull<RadioMicrophoneComponent>(uid);
|
||||
var speakerComp = CompOrNull<RadioSpeakerComponent>(uid);
|
||||
|
||||
var micEnabled = micComp?.Enabled ?? false;
|
||||
var speakerEnabled = speakerComp?.Enabled ?? false;
|
||||
var availableChannels = component.SupportedChannels;
|
||||
var selectedChannel = micComp?.BroadcastChannel ?? SharedChatSystem.CommonChannel;
|
||||
var state = new DeepSpaceComBoundUIState(micEnabled, speakerEnabled, availableChannels, selectedChannel);
|
||||
_ui.SetUiState(uid, DeepSpaceComUiKey.Key, state);
|
||||
} // WD end
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ using Content.Server.Chat.Systems;
|
||||
using Content.Server.Power.Components;
|
||||
using Content.Server.Radio.Components;
|
||||
using Content.Server.VoiceMask;
|
||||
using Content.Shared._White.DeepSpaceCom; // WD
|
||||
using Content.Shared.Chat;
|
||||
using Content.Shared.Database;
|
||||
using Content.Shared.Radio;
|
||||
@@ -127,12 +128,13 @@ public sealed class RadioSystem : EntitySystem
|
||||
var radioQuery = EntityQueryEnumerator<ActiveRadioComponent, TransformComponent>();
|
||||
while (canSend && radioQuery.MoveNext(out var receiver, out var radio, out var transform))
|
||||
{
|
||||
if (!radio.ReceiveAllChannels)
|
||||
if (!radio.ReceiveAllChannels) // WD start
|
||||
{
|
||||
if (!radio.Channels.Contains(channel.ID) || (TryComp<IntercomComponent>(receiver, out var intercom) &&
|
||||
!intercom.SupportedChannels.Contains(channel.ID)))
|
||||
if (!radio.Channels.Contains(channel.ID) ||
|
||||
(TryComp<DeepSpaceComComponent>(receiver, out var deepSpaceCom) && !deepSpaceCom.SupportedChannels.Contains(channel.ID)) ||
|
||||
(TryComp<IntercomComponent>(receiver, out var intercom) && !intercom.SupportedChannels.Contains(channel.ID)))
|
||||
continue;
|
||||
}
|
||||
} // WD end
|
||||
|
||||
if (!channel.LongRange && transform.MapID != sourceMapId && !radio.GlobalReceive)
|
||||
continue;
|
||||
|
||||
15
Content.Shared/_White/DeepSpaceCom/DeepSpaceComComponent.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using Content.Shared.Radio;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Shared._White.DeepSpaceCom;
|
||||
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
public sealed partial class DeepSpaceComComponent : Component
|
||||
{
|
||||
[DataField("requiresPower"), ViewVariables(VVAccess.ReadWrite)]
|
||||
public bool RequiresPower = true;
|
||||
|
||||
[DataField("supportedChannels", customTypeSerializer: typeof(PrototypeIdListSerializer<RadioChannelPrototype>))]
|
||||
public List<string> SupportedChannels = new();
|
||||
}
|
||||
59
Content.Shared/_White/DeepSpaceCom/SharedDeepSpaceCom.cs
Normal file
@@ -0,0 +1,59 @@
|
||||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared._White.DeepSpaceCom;
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public enum DeepSpaceComUiKey
|
||||
{
|
||||
Key
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class DeepSpaceComBoundUIState : BoundUserInterfaceState
|
||||
{
|
||||
public bool MicEnabled;
|
||||
public bool SpeakerEnabled;
|
||||
public List<string> AvailableChannels;
|
||||
public string SelectedChannel;
|
||||
|
||||
public DeepSpaceComBoundUIState(bool micEnabled, bool speakerEnabled, List<string> availableChannels, string selectedChannel)
|
||||
{
|
||||
MicEnabled = micEnabled;
|
||||
SpeakerEnabled = speakerEnabled;
|
||||
AvailableChannels = availableChannels;
|
||||
SelectedChannel = selectedChannel;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class ToggleDeepSpaceComMicrophoneMessage : BoundUserInterfaceMessage
|
||||
{
|
||||
public bool Enabled;
|
||||
|
||||
public ToggleDeepSpaceComMicrophoneMessage(bool enabled)
|
||||
{
|
||||
Enabled = enabled;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class ToggleDeepSpaceComSpeakerMessage : BoundUserInterfaceMessage
|
||||
{
|
||||
public bool Enabled;
|
||||
|
||||
public ToggleDeepSpaceComSpeakerMessage(bool enabled)
|
||||
{
|
||||
Enabled = enabled;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class SelectDeepSpaceComChannelMessage : BoundUserInterfaceMessage
|
||||
{
|
||||
public string Channel;
|
||||
|
||||
public SelectDeepSpaceComChannelMessage(string channel)
|
||||
{
|
||||
Channel = channel;
|
||||
}
|
||||
}
|
||||
@@ -1,22 +1,4 @@
|
||||
Entries:
|
||||
- author: Aviu
|
||||
changes:
|
||||
- message: "\u0421\u043A\u0440\u0435\u043B\u043B\u044B."
|
||||
type: Add
|
||||
id: 165
|
||||
time: '2024-02-28T14:43:54.0000000+00:00'
|
||||
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/141
|
||||
- author: Aviu
|
||||
changes:
|
||||
- message: "\u0420\u043E\u0431\u0430 \u043A\u0443\u043B\u044C\u0442\u0430 \u0431\
|
||||
\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0441\u043E\u0445\u0440\u0430\u043D\
|
||||
\u044F\u0435\u0442 \u0443\u0441\u043A\u043E\u0440\u0435\u043D\u0438\u0435 \u043F\
|
||||
\u0440\u0438 \u0434\u0435\u043A\u043E\u043D\u0432\u0435\u0440\u0442\u0430\u0446\
|
||||
\u0438\u0438 \u043A\u0443\u043B\u044C\u0442\u0438\u0441\u0442\u0430."
|
||||
type: Fix
|
||||
id: 166
|
||||
time: '2024-02-29T06:10:30.0000000+00:00'
|
||||
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/144
|
||||
- author: ThereDrD
|
||||
changes:
|
||||
- message: "\u0423\u0434\u0430\u043B\u0435\u043D\u044B \u043B\u0438\u0448\u043D\u0438\
|
||||
@@ -8957,3 +8939,85 @@
|
||||
id: 664
|
||||
time: '2025-02-25T20:43:43.0000000+00:00'
|
||||
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/905
|
||||
- author: keslik
|
||||
changes:
|
||||
- message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u0441\u043F\u0440\u0430\
|
||||
\u0439\u0442 \u0434\u043B\u044F \u043A\u043E\u0440\u043E\u0431\u043A\u0438 \u0442\
|
||||
\u0440\u0430\u043D\u043A\u0432\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\
|
||||
\u043E\u0432"
|
||||
type: Add
|
||||
- message: "\u0423\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u0430 \u043A\u0443\u0447\
|
||||
\u043D\u043E\u0441\u0442\u044C \u0441\u0442\u0440\u0435\u043B\u044C\u0431\u044B\
|
||||
\ \u043A\u0430\u0440\u0442\u0435\u0447\u044C\u044E"
|
||||
type: Tweak
|
||||
- message: "\u041E\u0441\u043B\u0430\u0431\u043B\u0435\u043D \u043F\u0430\u0442\u0440\
|
||||
\u043E\u043D .45 (\u043C\u0430\u0433\u043D\u0443\u043C)"
|
||||
type: Tweak
|
||||
- message: "\u0423\u0441\u0438\u043B\u0435\u043D\u044B \u0442\u0440\u0430\u043D\u043A\
|
||||
\u0432\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u044B \u0438 \u043F\u0443\
|
||||
\u043B\u0438 (\u0441\u043B\u0430\u0433\u0438) \u0434\u043B\u044F 50 \u043A\u0430\
|
||||
\u043B\u0438\u0431\u0440\u0430"
|
||||
type: Tweak
|
||||
- message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0430 \u043E\u0433\
|
||||
\u0440\u043E\u043C\u043D\u0430\u044F \u0432\u043C\u0435\u0441\u0442\u0438\u0442\
|
||||
\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C \u043A\u043E\u0440\u043E\u0431\
|
||||
\u043A\u0438 \u0434\u043B\u044F \u0441\u0432\u0435\u0447\u0435\u043A"
|
||||
type: Fix
|
||||
id: 665
|
||||
time: '2025-03-05T17:00:51.0000000+00:00'
|
||||
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/910
|
||||
- author: keslik
|
||||
changes:
|
||||
- message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u043F\u0440\u043E\u0434\
|
||||
\u0432\u0438\u043D\u0443\u0442\u044B\u0439 \u043F\u0440\u043E\u0442\u043E\u043A\
|
||||
\u0438\u043D\u0435\u0442\u0438\u043A"
|
||||
type: Add
|
||||
- message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u0432\u043E\u0437\
|
||||
\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u043F\u043E\u043B\u043E\u0436\
|
||||
\u0438\u0442\u044C \u043D\u043E\u0436 \u0432 \u0431\u043E\u0442\u0438\u043D\u043A\
|
||||
\u0438 \u0443\u0442\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u0430"
|
||||
type: Add
|
||||
- message: "\u0412 \u043F\u0440\u043E\u0442\u043E\u043B\u0430\u0442 \u0434\u043E\
|
||||
\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u0440\u0435\u0446\u0435\u043F\u0442\
|
||||
\u044B \u043A\u0440\u0443\u0448\u0438\u0442\u0435\u043B\u0435\u0439, \u043F\u0440\
|
||||
\u043E\u0434\u0432\u0438\u043D\u0443\u0442\u043E\u0433\u043E \u043F\u0440\u043E\
|
||||
\u0442\u043E\u043A\u0438\u043D\u0435\u0442\u0438\u043A\u0430 \u0438 \u0432\u0437\
|
||||
\u0440\u044B\u0432\u0447\u0430\u0442\u043A\u0438."
|
||||
type: Add
|
||||
- message: "\u0412 \u043E\u0440\u0443\u0436\u0435\u0439\u043D\u0443\u044E \u0432\
|
||||
\u0435\u0442\u043A\u0443 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430\
|
||||
\ \u043D\u043E\u0432\u0430\u044F \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\
|
||||
\u0438\u044F \"\u041F\u0440\u043E\u043C\u044B\u0448\u043B\u0435\u043D\u043D\u0430\
|
||||
\u044F \u0434\u043E\u0431\u044B\u0447\u0430\""
|
||||
type: Add
|
||||
- message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u0430\u043B\u043C\u0430\
|
||||
\u0437\u043D\u044B\u0439 \u0448\u0430\u0445\u0442\u0451\u0440\u0441\u043A\u0438\
|
||||
\u0439 \u0431\u0443\u0440 \u0438 \u0435\u0433\u043E \u0447\u0435\u0440\u0442\
|
||||
\u0451\u0436"
|
||||
type: Add
|
||||
- message: "\u0422\u0435\u043F\u0435\u0440\u044C \u043F\u0440\u0438 \u043F\u043E\
|
||||
\u043C\u043E\u0449\u0438 \u043F\u0440\u043E\u0442\u043E\u043A\u0438\u043D\u0435\
|
||||
\u0442\u0438\u043A\u0430 \u043C\u043E\u0436\u043D\u043E \u0434\u043E\u0431\u044B\
|
||||
\u0432\u0430\u0442\u044C \u0440\u0443\u0434\u0443 \u043D\u0430 \u043F\u043B\u0430\
|
||||
\u043D\u0435\u0442\u0430\u0445"
|
||||
type: Fix
|
||||
- message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0430 \u043D\u0435\
|
||||
\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u0434\u043E\
|
||||
\u0431\u044B\u0432\u0430\u0442\u044C \u0430\u0441\u0442\u0435\u0440\u043E\u0438\
|
||||
\u0434\u044B \u0434\u043B\u044F \u043A\u0440\u0443\u0448\u0438\u0442\u0435\u043B\
|
||||
\u044F"
|
||||
type: Fix
|
||||
- message: "\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u043E \u0441\u043E\u0434\u0435\
|
||||
\u0440\u0436\u0438\u043C\u043E\u0435 \u0423\u0442\u0438\u043B\u044C\u041C\u0430\
|
||||
\u0433'\u0430"
|
||||
type: Tweak
|
||||
- message: "\u0421\u043D\u0438\u0436\u0435\u043D\u0430 \u0441\u0442\u043E\u0438\u043C\
|
||||
\u043E\u0441\u0442\u044C \u043F\u043E\u0434\u0441\u0443\u043C\u043A\u043E\u0432"
|
||||
type: Tweak
|
||||
- message: "\u0414\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u044C \u0432\u044B\u0441\
|
||||
\u0442\u0440\u0435\u043B\u0430 \u043A\u0440\u0443\u0448\u0438\u0442\u0435\u043B\
|
||||
\u044F \u0441\u043D\u0438\u0436\u0435\u043D\u0430"
|
||||
type: Tweak
|
||||
id: 666
|
||||
time: '2025-03-05T20:08:38.0000000+00:00'
|
||||
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/911
|
||||
|
||||
4
Resources/Locale/ru-RU/_white/items/apka.ftl
Normal file
@@ -0,0 +1,4 @@
|
||||
ent-WeaponAdvancedProtoKineticAccelerator = продвинутый автоматический протокинетический акселератор
|
||||
.desc = Сокращённо - ПАПА. Обладает повышенной скорострельностью и эффективно добывает породы любых типов. Крайне опасен в бою.
|
||||
|
||||
research-technology-industrial-mining = Промышленная добыча
|
||||
7
Resources/Locale/ru-RU/_white/radio/deepspacecom.ftl
Normal file
@@ -0,0 +1,7 @@
|
||||
ent-ComputerDeepSpaceCom = консоль дальней связи
|
||||
.desc = Дальняя космическая связь обеспечивает быстрый обмен сообщениями почти на любом расстоянии. Корпорация слышит!
|
||||
|
||||
ent-DeepSpaceComComputerCircuitboard = печатная плата пульта дальней связи
|
||||
.desc = Печатная плата для пульта дальней космической связи.
|
||||
|
||||
chat-radio-deepspace = Дальняя связь
|
||||
5
Resources/Locale/ru-RU/_white/radio/deepspacecomui.ftl
Normal file
@@ -0,0 +1,5 @@
|
||||
deepspacecom-menu-title = Пульт дальней космической связи
|
||||
deepspacecom-channel-label = Частота:
|
||||
deepspacecom-button-text-mic = Микрофон
|
||||
deepspacecom-button-text-speaker = Динамик
|
||||
deepspacecom-flavor-text = Поиск сигналов...
|
||||
@@ -2,7 +2,7 @@ ent-BaseBlueprint = чертёж
|
||||
.desc = Чертёж какого-то устройства. Его можно поместить в автолат.
|
||||
ent-BlueprintFulton = чертёж фултона
|
||||
.desc = Чертёж со схемой фултона. Его можно поместить в автолат.
|
||||
ent-BlueprintSeismicCharge = чертёж сейсмического заряда
|
||||
.desc = Чертеж со схемой сейсмического заряда. Его можно поместить в автолат.
|
||||
ent-BlueprintMiningDrillDiamond = чертёж алмазного шахтёрского бура
|
||||
.desc = Чертеж со схемой алмазного бура. Его можно поместить в автолат.
|
||||
ent-BlueprintSoapOmega = чертёж омега мыла
|
||||
.desc = Чертеж со схемой омега мыла. Его можно поместить в автолат.
|
||||
|
||||
@@ -10,3 +10,5 @@ ent-Pickaxe = кирка
|
||||
.desc = Зазубренная до совершенства, чтобы вбивать её в камни.
|
||||
ent-MiningDrill = шахтёрский бур
|
||||
.desc = Мощный инструмент, служащий для быстрого бурения горных пород.
|
||||
ent-MiningDrillDiamond = шахтёрский бур с алмазным сверлом
|
||||
.desc = Более эффективная версия шахтёрского бура.
|
||||
|
||||
@@ -441,6 +441,9 @@
|
||||
- type: Storage
|
||||
grid:
|
||||
- 0,0,9,2
|
||||
whitelist: # WD start
|
||||
components:
|
||||
- ExtinguishOnInteract # WD end
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: Candle
|
||||
@@ -466,6 +469,9 @@
|
||||
- type: Storage
|
||||
grid:
|
||||
- 0,0,9,2
|
||||
whitelist: # WD start
|
||||
components:
|
||||
- ExtinguishOnInteract # WD end
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: CandleSmall
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
- id: BoxID
|
||||
- id: BoxHeadset
|
||||
- id: IDComputerCircuitboard
|
||||
- id: WeaponEgun
|
||||
- id: WeaponDisabler
|
||||
- id: DoorRemoteService
|
||||
- id: ClothingNeckGoldmedal
|
||||
- id: RubberStampHop
|
||||
|
||||
@@ -1,23 +1,24 @@
|
||||
- type: vendingMachineInventory
|
||||
id: SalvageEquipmentInventory
|
||||
startingInventory:
|
||||
WeaponProtoKineticAccelerator: 2
|
||||
WeaponCrusher: 1
|
||||
WeaponCrusherDagger: 2
|
||||
HandheldGPSBasic: 4
|
||||
Crowbar: 2
|
||||
BoxMRE: 3
|
||||
WeaponProtoKineticAccelerator: 4 # WD start
|
||||
Pickaxe: 4
|
||||
SurvivalKnife: 2
|
||||
OreBag: 4
|
||||
SeismicCharge: 3
|
||||
SurvivalKnife: 2
|
||||
Crowbar: 2
|
||||
Flare: 10
|
||||
FlashlightLantern: 3
|
||||
Floodlight: 2
|
||||
RadioHandheld: 4
|
||||
InflatableWallStack1: 20
|
||||
InflatableDoorStack1: 10
|
||||
SeismicCharge: 3
|
||||
PowerCellMedium: 3
|
||||
HandheldGPSBasic: 3
|
||||
RadioHandheld: 3
|
||||
FultonBeacon: 2
|
||||
Fulton: 3
|
||||
BoxInflatable: 2
|
||||
BoxMRE: 2
|
||||
ClothingEyesGlassesMeson: 3
|
||||
ClothingPouchMedical: 2
|
||||
ClothingPouchGrenade: 2 # WD end
|
||||
emaggedInventory:
|
||||
JetpackBlackFilled: 1
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
materialComposition:
|
||||
Cloth: 35
|
||||
- type: StaticPrice
|
||||
price: 200
|
||||
price: 50
|
||||
- type: EmitSoundOnPickup
|
||||
sound:
|
||||
path: /Audio/White/Web/walk1.ogg
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
- Patch
|
||||
- Healing
|
||||
- type: StaticPrice
|
||||
price: 250
|
||||
price: 75
|
||||
- type: Appearance
|
||||
|
||||
- type: entity
|
||||
@@ -50,8 +50,6 @@
|
||||
- SmokeOnTrigger
|
||||
- ClusterGrenade
|
||||
- ExplodeOnTrigger
|
||||
- type: StaticPrice
|
||||
price: 125
|
||||
- type: Appearance
|
||||
|
||||
- type: entity
|
||||
@@ -118,7 +116,7 @@
|
||||
maxFillLevels: 1
|
||||
fillBaseName: fill-
|
||||
- type: StaticPrice
|
||||
price: 110
|
||||
price: 40
|
||||
- type: Appearance
|
||||
|
||||
- type: entity
|
||||
@@ -165,5 +163,5 @@
|
||||
slots: [pocket, belt]
|
||||
quickEquip: false
|
||||
- type: StaticPrice
|
||||
price: 150
|
||||
price: 70
|
||||
- type: Appearance
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
sprite: Clothing/Shoes/Boots/jackboots.rsi
|
||||
|
||||
- type: entity
|
||||
parent: ClothingShoesBaseButcherable
|
||||
parent: ClothingShoesMilitaryBase # WD
|
||||
id: ClothingShoesBootsSalvage
|
||||
name: salvage boots
|
||||
description: Steel-toed salvage boots for salvaging in hazardous environments.
|
||||
@@ -31,7 +31,6 @@
|
||||
sprite: Clothing/Shoes/Boots/explorer.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Shoes/Boots/explorer.rsi
|
||||
- type: Matchbox
|
||||
|
||||
- type: entity
|
||||
parent: ClothingShoesBaseButcherable
|
||||
|
||||
@@ -30,10 +30,10 @@
|
||||
|
||||
- type: entity
|
||||
parent: BaseBlueprint
|
||||
id: BlueprintSeismicCharge
|
||||
name: seismic charge blueprint
|
||||
description: A blueprint with a schematic of a seismic charge. It can be inserted into an autolathe.
|
||||
id: BlueprintMiningDrillDiamond # WD start
|
||||
name: diamond mining drill blueprint
|
||||
description: A blueprint with a schematic of a diamond mining drill. It can be inserted into an autolathe.
|
||||
components:
|
||||
- type: Blueprint
|
||||
providedRecipes:
|
||||
- SeismicCharge
|
||||
- MiningDrillDiamond # WD end
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
loop: true
|
||||
volume: -10
|
||||
maxDistance: 5
|
||||
- type: StaticPrice # WD
|
||||
price: 5 # WD
|
||||
|
||||
- type: Sprite
|
||||
sprite: Objects/Misc/flare.rsi
|
||||
|
||||
@@ -113,4 +113,4 @@
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: boxwide
|
||||
- state: shellslug
|
||||
- state: shelltranquilizer # WD
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
- ShellShotgun
|
||||
- type: CartridgeAmmo
|
||||
count: 6
|
||||
spread: 28
|
||||
spread: 14 # WD
|
||||
soundEject:
|
||||
collection: ShellEject
|
||||
- type: Sprite
|
||||
@@ -125,9 +125,9 @@
|
||||
ammo:
|
||||
reagents:
|
||||
- ReagentId: ChloralHydrate
|
||||
Quantity: 5
|
||||
Quantity: 12 # WD
|
||||
- type: SolutionTransfer
|
||||
maxTransferAmount: 7
|
||||
maxTransferAmount: 15 # WD
|
||||
- type: SpentAmmoVisuals
|
||||
state: "practice"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
- type: Projectile
|
||||
damage:
|
||||
types:
|
||||
Piercing: 35
|
||||
Piercing: 32 # WD
|
||||
|
||||
- type: entity
|
||||
id: BulletMagnumPractice
|
||||
|
||||
@@ -10,7 +10,10 @@
|
||||
- type: Projectile
|
||||
damage:
|
||||
types:
|
||||
Piercing: 40
|
||||
Piercing: 50 # WD start
|
||||
- type: StaminaDamageOnCollide
|
||||
ignoreResistances: false
|
||||
damage: 80 # WD end
|
||||
|
||||
- type: entity
|
||||
id: PelletShotgunBeanbag
|
||||
|
||||
@@ -420,6 +420,7 @@
|
||||
layers:
|
||||
- state: chronobolt
|
||||
shader: unshaded
|
||||
- type: GatheringProjectile # WD
|
||||
- type: Projectile
|
||||
impactEffect: BulletImpactEffectKinetic
|
||||
damage:
|
||||
@@ -487,9 +488,10 @@
|
||||
damage:
|
||||
types:
|
||||
Blunt: 0
|
||||
Structural: 15 # WD
|
||||
# Short lifespan
|
||||
- type: TimedDespawn
|
||||
lifetime: 0.4
|
||||
lifetime: 0.2 # WD
|
||||
|
||||
- type: entity
|
||||
parent: BaseBullet
|
||||
|
||||
@@ -64,3 +64,25 @@
|
||||
Brute: 3
|
||||
types:
|
||||
Structural: 12
|
||||
|
||||
- type: entity
|
||||
name: diamond tipped mining drill
|
||||
parent: MiningDrill
|
||||
id: MiningDrillDiamond
|
||||
description: A significantly more efficient mining drill tipped with diamond.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Tools/handdrilldiamond.rsi
|
||||
state: handdrill
|
||||
- type: MeleeWeapon
|
||||
autoAttack: true
|
||||
angle: 0
|
||||
wideAnimationRotation: -90
|
||||
soundHit:
|
||||
path: "/Audio/Items/drill_hit.ogg"
|
||||
attackRate: 4
|
||||
damage:
|
||||
groups:
|
||||
Brute: 6
|
||||
types:
|
||||
Structural: 30
|
||||
|
||||
@@ -382,6 +382,10 @@
|
||||
- WeaponForceGun
|
||||
- WeaponLaserSvalinn
|
||||
- WeaponProtoKineticAccelerator
|
||||
- WeaponAdvancedProtoKineticAccelerator # WD start
|
||||
- SeismicCharge
|
||||
- WeaponCrusherDagger
|
||||
- WeaponCrusher # WD end
|
||||
- WeaponTetherGun
|
||||
- WeaponGrapplingGun
|
||||
- ClothingBackpackHolding
|
||||
|
||||
@@ -212,6 +212,51 @@
|
||||
Glass: 500
|
||||
Silver: 100
|
||||
|
||||
- type: latheRecipe # WD start
|
||||
id: WeaponAdvancedProtoKineticAccelerator
|
||||
result: WeaponAdvancedProtoKineticAccelerator
|
||||
category: Weapons
|
||||
completetime: 5
|
||||
materials:
|
||||
Steel: 800
|
||||
Plasma: 400
|
||||
Glass: 200
|
||||
Uranium: 200
|
||||
Silver: 300
|
||||
Gold: 600
|
||||
|
||||
- type: latheRecipe
|
||||
id: SeismicCharge
|
||||
result: SeismicCharge
|
||||
category: Weapons
|
||||
completetime: 3
|
||||
materials:
|
||||
Plastic: 800
|
||||
Plasma: 100
|
||||
Glass: 200
|
||||
|
||||
- type: latheRecipe
|
||||
id: WeaponCrusherDagger
|
||||
result: WeaponCrusherDagger
|
||||
category: Weapons
|
||||
completetime: 5
|
||||
materials:
|
||||
Steel: 500
|
||||
Plastic: 200
|
||||
Silver: 100
|
||||
|
||||
- type: latheRecipe
|
||||
id: WeaponCrusher
|
||||
result: WeaponCrusher
|
||||
category: Weapons
|
||||
completetime: 5
|
||||
materials:
|
||||
Steel: 2000
|
||||
Plastic: 400
|
||||
Glass: 300
|
||||
Plasma: 300
|
||||
Silver: 200 # WD end
|
||||
|
||||
- type: latheRecipe
|
||||
id: WeaponTetherGun
|
||||
result: WeaponTetherGun
|
||||
|
||||
@@ -18,11 +18,11 @@
|
||||
# If they get spammed make it cost silver.
|
||||
|
||||
- type: latheRecipe
|
||||
id: SeismicCharge
|
||||
result: SeismicCharge
|
||||
id: MiningDrillDiamond # WD start
|
||||
result: MiningDrillDiamond
|
||||
category: Tools
|
||||
completetime: 5 # WD Edit from 1 to 5
|
||||
completetime: 5
|
||||
materials:
|
||||
Plastic: 1500
|
||||
Steel: 100
|
||||
Silver: 100
|
||||
Steel: 1500
|
||||
Plastic: 1000
|
||||
Silver: 200 # WD end
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
recipeUnlocks:
|
||||
- WeaponProtoKineticAccelerator
|
||||
- ShuttleGunKineticCircuitboard
|
||||
- WeaponCrusherDagger # WD
|
||||
# These are roundstart but not replenishable for salvage
|
||||
|
||||
- type: technology
|
||||
@@ -109,6 +110,22 @@
|
||||
|
||||
# Tier 2
|
||||
|
||||
- type: technology # WD start
|
||||
id: IndustrialMining
|
||||
name: research-technology-industrial-mining
|
||||
icon:
|
||||
sprite: Objects/Weapons/Bombs/seismic.rsi
|
||||
state: icon
|
||||
discipline: Arsenal
|
||||
tier: 2
|
||||
cost: 9500
|
||||
recipeUnlocks:
|
||||
- WeaponAdvancedProtoKineticAccelerator
|
||||
- SeismicCharge
|
||||
- WeaponCrusher
|
||||
technologyPrerequisites:
|
||||
- SalvageWeapons # WD end
|
||||
|
||||
- type: technology
|
||||
id: LightweightMagnets
|
||||
name: research-technology-lightweight-magnets
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
- type: entity
|
||||
parent: BaseItem
|
||||
id: WeaponAdvancedProtoKineticAccelerator
|
||||
name: advanced proto-kinetic accelerator
|
||||
description: Apka.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: White/Objects/Weapons/advanced_kinetic.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- state: animation-icon
|
||||
visible: false
|
||||
map: [ "empty-icon" ]
|
||||
- type: Item
|
||||
sprite: White/Objects/Weapons/advanced_kinetic.rsi
|
||||
size: Normal
|
||||
- type: GunWieldBonus
|
||||
minAngle: -43
|
||||
maxAngle: -43
|
||||
- type: Wieldable
|
||||
- type: Gun
|
||||
angleDecay: 45
|
||||
minAngle: 44
|
||||
maxAngle: 45
|
||||
fireRate: 6
|
||||
ShotsPerBurst: 3
|
||||
selectedMode: Burst
|
||||
availableModes:
|
||||
- Burst
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/kinetic_accel.ogg
|
||||
- type: AmmoCounter
|
||||
- type: Appearance
|
||||
- type: GenericVisualizer
|
||||
visuals:
|
||||
enum.AmmoVisuals.HasAmmo:
|
||||
empty-icon:
|
||||
True: { visible: False }
|
||||
False: { visible: True }
|
||||
- type: RechargeBasicEntityAmmo
|
||||
rechargeCooldown: 0.7
|
||||
rechargeSound:
|
||||
path: /Audio/Weapons/Guns/MagIn/kinetic_reload.ogg
|
||||
params:
|
||||
volume: -1
|
||||
pitch: 1.2
|
||||
variation: 0.08
|
||||
- type: BasicEntityAmmoProvider
|
||||
proto: BulletKinetic
|
||||
capacity: 3
|
||||
count: 2
|
||||
- type: Clothing
|
||||
sprite: Objects/Weapons/Guns/Basic/kinetic_accelerator.rsi
|
||||
quickEquip: false
|
||||
slots:
|
||||
- suitStorage
|
||||
- Belt
|
||||
- type: UseDelay
|
||||
delay: 1
|
||||
@@ -0,0 +1,62 @@
|
||||
- type: entity
|
||||
parent: BaseComputer
|
||||
id: ComputerDeepSpaceCom
|
||||
name: deep space communications desk
|
||||
description: A computer.
|
||||
components:
|
||||
- type: ApcPowerReceiver
|
||||
- type: Electrified
|
||||
enabled: false
|
||||
usesApcPower: true
|
||||
- type: RadioMicrophone
|
||||
powerRequired: true
|
||||
unobstructedRequired: true
|
||||
listenRange: 2
|
||||
toggleOnInteract: false
|
||||
- type: RadioSpeaker
|
||||
toggleOnInteract: false
|
||||
- type: DeepSpaceCom
|
||||
supportedChannels:
|
||||
- DeepSpace
|
||||
- Common
|
||||
- type: TTS # check tts work
|
||||
id: Sentrybot
|
||||
- type: Speech
|
||||
speechVerb: Robotic
|
||||
- type: Sprite # replace sprites in future
|
||||
layers:
|
||||
- map: ["computerLayerBody"]
|
||||
state: computer
|
||||
- map: ["computerLayerKeyboard"]
|
||||
state: generic_keyboard
|
||||
- map: ["computerLayerScreen"]
|
||||
sprite: White/Structures/deepSpaceCom.rsi
|
||||
state: comm
|
||||
- map: ["computerLayerKeys"]
|
||||
state: id_key
|
||||
- type: ActivatableUI
|
||||
key: enum.DeepSpaceComUiKey.Key
|
||||
- type: UserInterface
|
||||
interfaces:
|
||||
enum.DeepSpaceComUiKey.Key:
|
||||
type: DeepSpaceComBoundUI
|
||||
- type: Computer
|
||||
board: DeepSpaceComComputerCircuitboard
|
||||
- type: PointLight
|
||||
radius: 1.5
|
||||
energy: 1.6
|
||||
color: "#3c5eb5"
|
||||
- type: Damageable
|
||||
damageContainer: StructuralInorganic
|
||||
damageModifierSet: StrongMetallic
|
||||
|
||||
- type: entity
|
||||
parent: BaseComputerCircuitboard
|
||||
id: DeepSpaceComComputerCircuitboard
|
||||
name: deepspacecom computer board
|
||||
description: A computer printed circuit board for a DeepSpaceCom desk.
|
||||
components:
|
||||
- type: Sprite
|
||||
state: cpu_command
|
||||
- type: ComputerBoard
|
||||
prototype: ComputerDeepSpaceCom
|
||||
@@ -118,3 +118,9 @@
|
||||
color: "#f6ce64"
|
||||
# long range since otherwise it'd defeat the point of a handheld radio independent of telecomms
|
||||
longRange: true
|
||||
|
||||
- type: radioChannel # WD start
|
||||
id: DeepSpace
|
||||
name: chat-radio-deepspace
|
||||
frequency: 1501
|
||||
longRange: true # WD end
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/cc65477c04f7403ca8a457bd5bae69a01abadbf0, encryptokey was taken from Baystation12 at https://github.com/infinitystation/Baystation12/blob/073f678cdce92edb8fcd55f9ffc9f0523bf31506/icons/obj/radio.dmi and modified by lapatison. boxwidetoy, shelltoy, swab, flare, inflatable, trashbag, magazine, holo and forensic created by potato1234x (github) for ss14 based on toys.rsi, mouth_swab.rsi, flare.rsi, inflatable_wall.rsi, trashbag.rsi, caseless_pistol_mag.rsi, guardians.rsi and bureaucracy.rsi respectively, candle and darts created by TheShuEd for ss14, vials was drawn by Ubaser, evidence_markers by moomoobeef, ziplock by CaypenNow.",
|
||||
"copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/cc65477c04f7403ca8a457bd5bae69a01abadbf0, encryptokey was taken from Baystation12 at https://github.com/infinitystation/Baystation12/blob/073f678cdce92edb8fcd55f9ffc9f0523bf31506/icons/obj/radio.dmi and modified by lapatison. boxwidetoy, shelltoy, swab, flare, inflatable, trashbag, magazine, holo and forensic created by potato1234x (github) for ss14 based on toys.rsi, mouth_swab.rsi, flare.rsi, inflatable_wall.rsi, trashbag.rsi, caseless_pistol_mag.rsi, guardians.rsi and bureaucracy.rsi respectively, candle and darts created by TheShuEd for ss14, vials was drawn by Ubaser, evidence_markers by moomoobeef, ziplock by CaypenNow, shelltranquilizer modified by keslik.",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
@@ -203,6 +203,9 @@
|
||||
{
|
||||
"name": "shelltoy"
|
||||
},
|
||||
{
|
||||
"name": "shelltranquilizer"
|
||||
},
|
||||
{
|
||||
"name": "ziptie"
|
||||
},
|
||||
|
||||
|
After Width: | Height: | Size: 238 B |
|
After Width: | Height: | Size: 416 B |
|
After Width: | Height: | Size: 392 B |
|
After Width: | Height: | Size: 392 B |
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-NC-SA-3.0",
|
||||
"copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/8fdee6e4e3dacdb7a12efaac132933dc0fc649b4 and modified by alzore_",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "handdrill"
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-right",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 141 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "icon by RiceMar1244 based on tgstation at https://github.com/tgstation/tgstation/commit/8b7f8ba6a3327c7381967c550f185dffafd11a57; inhand, wield, and belt equip sprites by RiceMar1244. Recolor by keslik",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "animation-icon",
|
||||
"delays": [
|
||||
[
|
||||
0.2,
|
||||
0.2
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "inhand-right",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "wielded-inhand-right",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "wielded-inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "equipped-BELT",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "equipped-SUITSTORAGE",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
BIN
Resources/Textures/White/Structures/deepSpaceCom.rsi/comm.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/bd6873fd4dd6a61d7e46f1d75cd4d90f64c40894.",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "comm",
|
||||
"directions": 4,
|
||||
"delays": [
|
||||
[
|
||||
0.1,
|
||||
0.1
|
||||
],
|
||||
[
|
||||
0.1,
|
||||
0.1
|
||||
],
|
||||
[
|
||||
0.1,
|
||||
0.1
|
||||
],
|
||||
[
|
||||
0.1,
|
||||
0.1
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||