## About The Pull Request
Extends the part of the crafting unit test that ensures consistency
between the total mats of the components of a recipe (or rather, the
result of said recipe) and a generic instance of the same type as its
result, previously only implemented on food recipes.
## Why It's Good For The Game
This ensures a degree of consistency with the material composition of
various objects in the game. I couldn't do it in the original PR as that
one was too big already and it took months to get it merged, and have
the relative bugs fixed.
Currently a WIP as I slowly deal with the unit test reports.
## Changelog
🆑
refactor: Follow-up to the crafting/material refactor from months ago.
All objects crafted with stacks now inherit their mat composition (not
necessarily the effects and color) by default, while previously only a
few things like chair, sinks and toilets did. Report any object looking
or behaving weirdly as a result.
fix: The material composition of ammo boxes is no longer a 1/10 of what
it's supposed to be. It was a shitty hack to make it harder to recycle
empty ammo boxes. Instead, they lose materials as they're emptied now.
/🆑
## About The Pull Request
It's just a partial cleanup of
anti-[STYLE](https://github.com/tgstation/tgstation/blob/master/.github/guides/STYLE.md)
code from /tg/'s ancient history. I compiled & tested with my helpful
assistant and damage is still working.
<img width="1920" height="1040" alt="image"
src="https://github.com/user-attachments/assets/26dabc17-088f-4008-b299-3ff4c27142c3"
/>
I'll upload the .cs script I used to do it shortly.
## Why It's Good For The Game
Just minor code cleanup.
Script used is located at https://metek.tech/camelTo-Snake.7z
EDIT 11/23/25: Updated the script to use multithreading and sequential
scan so it works a hell of a lot faster
```
/*
//
Copyright 2025 Joshua 'Joan Metekillot' Kidder
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
//
*/
using System.Text.RegularExpressions;
class Program
{
static async Task Main(string[] args)
{
var readFile = new FileStreamOptions
{
Access = FileAccess.Read,
Share = FileShare.ReadWrite,
Options = FileOptions.Asynchronous | FileOptions.SequentialScan
};
FileStreamOptions writeFile = new FileStreamOptions
{
Share = FileShare.ReadWrite,
Access = FileAccess.ReadWrite,
Mode = FileMode.Truncate,
Options = FileOptions.Asynchronous
};
RegexOptions regexOptions = RegexOptions.Multiline | RegexOptions.Compiled;
Dictionary<string, int> changedProcs = new();
string regexPattern = @"(?<=\P{L})([a-z]+)([A-Z]{1,2}[a-z]+)*(Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss)([A-Z]{1,2}[a-z]+)*";
Regex camelCaseProcRegex = new(regexPattern, regexOptions);
string snakeify(Match matchingRegex)
{
var vals =
matchingRegex.Groups.Cast<Group>().SelectMany(_ => _.Captures).Select(_ => _.Value).ToArray();
var newVal = string.Join("_", vals.Skip(1).ToArray()).ToLower();
string logString = $"{vals[0]} => {newVal}";
if (changedProcs.TryGetValue(logString, out int value))
{
changedProcs[logString] = value + 1;
}
else
{
changedProcs.Add(logString, 1);
}
return newVal;
}
var dmFiles = Directory.EnumerateFiles(".", "*.dm", SearchOption.AllDirectories).ToAsyncEnumerable<string>();
// uses default ParallelOptions
// https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.paralleloptions?view=net-10.0#main
await Parallel.ForEachAsync(dmFiles, async (filePath, UnusedCancellationToken) =>
{
var reader = new StreamReader(filePath, readFile);
string oldContent = await reader.ReadToEndAsync();
string newContent = camelCaseProcRegex.Replace(oldContent, new MatchEvaluator((Func<Match, string>)snakeify));
if (oldContent != newContent)
{
var writer = new StreamWriter(filePath, writeFile);
await writer.WriteAsync(newContent);
await writer.DisposeAsync();
}
reader.Dispose();
});
var logToList = changedProcs.Cast<KeyValuePair<string, int>>().ToList();
foreach (var pair in logToList)
{
Console.WriteLine($"{pair.Key}: {pair.Value} locations");
}
}
}
```
## Changelog
🆑 Bisar
code: All (Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss) procs now use
snake_case, in-line with the STYLE guide. Underscores rule!
/🆑
## About The Pull Request
Was deleted in https://github.com/tgstation/tgstation/pull/92216
Should not have been.
## Why It's Good For The Game
Deleting used assets bad.
## Changelog
🆑
fix: The warp sfx now works properly.
/🆑
## About The Pull Request
Adds Diode Disks, installable disks that when fitted into an emitter can
change its function.
* Healing
* Stamina damage, and heals the SM slightly at the cost of internal
energy
* Traitor engi only explosive that damages and supercharges the SM if
used that way. Firerate is halved.
* Incendiary that slightly damages the SM but has lots of energy
* Sanity damaging one that improves SM psi coeff
* Magnetic item attracting one that improves SM mol absorption.
## Why It's Good For The Game
Fun and unique ways for Engi to use excess power or improve their SM
setups. Could also lead to neat engi inventions such as, say, a circuit
device that aims and fires a healing emitter at anyone nearby who is
damaged. Should also incentivize the researching of useful techs, hence
why important medium tier techs are what lock the different disks.
## Changelog
🆑
add: New Diode Disks which allow you to configurate emitters with
special functions.
add: New Engi & CE exclusive traitor item, a diode disk that causes an
emitter to create low radius explosions when it hits things. Note that
this will reduce the fire-rate of your emitter.
/🆑
---------
Co-authored-by: ThrowawayUseless <notarealemail@emailservice.fake>
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
## About The Pull Request
Adds Diode Disks, installable disks that when fitted into an emitter can
change its function.
* Healing
* Stamina damage, and heals the SM slightly at the cost of internal
energy
* Traitor engi only explosive that damages and supercharges the SM if
used that way. Firerate is halved.
* Incendiary that slightly damages the SM but has lots of energy
* Sanity damaging one that improves SM psi coeff
* Magnetic item attracting one that improves SM mol absorption.
## Why It's Good For The Game
Fun and unique ways for Engi to use excess power or improve their SM
setups. Could also lead to neat engi inventions such as, say, a circuit
device that aims and fires a healing emitter at anyone nearby who is
damaged. Should also incentivize the researching of useful techs, hence
why important medium tier techs are what lock the different disks.
## Changelog
🆑
add: New Diode Disks which allow you to configurate emitters with
special functions.
add: New Engi & CE exclusive traitor item, a diode disk that causes an
emitter to create low radius explosions when it hits things. Note that
this will reduce the fire-rate of your emitter.
/🆑
---------
Co-authored-by: ThrowawayUseless <notarealemail@emailservice.fake>
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
## About The Pull Request
Fixes https://github.com/Bubberstation/Bubberstation/issues/4387 by
actually passing args to the prerequisite check. Moves logging to
consistently be in Engine
## Changelog
🆑 LT3
fix: Fixed SM emergency stop button working beyond 30 minutes
/🆑
## About The Pull Request
Flux anomalies, when they detonate, do a minor explosion and emit a wide
EMP pulse. This can cause a lot of damage in its own right, but it won't
syndicate bomb a random section of the station anymore.
Gravity anomalies
A) No longer have the click catching giant image floating above it
anymore.
B) No longer chain hardstuns you if you get too close every time it
ticks. Instead, it knocks you down. You can also avoid this effect by
wearing magboots.
C) Also doesn't throw literally every object in an area around it
straight into you every time it ticks. Instead, it does so only 20% of
the time.
Long range gas analyzers can now scan anomalies.
## Why It's Good For The Game
> Flux
A really annoying anomaly and one that I think has caused several
shuttle calls in its time. If you don't catch it, it blows up a segment
of the station entirely at random. This thing can almost be as bad as a
vortex in some contexts. A giant EMP can still be pretty destructive,
but it isn't quite at the same level as a giant explosion and I suspect
not shuttle call worthy. The minor explosion will at most trash a room.
> Gravity
I literally do not understand how anyone was supposed to disable these.
I literally gave up years ago even trying to catch them. They're
practically designed to kill you for trying. The click catching warp
effect not only looked kind of lame, but it just straight up stopped you
being able to disable them (mouse opacity doesn't work here and I tried,
it redirects clicks to other tiles for some godawful reason, probably
byond weirdness). You had to spam click a LOT to even try.
On top of that, it just stuns you? It literally just stuns you if you
approach it? And magboots can't help you to avoid that? What the fuck
are you _supposed_ to do to avoid that?
Also it can just instantly kill you if you approach it and it gathered
enough stuff because it will just keep slapping you with every loose
object within a radius around itself? At speed 5 so things that don't
normally embed will embed?
So it mulches you for approaching it, chain hardstuns you for
approaching it, and it deliberately intercepts clicks in a completely
unintuitive fashion even if you do manage to click it. You need to
approach it to stop it. A recipe for disaster. Fuck that.
> Analyzer
It was annoying this wasn't able to do this already!
## Changelog
🆑
balance: Gravity anomalies can be properly clicked. Rather than chain
stunning you, the anomaly will knock you down. You can avoid the
negatives of gravity anomalies by wearing magboots. (Yes, it did not
really protect you until now)
balance: Flux anomalies detonate in a much smaller explosion, but
release a wide EMP as well.
balance: Long range gas analyzers can now scan anomalies.
/🆑
(cherry picked from commit 2b0a824132)
## About The Pull Request
Flux anomalies, when they detonate, do a minor explosion and emit a wide
EMP pulse. This can cause a lot of damage in its own right, but it won't
syndicate bomb a random section of the station anymore.
Gravity anomalies
A) No longer have the click catching giant image floating above it
anymore.
B) No longer chain hardstuns you if you get too close every time it
ticks. Instead, it knocks you down. You can also avoid this effect by
wearing magboots.
C) Also doesn't throw literally every object in an area around it
straight into you every time it ticks. Instead, it does so only 20% of
the time.
Long range gas analyzers can now scan anomalies.
## Why It's Good For The Game
> Flux
A really annoying anomaly and one that I think has caused several
shuttle calls in its time. If you don't catch it, it blows up a segment
of the station entirely at random. This thing can almost be as bad as a
vortex in some contexts. A giant EMP can still be pretty destructive,
but it isn't quite at the same level as a giant explosion and I suspect
not shuttle call worthy. The minor explosion will at most trash a room.
> Gravity
I literally do not understand how anyone was supposed to disable these.
I literally gave up years ago even trying to catch them. They're
practically designed to kill you for trying. The click catching warp
effect not only looked kind of lame, but it just straight up stopped you
being able to disable them (mouse opacity doesn't work here and I tried,
it redirects clicks to other tiles for some godawful reason, probably
byond weirdness). You had to spam click a LOT to even try.
On top of that, it just stuns you? It literally just stuns you if you
approach it? And magboots can't help you to avoid that? What the fuck
are you _supposed_ to do to avoid that?
Also it can just instantly kill you if you approach it and it gathered
enough stuff because it will just keep slapping you with every loose
object within a radius around itself? At speed 5 so things that don't
normally embed will embed?
So it mulches you for approaching it, chain hardstuns you for
approaching it, and it deliberately intercepts clicks in a completely
unintuitive fashion even if you do manage to click it. You need to
approach it to stop it. A recipe for disaster. Fuck that.
> Analyzer
It was annoying this wasn't able to do this already!
## Changelog
🆑
balance: Gravity anomalies can be properly clicked. Rather than chain
stunning you, the anomaly will knock you down. You can avoid the
negatives of gravity anomalies by wearing magboots. (Yes, it did not
really protect you until now)
balance: Flux anomalies detonate in a much smaller explosion, but
release a wide EMP as well.
balance: Long range gas analyzers can now scan anomalies.
/🆑
## About The Pull Request
This is an atomized revival of #82419, with this part containing the
simplest of its features:
- Fixes AO pref refreshing the wrong plane, thus not updating until you
swap bodies
- Removes supermatter's copypasted warp effect
- Culls distortion effects when they're not in use because its a chonky
filter
- Hides the escape menu when its, well, hidden
- Fixes hide_highest_offset not working upon parent's creation (we're so
good at our jobs hell yeah)
- Replaces runechat's AO dropshadow with an outline, because its barely
visible due to low opacity.
## Why It's Good For The Game
Our rendering performance is shit and we need to improve it, and the
first step in this task is optimizing planecube's simplest parts. The
next step is conditional culling, better non-multiz handling and
parallax rework/removal, but all of those need to be atomized as to
prevent the PR from sharing the fate of the original.
## Changelog
🆑
fix: Ambient Occlusion pref should now update immediately upon being
changed, instead of having to swap bodies or waiting for server restart
to get it updated.
code: Slightly improved rendering code/performance just a tiny bit.
/🆑
## About The Pull Request
This is an atomized revival of #82419, with this part containing the
simplest of its features:
- Fixes AO pref refreshing the wrong plane, thus not updating until you
swap bodies
- Removes supermatter's copypasted warp effect
- Culls distortion effects when they're not in use because its a chonky
filter
- Hides the escape menu when its, well, hidden
- Fixes hide_highest_offset not working upon parent's creation (we're so
good at our jobs hell yeah)
- Replaces runechat's AO dropshadow with an outline, because its barely
visible due to low opacity.
## Why It's Good For The Game
Our rendering performance is shit and we need to improve it, and the
first step in this task is optimizing planecube's simplest parts. The
next step is conditional culling, better non-multiz handling and
parallax rework/removal, but all of those need to be atomized as to
prevent the PR from sharing the fate of the original.
## Changelog
🆑
fix: Ambient Occlusion pref should now update immediately upon being
changed, instead of having to swap bodies or waiting for server restart
to get it updated.
code: Slightly improved rendering code/performance just a tiny bit.
/🆑
## About The Pull Request
Code cleanup and refactors the delam suppression system. Instead of a
guaranteed heal of the crystal and flooding the room with a freon fire,
the suppression system will try its best to suppress the delam,
alternatively minimizing the explosion size of the delam through cooling
it.
- Orange alert threshold moved from 95% to 40%. (70% on skeleton crew)
- Reduced amount of freon in the system by half
- Windows in the SM chamber no longer explode when the system is
activated
- Various minor timing adjustments to fit the new system purpose
- Penalty to delam counter highscore reduced to 50% from 100%
## Why It's Good For The Game
The freon flood/fire in the engine room is pain in the ass busywork.
Instead, minimizing the size of the delam explosion keeps it mostly
contained to the engine room while also being a logical type of cleanup
associated with a delam.
Example of a minimized explosion:

