Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
feddd1b
Cherry pick #4099
Sage-Jones Oct 10, 2025
3ad589f
ik30 nerf (#4189)
Proxysseia Aug 15, 2025
36b1895
Give mantis locker mindbreaker pills (#4207)
kotobdev Aug 17, 2025
82f44f3
Fix ghosts vismasks and make colossi see the monument (#4226)
NoElkaTheGod Aug 18, 2025
12e357b
Make anti-psionic ammo not require bluespace (#4208)
kotobdev Aug 19, 2025
ae6c62d
Port shields on backslots from Harmony (#4193)
kotobdev Aug 19, 2025
90f9cb3
Make Glimmer Look Beautiful (#4130)
kotobdev Aug 20, 2025
27311d5
Minor cult audio tweaks (#4213)
NoElkaTheGod Aug 20, 2025
d506b34
Cosmic glyph rework: activation time and animations. (#4147)
Sage-Jones Oct 10, 2025
6535bb6
fixes IPCs standing on sleep/death (#4232)
0vrseer Aug 20, 2025
29313da
Removed IPC restriction from invalid markings (#4140)
0vrseer Aug 20, 2025
3dca90c
emergency crash bugfix ops (#4247)
kotobdev Aug 20, 2025
1381764
Make some swing animations nicer (#4235)
NoElkaTheGod Aug 21, 2025
3a8bde9
Make malign rifts actually (kinda) dangerous (#4216)
NoElkaTheGod Aug 22, 2025
907b4cb
Bugfix station beacons not showing up on map (#4211)
cmorley191 Aug 24, 2025
f1dd2a9
Factorio - add a power toggle link port for the robotic arm. (#4117)
AlgisAlphonse Aug 26, 2025
d88d8c5
Cherry pick #4277
Sage-Jones Oct 10, 2025
68b36b0
cherry pick half of #4196
Sage-Jones Oct 10, 2025
50c5edf
Reenable chaplain antag (#4290)
AeraAuling Aug 30, 2025
9bccbaa
Actually make LPO's crew monitor actually show people on the station …
Elpersonn Aug 31, 2025
3f43fed
glimmer shader bugfix 2 electric boogaloo (#4348)
kotobdev Sep 8, 2025
c892aa7
Fix limb healing on evenhealing (#4315)
SirWarock Sep 8, 2025
50bd126
Fix Book of Mysteries casting (#4367)
EmberAstra Sep 10, 2025
104526e
allow ghosting if mind swap or telegnosis goes wrong (#4393)
cmorley191 Sep 24, 2025
44cbb32
Reduce oni slowdown by clothes (#4364)
SirWarock Oct 2, 2025
c21d9b8
Merge pull request #4464 from SirWarock/Fix-Ammo-Counter-on-Shotguns
TehFlaminTaco Oct 2, 2025
84e5bdb
Merge pull request #4375 from AeraAuling/anomaliteportstuff
TehFlaminTaco Oct 3, 2025
fdeaeea
Merge pull request #4329 from mnva0/nosurgerypainwhennumb
TehFlaminTaco Oct 3, 2025
cb08464
Merge pull request #4318 from SirWarock/Fix-Loto-Oil
TehFlaminTaco Oct 3, 2025
a395d5f
Merge pull request #4424 from SirWarock/Buff-Augments
TehFlaminTaco Oct 3, 2025
a3f381d
Make cigars and cigarettes grindable (#3931)
Eternally-Confused Oct 3, 2025
1f5375f
Buff kobolds (#4336)
kotobdev Oct 3, 2025
0b7f7d6
Added Scanners to Modules (#1268) (#4319)
SirWarock Oct 3, 2025
550c246
Merge pull request #4274 from AeraAuling/fixarchiviststuff
Sage-Jones Oct 10, 2025
c1efafa
Librarians get their own headsets
Sage-Jones Oct 10, 2025
6fea1ec
Share Recipes between Exosuit Fabricator and Medical Techfab (#4312)
SirWarock Oct 3, 2025
4c2feb2
Fix blunt stamina double dipping (#4419)
SirWarock Oct 3, 2025
f33b356
Fixes a typo in the revenant entry of the guidebook (#4482)
Lonestar827 Oct 3, 2025
def2896
Port Cybersun Stealth Hardsuit (#4341)
kotobdev Oct 4, 2025
0bc7975
Fixes not being able to toggle combat mode while incapacitated (#4385)
Burzah Oct 5, 2025
625f65d
Shadow Damage (#4440)
Sage-Jones Oct 10, 2025
ef83ab4
CD port: Allows [mono] to be used in records (#4451)
mnva0 Oct 6, 2025
fe6cab1
fix IPC not having humanoid emotes (#4445)
cmorley191 Oct 6, 2025
a0b7cc9
Ports the pressure release valve and construction atmos device layeri…
NicoSGF64 Oct 6, 2025
dd5722e
Makes tape recorders signal-compatible (#4437)
mnva0 Oct 6, 2025
f3d83a9
Adds lights to more hologram projections (#4377)
mnva0 Oct 6, 2025
0065f69
Woe, Super Synths be upon ye. (#4462)
Solaris7518 Oct 6, 2025
dca16cb
Super synth is for licensed musicians only, too much power
Sage-Jones Oct 10, 2025
937d7b4
Midi Agony (#4463)
Solaris7518 Oct 6, 2025
c7fe17b
Cherrypick: "Make more objects spray paintable" and related PRs (#4480)
mnva0 Oct 6, 2025
a1306d4
Give secoffs lethals in their guns roundstart (#4359)
kotobdev Oct 7, 2025
bfb4a1b
Fix Super Synths not being able to be played while being worn on the …
Solaris7518 Oct 7, 2025
6a8671d
Porting fixes
Sage-Jones Oct 11, 2025
90b6f38
Didn't mean to swap that sprite
Sage-Jones Oct 11, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions Content.Client/Anomaly/Effects/ClientInnerBodySystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ private void OnCompShutdown(Entity<InnerBodyAnomalyComponent> ent, ref Component
if (!TryComp<SpriteComponent>(ent, out var sprite))
return;

var index = _sprite.LayerMapGet((ent.Owner, sprite), ent.Comp.LayerMap);
_sprite.LayerSetVisible((ent.Owner, sprite), index, false);
if (sprite.LayerMapTryGet(ent.Comp.LayerMap, out var index)) // imp. added this check to prevent errors on anomalites - not having it was bad code on upstream's part
sprite.LayerSetVisible(index, false);
}
}
31 changes: 31 additions & 0 deletions Content.Client/Atmos/EntitySystems/GasPressureRegulatorSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using Content.Shared.Atmos.EntitySystems;
using Content.Shared.Atmos.Piping.Binary.Components;

namespace Content.Client.Atmos.EntitySystems;

/// <summary>
/// Represents the client system responsible for managing and updating the gas pressure regulator interface.
/// Inherits from the shared system <see cref="SharedGasPressureRegulatorSystem"/>.
/// </summary>
public sealed partial class GasPressureRegulatorSystem : SharedGasPressureRegulatorSystem
{
public override void Initialize()
{
base.Initialize();

SubscribeLocalEvent<GasPressureRegulatorComponent, AfterAutoHandleStateEvent>(OnValveUpdate);
}

private void OnValveUpdate(Entity<GasPressureRegulatorComponent> ent, ref AfterAutoHandleStateEvent args)
{
UpdateUi(ent);
}

protected override void UpdateUi(Entity<GasPressureRegulatorComponent> ent)
{
if (UserInterfaceSystem.TryGetOpenUi(ent.Owner, GasPressureRegulatorUiKey.Key, out var bui))
{
bui.Update();
}
}
}
58 changes: 58 additions & 0 deletions Content.Client/Atmos/UI/GasPressureRegulatorBoundUserInterface.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
using Content.Shared.Atmos.Piping.Binary.Components;
using Content.Shared.IdentityManagement;
using Content.Shared.Localizations;
using Robust.Client.UserInterface;

namespace Content.Client.Atmos.UI;

public sealed class GasPressureRegulatorBoundUserInterface(EntityUid owner, Enum uiKey)
: BoundUserInterface(owner, uiKey)
{
private GasPressureRegulatorWindow? _window;

protected override void Open()
{
base.Open();

_window = this.CreateWindow<GasPressureRegulatorWindow>();

_window.SetEntity(Owner);

_window.ThresholdPressureChanged += OnThresholdChanged;

if (EntMan.TryGetComponent(Owner, out GasPressureRegulatorComponent? comp))
_window.SetThresholdPressureInput(comp.Threshold);

Update();
}

public override void Update()
{
if (_window == null)
return;

_window.Title = Identity.Name(Owner, EntMan);

if (!EntMan.TryGetComponent(Owner, out GasPressureRegulatorComponent? comp))
return;

_window.SetThresholdPressureLabel(comp.Threshold);
_window.UpdateInfo(comp.InletPressure, comp.OutletPressure, comp.FlowRate);
}

private void OnThresholdChanged(string newThreshold)
{
var sentThreshold = 0f;

if (UserInputParser.TryFloat(newThreshold, out var parsedNewThreshold) && parsedNewThreshold >= 0 &&
!float.IsInfinity(parsedNewThreshold))
{
sentThreshold = parsedNewThreshold;
}

// Autofill to zero if the user inputs an invalid value.
_window?.SetThresholdPressureInput(sentThreshold);

SendPredictedMessage(new GasPressureRegulatorChangeThresholdMessage(sentThreshold));
}
}
96 changes: 96 additions & 0 deletions Content.Client/Atmos/UI/GasPressureRegulatorWindow.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
<controls:FancyWindow xmlns="https://spacestation14.io"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
SetSize="345 380"
MinSize="345 380"
Title="{Loc gas-pressure-regulator-ui-title}"
Resizable="False">

<BoxContainer Orientation="Vertical">

<BoxContainer Orientation="Vertical" Margin="0 10 0 10">

<BoxContainer Orientation="Vertical" Align="Center">
<Label Text="{Loc gas-pressure-regulator-ui-outlet}" Align="Center" StyleClasses="LabelKeyText" />
<BoxContainer Orientation="Horizontal" HorizontalAlignment="Center">
<Label Name="OutletPressureLabel" Text="N/A" Margin="0 0 4 0" />
<Label Text="{Loc gas-pressure-regulator-ui-pressure-unit}" />
</BoxContainer>
</BoxContainer>

<BoxContainer Orientation="Horizontal" Align="Center">
<BoxContainer Orientation="Vertical" Align="Center" HorizontalExpand="True">
<Label Text="{Loc gas-pressure-regulator-ui-target}" Align="Right" StyleClasses="LabelKeyText" />
<BoxContainer Orientation="Horizontal" HorizontalAlignment="Right">
<Label Name="TargetPressureLabel" Margin="0 0 4 0" />
<Label Text="{Loc gas-pressure-regulator-ui-pressure-unit}" />
</BoxContainer>
</BoxContainer>

<ProgressBar Name="ToTargetBar" MaxValue="1" SetSize="5 75" Margin="10" Vertical="True" />

<SpriteView Name="EntityView" SetSize="64 64" Scale="3 3" OverrideDirection="North" Margin="0" />

<ProgressBar Name="FlowRateBar" MaxValue="1" SetSize="5 75" Margin="10" Vertical="True" />

<BoxContainer Orientation="Vertical" Align="Center" HorizontalExpand="True">
<Label Text="{Loc gas-pressure-regulator-ui-flow}" StyleClasses="LabelKeyText" />
<BoxContainer Orientation="Horizontal">
<Label Name="CurrentFlowLabel" Text="N/A" Margin="0 0 4 0" />
<Label Text="{Loc gas-pressure-regulator-ui-flow-rate-unit}" />
</BoxContainer>
</BoxContainer>
</BoxContainer>

<BoxContainer Orientation="Vertical" Align="Center" Margin="1">
<Label Text="{Loc gas-pressure-regulator-ui-inlet}" Align="Center" StyleClasses="LabelKeyText" />
<BoxContainer Orientation="Horizontal" HorizontalAlignment="Center">
<Label Name="InletPressureLabel" Text="N/A" Margin="0 0 4 0" />
<Label Text="{Loc gas-pressure-regulator-ui-pressure-unit}" />
</BoxContainer>
</BoxContainer>

</BoxContainer>

<!-- Controls to Set Pressure -->
<controls:StripeBack Name="SetPressureStripeBack" HorizontalExpand="True">
<BoxContainer Orientation="Vertical" HorizontalExpand="True" Margin="10 10 10 10">
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<LineEdit Name="ThresholdInput" HorizontalExpand="True" MinSize="70 0" />
<Button Name="SetThresholdButton" Text="{Loc gas-pressure-regulator-ui-set-threshold}"
Disabled="True" Margin="5 0 0 0" />
</BoxContainer>

<BoxContainer Orientation="Horizontal" HorizontalExpand="True" Margin="0 5 0 0">
<Button Name="Subtract1000Button" Text="{Loc gas-pressure-regulator-ui-subtract-1000}"
HorizontalExpand="True" Margin="0 2 2 0"
StyleClasses="OpenBoth" />
<Button Name="Subtract100Button" Text="{Loc gas-pressure-regulator-ui-subtract-100}"
HorizontalExpand="True" Margin="0 2 2 0"
StyleClasses="OpenBoth" />
<Button Name="Subtract10Button" Text="{Loc gas-pressure-regulator-ui-subtract-10}"
HorizontalExpand="True" Margin="0 2 2 0"
StyleClasses="OpenBoth" />
<Button Name="Add10Button" Text="{Loc gas-pressure-regulator-ui-add-10}" HorizontalExpand="True"
Margin="0 2 2 0"
StyleClasses="OpenBoth" />
<Button Name="Add100Button" Text="{Loc gas-pressure-regulator-ui-add-100}"
HorizontalExpand="True" Margin="0 2 2 0"
StyleClasses="OpenBoth" />
<Button Name="Add1000Button" Text="{Loc gas-pressure-regulator-ui-add-1000}"
HorizontalExpand="True" Margin="0 2 2 0"
StyleClasses="OpenBoth" />
</BoxContainer>

<BoxContainer Orientation="Horizontal" HorizontalExpand="True" Margin="0 5 0 0">
<Button Name="ZeroThresholdButton" Text="{Loc gas-pressure-regulator-ui-zero-threshold}"
HorizontalExpand="True" Margin="0 0 5 0" />
<Button Name="SetToCurrentPressureButton"
Text="{Loc gas-pressure-regulator-ui-set-to-current-pressure}" HorizontalExpand="True" />
</BoxContainer>
</BoxContainer>
</controls:StripeBack>

</BoxContainer>

</controls:FancyWindow>
129 changes: 129 additions & 0 deletions Content.Client/Atmos/UI/GasPressureRegulatorWindow.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
using System.Globalization;
using Content.Client.UserInterface.Controls;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Timing;

namespace Content.Client.Atmos.UI;

/// <summary>
/// Client-side UI for controlling a pressure regulator.
/// </summary>
[GenerateTypedNameReferences]
public sealed partial class GasPressureRegulatorWindow : FancyWindow
{
private float _flowRate;

public GasPressureRegulatorWindow()
{
RobustXamlLoader.Load(this);

ThresholdInput.OnTextChanged += _ => SetThresholdButton.Disabled = false;
SetThresholdButton.OnPressed += _ =>
{
ThresholdPressureChanged?.Invoke(ThresholdInput.Text ??= "");
SetThresholdButton.Disabled = true;
};

SetToCurrentPressureButton.OnPressed += _ =>
{
if (InletPressureLabel.Text != null)
{
ThresholdInput.Text = InletPressureLabel.Text;
}

SetThresholdButton.Disabled = false;
};

ZeroThresholdButton.OnPressed += _ =>
{
ThresholdInput.Text = "0";
SetThresholdButton.Disabled = false;
};

Add1000Button.OnPressed += _ => AdjustThreshold(1000);
Add100Button.OnPressed += _ => AdjustThreshold(100);
Add10Button.OnPressed += _ => AdjustThreshold(10);
Subtract10Button.OnPressed += _ => AdjustThreshold(-10);
Subtract100Button.OnPressed += _ => AdjustThreshold(-100);
Subtract1000Button.OnPressed += _ => AdjustThreshold(-1000);
return;

void AdjustThreshold(float adjustment)
{
if (float.TryParse(ThresholdInput.Text, out var currentValue))
{
ThresholdInput.Text = (currentValue + adjustment).ToString(CultureInfo.CurrentCulture);
SetThresholdButton.Disabled = false;
}
}
}

public event Action<string>? ThresholdPressureChanged;

/// <summary>
/// Sets the current threshold pressure label. This is not setting the threshold input box.
/// </summary>
/// <param name="threshold"> Threshold to set.</param>
public void SetThresholdPressureLabel(float threshold)
{
TargetPressureLabel.Text = threshold.ToString(CultureInfo.CurrentCulture);
}

/// <summary>
/// Sets the threshold pressure input field with the given value.
/// When the client opens the UI the field will be autofilled with the current threshold pressure.
/// </summary>
/// <param name="input">The threshold pressure value to autofill into the input field.</param>
public void SetThresholdPressureInput(float input)
{
ThresholdInput.Text = input.ToString(CultureInfo.CurrentCulture);
}

/// <summary>
/// Sets the entity to be visible in the UI.
/// </summary>
/// <param name="entity"></param>
public void SetEntity(EntityUid entity)
{
EntityView.SetEntity(entity);
}

/// <summary>
/// Updates the UI for the labels.
/// </summary>
/// <param name="inletPressure">The current pressure at the valve's inlet.</param>
/// <param name="outletPressure">The current pressure at the valve's outlet.</param>
/// <param name="flowRate">The current flow rate through the valve.</param>
public void UpdateInfo(float inletPressure, float outletPressure, float flowRate)
{
if (float.TryParse(TargetPressureLabel.Text, out var parsedfloat))
ToTargetBar.Value = inletPressure / parsedfloat;

InletPressureLabel.Text = float.Round(inletPressure).ToString(CultureInfo.CurrentCulture);
OutletPressureLabel.Text = float.Round(outletPressure).ToString(CultureInfo.CurrentCulture);
CurrentFlowLabel.Text = float.IsNaN(flowRate) ? "0" : flowRate.ToString(CultureInfo.CurrentCulture);
_flowRate = flowRate;
}

protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);

// Defines the flow rate at which the progress bar fills in one second.
// If the flow rate is >50 L/s, the bar will take <1 second to fill.
// If the flow rate is <50 L/s, the bar will take >1 second to fill.
const int barFillPerSecond = 50;

var maxValue = FlowRateBar.MaxValue;

// Increment the progress bar value based on elapsed time
FlowRateBar.Value += (_flowRate / barFillPerSecond) * args.DeltaSeconds;

// Reset the progress bar when it is fully filled
if (FlowRateBar.Value >= maxValue)
{
FlowRateBar.Value = 0f;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ protected override void Open()
// Begin DeltaV Additions - Find a station's grid instead of the current one for evil monitors
if (EntMan.HasComponent<LongRangeCrewMonitorComponent>(Owner))
{
gridUid = EntMan.System<LongRangeCrewMonitorSystem>().FindStationGridInMap(xform.MapID);
gridUid = EntMan.System<LongRangeCrewMonitorSystem>().FindLargestStationGridInMap(xform.MapID);
gridUid ??= xform.GridUid; // fall back to whatever grid this is on if it failed
}
// End DeltaV Additions
Expand Down
5 changes: 5 additions & 0 deletions Content.Client/PDA/PdaMenu.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@
<ContainerButton Name="StationTimeButton">
<RichTextLabel Name="StationTimeLabel" Access="Public"/>
</ContainerButton>
<!-- Begin DeltaV changes -->
<ContainerButton Name="CurrentDateButton">
<RichTextLabel Name="CurrentDateLabel" Access="Public"/>
</ContainerButton>
<!-- End DeltaV changes -->
<ContainerButton Name="StationAlertLevelInstructionsButton">
<RichTextLabel Name="StationAlertLevelInstructions" Access="Public"/>
</ContainerButton>
Expand Down
16 changes: 16 additions & 0 deletions Content.Client/PDA/PdaMenu.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public sealed partial class PdaMenu : PdaWindow
private string _stationName = Loc.GetString("comp-pda-ui-unknown");
private string _alertLevel = Loc.GetString("comp-pda-ui-unknown");
private string _instructions = Loc.GetString("comp-pda-ui-unknown");
private string _currentDate = Loc.GetString("comp-pda-ui-unknown"); // DeltaV - PDA date


private int _currentView;
Expand Down Expand Up @@ -125,6 +126,13 @@ public PdaMenu()
_clipboard.SetText(_instructions);
};

// Begin DeltaV additions
CurrentDateButton.OnPressed += _ =>
{
_clipboard.SetText(_currentDate);
};
// End DeltaV additions




Expand Down Expand Up @@ -187,6 +195,14 @@ public void UpdateState(PdaUpdateState state)
"comp-pda-ui-station-alert-level-instructions",
("instructions", _instructions))
);
// Begin DeltaV additions
if (state.PdaOwnerInfo.CurrentDate is { } curDate)
_currentDate = curDate.ToString("dd MMMM yyyy");
CurrentDateLabel.SetMarkup(Loc.GetString(
"comp-pda-ui-current-date",
("date", _currentDate)
));
// End DeltaV additions

AddressLabel.Text = state.Address?.ToUpper() ?? " - ";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ private void OnUnpressed(GUIBoundKeyEventArgs args)
if (_entities.TryGetComponent(Action, out AutoRechargeComponent? autoRecharge))
{
var chargeTimeRemaining = _sharedChargesSys.GetNextRechargeTime((Action.Value, actionCharges, autoRecharge));
chargesText.AddText(Loc.GetString($"{Environment.NewLine}Time Til Recharge: {chargeTimeRemaining}"));
chargesText.AddText(Loc.GetString($"{Environment.NewLine}Time Til Recharge: {chargeTimeRemaining.TotalSeconds:F1} seconds")); // DeltaV - Better formatted, easier to read.
}
}

Expand Down
Loading
Loading