## About The Pull Request
Closes#86567
Don't think any of these were found/reported or actually could trigger
in-game
## Why It's Good For The Game
Glory to OpenDream
## Changelog
🆑
code: Fixed multiple minor logic issues with code found by OpenDream's
new pragma
/🆑
## About The Pull Request
Ever since byondapi went stable, I've been meaning to create a
replacement lua library that uses it instead of the auxtools-based
auxlua. After so many months, I've finally got the code just about into
a position where it's ready for a PR.
[Click here](https://hackmd.io/@aloZJicNQrmfYgykhfFwAQ/BySAS18u0) for a
guide to rewriting auxlua scripts for dreamluau syntax.
## Why It's Good For The Game
Code that runs on production servers should not depend on memory hacks
that are liable to break any time Dream Daemon updates.
## Changelog
🆑
admin: Admin lua scripting uses a new library that (probably) will not
break when BYOND updates.
/🆑
## TODO:
- [x] Convert the lua editor ui to TS
- [x] Include a guide for converting scripts from auxlua syntax to
dreamluau syntax
This unit test detects all turfs & other movables that aren't in a lit
area (ie area/space/nearspace) on station zlevels
The grep detects movables placed on shuttles that do not have the
correct area assigned, which caused those atoms to break off of the
shuttle & literally get launched into random parts of space (usually on
station z-levels; the only reason I found this issue was cause the unit
test was detecting random shit ending up on station maps lol)
Minor fix for the mapload_space_verification unit test - it was falsely
detecting turfs that shuttle grids (that were template_noop) were parked
ontop of, which aren't effected by the shuttle in any way. This allowed
the following fix
Fixed a number of shuttles having atoms in /area/template_noop areas.
Atoms in these areas are treated as not actually part of the shuttle
itself & were launched off into random space tiles across all z-levels
via dump_in_space(). Corrected those grids to have the correct area, and
as such, shuttles now stay together properly.
🆑 ShizCalev
fix: Fixed a number of shuttles having parts (such as lattices)
completely disappearing.
fix: Fixed the ceilings above shuttles on station maps being
full-bright.
fix: Fixed lattices sometimes appearing at random locations in space on
station maps.
fix: Cleaned up a number of accidentally placed objects in space across
all station maps.
fix: Fixed a false positive with the mapload_space_verification unit
test failing on turfs that weren't actually part of shuttles.
code: Added a unit test that automatically finds all base space turfs
with objects on them, as well as non-space turfs that are set to space
areas (meaning that these squares weren't lit properly.)
/🆑
Shuttle Ceiling Fix:
Before

Fixed

Shuttle Fix:
Before

Fixed (look at the lattices in the middle. the stuff in the shuttle are
randomized / not part of this)

## About The Pull Request
As the title says. A standard power cell now only stores 10 KJ and
drains power similar to how it did before the refactor to all power
appliances.
The new standard megacell stock part stores 1 MJ (what cells store right
now). APCs and SMESs have had their power cells replaced with these
megacell stock parts instead. Megacells can only be used in APCs and
SMESs. It shouldn't be possible to use megacells in any typical
appliance.
This shouldn't change anything about how much 'use' you can get out of a
power cell in regular practice. Most should operate the same and you
should still get the same amount of shots out of a laser gun, and we can
look at expanding what can be switched over to megacells, e.g. if we
want mechs to require significantly more power than a typical appliance.
Thanks to Meyhazah for the megacell icon sprites.
## Why It's Good For The Game
Power cell consumption is way too high ever since the power appliance
refactor that converted most things to be in joules. It's a bit
ridiculous for most of our machinery to drain the station's power supply
this early on.
The reason it's like this is because regular appliances (laser guns,
borgs, lights) all have a cell type that is identical to the APC/SMES
cell type. And it means that if we want to provide an easy way to charge
these appliances without making it easy to charge APCs/SMESs through a
power bug exploit, we need to introduce a new cell type to differentiate
between what supplies power and regular appliances that use power. This
is primarily what the megacell stock part does.
This moves us back to what it was originally like before the power
refactor, where recharging power cells wouldn't drain an exorbitant
amount of energy. However, it maintains the goal of the original
refactor which was to prevent people from cheesing power generation to
produce an infinite amount of power, as the power that APCs and SMESs
operate at is drastically different from the power that a regular
appliance uses.
## Changelog
🆑 Watermelon, Mayhazah
balance: Drastically reduces the power consumption and max charge of
power cells
balance: Added a new stock part called the battery, used primarily in
the construction of APCs and SMESs.
add: Suiciding with a cell/battery will shock you and potentially dust
you/shock the people around you if the charge is great enough.
/🆑
---------
Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com>
## About The Pull Request
Puts a switch inside our build tools that will download the appropriate
node version based on your OS.
#82334
## Why It's Good For The Game
Closes#83076
Allows players to play the game
## About The Pull Request
Fixes#82440
This PR just creates a new macro, `LOWER_TEXT()` (yes the irony is not
lost on me) to wrap around all calls of `lowertext()` and ensure that
whatever we input into that proc will be stringified using the `"[]"`
(or `tostring()` for the nerds) operator. very simple.
I also added a linter to enforce this (and prevent all forms of
regression) because I think that machines should do the menial work and
we shouldn't expect maintainers to remember this, let me know if you
disagree. if there is a time when it should be opted out for some
reason, the linter does respect it if you wrap your input with the
`UNLINT()` function.
## About The Pull Request
This PR does a few things.
The main goal was to have it annotate the code like we do for `Run
Dreamchecker`, which it now does. The code for this was mostly
shamelessly ripped from the very same process I just mentioned, but
stripped down a lot more for the task. Since I had to write a lot more
code to handle the way we get warnings and the like from OpenDream, I
didn't fold both into one program.


It works! Ta-da.
Anyways, in order to facilitate the code annotation, we need to use a
Python script. This Python script means that we need to use the
bootstrap, and the bootstrap is best used with the bootstrap cache. I
then realized that we should just really fold this special CI runner
into the Run Linters workflow anyways, instead of having it on its own
runner (since it'll cut into the number of runners we have available at
a time anyways).
I think it's a good way to save precious CPU cycles on our dying Earth,
and the issues are now visible enough to the average coder (in the
`Files Changed` tab) to where I feel pretty good about doing this.
There's a bit of weirdness and jank in the Python program, but it's all
done for a reason I assure you (it's always silly when stuff breaks
silently and no one knows to fix it until years later). You can look an
example of a failing run here:
https://github.com/san7890/bruhstation/actions/runs/8303759645/job/22728427623#step:17:14
## About The Pull Request
Ripgrep got updated some time ago, and that means that our cache went
out of date as we had to keep doing more work to install the new
dependencies that it has. This means we were eating up another **50
seconds** every time we ran Run Linters. Unfortunately, github caches
will only hash to a file that exists on the repository, not anything
that might exist after a tool is installed.
So, in order to do this, we create a new bash file `install_ripgrep.sh`
and also pin the ripgrep version. If we need to reap some new benefits
or it's substantially faster (which might not be the case as ripgrep is
already blazing fast), we just need to update `ci_dependencies.sh` and
the cache should work for future versions without us needing to purge
rust caches manually through github.
You can view a successful run here
https://github.com/san7890/bruhstation/actions/runs/7123029395/job/19394997831
I also did something similar for SpacemanDMM while i noticed it.
## About The Pull Request
Fixes "offical" to "official" in several locations - admin fax panel,
admin newscaster, art patron text, a photocopier template, and a corgi
tail pin item description. Adds this common misspelling to the
check_grep.sh ci tool.
## Why It's Good For The Game
I have corrected the typo manually every single time I have sent a fax
from Central Command.
## Changelog
🆑
spellcheck: "offical" has been officially corrected to "official" in
several official locations.
/🆑
## About The Pull Request
just moving the dm annotator script out of the CI folder, into a new
module which can be executed
if this breaks stuff again then i am going to cry
## Why It's Good For The Game
less clutter inside of `./tools/ci`
## Changelog
nothing playerfacing
## About The Pull Request
This PR removes the "Annotate Lints" job step and merges it with the
"Run Linters" step above. To achieve this, I wrote a python script that
should be identical to the action. I even added the ability to read the
output from a file to the script if we ever needed that, but I decided
to have the job step pipe the output into the script instead.
## Why It's Good For The Game
It always bugged me a bit that we had to check the results for a
separate step if we wanted to see the linter results for dm code. I also
noticed a few people getting confused as to why their CI failed on
linters.
Turns out that the action is just a few lines that match the
dreamchecker output and reformat it to a format that GitHub can annotate
code with. It's so brain dead simple that it shouldn't need to be a
whole new step, and for the previous two reasons.
## Changelog
not playerfacing
## About The Pull Request
Using `src` as a trait source is an error and can often lead to
hard-deletes
If you wish to tie a source to a certain datum, it is common to use
`REF(src)` instead.
Ideally, we would lint or test for any use of a reference rather than a
string in use in trait sources, but that's a bit harder to setup.
Currently (from what I can see) the *only* erroneous use of references
as sources are via `src`, so it being the most common error, I see it
fine to lint for it.
## Changelog
Nothing player facing.
Safeguards against #74965 happening in the future.
Noticed a bunch of these were using ITEM_SLOT_HANDS. This is incorrect,
as the element already automatically updates held items. grep'd it to
catch future instances.
Likewise, a number of objects weren't passing slot_flags to the element,
meaning it wasn't actually updating those things properly when they were
being worn. I've simplified this so now the element will automatically
update all slot_flags, and passing an additional slot to the element
when being added is only needed for additional slots that might need to
be updated. This also means if slot_flags change, the element will now
update correctly as well.
🆑 ShizCalev
code: The update_icon_updates_onmob element will now automatically
update all slots in an item's slot_flags var. This does fix multiple
things that weren't updating properly. Passing a slot to the element is
now only necessary if you want to add additional slots to be updated.
/🆑
I forgot this for like the third time in #75001 and I'm sick of never
remembering to do it so I'm adding a lint so I never forget again (and
will also help other people never forget to add the PR-number prefix).
## Why It's Good For The Game
UpdatePaths scripts should have a prefix with the PR number that adds
them, but since you don't know the PR number when you're making the
script (since I make the script very early in my development process),
it's often forgotten (especially since no one really looks at file
names). Let's end forgetfulness by failing CI if a script without a
numeric prefix is detected.
## About The Pull Request
Fixes#75019
Also fixes it in a drink, the ethereal lore, and some photocopier
paperwork.
And also adds "NanoTrasen" to common spelling mistakes
## Why It's Good For The Game
Nanotrasen is the correct capitalization
## Changelog
🆑
spellcheck: Fixed Nanotrasen being miscapitalized in traitor posters, a
drink, the ethereal lore, and some photocopier paperwork
/🆑
## About The Pull Request
Caused by #73758 due to improper search-and-delete (presumably) without
running mapmerge or something to catch it, very sad. Let's add a linter
to make sure this doesn't occur again.
More information on what exactly was broken may be found here:
https://github.com/tgstation/tgstation/pull/73758#issuecomment-1457508565
## Why It's Good For The Game