## Changelog
🆑 LT3
balance: Windows in the SM chamber no longer explode when the
suppression system is activated
balance: Reduced amount of freon in the delam suppression system by half
balance: Penalty to delam counter highscore reduced to 50% from 100%
qol: Automatic alert for delams fires later into the delam progress.
fix: The delam sound effect stops if the delam is saved during the 15
second countdown
fix: Partially delaminated supermatter crystal heat modifier actually
works
/🆑
Melee attack chain now has a list passed along with it,
`attack_modifiers`, which you can stick force modifiers to change the
resulting attack
This is basically a soft implementation of damage packets until a more
definitive pr, but one that only applies to item attack chain, and not
unarmed attacks.
This change was done to facilitate a baton refactor - batons no longer
hack together their own attack chain, and are now integrated straight
into the real attack chain. This refactor itself was done because batons
don't send any attack signals, which has been annoying in the past (for
swing combat).
🆑 Melbert
refactor: Batons have been refactored again. Baton stuns now properly
count as an attack, when before it was a nothing. Report any oddities,
particularly in regards to harmbatonning vs normal batonning.
refactor: The method of adjusting item damage mid-attack has been
refactored - some affected items include the Nullblade and knives.
Report any strange happenings with damage numbers.
refactor: A few objects have been moved to the new interaction chain -
records consoles, mawed crucible, alien weeds and space vines, hedges,
restaurant portals, and some mobs - to name a few.
fix: Spears only deal bonus damage against secure lockers, not all
closet types (including crates)
/🆑
## About The Pull Request
Supermatter and tesla zaps can trigger electrolysis reactions.
Hypernoblium to antinoblium conversion requires supermatter zaps above 5
GeV, with 100% efficiency at 9GeV. Antinoblium is generated at 1:1 from
hypernoblium consumed. The requirement for hypernoblium conversion is
also included in the reaction console.
## Why It's Good For The Game
Ordinary electrolysis is a rather boring way to obtain antinoblium,
especially with fire extinguisher cheese. This limits the creation of
antinoblium to more extreme and loud methods. This is mainly intended
for balancing #91016, but seems out of scope to include in that PR. This
also gives room for antinoblium to be balanced as one of the more exotic
gases, and is much more obvious when antinoblium is being created.
## Changelog
🆑
add: Supermatter and tesla zaps can trigger electrolyzer reactions.
balance: Hypernoblium to antinoblium electrolysis requires supermatter
zaps above 5 GeV.
balance: Hypernoblium is converted to antinoblium 1:1 during
electrolysis.
/🆑
## About The Pull Request
Melee attack chain now has a list passed along with it,
`attack_modifiers`, which you can stick force modifiers to change the
resulting attack
This is basically a soft implementation of damage packets until a more
definitive pr, but one that only applies to item attack chain, and not
unarmed attacks.
This change was done to facilitate a baton refactor - batons no longer
hack together their own attack chain, and are now integrated straight
into the real attack chain. This refactor itself was done because batons
don't send any attack signals, which has been annoying in the past (for
swing combat).
## Changelog
🆑 Melbert
refactor: Batons have been refactored again. Baton stuns now properly
count as an attack, when before it was a nothing. Report any oddities,
particularly in regards to harmbatonning vs normal batonning.
refactor: The method of adjusting item damage mid-attack has been
refactored - some affected items include the Nullblade and knives.
Report any strange happenings with damage numbers.
refactor: A few objects have been moved to the new interaction chain -
records consoles, mawed crucible, alien weeds and space vines, hedges,
restaurant portals, and some mobs - to name a few.
fix: Spears only deal bonus damage against secure lockers, not all
closet types (including crates)
/🆑
## About The Pull Request
Supermatter and tesla zaps can trigger electrolysis reactions.
Hypernoblium to antinoblium conversion requires supermatter zaps above 5
GeV, with 100% efficiency at 9GeV. Antinoblium is generated at 1:1 from
hypernoblium consumed. The requirement for hypernoblium conversion is
also included in the reaction console.
## Why It's Good For The Game
Ordinary electrolysis is a rather boring way to obtain antinoblium,
especially with fire extinguisher cheese. This limits the creation of
antinoblium to more extreme and loud methods. This is mainly intended
for balancing #91016, but seems out of scope to include in that PR. This
also gives room for antinoblium to be balanced as one of the more exotic
gases, and is much more obvious when antinoblium is being created.
## Changelog
🆑
add: Supermatter and tesla zaps can trigger electrolyzer reactions.
balance: Hypernoblium to antinoblium electrolysis requires supermatter
zaps above 5 GeV.
balance: Hypernoblium is converted to antinoblium 1:1 during
electrolysis.
/🆑
## About The Pull Request
- Some fixes for the supermatter crystal anomaly generation, ensuring
they spawn outside the chamber windows and adds the outright missing
dimensional anomalies.
- Hallucination duration is calculated based on both distance from the
SM as well as the size of the delam explosion (a modifier of 0.75x for a
small explosion, up to 1.25x for the largest delam explosion)
## Why It's Good For The Game
Bugfixes, improvement on the delam hallucination.
## Changelog
🆑 LT3
fix: Fixed supermatter anomaly generation, hallucination is based on
distance and delam explosion size
/🆑
People can now pet held mothroaches and pugs if they want to, or use
items on them, hopefully without causing many issues. After all, it only
took about a couple dozen lines of code to make...
...Oh, did the 527 files changed or the 850~ lines added/removed perhaps
catch your eye? Made you wonder if I accidentally pushed the wrong
branch? or skewed something up big time? Well, nuh uh. I just happen to
be fed up with the melee attack chain still using stringized params
instead of an array/list. It was frankly revolting to see how I'd have
had to otherwise call `list2params` for what I'm trying to accomplish
here, and make this PR another tessera to the immense stupidity of our
attack chain procs calling `params2list` over and over and over instead
of just using that one call instance from `ClickOn` as an argument. It's
2025, honey, wake up!
I also tried to replace some of those single letter vars/args but there
are just way too many of them.
Improving old code. And I want to be able to pet mobroaches while
holding them too.
🆑
qol: You can now interact with held mobs in more ways beside wearing
them.
/🆑
Fixes the delam hallucination proc to actually calculate based on
distance from the supermatter.
Fixes 2.5 year old bug.
🆑 LT3
fix: Supermatter delamination now applies hallucinations based on
distance
/🆑
## About The Pull Request
Redoes the delam alarm sounds.
- Only the main engine will play the long ass Skyrat meltdown clips
- Cooldown added on the long clips so it's not playing a 12 second sound
every 30 seconds
- Properly times meltdown.ogg with the actual SM delam.
## Why It's Good For The Game
I hate it when the engineers are battling a delam, keeping it hovering
below 40% and we're subjected to the constant annoyance of that
announcement.
The first time the long clip plays, the station is now aware the engine
is now delamming. You don't need to repeat it every 30 seconds.
## Proof Of Testing
I did, much.
## Changelog
🆑 LT3
qol: Engine delam station-wide sound announcements are only triggered by
the main engine
/🆑
## About The Pull Request
- Some fixes for the supermatter crystal anomaly generation, ensuring
they spawn outside the chamber windows and adds the outright missing
dimensional anomalies.
- Hallucination duration is calculated based on both distance from the
SM as well as the size of the delam explosion (a modifier of 0.75x for a
small explosion, up to 1.25x for the largest delam explosion)
## Why It's Good For The Game
Bugfixes, improvement on the delam hallucination.
## Changelog
🆑 LT3
fix: Fixed supermatter anomaly generation, hallucination is based on
distance and delam explosion size
/🆑
## About The Pull Request
- Some fixes for the supermatter crystal anomaly generation, ensuring
they spawn outside the chamber windows and adds the outright missing
dimensional anomalies.
- Hallucination duration is calculated based on both distance from the
SM as well as the size of the delam explosion (a modifier of 0.75x for a
small explosion, up to 1.25x for the largest delam explosion)
## Why It's Good For The Game
Bugfixes, improvement on the delam hallucination.
## Changelog
🆑 LT3
fix: Fixed supermatter anomaly generation, hallucination is based on
distance and delam explosion size
/🆑
## About The Pull Request
People can now pet held mothroaches and pugs if they want to, or use
items on them, hopefully without causing many issues. After all, it only
took about a couple dozen lines of code to make...
...Oh, did the 527 files changed or the 850~ lines added/removed perhaps
catch your eye? Made you wonder if I accidentally pushed the wrong
branch? or skewed something up big time? Well, nuh uh. I just happen to
be fed up with the melee attack chain still using stringized params
instead of an array/list. It was frankly revolting to see how I'd have
had to otherwise call `list2params` for what I'm trying to accomplish
here, and make this PR another tessera to the immense stupidity of our
attack chain procs calling `params2list` over and over and over instead
of just using that one call instance from `ClickOn` as an argument. It's
2025, honey, wake up!
I also tried to replace some of those single letter vars/args but there
are just way too many of them.
## Why It's Good For The Game
Improving old code. And I want to be able to pet mobroaches while
holding them too.
## Changelog
🆑
qol: You can now interact with held mobs in more ways beside wearing
them.
/🆑
## About The Pull Request
Fixes the delam hallucination proc to actually calculate based on
distance from the supermatter.
## Why It's Good For The Game
Fixes 2.5 year old bug.
## Changelog
🆑 LT3
fix: Supermatter delamination now applies hallucinations based on
distance
/🆑
## About The Pull Request
Fixes the delam hallucination proc to actually calculate based on
distance from the supermatter.
## Why It's Good For The Game
Fixes 2.5 year old bug.
## Changelog
🆑 LT3
fix: Supermatter delamination now applies hallucinations based on
distance
/🆑
## About The Pull Request
Commit messages should be descriptive of all changes.
The "incorrect `\The` macro capitalization" was intentional when it was
added, but as far as I know TG says "the supermatter" rather than "The
Supermatter," so it's incorrect now.
This is completely untested. I don't even know how you'd go about
testing this, it's just a fuckton of strings.
Someday I want to extract them and run NLP on it to catch grammar
problems...
## Why It's Good For The Game
Basic grammar pass for name strings. Should make `\the` work better and
avoid cases like `the John Smith`.
## About The Pull Request
Autodrobes now supply GAGs santahats.
## Why It's Good For The Game
Festive customisation.
## Changelog
🆑
fix: Made autodrobes dispense the right santahats.
/🆑
---------
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
## About The Pull Request
Adds the missing description for the festive supermatter
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>
</details>
## About The Pull Request
`boldannounce` is NOT for use ICly it's only for OOC stuff. `bolddanger`
is identical it just doesn't carry the same baggage
## Changelog
🆑 Melbert
fix: Stuff like the SM exploding will no longer output to your OOC tab
/🆑
## About The Pull Request
The supermatter no longer will spawn anomalies inside pipes, vents,
ebeams, cables, etc, as it now uses RANGE_TURFS instead of orange. We
believe this was the intention, as it is hard pathed to
var/turf/local_turf already, rather than any atom.
## Why It's Good For The Game
Technically, anomalies can pop out of the pipes when moving just fine,
however it can lead to confusion if the anomaly is unable to move, or
repeatedly fails to move, keeping it inside the pipe, before triggering
its ending effect (pyroclastic for example, or on paradise where we
found this issue, bluespace anomalies) could make it look like a fire
came out of no where, as it is effectively invisible when in a pipe.
And the anomaly is likely destroyed when whatever it spawns in is
destroyed, so ebeam anomalies would not even exist.
## Testing (with message admins not breakpoints)
Before: Some examples of the Supermatter spawning anomalies (with
message admins showing their LOC on initialize)

