Merge remote-tracking branch 'WD-core/master' into upstream-core

This commit is contained in:
BIGZi0348
2025-03-05 23:14:23 +03:00
51 changed files with 753 additions and 62 deletions

View 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);
}
}

View 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>

View 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);
};
}
}

View File

@@ -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
}

View File

@@ -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;

View 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();
}

View 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;
}
}

View File

@@ -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

View File

@@ -0,0 +1,4 @@
ent-WeaponAdvancedProtoKineticAccelerator = продвинутый автоматический протокинетический акселератор
.desc = Сокращённо - ПАПА. Обладает повышенной скорострельностью и эффективно добывает породы любых типов. Крайне опасен в бою.
research-technology-industrial-mining = Промышленная добыча

View File

@@ -0,0 +1,7 @@
ent-ComputerDeepSpaceCom = консоль дальней связи
.desc = Дальняя космическая связь обеспечивает быстрый обмен сообщениями почти на любом расстоянии. Корпорация слышит!
ent-DeepSpaceComComputerCircuitboard = печатная плата пульта дальней связи
.desc = Печатная плата для пульта дальней космической связи.
chat-radio-deepspace = Дальняя связь

View File

@@ -0,0 +1,5 @@
deepspacecom-menu-title = Пульт дальней космической связи
deepspacecom-channel-label = Частота:
deepspacecom-button-text-mic = Микрофон
deepspacecom-button-text-speaker = Динамик
deepspacecom-flavor-text = Поиск сигналов...

View File

@@ -2,7 +2,7 @@ ent-BaseBlueprint = чертёж
.desc = Чертёж какого-то устройства. Его можно поместить в автолат.
ent-BlueprintFulton = чертёж фултона
.desc = Чертёж со схемой фултона. Его можно поместить в автолат.
ent-BlueprintSeismicCharge = чертёж сейсмического заряда
.desc = Чертеж со схемой сейсмического заряда. Его можно поместить в автолат.
ent-BlueprintMiningDrillDiamond = чертёж алмазного шахтёрского бура
.desc = Чертеж со схемой алмазного бура. Его можно поместить в автолат.
ent-BlueprintSoapOmega = чертёж омега мыла
.desc = Чертеж со схемой омега мыла. Его можно поместить в автолат.

View File

@@ -10,3 +10,5 @@ ent-Pickaxe = кирка
.desc = Зазубренная до совершенства, чтобы вбивать её в камни.
ent-MiningDrill = шахтёрский бур
.desc = Мощный инструмент, служащий для быстрого бурения горных пород.
ent-MiningDrillDiamond = шахтёрский бур с алмазным сверлом
.desc = Более эффективная версия шахтёрского бура.

View File

@@ -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

View File

@@ -102,7 +102,7 @@
- id: BoxID
- id: BoxHeadset
- id: IDComputerCircuitboard
- id: WeaponEgun
- id: WeaponDisabler
- id: DoorRemoteService
- id: ClothingNeckGoldmedal
- id: RubberStampHop

View File

@@ -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

View File

@@ -14,7 +14,7 @@
materialComposition:
Cloth: 35
- type: StaticPrice
price: 200
price: 50
- type: EmitSoundOnPickup
sound:
path: /Audio/White/Web/walk1.ogg

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -26,6 +26,8 @@
loop: true
volume: -10
maxDistance: 5
- type: StaticPrice # WD
price: 5 # WD
- type: Sprite
sprite: Objects/Misc/flare.rsi

View File

@@ -113,4 +113,4 @@
- type: Sprite
layers:
- state: boxwide
- state: shellslug
- state: shelltranquilizer # WD

View File

@@ -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"

View File

@@ -7,7 +7,7 @@
- type: Projectile
damage:
types:
Piercing: 35
Piercing: 32 # WD
- type: entity
id: BulletMagnumPractice

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -382,6 +382,10 @@
- WeaponForceGun
- WeaponLaserSvalinn
- WeaponProtoKineticAccelerator
- WeaponAdvancedProtoKineticAccelerator # WD start
- SeismicCharge
- WeaponCrusherDagger
- WeaponCrusher # WD end
- WeaponTetherGun
- WeaponGrapplingGun
- ClothingBackpackHolding

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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"
},

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

View File

@@ -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
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -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
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -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
]
]
}
]
}