## About The Pull Request
The slight imperfections of this were getting to me whenever I was
testing stuff that required me have two different clients intializied so
let's just retinker it a bit to look nicer without losing any
functionality of the messaging service (as well as some explicit UX
stuff to make it look less syntactically incorrect)
Before:
<img width="781" height="65" alt="image"
src="https://github.com/user-attachments/assets/bcd0c44b-8f88-40f6-8d14-ea280f00e084"
/>
After (colon missing at time of screenshot, fixed later):
<img width="821" height="42" alt="image"
src="https://github.com/user-attachments/assets/a0627414-3896-424d-8eb1-250dcfaacf70"
/>
Logged Version:
```
[2025-12-06 06:29:26.969] ADMINPRIVATE: MULTIKEY: Connecting player San7890 has the same !BOTH! IP 127.0.0.1 and Computer ID *********** as thesan7890 (no longer logged in) in the current round
```
## Why It's Good For The Game
Cleaner message that is still eyecatching for admins, uses string
concats so it's less painful to modify in the future as well as reduce
duplicated code while overall maintaining a pretty nice flow of message
generation rather than be scattered all over the place.
## Changelog
🆑
admin: Multikeying Notice Messages have taken on a new form factor but
should still furnish the same information.
/🆑
## About The Pull Request
Allows users to edit color matrix filters and layered filters'
transforms through Filterrific, which were the two last unsupported
filter fields. The menus are pretty minimal, but you shouldn't be
touching them if you don't know what you're doing anyways.
https://github.com/user-attachments/assets/e87447f3-e5d6-4f6c-a8e4-bf50a1d5fa79
## Why It's Good For The Game
Makes our tooling actually work
## Changelog
🆑
admin: Implemented color matrix and transform modification support for
Filterrific
/🆑
## About The Pull Request
this converts the dependency on byondstorage, which is laggy (due to
being a large json file written to disk every 10 seconds), to using
indexeddb, like we did prior to 516. this is achieved by using an iframe
to give us a persistent origin, as the web is evil and has invented
same-origin policy
https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy.
this also hosts the iframe page on the github pages site for a secondary
repository (see tgstation/byond-client-storage) so it works OOTB without
requiring server operators to setup the webroot cdn (which i don't
believe is configured on the tg servers at the moment)
however, if a server is using the webroot cdn, it will use that instead
of github pages
you could also host the iframe.html page on a separate host from your
cdn or github pages if you wanted to
if we can't access the configured cdn at all, it failovers to use
byondstorage anyway, if the internet stops working and you still want
your chat history to save, i guess
## Why It's Good For The Game
saving this enormous json file is laggy, and this solution would fix
https://github.com/tgstation/tgstation/issues/89988 and fix
https://github.com/tgstation/tgstation/issues/92035
i am open to other solutions, but this does seem to require the least
amount of external dependencies of posed solutions
## Changelog
🆑
fix: you should experience less stutters every 10 seconds
server: server operators can now configure an alternative storage domain
for clientside data storage, read the example configuration for more
/🆑
---------
Co-authored-by: harryob <55142896+harryob@users.noreply.github.com>
## About The Pull Request
Adds `GLOB.unrecommended_builds`, for byond build which are broken for
the end user in some way, but not in a way that warrants outright
blacklisting players from connecting with them
Looks like this (Ignore the number I changed it for testing purposes)
<img width="493" height="267" alt="image"
src="https://github.com/user-attachments/assets/d31636e8-a106-4d13-a8fa-aee6a50c6d27"
/>
Uses this system for the new byond build, 1670+, which breaks text
rendering
Also adds 1670+ to the list of builds to warn on compile
## Why It's Good For The Game
1670 broke the compilation step, probably permanently
Whether we will fix this or flip a pragma or w/e remains to be seen, but
until then we can tell people to compile an earlier version
1670 also broke the user experience, causing map text to show up as
really big. This will be fixed in an upcoming version
<https://www.byond.com/forum/post/2983385>
## Changelog
🆑 Melbert
qol: If you are on Byond 516.1670+, you will get an alert on login that
your build is less than functional
/🆑
## About The Pull Request
#91419 removed change_view in mob login for un-inited clients, which
leaves 1 second delayed fit_viewport calls from
attempt_auto_fit_viewport as the only way for new clients to adjust
their viewport from the default square (which is also only ran once all
subsystems finish initializing).
Just calling apply() after applying our prefs to the view_size is enough
to make it work, also we don't need the said second delay in
attempt_auto_fit_viewport anymore either.
## Changelog
🆑
fix: Fixed delayed viewport fitting on server join/init
/🆑
## About The Pull Request
Tin.
Runtiming in this spot is really not good and may have potentially
caused a crash for one of our rounds.
Not sure how it happened exactly, but it costs nothing to be safe here.
<img width="696" height="38" alt="image"
src="https://github.com/user-attachments/assets/c56c5c18-8ae0-428f-a407-b2e3de79d87a"
/>
## Why It's Good For The Game
Let clients finish their destruction
## Changelog
Not player-facing
## About The Pull Request
Ok there's a lot here, sorry bout that.
- Cleaned up the permissions panel backend pretty signficantly
- Added some extra security measures to said code, mostly proc call
checks
- Properly implemented filtering code jordie wrote years and years ago
for permissions logs
- Cleaned up the permissions ui generally, more bars, nicer lookin
stuff, etc
- Fixed the Management panel's relationship with combined roles, and
renamed it to Housekeeping. Its display is expanded too.
- Added tracking to rank datums on where exactly they came from
- Added a new tab to the permissions panel which allows the modification
and deletion of ranks
- Beefed up rank modification to try and avoid accidential temp rank
additions to the db
I'm doing my best to avoid perms escalation issues, tho they are always
possible right.
Also, got mad at some query cleanup handling, did a pass on it. this
isn't nearly all of em, but it's some.
## Why It's Good For The Game
I realized there is no way to, in game, cleanly edit/create ranks, and
that the way the existing system worked was quite opaque.
I'm trying to fix that here. It does mean potentially opening up DB rank
deletion/modification to bad actors, but frankly I am not overly worried
about that. Admin modification has always been a vulnerability so like.
Here's a video with my changes (mostly, it's lightly outdated)
https://file.house/XqME7KWKk0ULj4ZUkJ5reg==.mp4
## Changelog
🆑
refactor: Fucked with admin rank setup very slightly, please yell at me
if anything is wrong.
admin: Updated the permissions panel to be a good bit more user
friendly, added rank management support to it.
server: I've added code that gives the game modification/deletion perms
for the rank table, be made aware.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Ok there's a lot here, sorry bout that.
- Cleaned up the permissions panel backend pretty signficantly
- Added some extra security measures to said code, mostly proc call
checks
- Properly implemented filtering code jordie wrote years and years ago
for permissions logs
- Cleaned up the permissions ui generally, more bars, nicer lookin
stuff, etc
- Fixed the Management panel's relationship with combined roles, and
renamed it to Housekeeping. Its display is expanded too.
- Added tracking to rank datums on where exactly they came from
- Added a new tab to the permissions panel which allows the modification
and deletion of ranks
- Beefed up rank modification to try and avoid accidential temp rank
additions to the db
I'm doing my best to avoid perms escalation issues, tho they are always
possible right.
Also, got mad at some query cleanup handling, did a pass on it. this
isn't nearly all of em, but it's some.
## Why It's Good For The Game
I realized there is no way to, in game, cleanly edit/create ranks, and
that the way the existing system worked was quite opaque.
I'm trying to fix that here. It does mean potentially opening up DB rank
deletion/modification to bad actors, but frankly I am not overly worried
about that. Admin modification has always been a vulnerability so like.
Here's a video with my changes (mostly, it's lightly outdated)
https://file.house/XqME7KWKk0ULj4ZUkJ5reg==.mp4
## Changelog
🆑
refactor: Fucked with admin rank setup very slightly, please yell at me
if anything is wrong.
admin: Updated the permissions panel to be a good bit more user
friendly, added rank management support to it.
server: I've added code that gives the game modification/deletion perms
for the rank table, be made aware.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
This is my second contribution to the move towards removing the stat
panel (first one being https://github.com/tgstation/tgstation/pull/90572
)
This moves the info buttons at the top right of the game's screen
(Changelog, Rules, Wiki, etc) to the Escape menu, except for Fullscreen
which is now a pref instead. This means you can set Fullscreen to be on
permanently and every launch will automatically fullscreen you (the
viewport will be a little off because it only fixes it once
initialization is complete). This follows through rounds and auto
updates if you set your game to fullscreen with the OOC button or F11,
so players will learn about the pref after playing a round with
fullscreen enabled.
What the game now looks like
be a newscaster
https://github.com/user-attachments/assets/7871a226-1e0b-410d-a690-88f3616bebb0
This is something I wanted to do since the Esc menu was added but just
never got around to it, but here it is.
These buttons don't warrant being in the player's face 24/7 and since
we've want to remove the stat panel and this has to be somewhere, I
thought it would be a better fit in the Escape menu. It helps make the
Esc menu the tool players use to access their OOC tools and overall I
think improves the appearance of the game's screen to something more
like an actual game would look like, especially when our comparison is
SS14.
🆑
qol: Info buttons previously at the top right of your screen (Changelog,
wiki, forums) is now in the Escape menu.
qol: Fullscreen is now a preferences and will follow you through rounds.
/🆑
## About The Pull Request
Add watermark to unvetted clients, add warning to unvetted clients when
attempting to join the game, eventually locking out access on September
1st. Add warning text to examine for unvetted clients
## Why It's Good For The Game
The time has come
## Proof Of Testing
Tested it extensively last night
## Changelog
🆑 Bubberstation Staff
add: The clock is ticking.
/🆑
## About The Pull Request
This is my second contribution to the move towards removing the stat
panel (first one being https://github.com/tgstation/tgstation/pull/90572
)
This moves the info buttons at the top right of the game's screen
(Changelog, Rules, Wiki, etc) to the Escape menu, except for Fullscreen
which is now a pref instead. This means you can set Fullscreen to be on
permanently and every launch will automatically fullscreen you (the
viewport will be a little off because it only fixes it once
initialization is complete). This follows through rounds and auto
updates if you set your game to fullscreen with the OOC button or F11,
so players will learn about the pref after playing a round with
fullscreen enabled.
What the game now looks like
##### Alt ideas for sprites: Changelog can be a newspaper and Forums can
be a newscaster
https://github.com/user-attachments/assets/7871a226-1e0b-410d-a690-88f3616bebb0
This is something I wanted to do since the Esc menu was added but just
never got around to it, but here it is.
## Why It's Good For The Game
These buttons don't warrant being in the player's face 24/7 and since
we've want to remove the stat panel and this has to be somewhere, I
thought it would be a better fit in the Escape menu. It helps make the
Esc menu the tool players use to access their OOC tools and overall I
think improves the appearance of the game's screen to something more
like an actual game would look like, especially when our comparison is
SS14.
## Changelog
🆑
qol: Info buttons previously at the top right of your screen (Changelog,
wiki, forums) is now in the Escape menu.
qol: Fullscreen is now a preferences and will follow you through rounds.
/🆑
## About The Pull Request
Currently the button to open a map in webmap is tied to a config entry,
which would then take the name of the map being played and get the link
to that, however for cases like new/tested/admin uploaded maps where
there is no webmap available, this would still have a link to a url that
doesn't exist.
Instead, we'll make the webmap link be in ``maps.txt``, same as
feedbacklink.
## Why It's Good For The Game
Explained in the about section, this prevents webmaps appearing for maps
that aren't supposed to have a webmap link available.
## Changelog
Nothing player-facing, webmaps aren't currently used (afaik) currently
cause they're broken for tg codebases.
## About The Pull Request
Currently the button to open a map in webmap is tied to a config entry,
which would then take the name of the map being played and get the link
to that, however for cases like new/tested/admin uploaded maps where
there is no webmap available, this would still have a link to a url that
doesn't exist.
Instead, we'll make the webmap link be in ``maps.txt``, same as
feedbacklink.
## Why It's Good For The Game
Explained in the about section, this prevents webmaps appearing for maps
that aren't supposed to have a webmap link available.
## Changelog
Nothing player-facing, webmaps aren't currently used (afaik) currently
cause they're broken for tg codebases.
This PR started with the idea of adding support for map feedback
threads, which I added to the roundend report, escape menu, and stat
panel. To do this though I had to make pretty annoying changes to the
stat panel and had to touch every single time something to the stat
panel was added, so since we now have a way to have links in the stat
panel I thought of taking full advantage of it and add some QOL.
AIs can now track their borgs by clicking their status on the stat panel
https://github.com/user-attachments/assets/1789dc46-5d12-48e9-bb8d-d3278aa19639
With Melbert's comment, I added another stat panel entry that directs
you to the Webmap page, which currently seems to be a little messed up
(https://github.com/AffectedArc07/SS13WebMap/issues/41 &
https://github.com/AffectedArc07/SS13WebMap/issues/42) but if they get
fixed this would be a swag asf feature
Feedback threads was a suggestion from a player and is fully in control
of admins as an optional thing, and while we still have stat panel I
think it's nice to be able to take advantage of its features.
🆑
admin: Admins can now link a URL for maps, used to give feedback on said
maps. Accessible through the roundend report, escape menu, and stat
panel.
qol: AIs can track their borgs by clicking on them in the stat panel.
qol: You can now directly go to the webmap of maps from the stat panel
(assuming it's set in config).
/🆑
## About The Pull Request
left over debug line that someone ...? forgot about
## Why It's Good For The Game
scalies:
## Changelog
🆑
fix: removes an excess debug line
/🆑
## About The Pull Request
various uis (tgui-say, vv, player panel, anything using
`/datum/browser`) would not correct for dpi. they now do
we also have a preference to allow you to have smaller windows that are
zoomed out, instead of larger windows that are not zoomed
#### of note, this does require a small change to the usage of css
viewport units, like `vh` and `vw`. they need to be fed through the
`vp(100vw)` function first. there was only one such unit in the codebase
on 4k monitor with 200% scaling:
fixed (pref on default)

pref disabled

## Why It's Good For The Game
516 fucked with uis again and this unfucks them a bit
## Changelog
🆑
qol: there's a new UI preference called UI scale which allows people
that use windows scaling to have their UIs original size with the
contents zoomed out, instead of the default, which is the UIs being
larger with the contents "normal" size
fix: various UIs did not respect windows scaling, they now do
/🆑
---------
Co-authored-by: harryob <55142896+harryob@users.noreply.github.com>
## About The Pull Request
This PR started with the idea of adding support for map feedback
threads, which I added to the roundend report, escape menu, and stat
panel. To do this though I had to make pretty annoying changes to the
stat panel and had to touch every single time something to the stat
panel was added, so since we now have a way to have links in the stat
panel I thought of taking full advantage of it and add some QOL.
AIs can now track their borgs by clicking their status on the stat panel
https://github.com/user-attachments/assets/1789dc46-5d12-48e9-bb8d-d3278aa19639
With Melbert's comment, I added another stat panel entry that directs
you to the Webmap page, which currently seems to be a little messed up
(https://github.com/AffectedArc07/SS13WebMap/issues/41 &
https://github.com/AffectedArc07/SS13WebMap/issues/42) but if they get
fixed this would be a swag asf feature
##### Code bounty for Ezel/Improvedname
## Why It's Good For The Game
Feedback threads was a suggestion from a player and is fully in control
of admins as an optional thing, and while we still have stat panel I
think it's nice to be able to take advantage of its features.
## Changelog
🆑
admin: Admins can now link a URL for maps, used to give feedback on said
maps. Accessible through the roundend report, escape menu, and stat
panel.
qol: AIs can track their borgs by clicking on them in the stat panel.
qol: You can now directly go to the webmap of maps from the stat panel
(assuming it's set in config).
/🆑
## About The Pull Request
left over debug line that someone ...? forgot about
## Why It's Good For The Game
scalies:
## Changelog
🆑
fix: removes an excess debug line
/🆑
## About The Pull Request
various uis (tgui-say, vv, player panel, anything using
`/datum/browser`) would not correct for dpi. they now do
we also have a preference to allow you to have smaller windows that are
zoomed out, instead of larger windows that are not zoomed
#### of note, this does require a small change to the usage of css
viewport units, like `vh` and `vw`. they need to be fed through the
`vp(100vw)` function first. there was only one such unit in the codebase
on 4k monitor with 200% scaling:
fixed (pref on default)

pref disabled

## Why It's Good For The Game
516 fucked with uis again and this unfucks them a bit
## Changelog
🆑
qol: there's a new UI preference called UI scale which allows people
that use windows scaling to have their UIs original size with the
contents zoomed out, instead of the default, which is the UIs being
larger with the contents "normal" size
fix: various UIs did not respect windows scaling, they now do
/🆑
---------
Co-authored-by: harryob <55142896+harryob@users.noreply.github.com>
Ports the helpers from
https://github.com/BeeStation/BeeStation-Hornet/pull/12240
This should fix some more of the 516 issues that I've seen while giving
a quick check through the code
The remaining browse should work now.
Also fixing another sass warning while being on it.
## About The Pull Request
## Why It's Good For The Game
## Changelog
🆑
fix: tgui say 516 will no longer change channels when the button is used
to drag it
fix: tgui say 516 will no longer leak radio messages into the wrong
channel
fix: runechat flickering when faded up messages fade out
/🆑
Converts `/datum/player_details` into `/datum/persistent_client`.
Persistent Clients persist across connections. The only time a mob's
persistent client will change is if the ckey it's bound to logs into a
different mob, or the mob is deleted (duh).
Also adds PossessByPlayer() so that transfering mob control is cleaner
and makes more immediate sense if you don't know byond-fu.
Clients are an abstract representation of a connection that can be
dropped at almost any moment so putting things that should be stable to
access at any time onto an undying object is ideal. This allows for
future expansions like abstracting away client.screen and managing
everything cleanly.
Part 1 by grungussuss: https://github.com/tgstation/tgstation/pull/87529

gives players more control over how loud they want certain sounds to be
🆑 Rengan
sound: the volume that vox, admin sound, insturments play at can now be
tweaked in preferences, check your preferences!
sound: Elevator now uses ambience volume preference, jukeboxes uses
instrument volume preference and end of round musics uses admin music
volume preference.
/🆑
Ports the helpers from
https://github.com/BeeStation/BeeStation-Hornet/pull/12240
This should fix some more of the 516 issues that I've seen while giving
a quick check through the code
The remaining browse should work now.
Also fixing another sass warning while being on it.
## About The Pull Request
## Why It's Good For The Game
## Changelog
🆑
fix: tgui say 516 will no longer change channels when the button is used
to drag it
fix: tgui say 516 will no longer leak radio messages into the wrong
channel
fix: runechat flickering when faded up messages fade out
/🆑
## About The Pull Request
Converts `/datum/player_details` into `/datum/persistent_client`.
Persistent Clients persist across connections. The only time a mob's
persistent client will change is if the ckey it's bound to logs into a
different mob, or the mob is deleted (duh).
Also adds PossessByPlayer() so that transfering mob control is cleaner
and makes more immediate sense if you don't know byond-fu.
## Why It's Good For The Game
Clients are an abstract representation of a connection that can be
dropped at almost any moment so putting things that should be stable to
access at any time onto an undying object is ideal. This allows for
future expansions like abstracting away client.screen and managing
everything cleanly.
## About The Pull Request
Part 1 by grungussuss: https://github.com/tgstation/tgstation/pull/87529

## Why It's Good For The Game
gives players more control over how loud they want certain sounds to be
## Changelog
🆑 Rengan
sound: the volume that vox, admin sound, insturments play at can now be
tweaked in preferences, check your preferences!
sound: Elevator now uses ambience volume preference, jukeboxes uses
instrument volume preference and end of round musics uses admin music
volume preference.
/🆑
## About The Pull Request
This bumps the minimum compile version to 515.1642, due to [this BYOND
bug](https://www.byond.com/forum/post/2936624) where byondapi can
corrupt vars, and dreamluau is called regardless of whether a Lua script
is actually being ran (mostly via `DREAMLUAU_CLEAR_REF_USERDATA`), so
it's best to get rid of any potential of this bug triggering.
## Why It's Good For The Game
mrrrp mrrrp mrrrowww
## Changelog
No user-facing changes
## About The Pull Request
toggle_fullscreen:
collapsed 11 winsets into 3
is-maximised now is true for both sets, to ensure that the screen doesnt
sometimes go tiny when this is being toggled (was reported on tgmc) (and
yes this doesnt impact resizing)
now uses src instead of fickle usr
added a comment for a better implementation once its possible
toggle_status_bar
now uses src instead of fickle usr
p.s when will someone add prefs for this lmao
## Changelog
🆑
fix: fixed a case that could make untoggling fullscreen make your window
small
code: Cleaned up some fullscreen and status bar toggle code to function
better
/🆑
---------
Co-authored-by: TiviPlus <572233640+TiviPlus@users.noreply.com>
## About The Pull Request
so i discovered this downstream, but forgot to pr upstream til now, the
proper way to rebuild planemasters is `rebuild_hud`, not directly
calling `rebuild_plane_masters`
## Why It's Good For The Game
whoopsie breaking graphics is bad
## Changelog
🆑
fix: Fixed graphics getting screwed up when reconnecting with BYOND 515
after playing on BYOND 516.
/🆑
## About The Pull Request
Was just scrolling through the Paradise github since they seem to have
more work done for 516 to see if there's anything I can port over, found
this and thought why not.
Ports parts of https://github.com/ParadiseSS13/Paradise/pull/25105
Specifically, updaing all hrefs to use the internal ``byond://``, and
adding it to grep.
## Why It's Good For The Game
More work towards 516.
## Changelog
Nothing player-facing.
## About The Pull Request
Was investigating some stuff downstream related to undeleted SQL
queries, and these two queries were related.
thought it'd be best to make them not block
`/client/proc/set_client_age_from_db`, as the results are never checked
anyways, not even for errors.
I've added a new proc to SSdbcore, `FireAndForget` - takes the same
parameters as NewQuery, but instead of returning the query, it just
asynchronously executes and then deletes it.
## Why It's Good For The Game
less undeleted sql queries, less blocking. yay?
## Changelog
does this count as user-facing? unsure how i'd changelog this tbh
## About The Pull Request
This makes `/datum/player_details` properly track BYOND version and
build separately, as opposed to just the full version string.
Whenever a client logs in, and their BYOND version is 516, while their
previous version was 515, or vice versa, it'll set a newly added client
var, `rebuild_plane_masters`, to TRUE.
During the `COMSIG_MOB_LOGIN` signal handler of a mob's HUD
(`/datum/hud/proc/client_refresh`), it will check to see if
`rebuild_plane_masters` is TRUE - if so, it will set the appropriate
`relay_loc` of (based on client BYOND version) of its plane master
groups, and rebuild their plane masters.
## Why It's Good For The Game
Makes testing stuff across 515 and 516 easier, as your screen won't
break when switching between the two.
## Changelog
516 is _still_ in private alpha, so no user-facing changes.
## About The Pull Request

## Why It's Good For The Game
gives players more control over how loud they want certain sounds to be
## Changelog
🆑 grungussuss
sound: the volume that ship ambience, ambience, radio noise and
announcements play at can now be tweaked in preferences, check your
preferences!
/🆑
3591 individual conflicts
Update build.js
Update install_node.sh
Update byond.js
oh my fucking god
hat
slow
huh
holy shit
we all fall down
2 more I missed
2900 individual conflicts
2700 Individual conflicts
replaces yarn file with tg version, bumping us down to 2200-ish
Down to 2000 individual conflicts
140 down
mmm
aaaaaaaaaaaaaaaaaaa
not yt
575
soon
900 individual conflicts
600 individual conflicts, 121 file conflicts
im not okay
160 across 19 files
29 in 4 files
0 conflicts, compiletime fix time
some minor incap stuff
missed ticks
weird dupe definition stuff
missed ticks 2
incap fixes
undefs and pie fix
Radio update and some extra minor stuff
returns a single override
no more dupe definitions, 175 compiletime errors
Unticked file fix
sound and emote stuff
honk and more radio stuff