After: After running the supermatter with high energy to spawn anomalies
for a while:

(Sorry if this needs a no GBP label or something for being a one line
fix, first time pring here)
## Changelog
🆑
fix: Anomalies no longer spawn in objects or mobs from the supermatter.
/🆑
## About The Pull Request
Accumulates energy for supermatter zaps. The supermatter will build up
zap energy over time. It uses up a portion of that energy to release
zaps. Also allows it to zap multiple times between SSmachines ticks.
## Why It's Good For The Game
This allows the supermatter to zap more than once per 2 seconds again,
while still taking SSmachines time perspective.
## Changelog
🆑
balance: The supermatter accumulates zap energy and discharges a portion
of it to use for zapping per atmos tick, no longer being bounded by
machinery ticking.
/🆑
## About The Pull Request
This PR kills the abstract internal and external typepaths for organs,
now replaced by an EXTERNAL_ORGAN flag to distinguish the two kinds.
This PR also fixes fox ears (from #87162, no tail is added) and
mushpeople's caps (they should be red, the screenshot is a tad
outdated).
And yes, you can now use a hair dye spray to recolor body parts like
most tails, podpeople hair, mushpeople caps and cat ears. The process
can be reversed by using the spray again.
## Why It's Good For The Game
Time-Green put some effort during the last few months to untie functions
and mechanics from external/internal organ pathing. Now, all that this
pathing is good for are a few typechecks, easily replaceable with
bitflags.
Also podpeople and mushpeople need a way to recolor their "hair". This
kind of applies to fish tails from the fish infusion, which colors can't
be selected right now. The rest is just there if you ever want to
recolor your lizard tail for some reason.
Proof of testing btw (screenshot taken before mushpeople cap fix, right
side has dyed body parts, moth can't be dyed, they're already fabolous):

