safeguards against #94132
for downstreams, i've added a bat script in
tools\mapping_fix_template_noop_areas that'll iterate over all .dmm in a
given folder (set the relative path from the git root in the .bat)
---------
Fixes a bunch of shit getting left in space randomly, as well as flaky
tests.
<img width="1960" height="149"
alt="518075345-f003e38f-21ef-4ead-b233-f3a47d1aadcc"
src="https://github.com/user-attachments/assets/9a807cd8-0304-4737-bd91-da783c3c8bef"
/>
## About The Pull Request
Remake of:
- #79867
This adds a new map linter that checks that there are no walls spawning
inside of windows and vice versa. This also checks to make sure there
are no grilles spawning twice due to a mapper using the electrified
grille spawner with windows. I had to modify the python files to handle
new linter rules for an `ignore` section that has been included in the
README.
There were about two dozen mapping issues where these lints fail that
have now been fixed.
## Why It's Good For The Game
Better mapping and consistent mapping.
## Changelog
🆑
qol: Add CI map linter for window and electrified grille spawners
map: Fix many duplicate windows, walls, and grilles spawning together or
inside each other on a bunch of maps.
/🆑
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
This has happened quite a few times in the past and it'd be a good idea
to have a linter catch this common mistake. After digging through the
Python code for the mapping linter, it appears the linter wasn't
correctly identifying two duplicate objects. I tweaked the code to fix
this.
## About The Pull Request
The tool added in #72372 is pretty awesome. The output is uhh cryptic
though. I had to read the source code to realize the (line 382) or
whatever part of the message was the dmm line number and there's stack
traces everywhere. I've made it support github action error messages so
now you get this beauty if you mess up:

Or, in the run summary:

Errors parsing the lint yml's will also output github action errors,
although the line number will always be 1 since the yaml parser discards
line numbers to my knowledge.
In the midst of doing this, I made the error type contain the file and
line info, and added a bunch of type hints in the midst of trying to
understand Mothblock's code.
Note that for power users, the default behavior is still colored
terminal text; `--github` is added by the CI suite to enable this
behavior.
## Why It's Good For The Game
Much easier to see where the errors are and what they are (who even
knows what a 'pop' is? The tg game code calls them grid models.)
## Changelog
Nothing player-facing.
[Documentation
here](https://github.com/Mothblocks/tgstation/blob/maplint/tools/maplint/README.md)
We should not be using greps to the capacity that we currently are. If
you are not smarter than a parser, then you should not try to beat one.
DMM files should NOT be treated as text files that can be parsed with
any old Unix tool. They are a structured language. Because of our abuse
of greps, check_greps is full of hard to read, hard to maintain checks
that do not consistently work, because they all make very specific
assumptions about how TGM works, which are provably untrue.
This format is mostly straightforward for the lints people write, and
easily extensible to the ones people will want to write.
🆑
fix: Fixes a bunch of cases of windows not being where they were
supposed to be, tables/chairs stacking on each other, and other very
small stuff you've never noticed before.
/🆑