makes me sad to see it, it's ugly, and mapmerge will fix it away anyways
over the next few months since it's an invalid/bugged case. let's just
prevent it from happening again. (hopefully this hasn't been impacting
the map loader at all? i don't see why it would but I know this case
isn't exactly accounted for). i noticed that we're able to flatten a lot
more keys now as well since we don't have literally nothing preventing
that flattening, which is a plus.
## Changelog
Nothing that concerns players.
## About The Pull Request
This adds a linter to check for missing arguments with the
`can_perform_action` proc since several people had used it with no
arguments provided and it caused persistent runtimes over several years.
## Why It's Good For The Game
Less runtimes in the future.
## Changelog
Not needed.
So i accidently reverted all my commits in #72511 when resolving a merge
conflict So ummm yeah fuck my bad anyway
## About The Pull Request
Finishes what was started in #71693 and completes the
[initiative](https://github.com/tgstation/dev-cycles-initiative/issues/1)
Except for `obj/item/stock_parts/cell` and its subtypes. All machines
now use `datum/stock_part` for its requested components & component
parts
Not sure if i caught every machine & stuff in the game so merge with
caution
## Changelog
🆑
code: datum stock part for every obj stock part
refactor: all machines & dependent experiments to use datum stock parts
/🆑
[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.
/🆑
Adds lints for `balloon_alert(span_xxx(...))` (which is always wrong),
and balloon alert where the first letter is a capital (which is usually
wrong). Fixes everything that failed them. As a reminder, abbreviations
like "AI" and "GPS" shouldn't be capitalized in a balloon alert.
In cases where this is intentional for flavor (there was one case), you
can `UNLINT` like so:
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
## About The Pull Request
In `/datum/parsed_map/proc/parse_constant()` (via
b3851d607f/code/modules/mapping/reader.dm (L930)'),
we do not check (ignore) five different things: `new()`, `newlist()`,
`icon()`, `matrix()`, and `sound()`. Since it's completely useless to
put it in a map and expect to see it code-side now-a-days, let's lint
against it just to be safe in the future.
## Why It's Good For The Game
Prevents silliness like in #72157 (which this PR is also reliant on for
checks to pass).
no changelog needed
Get linters working again, I was never using the correct directory
expansion syntax for checks, so why some of them still worked anyway is
beyond me.
Fixes https://github.com/tgstation/tgstation/issues/71695
## About The Pull Request
I fucked up the check_grep entry for docking ports.
default grep doesn't support newlines and so I need to use `pcregrep -M`
## Why It's Good For The Game
linters working good
## Changelog
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
When you load a map template, it does many things before considering
itself finalized.
One of these steps is to iterate over all the loaded items and
initialize/process them.
Unfortunately because a shuttle setups the bounds after
initTemplateBounds is called, the mobile docking port ends up being
initialized before the bounds are actually setup correctly.
The solution to this is to explicitly ignore the mobile docking port,
and have it initialize immediately after calculating the bounds.
Makes the code compatible with 515.1594+
Few simple changes and one very painful one.
Let's start with the easy:
* puts call behind `LIBCALL` define, so call_ext is properly used in 515
* Adds `NAMEOF_STATIC(_,X)` macro for nameof in static definitions since
src is now invalid there.
* Fixes tgui and devserver. From 515 onward the tmp3333{procid} cache
directory is not appened to base path in browser controls so we don't
check for it in base js and put the dev server dummy window file in
actual directory not the byond root.
* Renames the few things that had /final/ in typepath to ultimate since
final is a new keyword
And the very painful change:
`.proc/whatever` format is no longer valid, so we're replacing it with
new nameof() function. All this wrapped in three new macros.
`PROC_REF(X)`,`TYPE_PROC_REF(TYPE,X)`,`GLOBAL_PROC_REF(X)`. Global is
not actually necessary but if we get nameof that does not allow globals
it would be nice validation.
This is pretty unwieldy but there's no real alternative.
If you notice anything weird in the commits let me know because majority
was done with regex replace.
@tgstation/commit-access Since the .proc/stuff is pretty big change.
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Removing trailing / from several mapping check regexes
So we have check_grep.sh which helpfully checks for a bunch of common map mistakes, including doubled up items. This adjusts them to capture doubled up base types which might be mapped in.
* Commit before pushing next time
* Updates check_grep.sh to have more clarity
Hey there,
One issue with check_grep is that it was very inconsistent in how it handled the error conditions and echos to the end user. Some of them didn't have ERROR:, some of them didn't have two echos to separate them from the actual grep result, etc.
This should add more clarity to all of it by making each error line exit with a RED color, the boilerplate lines with a BLUE color, having an echo in each line to separate, etc. This should be much easier to see for anyone at a glance. This works on my local machine, and I suppose we'll find out how it looks on GitHub.
* Merge Conflict Markers - The Explicit Pathing
Hey there,
This PR corrects an issue I've been having with mapmerge2 these last few months. Basically, what it does is create a base `/obj` that is given the name `---Merge Conflict Marker---`. This is fine and all, but the problem is that the base `/obj` is set to a certain plane. This does mean that sometimes, this VERY IMPORTANT marker is covered up by rocks or other objects. So, this seeks to get rid of that potential flaw, as well as do some other things.
Sometimes, when objects are rendered via GAGS or other code-means, they tend to have the same default Purple/White Sprite that any object without a valid icon_state has. This has caused me some confusion, so I have decided to create a new icon for conflict markers. This icon was designed to be as ugly as possible, while creating as much contrast as possible with the background by incorporating several colors into its design. I hope you find merge conflicts as unpleasant as I do.
I also updated mapmerge2 to have it so you can set the specified path of the object, as well as a small comment on the warnings if you do not heed it. I'm keeping the fact that mapmerge2 adds a name to the object just in case someone else really needs that. I also updated the linters to check for this path as well (even though the name and description should suffice for linting), and it should all be gravy from here.
* Adds further contrast to the DMI.
* Splits the merge conflict marker into a generic /obj
I also added a thing where if it didn't get caught by linters and it showed up on Initalize, it would error to mapping logs, spit out an error in world, and do all sorts of stuff to remind you.
* python new line
* forgot to add a tab
Adds some checks for structures that are commonly misplaced inside walls. One of the more recent updatepaths also replaced a bunch of posters with windoors in walls so this will help find all those.
I also edited the one that checks for lattices to look for closed turfs, because we really don't want the structures we're looking for to be in any closed turfs anyways.
We don't want to look for all structures like this because things like transit tubes exist.
Adds the greps for firelocks and airlocks so we don't double stack them.
* Greps for double firelocks and airlocks
* Update tools/ci/check_grep.sh
Co-authored-by: Pepsilawn <reisenrui@gmail.com>
* Update tools/ci/check_grep.sh
Co-authored-by: Pepsilawn <reisenrui@gmail.com>
* fixes two double firelocks on iceboxstation
Co-authored-by: Pepsilawn <reisenrui@gmail.com>
Hey there,
Even though mapmerge2 (through behavior introduced in #39889) should automatically check for "stacked turfs", they still slip through somehow. Not really sure how, but let's make sure that doesn't happen again with the power of grep.