## Changelog
🆑
code: Removed internal/external pathing from organs in favor of a bit
flag. Hopefully this shouldn't break anything about organs.
fix: Fixed invisible fox ears.
fix: Fixed mushpeople caps not being colored red by default.
add: You can now dye most tails, podpeople hair, mushpeople caps etc.
with a hair dye spray.
/🆑
## About The Pull Request
Hitting an SM with extraction tongs won't dust them anymore (the tips
are made out of hypernob too)
## Why It's Good For The Game
consistency
(real reason is me hitting the sm crystal with tongs while sleep
deprived and ruining my planned gimmick, but come on. theyre hypernob
tongs. )
## Changelog
🆑
fix: Hitting an SM with extraction tongs won't dust them anymore
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Fikou <23585223+Fikou@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
## About The Pull Request
The supermatter no longer will spawn anomalies inside pipes, vents,
ebeams, cables, etc, as it now uses RANGE_TURFS instead of orange. We
believe this was the intention, as it is hard pathed to
var/turf/local_turf already, rather than any atom.
## Why It's Good For The Game
Technically, anomalies can pop out of the pipes when moving just fine,
however it can lead to confusion if the anomaly is unable to move, or
repeatedly fails to move, keeping it inside the pipe, before triggering
its ending effect (pyroclastic for example, or on paradise where we
found this issue, bluespace anomalies) could make it look like a fire
came out of no where, as it is effectively invisible when in a pipe.
And the anomaly is likely destroyed when whatever it spawns in is
destroyed, so ebeam anomalies would not even exist.
## Testing (with message admins not breakpoints)
Before: Some examples of the Supermatter spawning anomalies (with
message admins showing their LOC on initialize)

