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.Components;
|
||||||
using Content.Server.Power.EntitySystems;
|
using Content.Server.Power.EntitySystems;
|
||||||
using Content.Server.Radio.Components;
|
using Content.Server.Radio.Components;
|
||||||
|
using Content.Shared._White.DeepSpaceCom; // WD
|
||||||
using Content.Server.Speech;
|
using Content.Server.Speech;
|
||||||
using Content.Server.Speech.Components;
|
using Content.Server.Speech.Components;
|
||||||
using Content.Shared.UserInterface;
|
using Content.Shared.UserInterface;
|
||||||
@@ -51,6 +52,11 @@ public sealed class RadioDeviceSystem : EntitySystem
|
|||||||
SubscribeLocalEvent<IntercomComponent, ToggleIntercomMicMessage>(OnToggleIntercomMic);
|
SubscribeLocalEvent<IntercomComponent, ToggleIntercomMicMessage>(OnToggleIntercomMic);
|
||||||
SubscribeLocalEvent<IntercomComponent, ToggleIntercomSpeakerMessage>(OnToggleIntercomSpeaker);
|
SubscribeLocalEvent<IntercomComponent, ToggleIntercomSpeakerMessage>(OnToggleIntercomSpeaker);
|
||||||
SubscribeLocalEvent<IntercomComponent, SelectIntercomChannelMessage>(OnSelectIntercomChannel);
|
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)
|
public override void Update(float frameTime)
|
||||||
@@ -264,4 +270,55 @@ public sealed class RadioDeviceSystem : EntitySystem
|
|||||||
var state = new IntercomBoundUIState(micEnabled, speakerEnabled, availableChannels, selectedChannel);
|
var state = new IntercomBoundUIState(micEnabled, speakerEnabled, availableChannels, selectedChannel);
|
||||||
_ui.SetUiState(uid, IntercomUiKey.Key, state);
|
_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.Power.Components;
|
||||||
using Content.Server.Radio.Components;
|
using Content.Server.Radio.Components;
|
||||||
using Content.Server.VoiceMask;
|
using Content.Server.VoiceMask;
|
||||||
|
using Content.Shared._White.DeepSpaceCom; // WD
|
||||||
using Content.Shared.Chat;
|
using Content.Shared.Chat;
|
||||||
using Content.Shared.Database;
|
using Content.Shared.Database;
|
||||||
using Content.Shared.Radio;
|
using Content.Shared.Radio;
|
||||||
@@ -127,12 +128,13 @@ public sealed class RadioSystem : EntitySystem
|
|||||||
var radioQuery = EntityQueryEnumerator<ActiveRadioComponent, TransformComponent>();
|
var radioQuery = EntityQueryEnumerator<ActiveRadioComponent, TransformComponent>();
|
||||||
while (canSend && radioQuery.MoveNext(out var receiver, out var radio, out var transform))
|
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) &&
|
if (!radio.Channels.Contains(channel.ID) ||
|
||||||
!intercom.SupportedChannels.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;
|
continue;
|
||||||
}
|
} // WD end
|
||||||
|
|
||||||
if (!channel.LongRange && transform.MapID != sourceMapId && !radio.GlobalReceive)
|
if (!channel.LongRange && transform.MapID != sourceMapId && !radio.GlobalReceive)
|
||||||
continue;
|
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:
|
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
|
- author: ThereDrD
|
||||||
changes:
|
changes:
|
||||||
- message: "\u0423\u0434\u0430\u043B\u0435\u043D\u044B \u043B\u0438\u0448\u043D\u0438\
|
- message: "\u0423\u0434\u0430\u043B\u0435\u043D\u044B \u043B\u0438\u0448\u043D\u0438\
|
||||||
@@ -8957,3 +8939,85 @@
|
|||||||
id: 664
|
id: 664
|
||||||
time: '2025-02-25T20:43:43.0000000+00:00'
|
time: '2025-02-25T20:43:43.0000000+00:00'
|
||||||
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/905
|
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 = Чертёж какого-то устройства. Его можно поместить в автолат.
|
.desc = Чертёж какого-то устройства. Его можно поместить в автолат.
|
||||||
ent-BlueprintFulton = чертёж фултона
|
ent-BlueprintFulton = чертёж фултона
|
||||||
.desc = Чертёж со схемой фултона. Его можно поместить в автолат.
|
.desc = Чертёж со схемой фултона. Его можно поместить в автолат.
|
||||||
ent-BlueprintSeismicCharge = чертёж сейсмического заряда
|
ent-BlueprintMiningDrillDiamond = чертёж алмазного шахтёрского бура
|
||||||
.desc = Чертеж со схемой сейсмического заряда. Его можно поместить в автолат.
|
.desc = Чертеж со схемой алмазного бура. Его можно поместить в автолат.
|
||||||
ent-BlueprintSoapOmega = чертёж омега мыла
|
ent-BlueprintSoapOmega = чертёж омега мыла
|
||||||
.desc = Чертеж со схемой омега мыла. Его можно поместить в автолат.
|
.desc = Чертеж со схемой омега мыла. Его можно поместить в автолат.
|
||||||
|
|||||||
@@ -10,3 +10,5 @@ ent-Pickaxe = кирка
|
|||||||
.desc = Зазубренная до совершенства, чтобы вбивать её в камни.
|
.desc = Зазубренная до совершенства, чтобы вбивать её в камни.
|
||||||
ent-MiningDrill = шахтёрский бур
|
ent-MiningDrill = шахтёрский бур
|
||||||
.desc = Мощный инструмент, служащий для быстрого бурения горных пород.
|
.desc = Мощный инструмент, служащий для быстрого бурения горных пород.
|
||||||
|
ent-MiningDrillDiamond = шахтёрский бур с алмазным сверлом
|
||||||
|
.desc = Более эффективная версия шахтёрского бура.
|
||||||
|
|||||||
@@ -441,6 +441,9 @@
|
|||||||
- type: Storage
|
- type: Storage
|
||||||
grid:
|
grid:
|
||||||
- 0,0,9,2
|
- 0,0,9,2
|
||||||
|
whitelist: # WD start
|
||||||
|
components:
|
||||||
|
- ExtinguishOnInteract # WD end
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: Candle
|
- id: Candle
|
||||||
@@ -466,6 +469,9 @@
|
|||||||
- type: Storage
|
- type: Storage
|
||||||
grid:
|
grid:
|
||||||
- 0,0,9,2
|
- 0,0,9,2
|
||||||
|
whitelist: # WD start
|
||||||
|
components:
|
||||||
|
- ExtinguishOnInteract # WD end
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: CandleSmall
|
- id: CandleSmall
|
||||||
|
|||||||
@@ -102,7 +102,7 @@
|
|||||||
- id: BoxID
|
- id: BoxID
|
||||||
- id: BoxHeadset
|
- id: BoxHeadset
|
||||||
- id: IDComputerCircuitboard
|
- id: IDComputerCircuitboard
|
||||||
- id: WeaponEgun
|
- id: WeaponDisabler
|
||||||
- id: DoorRemoteService
|
- id: DoorRemoteService
|
||||||
- id: ClothingNeckGoldmedal
|
- id: ClothingNeckGoldmedal
|
||||||
- id: RubberStampHop
|
- id: RubberStampHop
|
||||||
|
|||||||
@@ -1,23 +1,24 @@
|
|||||||
- type: vendingMachineInventory
|
- type: vendingMachineInventory
|
||||||
id: SalvageEquipmentInventory
|
id: SalvageEquipmentInventory
|
||||||
startingInventory:
|
startingInventory:
|
||||||
WeaponProtoKineticAccelerator: 2
|
WeaponProtoKineticAccelerator: 4 # WD start
|
||||||
WeaponCrusher: 1
|
|
||||||
WeaponCrusherDagger: 2
|
|
||||||
HandheldGPSBasic: 4
|
|
||||||
Crowbar: 2
|
|
||||||
BoxMRE: 3
|
|
||||||
Pickaxe: 4
|
Pickaxe: 4
|
||||||
SurvivalKnife: 2
|
|
||||||
OreBag: 4
|
OreBag: 4
|
||||||
|
SeismicCharge: 3
|
||||||
|
SurvivalKnife: 2
|
||||||
|
Crowbar: 2
|
||||||
Flare: 10
|
Flare: 10
|
||||||
FlashlightLantern: 3
|
FlashlightLantern: 3
|
||||||
Floodlight: 2
|
Floodlight: 2
|
||||||
RadioHandheld: 4
|
PowerCellMedium: 3
|
||||||
InflatableWallStack1: 20
|
HandheldGPSBasic: 3
|
||||||
InflatableDoorStack1: 10
|
RadioHandheld: 3
|
||||||
SeismicCharge: 3
|
|
||||||
FultonBeacon: 2
|
FultonBeacon: 2
|
||||||
Fulton: 3
|
Fulton: 3
|
||||||
|
BoxInflatable: 2
|
||||||
|
BoxMRE: 2
|
||||||
|
ClothingEyesGlassesMeson: 3
|
||||||
|
ClothingPouchMedical: 2
|
||||||
|
ClothingPouchGrenade: 2 # WD end
|
||||||
emaggedInventory:
|
emaggedInventory:
|
||||||
JetpackBlackFilled: 1
|
JetpackBlackFilled: 1
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
materialComposition:
|
materialComposition:
|
||||||
Cloth: 35
|
Cloth: 35
|
||||||
- type: StaticPrice
|
- type: StaticPrice
|
||||||
price: 200
|
price: 50
|
||||||
- type: EmitSoundOnPickup
|
- type: EmitSoundOnPickup
|
||||||
sound:
|
sound:
|
||||||
path: /Audio/White/Web/walk1.ogg
|
path: /Audio/White/Web/walk1.ogg
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
- Patch
|
- Patch
|
||||||
- Healing
|
- Healing
|
||||||
- type: StaticPrice
|
- type: StaticPrice
|
||||||
price: 250
|
price: 75
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -50,8 +50,6 @@
|
|||||||
- SmokeOnTrigger
|
- SmokeOnTrigger
|
||||||
- ClusterGrenade
|
- ClusterGrenade
|
||||||
- ExplodeOnTrigger
|
- ExplodeOnTrigger
|
||||||
- type: StaticPrice
|
|
||||||
price: 125
|
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -118,7 +116,7 @@
|
|||||||
maxFillLevels: 1
|
maxFillLevels: 1
|
||||||
fillBaseName: fill-
|
fillBaseName: fill-
|
||||||
- type: StaticPrice
|
- type: StaticPrice
|
||||||
price: 110
|
price: 40
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -165,5 +163,5 @@
|
|||||||
slots: [pocket, belt]
|
slots: [pocket, belt]
|
||||||
quickEquip: false
|
quickEquip: false
|
||||||
- type: StaticPrice
|
- type: StaticPrice
|
||||||
price: 150
|
price: 70
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
sprite: Clothing/Shoes/Boots/jackboots.rsi
|
sprite: Clothing/Shoes/Boots/jackboots.rsi
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingShoesBaseButcherable
|
parent: ClothingShoesMilitaryBase # WD
|
||||||
id: ClothingShoesBootsSalvage
|
id: ClothingShoesBootsSalvage
|
||||||
name: salvage boots
|
name: salvage boots
|
||||||
description: Steel-toed salvage boots for salvaging in hazardous environments.
|
description: Steel-toed salvage boots for salvaging in hazardous environments.
|
||||||
@@ -31,7 +31,6 @@
|
|||||||
sprite: Clothing/Shoes/Boots/explorer.rsi
|
sprite: Clothing/Shoes/Boots/explorer.rsi
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Shoes/Boots/explorer.rsi
|
sprite: Clothing/Shoes/Boots/explorer.rsi
|
||||||
- type: Matchbox
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingShoesBaseButcherable
|
parent: ClothingShoesBaseButcherable
|
||||||
|
|||||||
@@ -30,10 +30,10 @@
|
|||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseBlueprint
|
parent: BaseBlueprint
|
||||||
id: BlueprintSeismicCharge
|
id: BlueprintMiningDrillDiamond # WD start
|
||||||
name: seismic charge blueprint
|
name: diamond mining drill blueprint
|
||||||
description: A blueprint with a schematic of a seismic charge. It can be inserted into an autolathe.
|
description: A blueprint with a schematic of a diamond mining drill. It can be inserted into an autolathe.
|
||||||
components:
|
components:
|
||||||
- type: Blueprint
|
- type: Blueprint
|
||||||
providedRecipes:
|
providedRecipes:
|
||||||
- SeismicCharge
|
- MiningDrillDiamond # WD end
|
||||||
|
|||||||
@@ -26,6 +26,8 @@
|
|||||||
loop: true
|
loop: true
|
||||||
volume: -10
|
volume: -10
|
||||||
maxDistance: 5
|
maxDistance: 5
|
||||||
|
- type: StaticPrice # WD
|
||||||
|
price: 5 # WD
|
||||||
|
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Objects/Misc/flare.rsi
|
sprite: Objects/Misc/flare.rsi
|
||||||
|
|||||||
@@ -113,4 +113,4 @@
|
|||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: boxwide
|
- state: boxwide
|
||||||
- state: shellslug
|
- state: shelltranquilizer # WD
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
- ShellShotgun
|
- ShellShotgun
|
||||||
- type: CartridgeAmmo
|
- type: CartridgeAmmo
|
||||||
count: 6
|
count: 6
|
||||||
spread: 28
|
spread: 14 # WD
|
||||||
soundEject:
|
soundEject:
|
||||||
collection: ShellEject
|
collection: ShellEject
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -125,9 +125,9 @@
|
|||||||
ammo:
|
ammo:
|
||||||
reagents:
|
reagents:
|
||||||
- ReagentId: ChloralHydrate
|
- ReagentId: ChloralHydrate
|
||||||
Quantity: 5
|
Quantity: 12 # WD
|
||||||
- type: SolutionTransfer
|
- type: SolutionTransfer
|
||||||
maxTransferAmount: 7
|
maxTransferAmount: 15 # WD
|
||||||
- type: SpentAmmoVisuals
|
- type: SpentAmmoVisuals
|
||||||
state: "practice"
|
state: "practice"
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
- type: Projectile
|
- type: Projectile
|
||||||
damage:
|
damage:
|
||||||
types:
|
types:
|
||||||
Piercing: 35
|
Piercing: 32 # WD
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: BulletMagnumPractice
|
id: BulletMagnumPractice
|
||||||
|
|||||||
@@ -10,7 +10,10 @@
|
|||||||
- type: Projectile
|
- type: Projectile
|
||||||
damage:
|
damage:
|
||||||
types:
|
types:
|
||||||
Piercing: 40
|
Piercing: 50 # WD start
|
||||||
|
- type: StaminaDamageOnCollide
|
||||||
|
ignoreResistances: false
|
||||||
|
damage: 80 # WD end
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: PelletShotgunBeanbag
|
id: PelletShotgunBeanbag
|
||||||
|
|||||||
@@ -420,6 +420,7 @@
|
|||||||
layers:
|
layers:
|
||||||
- state: chronobolt
|
- state: chronobolt
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
|
- type: GatheringProjectile # WD
|
||||||
- type: Projectile
|
- type: Projectile
|
||||||
impactEffect: BulletImpactEffectKinetic
|
impactEffect: BulletImpactEffectKinetic
|
||||||
damage:
|
damage:
|
||||||
@@ -487,9 +488,10 @@
|
|||||||
damage:
|
damage:
|
||||||
types:
|
types:
|
||||||
Blunt: 0
|
Blunt: 0
|
||||||
|
Structural: 15 # WD
|
||||||
# Short lifespan
|
# Short lifespan
|
||||||
- type: TimedDespawn
|
- type: TimedDespawn
|
||||||
lifetime: 0.4
|
lifetime: 0.2 # WD
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseBullet
|
parent: BaseBullet
|
||||||
|
|||||||
@@ -64,3 +64,25 @@
|
|||||||
Brute: 3
|
Brute: 3
|
||||||
types:
|
types:
|
||||||
Structural: 12
|
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
|
- WeaponForceGun
|
||||||
- WeaponLaserSvalinn
|
- WeaponLaserSvalinn
|
||||||
- WeaponProtoKineticAccelerator
|
- WeaponProtoKineticAccelerator
|
||||||
|
- WeaponAdvancedProtoKineticAccelerator # WD start
|
||||||
|
- SeismicCharge
|
||||||
|
- WeaponCrusherDagger
|
||||||
|
- WeaponCrusher # WD end
|
||||||
- WeaponTetherGun
|
- WeaponTetherGun
|
||||||
- WeaponGrapplingGun
|
- WeaponGrapplingGun
|
||||||
- ClothingBackpackHolding
|
- ClothingBackpackHolding
|
||||||
|
|||||||
@@ -212,6 +212,51 @@
|
|||||||
Glass: 500
|
Glass: 500
|
||||||
Silver: 100
|
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
|
- type: latheRecipe
|
||||||
id: WeaponTetherGun
|
id: WeaponTetherGun
|
||||||
result: WeaponTetherGun
|
result: WeaponTetherGun
|
||||||
|
|||||||
@@ -18,11 +18,11 @@
|
|||||||
# If they get spammed make it cost silver.
|
# If they get spammed make it cost silver.
|
||||||
|
|
||||||
- type: latheRecipe
|
- type: latheRecipe
|
||||||
id: SeismicCharge
|
id: MiningDrillDiamond # WD start
|
||||||
result: SeismicCharge
|
result: MiningDrillDiamond
|
||||||
category: Tools
|
category: Tools
|
||||||
completetime: 5 # WD Edit from 1 to 5
|
completetime: 5
|
||||||
materials:
|
materials:
|
||||||
Plastic: 1500
|
Steel: 1500
|
||||||
Steel: 100
|
Plastic: 1000
|
||||||
Silver: 100
|
Silver: 200 # WD end
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
recipeUnlocks:
|
recipeUnlocks:
|
||||||
- WeaponProtoKineticAccelerator
|
- WeaponProtoKineticAccelerator
|
||||||
- ShuttleGunKineticCircuitboard
|
- ShuttleGunKineticCircuitboard
|
||||||
|
- WeaponCrusherDagger # WD
|
||||||
# These are roundstart but not replenishable for salvage
|
# These are roundstart but not replenishable for salvage
|
||||||
|
|
||||||
- type: technology
|
- type: technology
|
||||||
@@ -109,6 +110,22 @@
|
|||||||
|
|
||||||
# Tier 2
|
# 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
|
- type: technology
|
||||||
id: LightweightMagnets
|
id: LightweightMagnets
|
||||||
name: research-technology-lightweight-magnets
|
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"
|
color: "#f6ce64"
|
||||||
# long range since otherwise it'd defeat the point of a handheld radio independent of telecomms
|
# long range since otherwise it'd defeat the point of a handheld radio independent of telecomms
|
||||||
longRange: true
|
longRange: true
|
||||||
|
|
||||||
|
- type: radioChannel # WD start
|
||||||
|
id: DeepSpace
|
||||||
|
name: chat-radio-deepspace
|
||||||
|
frequency: 1501
|
||||||
|
longRange: true # WD end
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"license": "CC-BY-SA-3.0",
|
"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": {
|
"size": {
|
||||||
"x": 32,
|
"x": 32,
|
||||||
"y": 32
|
"y": 32
|
||||||
@@ -203,6 +203,9 @@
|
|||||||
{
|
{
|
||||||
"name": "shelltoy"
|
"name": "shelltoy"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "shelltranquilizer"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "ziptie"
|
"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
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||