Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
34b1131
Cherry pick #4099
Sage-Jones Oct 10, 2025
9cfb0c9
ik30 nerf (#4189)
Proxysseia Aug 15, 2025
e1ddd10
Give mantis locker mindbreaker pills (#4207)
kotobdev Aug 17, 2025
49ca76b
Fix ghosts vismasks and make colossi see the monument (#4226)
NoElkaTheGod Aug 18, 2025
207fd04
Port shields on backslots from Harmony (#4193)
kotobdev Aug 19, 2025
6fd2045
Make Glimmer Look Beautiful (#4130)
kotobdev Aug 20, 2025
3112a54
Minor cult audio tweaks (#4213)
NoElkaTheGod Aug 20, 2025
7221517
fixes IPCs standing on sleep/death (#4232)
0vrseer Aug 20, 2025
b25a2d7
Removed IPC restriction from invalid markings (#4140)
0vrseer Aug 20, 2025
8d927cf
emergency crash bugfix ops (#4247)
kotobdev Aug 20, 2025
818fd9f
Make some swing animations nicer (#4235)
NoElkaTheGod Aug 21, 2025
b308235
Make malign rifts actually (kinda) dangerous (#4216)
NoElkaTheGod Aug 22, 2025
7234485
Bugfix station beacons not showing up on map (#4211)
cmorley191 Aug 24, 2025
6db676e
Factorio - add a power toggle link port for the robotic arm. (#4117)
AlgisAlphonse Aug 26, 2025
8531444
Cherry pick #4277
Sage-Jones Oct 10, 2025
353666f
cherry pick half of #4196
Sage-Jones Oct 10, 2025
8c80b86
Reenable chaplain antag (#4290)
AeraAuling Aug 30, 2025
ef7371b
Actually make LPO's crew monitor actually show people on the station …
Elpersonn Aug 31, 2025
9a03b12
glimmer shader bugfix 2 electric boogaloo (#4348)
kotobdev Sep 8, 2025
626f986
Fix limb healing on evenhealing (#4315)
SirWarock Sep 8, 2025
b78ab63
Fix Book of Mysteries casting (#4367)
EmberAstra Sep 10, 2025
2c96570
allow ghosting if mind swap or telegnosis goes wrong (#4393)
cmorley191 Sep 24, 2025
3a80dfa
Reduce oni slowdown by clothes (#4364)
SirWarock Oct 2, 2025
512d9aa
Merge pull request #4464 from SirWarock/Fix-Ammo-Counter-on-Shotguns
TehFlaminTaco Oct 2, 2025
5355866
Merge pull request #4375 from AeraAuling/anomaliteportstuff
TehFlaminTaco Oct 3, 2025
509b1d5
Merge pull request #4329 from mnva0/nosurgerypainwhennumb
TehFlaminTaco Oct 3, 2025
934323f
Merge pull request #4318 from SirWarock/Fix-Loto-Oil
TehFlaminTaco Oct 3, 2025
d889105
Merge pull request #4424 from SirWarock/Buff-Augments
TehFlaminTaco Oct 3, 2025
61c3554
Make cigars and cigarettes grindable (#3931)
Eternally-Confused Oct 3, 2025
71ccab2
Buff kobolds (#4336)
kotobdev Oct 3, 2025
b420dfc
Added Scanners to Modules (#1268) (#4319)
SirWarock Oct 3, 2025
3cf0957
Merge pull request #4274 from AeraAuling/fixarchiviststuff
Sage-Jones Oct 10, 2025
a211b1b
Librarians get their own headsets
Sage-Jones Oct 10, 2025
69c06a3
Share Recipes between Exosuit Fabricator and Medical Techfab (#4312)
SirWarock Oct 3, 2025
591de60
Fix blunt stamina double dipping (#4419)
SirWarock Oct 3, 2025
0817fce
Fixes a typo in the revenant entry of the guidebook (#4482)
Lonestar827 Oct 3, 2025
223e4f6
Fixes not being able to toggle combat mode while incapacitated (#4385)
Burzah Oct 5, 2025
ae427e5
Shadow Damage (#4440)
Sage-Jones Oct 10, 2025
27f0032
CD port: Allows [mono] to be used in records (#4451)
mnva0 Oct 6, 2025
6444796
fix IPC not having humanoid emotes (#4445)
cmorley191 Oct 6, 2025
6f34615
Ports the pressure release valve and construction atmos device layeri…
NicoSGF64 Oct 6, 2025
b9733f1
Makes tape recorders signal-compatible (#4437)
mnva0 Oct 6, 2025
7aa47cc
Adds lights to more hologram projections (#4377)
mnva0 Oct 6, 2025
d208ec6
Woe, Super Synths be upon ye. (#4462)
StarboundSolaris Oct 6, 2025
48ff303
Super synth is for licensed musicians only, too much power
Sage-Jones Oct 10, 2025
830b1a4
Midi Agony (#4463)
StarboundSolaris Oct 6, 2025
4436307
Cherrypick: "Make more objects spray paintable" and related PRs (#4480)
mnva0 Oct 6, 2025
0d938ac
Give secoffs lethals in their guns roundstart (#4359)
kotobdev Oct 7, 2025
3b0382a
Fix Super Synths not being able to be played while being worn on the …
StarboundSolaris Oct 7, 2025
053c44c
Removed broken Cosmic Cult event subscriptions
Sage-Jones Oct 25, 2025
d833f79
Removed duplicate damage modifiers
Sage-Jones Oct 25, 2025
0fcc00d
Removed non functional hood
Sage-Jones Oct 25, 2025
928105c
Fixed shadow anomalite by commenting night vision
Sage-Jones Oct 25, 2025
75a6828
removed duplicate spray painter styles
Sage-Jones Oct 25, 2025
793ae0c
Potentially fixed structure xenoartifact
Sage-Jones Oct 25, 2025
2c1ed35
Reverted librarian icon change, woops
Sage-Jones Oct 25, 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