After: After running the supermatter with high energy to spawn anomalies
for a while:

(Sorry if this needs a no GBP label or something for being a one line
fix, first time pring here)
## Changelog
🆑
fix: Anomalies no longer spawn in objects or mobs from the supermatter.
/🆑
## About The Pull Request
Accumulates energy for supermatter zaps. The supermatter will build up
zap energy over time. It uses up a portion of that energy to release
zaps. Also allows it to zap multiple times between SSmachines ticks.
## Why It's Good For The Game
This allows the supermatter to zap more than once per 2 seconds again,
while still taking SSmachines time perspective.
## Changelog
🆑
balance: The supermatter accumulates zap energy and discharges a portion
of it to use for zapping per atmos tick, no longer being bounded by
machinery ticking.
/🆑
## About The Pull Request
<details>
- renamed ai folder to announcer
-- announcer --
- moved vox_fem to announcer
- moved approachingTG to announcer
- separated the ambience folder into ambience and instrumental
-- ambience --
- created holy folder moved all related sounds there
- created engineering folder and moved all related sounds there
- created security folder and moved ambidet there
- created general folder and moved ambigen there
- created icemoon folder and moved all icebox-related ambience there
- created medical folder and moved all medbay-related ambi there
- created ruin folder and moves all ruins ambi there
- created beach folder and moved seag and shore there
- created lavaland folder and moved related ambi there
- created aurora_caelus folder and placed its ambi there
- created misc folder and moved the rest of the files that don't have a
specific category into it
-- instrumental --
- moved traitor folder here
- created lobby_music folder and placed our songs there (title0 not used
anywhere? - server-side modification?)
-- items --
- moved secdeath to hailer
- moved surgery to handling
-- effects --
- moved chemistry into effects
- moved hallucinations into effects
- moved health into effects
- moved magic into effects
-- vehicles --
- moved mecha into vehicles
created mobs folder
-- mobs --
- moved creatures folder into mobs
- moved voice into mobs
renamed creatures to non-humanoids
renamed voice to humanoids
-- non-humanoids--
created cyborg folder
created hiss folder
moved harmalarm.ogg to cyborg
-- humanoids --
-- misc --
moved ghostwhisper to misc
moved insane_low_laugh to misc
I give up trying to document this.
</details>
- [X] ambience
- [x] announcer
- [x] effects
- [X] instrumental
- [x] items
- [x] machines
- [x] misc
- [X] mobs
- [X] runtime
- [X] vehicles
- [ ] attributions
## Why It's Good For The Game
This folder is so disorganized that it's vomit inducing, will make it
easier to find and add new sounds, providng a minor structure to the
sound folder.
## Changelog
🆑 grungussuss
refactor: the sound folder in the source code has been reorganized,
please report any oddities with sounds playing or not playing
server: lobby music has been repathed to sound/music/lobby_music
/🆑