Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
611023a
Add `SharedMapSystem.GetFilledTileCount` (#6562)
Tayrtahn May 22, 2026
7bdec92
Update .gitignore to ignore C# Dev Kit cache (#6593)
slarticodefast May 25, 2026
0a648ab
More Cursor Usage in Controls (#6583)
Aeshus May 25, 2026
a79c6bb
Add Track StyleProperty to ScrollBar (#6559)
Aeshus May 26, 2026
6d52129
Update submodules for lscache gitignore
PJB3005 May 26, 2026
5ff8837
Use AsSpan for audio resource signatures (#6613)
metalgearsloth Jun 3, 2026
bd6b706
Small fix to doc comment (#6616)
adamsong Jun 4, 2026
94c20ca
Add scroll lock key (#6617)
Samuka-C Jun 4, 2026
338825c
Add Pure attr to EntityLookup bounds methods (#6622)
metalgearsloth Jun 9, 2026
51cdfb6
Add "hidden" console commands
PJB3005 Jun 18, 2026
ead6018
Add markup escaping Fluent functions
PJB3005 Jun 19, 2026
a1a03d9
Allow specifying tooltip in cmdlink tag
PJB3005 Jun 19, 2026
30cac6e
Add CommandParsing.EscapeCommand
PJB3005 Jun 19, 2026
a4f4275
Add IUserInterfaceManager.GetRootForMouse and Popup.OpenAtCursor
PJB3005 Jun 19, 2026
fbab678
Add `FormattedStringBuilder` for safely constructing markup with code.
PJB3005 Jun 20, 2026
1a09f17
Add HBox and VBox convenience types.
PJB3005 May 7, 2026
c191926
Track isLocal in user data (#6641)
Axionyxx Jun 20, 2026
f41b2d5
bump natives to 0.2.5
PJB3005 Jun 20, 2026
24da774
Release notes for c1919263f4604ad306a95a11f190d0e8ce3c7b4f
PJB3005 Jun 20, 2026
8af6068
Update release notes
PJB3005 Jun 20, 2026
7cfce43
Version: 277.1.0
PJB3005 Jun 20, 2026
931b2a0
Add trust scores for localhost@ and guest@ connections (#6642)
Axionyxx Jun 21, 2026
3105300
fix websocket no dispose (#6646)
Aidenkrz Jun 23, 2026
b8c946a
Release notes
PJB3005 Jun 24, 2026
f600a84
Version: 277.2.0
PJB3005 Jun 24, 2026
6712c4f
fix publish
Simyon264 Jun 25, 2026
2b63bfd
Update Lidgren.Network
DrSmugleaf Jun 25, 2026
d71a1cc
Release notes
DrSmugleaf Jun 25, 2026
f47f6b0
Version: 277.2.1
DrSmugleaf Jun 25, 2026
01ee260
try clean better this
Jul 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/publish-client.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ jobs:
mkdir "release/${{ steps.parse_version.outputs.version }}"
mv release/*.zip "release/${{ steps.parse_version.outputs.version }}"

- name: Upload files to Suns
- name: Upload files to Dropwig
uses: appleboy/scp-action@master
with:
host: suns.spacestation14.com
host: dropwig.playss14.com
username: robust-build-push
key: ${{ secrets.CENTCOMM_ROBUST_BUILDS_PUSH_KEY }}
source: "release/${{ steps.parse_version.outputs.version }}"
Expand All @@ -46,7 +46,7 @@ jobs:
- name: Update manifest JSON
uses: appleboy/ssh-action@master
with:
host: suns.spacestation14.com
host: dropwig.playss14.com
username: robust-build-push
key: ${{ secrets.CENTCOMM_ROBUST_BUILDS_PUSH_KEY }}
script: /home/robust-build-push/push.ps1 ${{ steps.parse_version.outputs.version }}
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,6 @@ MSBuild/Robust.Custom.targets
release/
Robust.Docfx/*-site
Robust.Docfx/api

# C# Dev Kit cache file
*.lscache
2 changes: 1 addition & 1 deletion Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
<PackageVersion Include="OpenTK.Audio.OpenAL" Version="4.9.4" />
<PackageVersion Include="OpenToolkit.Graphics" Version="4.0.0-pre9.1" />
<PackageVersion Include="Pidgin" Version="3.5.1" />
<PackageVersion Include="Robust.Natives" Version="0.2.3" />
<PackageVersion Include="Robust.Natives" Version="0.2.5" />
<PackageVersion Include="Robust.Natives.Zstd" Version="0.1.1-zstd1.5.7" />
<PackageVersion Include="Robust.Natives.Cef.win-x64" Version="$(CefNativeVersion)" />
<PackageVersion Include="Robust.Natives.Cef.linux-x64" Version="$(CefNativeVersion)" />
Expand Down
2 changes: 1 addition & 1 deletion Lidgren.Network/Lidgren.Network
12 changes: 8 additions & 4 deletions MSBuild/Robust.Engine.Version.props
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
<Project>
<!-- This file automatically reset by Tools/version.py -->
<PropertyGroup><Version>277.0.0</Version></PropertyGroup>
</Project>
<Project>

<!-- This file automatically reset by Tools/version.py -->

<PropertyGroup><Version>277.2.1-leak</Version></PropertyGroup>

</Project>

2 changes: 1 addition & 1 deletion NetSerializer
Submodule NetSerializer updated 1 files
+3 −0 .gitignore
57 changes: 57 additions & 0 deletions RELEASE-NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,63 @@ END TEMPLATE-->

*None yet*

## 277.2.1-leak

## 277.2.1

### Bugfixes

* Fixed a bug in Lidgren.Network HandleReleasedFragment that could cause out of memory errors.


## 277.2.0

### New features

* Local and guest trust scores are now assigned via the `auth.localtrust` and `auth.guesttrust` CVars.

### Bugfixes

* Fixed exceptions related to WebSocket transfer system.


## 277.1.0

### New features

* Console commands can now be "hidden" by prefixing them with `_`.
* Add `ESCAPE()` and `ESCAPE-PARAM()` localization functions, for escaping text for markup formatting.
* The `[cmdlink /]` tag can now have a tooltip specified with the optional "title" attribute.
* Added `CommandParsing.EscapeCommand()` for *formatting* command strings easily.
* Added `IUserInterfaceManager.GetRootForMouse()`.
* Added `Popup.OpenAtCursor()`.
* Added `FormattedStringBuilder` for safely constructing markup with code.
* Added `VBox` and `HBox` convenience types for more concisely construct `BoxContainer`s.
* Added `IsLocal` to `NetUserData`.
* Add `SharedMapSystem.GetFilledTileCount()`
* Add a `track` style property for scroll bars.
* Added `ScrollLock` key.

### Bugfixes

* Fixes override properties in `WrapContainer` not being respected properly.
* Fix `BoxContainer.SeparationOverride` not being respected properly and not invalidating layout.
* Fixed swapped arguments being passed through in various `FindGridsIntersecting` overloads.
* Fixed a doc comment in `LocalizationManager`.

### Other

* Add Pure attributes to the EntityLookup bounds methods
* Bump `Robust.Natives` to `0.2.5`.
* Minor performance improvement in `IsHardCollidable()`.
* Remove an outdated paragraph from `[DependencyAttribute]` documentation related to `readonly` fields.
* More stock controls use alternative cursor shapes where appropriate.
* Minor performance improvement to audio loading.

### Internal

* Added `.lscache` to `.gitignore`.


## 277.0.0

Expand Down
1 change: 1 addition & 0 deletions Resources/Locale/en-US/input.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ input-key-MouseButton7 = Mouse 7
input-key-MouseButton8 = Mouse 8
input-key-MouseButton9 = Mouse 9
input-key-CapsLock = Caps Lock
input-key-ScrollLock = Scroll Lock

input-key-LSystem-win = Left Win
input-key-RSystem-win = Right Win
Expand Down
1 change: 1 addition & 0 deletions Resources/Locale/pt-BR/input.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ input-key-MouseButton7 = Mouse 7
input-key-MouseButton8 = Mouse 8
input-key-MouseButton9 = Mouse 9
input-key-CapsLock = Caps Lock
input-key-ScrollLock = Scroll Lock

input-key-LSystem-win = Left Win
input-key-RSystem-win = Right Win
Expand Down
2 changes: 1 addition & 1 deletion Robust.Client/Console/ClientConsoleHost.Completions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ private Task<CompletionResult> CalcCompletions(List<string> args, string argStr,
// Typing out command name, handle this ourselves.
var cmdOptions = CompletionResult.FromOptions(
AvailableCommands.Values
.Where(c => CanExecute(c.Command))
.Where(c => CanExecute(c.Command) && !IsCommandHidden(c))
.OrderBy(c => c.Command)
.Select(c => new CompletionOption(c.Command, c.Description)));

Expand Down
1 change: 1 addition & 0 deletions Robust.Client/Graphics/Clyde/Windowing/Sdl3.Key.cs
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@ static Sdl3WindowingImpl()
MapKey(SC.SDL_SCANCODE_F24, Key.F24);
MapKey(SC.SDL_SCANCODE_PAUSE, Key.Pause);
MapKey(SC.SDL_SCANCODE_CAPSLOCK, Key.CapsLock);
MapKey(SC.SDL_SCANCODE_SCROLLLOCK, Key.ScrollLock);

var keyMapReverse = new Dictionary<Key, SC>();

Expand Down
1 change: 1 addition & 0 deletions Robust.Client/Input/InputDevices.cs
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ public enum Key : byte
Pause,
World1,
CapsLock,
ScrollLock
}

public static bool IsMouseKey(this Key key)
Expand Down
7 changes: 7 additions & 0 deletions Robust.Client/Network/Transfer/ClientTransferManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,13 @@ public void Initialize()
_netManager.RegisterNetMessage<MsgTransferInit>(RxTransferInit, NetMessageAccept.Client | NetMessageAccept.Handshake);
_netManager.RegisterNetMessage<MsgTransferAckInit>();
_netManager.RegisterNetMessage<MsgTransferData>(RxTransferData, NetMessageAccept.Client | NetMessageAccept.Handshake);
_netManager.Disconnect += OnNetDisconnect;
}

private void OnNetDisconnect(object? sender, NetDisconnectedArgs e)
{
_transferImpl?.Dispose();
_transferImpl = null;
}

private async void RxTransferInit(MsgTransferInit message)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,12 @@ public override void Load(IDependencyCollection dependencies, ResPath path)
seekableStream.Seek(0, SeekOrigin.Begin);

var audioManager = dependencies.Resolve<IAudioInternal>();
if (signature[..OggSignature.Length].SequenceEqual(OggSignature))
if (signature.AsSpan()[..OggSignature.Length].SequenceEqual(OggSignature))
{
AudioStream = audioManager.LoadAudioOggVorbis(seekableStream, path.ToString());
}
else if (signature[..RiffSignature.Length].SequenceEqual(RiffSignature)
&& signature[WavSignatureStart..MaxSignatureLength].SequenceEqual(WavSignature))
else if (signature.AsSpan()[..RiffSignature.Length].SequenceEqual(RiffSignature)
&& signature.AsSpan()[WavSignatureStart..MaxSignatureLength].SequenceEqual(WavSignature))
{
AudioStream = audioManager.LoadAudioWav(seekableStream, path.ToString());
}
Expand Down
2 changes: 2 additions & 0 deletions Robust.Client/UserInterface/Controls/BaseButton.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ public bool Disabled

if (old != value)
{
DefaultCursorShape = Disabled ? CursorShape.NotAllowed : CursorShape.Pointer;
DrawModeChanged();
}
}
Expand Down Expand Up @@ -234,6 +235,7 @@ public bool MuteSounds
protected BaseButton()
{
MouseFilter = MouseFilterMode.Stop;
DefaultCursorShape = Disabled ? CursorShape.NotAllowed : CursorShape.Pointer;
}

protected virtual void DrawModeChanged()
Expand Down
6 changes: 6 additions & 0 deletions Robust.Client/UserInterface/Controls/HBox.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace Robust.Client.UserInterface.Controls;

/// <summary>
/// Convenience type to describe a horizontal <see cref="BoxContainer"/>.
/// </summary>
public sealed class HBox : BoxContainer;
26 changes: 26 additions & 0 deletions Robust.Client/UserInterface/Controls/ItemList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -595,16 +595,42 @@ protected internal override void MouseMove(GUIMouseMoveEventArgs args)
{
base.MouseMove(args);

DefaultCursorShape = CursorShape.Arrow;

for (var idx = 0; idx < _itemList.Count; idx++)
{
var item = _itemList[idx];
if (item.Region == null) continue;
if (!item.Region.Value.Contains(args.RelativePosition)) continue;

if (SelectMode != ItemListSelectMode.None)
{
if (item.Disabled)
{
DefaultCursorShape = CursorShape.NotAllowed;
}
else if (item.Selectable)
{
DefaultCursorShape = CursorShape.Pointer;
}
else
{
DefaultCursorShape = CursorShape.Arrow;
}
}

OnItemHover?.Invoke(new ItemListHoverEventArgs(idx, this));
break;
}
}

protected internal override void MouseExited()
{
base.MouseExited();

DefaultCursorShape = CursorShape.Arrow;
}

protected internal override void MouseWheel(GUIMouseWheelEventArgs args)
{
base.MouseWheel(args);
Expand Down
1 change: 1 addition & 0 deletions Robust.Client/UserInterface/Controls/MenuBar.cs
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,7 @@ public abstract class MenuTopButton : PanelContainer
public MenuTopButton(Menu menu)
{
MouseFilter = MouseFilterMode.Pass;
DefaultCursorShape = CursorShape.Pointer;
ChildMenu = menu;
}

Expand Down
29 changes: 29 additions & 0 deletions Robust.Client/UserInterface/Controls/Popup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,29 @@ public Popup()

public bool CloseOnEscape { get; set; } = true;

private bool _autoOrphan;

/// <summary>
/// Opens the popup at the location of the mouse.
/// </summary>
/// <remarks>
/// <para>
/// The popup is placed in the modal root, and is automatically sized.
/// </para>
/// <para>
/// The popup *automatically* gets removed from the popup root when it is hidden again.
/// Do not remove it manually!
/// </para>
/// </remarks>
public void OpenAtMouse()
{
_autoOrphan = true;
var root = UserInterfaceManager.GetRootForMouse();
root.ModalRoot.AddChild(this);

Open(UIBox2.FromDimensions(UserInterfaceManager.MousePositionScaled.Position, Vector2.One));
}

public virtual void Open(UIBox2? box = null, Vector2? altPos = null, Vector2? altPosUp = null)
{
if (Visible)
Expand Down Expand Up @@ -72,6 +95,12 @@ protected internal override void ModalRemoved()

Visible = false;
OnPopupHide?.Invoke();

if (_autoOrphan)
{
Orphan();
_autoOrphan = false;
}
}

protected override Vector2 MeasureOverride(Vector2 availableSize)
Expand Down
19 changes: 19 additions & 0 deletions Robust.Client/UserInterface/Controls/ScrollBar.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ namespace Robust.Client.UserInterface.Controls
{
public abstract class ScrollBar : Range
{
public const string StylePropertyTrack = "track";
public const string StylePropertyGrabber = "grabber";
public const string StylePseudoClassHover = "hover";
public const string StylePseudoClassGrabbed = "grabbed";
Expand Down Expand Up @@ -45,6 +46,7 @@ protected ScrollBar(OrientationMode orientation)
ReservesSpace = true;

_orientation = orientation;
DefaultCursorShape = CursorShape.Pointer;
}

public bool IsAtEnd
Expand Down Expand Up @@ -80,6 +82,9 @@ protected override void FrameUpdate(FrameEventArgs args)

protected internal override void Draw(DrawingHandleScreen handle)
{
var trackStyle = _getTrackStyleBox();
trackStyle?.Draw(handle, PixelSizeBox, UIScale);

var styleBox = _getGrabberStyleBox();
styleBox?.Draw(handle, _getGrabberBox(), UIScale);
}
Expand Down Expand Up @@ -127,11 +132,19 @@ protected internal override void KeyBindUp(GUIBoundKeyEventArgs args)

protected internal override void MouseMove(GUIMouseMoveEventArgs args)
{
DefaultCursorShape = CursorShape.Arrow;

if (_isHovered || _grabData != null)
{
DefaultCursorShape = CursorShape.Pointer;
}

if (_grabData == null)
{
var box = _getGrabberBox();
_isHovered = box.Contains(args.RelativePixelPosition);
_updatePseudoClass();

return;
}

Expand Down Expand Up @@ -193,6 +206,12 @@ private float _getGrabberBoxMinSize()
return null;
}

[System.Diagnostics.Contracts.Pure]
private StyleBox? _getTrackStyleBox()
{
return StylePropertyDefault<StyleBox?>(StylePropertyTrack, null);
}

[System.Diagnostics.Contracts.Pure]
private float _getOrientationSize()
{
Expand Down
1 change: 1 addition & 0 deletions Robust.Client/UserInterface/Controls/Slider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ public StyleBox? GrabberStyleBoxOverride
public Slider()
{
MouseFilter = MouseFilterMode.Stop;
DefaultCursorShape = CursorShape.Pointer;

AddChild(new LayoutContainer
{
Expand Down
3 changes: 2 additions & 1 deletion Robust.Client/UserInterface/Controls/SplitContainer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ public SplitOrientation Orientation
set
{
_orientation = value;
_splitDragArea.DefaultCursorShape = Vertical ? CursorShape.VResize : CursorShape.HResize;
InvalidateMeasure();
}
}
Expand All @@ -185,7 +186,7 @@ public SplitContainer()
MouseFilter = MouseFilterMode.Stop;
AddChild(_splitDragArea);
_splitDragArea.Visible = _resizeMode != SplitResizeMode.NotResizable;
_splitDragArea.DefaultCursorShape = Vertical ? CursorShape.VResize : CursorShape.HResize;
_splitDragArea.DefaultCursorShape = Vertical ? CursorShape.VResize : CursorShape.HResize;
_splitDragArea.OnMouseUp += StopDragging;
_splitDragArea.OnMouseDown += StartDragging;
_splitDragArea.OnMouseMove += OnMove;
Expand Down
Loading
Loading