## About The Pull Request
Swaps us back to RSPack. I keep getting pings about this #91925, which I
can only guess is webpack related. That, and I don't want to just give
up on rspack, I was merely frustrated with it while fixing bun builds.
## Why It's Good For The Game
Less javascript. Puts us back on our last build tool. Might fix the html
entity issue
We can also run the config in ts which I think is sweet
## Changelog
## About The Pull Request
Atomized PR from converting us to biome. This converts all cases where
we're using `let` but it's never reassigned. This is considered a safe
fix
https://biomejs.dev/linter/rules/use-const/
## Command
Get [Biome](https://biomejs.dev/guides/manual-installation/) (the
executable, at least)
`biome lint --write --only "useConst"`
## Why It's Good For The Game
Moving us to a simple linter/formatter and shaving off a number of
packages, tech debt
## Changelog
Should be absolutely zero effect on gameplay
## About The Pull Request
We can do that now with bun
This also sorts out some of the functions inside build.js into their own
helper file
## Why It's Good For The Game
Typing is objectively better
Code improvement
## Changelog
## About The Pull Request
Scripts should be ignored, as one was causing a (harmless) error
Fixes another bun download issue on machines that don't have avx2
instruction by adding the -baseline tag
https://bun.sh/docs/installation#cpu-requirements-and-baseline-builds
## Why It's Good For The Game
Fixes#91699
## Changelog
## About The Pull Request
Swaps out node & yarn in favor of [bun](https://bun.sh/)

sub tasks
- [x] add bun setup script
- [x] fix tgui-dev-server (bun glob is different)
- [x] set juke to run bun
- [x] remove all yarn stuff
- [x] convert all tests from vitest to bun
- [x] fight with CI/tgs
## Why It's Good For The Game
Yarn has served us over the years as our package manager but the method
it bundles dependencies has lead to issues and setbacks, notably needing
to wait on rspack support, but more recently in trying to switch to
biome
1. I can add in packages that do not need these workarounds, like god
intended
2. We won't need to [keep around
sdks](https://yarnpkg.com/getting-started/editor-sdks) which rely on
yarn to even publish
3. We're not committing the yarn cache or .pnp file, which kind of
defeats the purpose
4. Native typescript support and testing
5. Because it'd be cool
## Caveats
Rspack was throwing errors on TGS while doing this. I needed to switch
back to webpack/swc, which seems to work flawlessly. It was too tiring
for anyone involved to debug and this was the simplest route. It adds a
completely negligible amount of time to build. It might even resolve
some issues elsewhere.
Making this switch extends that very first setup time! I'm working on
cutting it down, but as of right now, it takes about 80 seconds just for
TGUI to download all the packages. Afterwards, it's the same.
## Changelog
Prettier (an auto formatter) is set to only run within the tgui folder
currently. This removes that limitation, allowing it to automatically
format all supported files in the repo (.js, .html, .yml
[etc](https://prettier.io/docs/))
I made a few exceptions for bundled and generated files
I'm of the opinion that code should look uniform and am lazy enough to
want CTRL-S to format files without having to think beyond that
## About The Pull Request
Long story short, tgfont is using a deprecated module that yarn is
complaining about. we're not only using the 2021 version, but
fantasticon library itself hasn't been updated in a year. it's
preventing me from trying to use other package managers. This updates it
to use another library.
<details>
<summary>before/after</summary>
notice the nanotrasen logo


</details>
## Why It's Good For The Game
less warnings. should look exactly the same.
## Changelog
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->
## About The Pull Request
Eliminate `_maps/skyrat/automapper` by moving relevant files into
`_maps/bubber/automapper` or applying the changes directly to the map
(for maps that we previously couldn't edit). Also edits `build.js` so
our automapper templates are tested during the compile all templates
workflow
## Why It's Good For The Game
Tidy, no dead useless files
## Proof Of Testing
I tested that it compiles and a few maps that I did direct changes to,
but it should be seamless
## Changelog
No player facing changes
- Change `_basemap.dm` so instead of templates being included when
`CIBUILDING` is defined, it's based off a separate `ALL_TEMPLATES` flag,
like `ALL_MAPS`, also made it not dependent on `ALL_MAPS` being defined,
so the two can run separately
- Changes build.js to generate `templates.dm` with the `ALL_TEMPLATES`
flag instead of `ALL_MAPS`
- Change the compile all maps workflow to have two separate jobs, one
that does `ALL_MAPS` and one that does `ALL_TEMPLATES`
The downstreams are starting to run out of memory during this workflow
because we have extra templates and maps, splitting it this way should
alleviate that problem (for rough, non-scientific numbers: Combined
workflow reaches 3.5GB and then crashes during holodeck templates using
bubber code, split like this the maps workflow reaches 1GB and finishes,
the templates workflow reaches 1.5GB and finishes)
No player facing changes
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->
## About The Pull Request
This wasn't updated with the switch to rspack
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->
## Why It's Good For The Game
TGUI now properly cleans up after itself with bin/clean
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->
## Changelog
<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and its effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->
## About The Pull Request
Old project that I have been waiting on for some time. We can swap out
our javascript bundler with a rust version. We still have webpack to
some extent because sass-loader requests it, but it's unused.
This was originally suggested by stylemistake years ago but it depended
on tgui using a modern browser #90397 and rspack supporting yarn pnp
https://github.com/web-infra-dev/rspack/pull/7639.
I want to also replace jest with vitest for this PR since it's deep
internals and no one else is really tinkering here. Drafting for now
## Why It's Good For The Game
Both of these tools are the drop in replacement of the modern decade
Makes the dev server borderline instant
https://rspack.dev/misc/faq#what-are-the-advantages-of-rspack-compared-to-webpack--swc-loader
## Changelog
## About The Pull Request
(https://github.com/tgstation/tgstation/pull/90295)
## Changelog
🆑 Y0SH1M4S73R
code: Any tgui message that would be too big to send to the server is
now split into chunks and sent in sequence. This fixes several issues,
such as...
fix: It is once again possible to save large amounts of text on paper at
once.
/🆑
---------
Co-authored-by: Y0SH1M4S73R <legoboyo@earthlink.net>
Co-authored-by: Y0SH1M4S73R <y0sh1m4s73r@gmail.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
## About The Pull Request
Yes, yes, the name might sound incorrect with that tag, but what I mean
here is that the icon cutter now checks and works in
`modular_zubbers/icons`! It won't pull templates from there, though, I'd
recommend creating a zubbers folder inside the `icon_templates` folder
instead.
Why did I do this? I have a mid-sized thing I'm working on in the
background, and I'd figure I'd PR anything that makes sense by itself to
reduce the upfront workload of maints when and if the time comes,
provided I get the prototype approved.
Also fixes the malformed moonrock file, I'm not sure exactly what was
wrong, but it had the wrong states in places? Not sure if anyone noticed
in-game.
## Why It's Good For The Game
Makes spriters less sad when they have to sprite icon smoothed stuff,
this is objectively a very good thing,
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>

</details>
## Changelog
Non player facing.
---------
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
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
Adds a new build parameter to skip icon cutting, this build parameter is
--skip-icon-cutter
This allows users like myself who don't have a working hypnagogic to
build the game when we are trying to debug code issues and don't care
about icons being cut or not
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
## About The Pull Request
Bumps the cutter to my latest
[version](https://github.com/spacestation13/hypnagogic/releases/tag/v3.1.0)
See there for the full CL but in short:
### Fixes/Polish
Error handling actually works now (it prints instead of crashing the
program)
Pretty colors in CLI when running it

Release files are more portable (Windows version requires less cruft bs
dlls, and the linux version targets musl instead of glibc, making it far
less platform dependent)
### Features
The cutter supports a new mode called Reconstruction, which takes a
target dmi and does a good faith effort to convert it back to input png
and toml files. This only works for default bitmasking, and it doesn't
ALWAYS work, but it's really powerful.
It's what I used to make my initial cutter pr here. See
[here](https://github.com/spacestation13/hypnagogic/blob/v3.1.0/examples/bitmask-slice-restore.toml)
for more detail.
* Makes the cutter lint actually work (#82913)
## About The Pull Request
Turns out I fucked up the os walk stuff so this never actually did
anything. (also a broken param but at this point does it even matter)
More then that, it wasn't build to handle being called by something not
in its folder. This fixed that, so the lint like actually works.
* Makes the cutter lint actually work
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
## About The Pull Request
Turns out I fucked up the os walk stuff so this never actually did
anything. (also a broken param but at this point does it even matter)
More then that, it wasn't build to handle being called by something not
in its folder. This fixed that, so the lint like actually works.
* Reverts 82333 (#82608)
## About The Pull Request
#82333
I was mistaken
The inconsistent indentation warnings are killing me
I tried
## Why It's Good For The Game
Developer sanity
* Reverts 82333
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
## About The Pull Request
#82333
I was mistaken
The inconsistent indentation warnings are killing me
I tried
## Why It's Good For The Game
Developer sanity
* Removes editorconfig and suggested extension (#82333)
## About The Pull Request
(Correct me if I'm wrong here but) this is made obsolete by prettier and
our vscode settings
## Why It's Good For The Game
Removes obsolete tools
## Changelog
N/A nothing player facing
* Removes editorconfig and suggested extension
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
## About The Pull Request
(Correct me if I'm wrong here but) this is made obsolete by prettier and
our vscode settings
## Why It's Good For The Game
Removes obsolete tools
## Changelog
N/A nothing player facing
* Makes the DM too old to build message better. (#82110)
Since the current wording was kinda ambiguous.
* Makes the DM too old to build message better.
---------
Co-authored-by: AnturK <AnturK@users.noreply.github.com>
* Adds better buildtool errors when using byond 514 or older (#81129)
Every time someone asks what -DCBT means i lose sleep so here's a
slightly invasive solution.
Build will now check if the dm version is at least 515.1597 (first
version with -D switch), at the cost of having to run dry dm.exe run.
* Adds better buildtool errors when using byond 514 or older
---------
Co-authored-by: AnturK <AnturK@users.noreply.github.com>
Every time someone asks what -DCBT means i lose sleep so here's a
slightly invasive solution.
Build will now check if the dm version is at least 515.1597 (first
version with -D switch), at the cost of having to run dry dm.exe run.
* Wait 10s in TGS build for ESBuild to exit (#80958)
ESBuild lingering after the build has caused issues with TGS on TGMC
(running Windows).
@ MrStonedOne test this please?
* Wait 10s in TGS build for ESBuild to exit
---------
Co-authored-by: Jordan Dominion <Cyberboss@users.noreply.github.com>
* Fix juke ignoring changes in dm files in the map folder (#80861)
juke refuses to compile dm if it thinks nothing changed.
juke doesn't have a way to bypass this and force a given target to
compile (this is a complaint for another repo)
There are dm files inside of this folder that are compiled in.
* Fix juke ignoring changes in dm files in the map folder
---------
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
juke refuses to compile dm if it thinks nothing changed.
juke doesn't have a way to bypass this and force a given target to
compile (this is a complaint for another repo)
There are dm files inside of this folder that are compiled in.
* Fixes .jsx missing from TguiTarget in build.js (#80630)
## About The Pull Request
.jsx files were recently switched to by TGstation, but because they were
not in TGUITarget, when you make changes to a .jsx file, it doesn't
recompile TGUI! Yippee!
I SPENT HALF AN HOUR RECOMPILING MY TGUI AND HAVING IT JUST NOT SHOW UP.
IT'S THE WORST. PLEASE FREE ME.
This PR fixes that
## Why It's Good For The Game
This has no game impact, it just fixes something that infuriates me. It
will save coders from the pain I had to go through before I realized
what was wrong.
## Changelog
🆑 ReturnToZender
fix: JSX files, when edited, cause TGUI to recompile on build
/🆑
* Fixes .jsx missing from TguiTarget in build.js
---------
Co-authored-by: ReturnToZender <donwest947@gmail.com>
## About The Pull Request
.jsx files were recently switched to by TGstation, but because they were
not in TGUITarget, when you make changes to a .jsx file, it doesn't
recompile TGUI! Yippee!
I SPENT HALF AN HOUR RECOMPILING MY TGUI AND HAVING IT JUST NOT SHOW UP.
IT'S THE WORST. PLEASE FREE ME.
This PR fixes that
## Why It's Good For The Game
This has no game impact, it just fixes something that infuriates me. It
will save coders from the pain I had to go through before I realized
what was wrong.
## Changelog
🆑 ReturnToZender
fix: JSX files, when edited, cause TGUI to recompile on build
/🆑
* Makes build tool use 515 -D argument instead of m.dme file (#80494)
Now that we require 515 to build, we can simplify the build process a
bit.
Leaves TGS define part in until TGS gets that functionality
* Makes build tool use 515 -D argument instead of m.dme file
---------
Co-authored-by: AnturK <AnturK@users.noreply.github.com>
* Icon Autoslicing (#79659)
Ok so you know all the dmis we have that are made to work with the
smoothing system? carpets, walls, etc.
The proper way to edit those is to convert them into a png with 5
"states' it in (one for 0 connections, one for horizontal, one for
vertical, one for all cardinals and one for all directions) and then
modify THAT, then run it through [the cutter
tool.](https://github.com/tgstation/icon-cutter)
But none ever does that, because we explain it fucking nowhere. So
instead, let's keep all those "base" files in the repo, alongside the
configs they work with, and "cut" the pngs into dmis as a part of the
build process.
I wrote a guide for how to interact with this system as a spriter, you
can find it
[HERE](https://github.com/LemonInTheDark/tgstation/blob/slice-the-sky/icons/Cutter.md).
[Adds a icon cutter build
task](https://github.com/tgstation/tgstation/commit/52143d2e96498de92421d516e0dd3f23936f88d8)
This relies on action ninja's hypnagogic (find more
[here](https://github.com/actioninja/hypnagogic)), a rust based icon
cutter.
It operates inline with the file structure, searching the codebase for
templates and resource files and compiling them down to dmis.
It can do way more then just bitmask stuff, but that is what we are
using it for rn.
Hope is to prevent for eternity the "I'm just gonna edit each of these
255 icon states that's how this carpet was made right?" meme, and allow
more expansive use of smoothing in future
[Adds a lint that ensures config files work
right](https://github.com/tgstation/tgstation/commit/21eeab9cf831c5fdac5a9b366478a9dab285c20c)
Checks to ensure they have a paired png and dmi, and also avoids issues
with uncompiled changes by double checking that nothing happens
before/after a cutter run
[Pulls all non smoothed states out of structures into bespoke
dmis](https://github.com/tgstation/tgstation/commit/a730e0cb47fc0a622fe265bccc296cec8d3a8fea)
This is required because the cutter cannot output named icon states,
only the actual cut icon
[Does something similar to
walls](https://github.com/tgstation/tgstation/commit/40780e9481103c8ee9e16538d1c2d0cdc124eeb9)
Moves reinforced walls decon stuff from their icon to a var on the type
and a set of states in the reinforced_states dmi
Moves falsewalls into their own dmi, this involved some changes to
gamecode to ensure falsewalls knew which dmi to use and what key.
Makes falsewalls display as such in editor rather then just walls
Moves smoothrock's gibonite overlays into their own file for similar
reasons
[Same thing different day
(Floors)](https://github.com/tgstation/tgstation/commit/9a3da3b69705278f39af109ac5ce86d27c2479a1)
Pulls bespoke floor icon states into their own file, splits up neon
carpets into multiple files to make cutting possible
[Actually adds the cut templates and their matching png
files](https://github.com/tgstation/tgstation/commit/1bd8920dc90d1ee1b934b6dadc39f2331854f5fa)
Not much to report here, outside of I changed the prefix for bamboo
walls to bamboo_wall so it works with false_walls

None should have to manually edit cut dmis. Ever.
Also this makes adding a new smoothed thing trivial, don't even need to
know what tool you're using to do it. V good v good.
Sets us up nicely for wallening's well, wall of sprites.
Some structural decisions, we are essentially committing build artifacts
here. That's the best way of handling it because otherwise mappers could
need to run build.bat before opening a map, and that is stupid!
🆑
refactor: (Almost) all smoothed icons can now be edited in their pre cut
forms
/🆑
* Update false_walls.dm
* Modular
* Fixes override for reinforced walls, removals skyrat edits in favor of overrides
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
## About The Pull Request
Ok so you know all the dmis we have that are made to work with the
smoothing system? carpets, walls, etc.
The proper way to edit those is to convert them into a png with 5
"states' it in (one for 0 connections, one for horizontal, one for
vertical, one for all cardinals and one for all directions) and then
modify THAT, then run it through [the cutter
tool.](https://github.com/tgstation/icon-cutter)
But none ever does that, because we explain it fucking nowhere. So
instead, let's keep all those "base" files in the repo, alongside the
configs they work with, and "cut" the pngs into dmis as a part of the
build process.
I wrote a guide for how to interact with this system as a spriter, you
can find it
[HERE](https://github.com/LemonInTheDark/tgstation/blob/slice-the-sky/icons/Cutter.md).
[Adds a icon cutter build
task](https://github.com/tgstation/tgstation/commit/52143d2e96498de92421d516e0dd3f23936f88d8)
This relies on action ninja's hypnagogic (find more
[here](https://github.com/actioninja/hypnagogic)), a rust based icon
cutter.
It operates inline with the file structure, searching the codebase for
templates and resource files and compiling them down to dmis.
It can do way more then just bitmask stuff, but that is what we are
using it for rn.
Hope is to prevent for eternity the "I'm just gonna edit each of these
255 icon states that's how this carpet was made right?" meme, and allow
more expansive use of smoothing in future
[Adds a lint that ensures config files work
right](https://github.com/tgstation/tgstation/commit/21eeab9cf831c5fdac5a9b366478a9dab285c20c)
Checks to ensure they have a paired png and dmi, and also avoids issues
with uncompiled changes by double checking that nothing happens
before/after a cutter run
[Pulls all non smoothed states out of structures into bespoke
dmis](https://github.com/tgstation/tgstation/commit/a730e0cb47fc0a622fe265bccc296cec8d3a8fea)
This is required because the cutter cannot output named icon states,
only the actual cut icon
[Does something similar to
walls](https://github.com/tgstation/tgstation/commit/40780e9481103c8ee9e16538d1c2d0cdc124eeb9)
Moves reinforced walls decon stuff from their icon to a var on the type
and a set of states in the reinforced_states dmi
Moves falsewalls into their own dmi, this involved some changes to
gamecode to ensure falsewalls knew which dmi to use and what key.
Makes falsewalls display as such in editor rather then just walls
Moves smoothrock's gibonite overlays into their own file for similar
reasons
[Same thing different day
(Floors)](https://github.com/tgstation/tgstation/commit/9a3da3b69705278f39af109ac5ce86d27c2479a1)
Pulls bespoke floor icon states into their own file, splits up neon
carpets into multiple files to make cutting possible
[Actually adds the cut templates and their matching png
files](https://github.com/tgstation/tgstation/commit/1bd8920dc90d1ee1b934b6dadc39f2331854f5fa)
Not much to report here, outside of I changed the prefix for bamboo
walls to bamboo_wall so it works with false_walls
## Why It's Good For The Game

None should have to manually edit cut dmis. Ever.
Also this makes adding a new smoothed thing trivial, don't even need to
know what tool you're using to do it. V good v good.
Sets us up nicely for wallening's well, wall of sprites.
Some structural decisions, we are essentially committing build artifacts
here. That's the best way of handling it because otherwise mappers could
need to run build.bat before opening a map, and that is stupid!
## Changelog
🆑
refactor: (Almost) all smoothed icons can now be edited in their pre cut
forms
/🆑