## About The Pull Request
Fixes tier 2 upgrade of the drinks dispenser
## Why It's Good For The Game
I just want a Duplex! Is that so much to ask? God damn!
## Changelog
🆑 LT3
fix: Restored missing tier 2 reagents in drinks dispenser
/🆑
## About The Pull Request
Restores the Bubber edits that made chem dispensers multi-tier
upgradeable.
## Why It's Good For The Game
The bartender can make my drink again.
## Changelog
🆑 LT3
fix: Restored missing tier 2/3 reagents in chemical and booze dispensers
/🆑
## About The Pull Request
Depends on #94064 for the unit test but offers a better method for
finding an atom to mount on
- Finding a mount now takes into consideration the objects pixel x & y
offsets meaning diagonal mounting is now supported. Gives great
flexibility for mappers
- If you don't want to use pixel offsets but default back to using the
objects direction that behaviour is still preserved. Useful if your
object uses directional icon states(lights & cameras for now) AND don't
use offsets
- If no direction could be specified then as the last resort it defaults
back to the objects local turf for mounting
## Changelog
🆑
fix: all mounted objects on tables, fences, windows & walls should fall
of correctly when the atom it is placed on is destroyed
fix: security telescreen now falls off when their mounted wall is
destroyed
fix: defib wall mount falls off when their mounted wall is destroyed
fix: floor lights are mounted to the ground/catwalk/tram floor they are
sitting on meaning destroying it will destroy the light
fix: wall mounted plaques now fall off when their mounted wall is
destroyed
/🆑
## About The Pull Request
#90241 added touch protection to `TOUCH|VAPOR` reactions of pretty much
every chemical, including Romerol
This change also gave Romerol application with `TOUCH|VAPOR` a chance
based on the volume applied
Because Romerol is only ever applied in very low volumes, like 1u, this
meant it basically never applied with those methods
I reverted that. Now, Romerol will always apply via
`PATCH|INGEST|INJECT|INHALE` and will otherwise always apply if >=1u is
applied
## Why It's Good For The Game
I don't see why Romerol, an already difficult chemical to acquire and
spread, should have a ~1% chance to actually work, it kind of ruins the
fun of the chem.
It's not even lethal when applied by chem, it does literally nothing
until people die.
## Changelog
🆑 Melbert
balance: Romerol, when applied via touch or vapor, is now guaranteed to
infect when using >=1u. (Prior, it had a % chance of infecting equal to
the amount of chemicals use - so 1u meant 1% chance to infect.) Other
methods of applying Romerol are unaffected (ingesting or injecting any
amount is still a guaranteed infection).
/🆑
## About The Pull Request
- Across the board, bleeding wounds cause ~0.85x slower blood loss.
- Wound clot rate while bandaged has also seen a ~0.85x reduction.
- And slashing wounds have also had their natural clotting rate reduced
by ~0.85x.
- All in all, blood wounds are expected to last marginally longer while
keeping the same level of deadliness.
- Sutures blood flow reduction has been reduced by ~0.85x as well.
Medicated suture is unaffected.
- Blood Mary now scales blood regeneration based on drunkness.
- Old: Flat 3 blood/tick.
- 0 drunkness = 0 blood/tick. 40 drunkness = 2 blood/tick. 80 drunkness
= 4 blood/tick.
- Epoetin Alfa saw drastic changes.
- No longer heals liver damage.
- No longer adds Sanguirite to the system.
- Now directly clots 0.1 flow of bloodiest wound (almost effectively
quadrupling clot rate, but 3x less effective than sanguirite)
- Blood/tick reduced from 3 blood/tick to 1 blood/tick.
- Now causes minor heart damage (0.2 damage/tick).
## Why It's Good For The Game
- A while back we were talking about how volatile blood wounds were.
Blood wounds are super scary, which is good, but just how scary they
were meant that the extent to which you interacted with this was a bit
stifled. My thoughts are slowing their pace a bit should open up more
opportunities for interaction while keeping them as scary.
- See above.
- Bloody Mary was ridiculously good at healing blood loss, better than
any chemical. The tweak to the effect aims to keep it as a pocket option
for aspiring bartender-alchemists without overpowering other chemicals
in medical contexts.
- Epoetin Alfa is effectively a producible form of Sanguirite which is
something that I believe is not mass producible for a reason (it's
really strong). The changes to it aim to make it a bit less potent that
sanguirite itself while keeping it as a viable blood healing option.
- I understand the liver healing is kinda a real world analog but in the
context of our chemical system, liver damage is something intentionally
not very common. It allows for complete negation of several other chem's
downsides. While I like this form of emergent chem mixing (mannitol and
bath salts, for example), this one earns a "particularly problematic"
badge due to negating 100% of the downsides of many chems.
## Changelog
🆑 Melbert
balance: Blood flow and clotting has universally been slashed by about
0.85x. This means blood wounds kill you slightly slower, but heal
slightly slower.
balance: Sutures now heal 0.85x less blood flow and gauze's clotting
bonus is also 0.85x lower. Medicated sutures are unaffected.
balance: Bloody Mary's blood healing effect now scales with how drunk
you are. Worse in low amounts, better in high amounts.
balance: Epoetin Alfa no longer generates Sangurite. It now directly
clots bleeding wounds (at a rate ~3x worse than sangurite, but still ~4x
better than the natural clotting rate)
balance: Epoetin Alfa no longer heals liver damage.
balance: Epoetin Alfa regenerates 3x less blood. It's still 4x effective
than Saline Glucose or Iron.
balance: Epoetin Alfa now causes minor heart damage (0.2 damage per
tick).
code: All "coagulating" effects now use a shared function.
/🆑
## About The Pull Request
Fixes#94284
When someone walks away from you after you try to put an inhaler to
their mouth, it'll cancel the do_after. Currently the do_after is based
on the item in your hand and not the mob you're targeting, which leads
to that issue. If you're just targeting yourself the effect is the same,
so if the bar appearing on the item was a design intention I can revert
it if you're only targeting yourself.
Also, the function for using the inhaler returns ITEM_INTERACT_ stuff
when it should so you stop whacking yourself and others with the inhaler
after using it.
## Why It's Good For The Game
bugfix
## Changelog
🆑
fix: inhalers no longer have infinite reach
fix: using an inhaler no longer results in whacking the target with it
afterwards
/🆑
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
## About The Pull Request
Empy lists. There are a lot of 'em.
<img width="981" height="512" alt="image"
src="https://github.com/user-attachments/assets/b94b041a-2904-466b-ab89-54bd1de11b4e"
/>
Going through ways to reduce memory I found a few easy ones here. Wires,
the edible component, the seethrough component. None of these are really
a concern when it comes to needing lists in memory for performance
reasons. Wires aren't going to be cut most of the time for each door. A
lot of food does not have any junkiness. Seethrough component lies
dormant most of the round. Etc.
Making lists lazy in these cases should be a no brainer.
Everything I tested still seems to work exactly the same.
## Why It's Good For The Game
Frees memory that is just taking up space a lot of the time.
## Changelog
Not player-facing, this is all under-the-hood stuff.
## About The Pull Request
If you are **within**
(inside)
(as in you climb into a disposal bin)
(like if you're about to be flushed)
a disposal bin or chute, and drop something, the item goes into the bin
(with you)
(inside the bid)
(like if you put an item in a bin like normal)
(it will also be flushed)
rather than onto the floor around the bin
https://github.com/tgstation/tgstation/pull/40723 added a bunch of
snowflake `Bumped` calls to mimic this effect - they have been removed.
## Why It's Good For The Game
Seems logical to me. It might break a bunch of stuff but it probably
won't.
## Changelog
🆑 Melbert
qol: If you are within a disposal bin or chute, and drop an item, the
item will go into the bin, rather than onto the floor outside of the
bin.
/🆑
## 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
A new trait, TRAIT_NO_OXYLOSS_PASSOUT, that prevents you from passing
out due to having over 50 oxyloss. Applied by taking nooart and being a
super hulk.
I couldn't replicate it, but if it's still a bug this definitely closes
#92771. Also I didn't remove the line in nooart that constantly removes
the knockedout trait from oxyloss for redundacy reasons. I mean if it's
going to keep removing the knockedout trait from hardcrit every turn
despite having nohardcrit that's probably intentional.
## Why It's Good For The Game
Bugfix I think. Also super hulks are supposed to be immune to everything
stun related and fight on no matter how much damage they've taken, so
yeah.
## Changelog
🆑
fix: Nooartrium patients and super hulks can no longer pass out from
oxygen damage
/🆑
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
## About The Pull Request
Closes#93635
`unique_reskin` is no longer a list on `/item`, now `/datum/atom_skin`
The actual reskinning behavior has been moved out to
`/datum/component/reskinable_item`
PKC reskinning is now handled via alt-click reskin, rather than via the
retooling kit. The retooling kit has been removed.
There's no limit on how many times you can reskin your PKC (though
perhaps we limit it to one reskin and keep the retooling kit as a way to
allow a miner to reskin it a second time?)
The Ashen Skull unique reskin is still a trophy, and instead unlocks its
unique reskin option in the alt-click radial.
## Why It's Good For The Game
I'm unsure why the retooling kit exists on its own, when it's relatively
cheap and just performs the behavior of alt-click reskinning.
So to keep it consistent with all other forms of reskinning I've just
made it baseline. To accomplish that I refactored reskinning.
The new form of reskinning allows for greater potential in adding
reskins, allowing far more than just an icon state change. Also we can
put it on turfs and mobs and structures now which is cool I guess
There's also the added benefit of being able to see an item's reskins
without needing to instantiate it, which the loadout menu uses to great
effect.
## Changelog
🆑 Melbert
refactor: Refactored item reskinning (the alt-click way), report any
oddities with that
del: Deleted the crusher retool kit, now you can just reskin your
crusher with alt-click. The Skull skin is still locked behind having the
Ashen Skull trophy applied.
fix: Stunswords no longer have an incorrect lore blurb
fix: Fixed loadout item reskinning's UI
/🆑
## About The Pull Request
Depends on #94064 for the unit test but offers a better method for
finding an atom to mount on
- Finding a mount now takes into consideration the objects pixel x & y
offsets meaning diagonal mounting is now supported. Gives great
flexibility for mappers
- If you don't want to use pixel offsets but default back to using the
objects direction that behaviour is still preserved. Useful if your
object uses directional icon states(lights & cameras for now) AND don't
use offsets
- If no direction could be specified then as the last resort it defaults
back to the objects local turf for mounting
## Changelog
🆑
fix: all mounted objects on tables, fences, windows & walls should fall
of correctly when the atom it is placed on is destroyed
fix: security telescreen now falls off when their mounted wall is
destroyed
fix: defib wall mount falls off when their mounted wall is destroyed
fix: floor lights are mounted to the ground/catwalk/tram floor they are
sitting on meaning destroying it will destroy the light
fix: wall mounted plaques now fall off when their mounted wall is
destroyed
/🆑
## About The Pull Request
You can swap beakers in a pandemic and the overall virus severity is now
displayed as a stat.
## Why It's Good For The Game
more convenient
## Changelog
🆑
qol: you can swap beakers in a pandemic
qol: pandemics now display overall virus severity
admin: virus logs now include severity along with other stats
/🆑
---------
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
## 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
At some point, ethereal charge drain was reworked/balanced, but the
three drinks that gave them charge never got their values changed. This
pr makes sure voltaic wine and equivalents no longer require drinking
generally unhealthy amounts to be able to charge oneself.
## Why It's Good For The Game
Being unable to use the neat effect of your species' only drinks without
killing your liver sucks.
## Changelog
🆑 WebcomicArtist
qol: Ethereal Drinks (Voltaic wine,telepole,pod tesla) now can feed
etherials decently without needing them to risk blacking out.
/🆑
## About The Pull Request
- Chiral inversion buffer now converts multiple reagents with 1u being
able to convert 10u of the entire solution & not just one reagent in the
target. This means if we have say 5u of reagent A & 5u of reagent B
where both can be inverted, then 1u of the inversing buffer can convert
both reagents
- Chiral inversion buffer can now be transferred to another reagent
holder if no conversion occurred instead of just disappearing into the
wind
- Fixes some objects displaying 0u of reagent transferred which happens
when reagent intercept occurs
## Changelog
🆑
fix: Chiral inversion buffer now converts multiple reagents
fix: Chiral inversion buffer can now be transferred into another reagent
holder if no conversion took place instead of just evaporating
fix: dropper, bottles & syringes now won't display messages like 0u of
reagent transferred
/🆑
## About The Pull Request
Makes slime potions, injector, and cookies use item_interaction.
generizices behavoir that potions typed under
`obj/item/slimepotion/slime/` only affect slimes, moves the handful of
potions that did not do that out of that type.
removed a random type casting for slime cookies to verify there human
before it checks for `TRAIT_AGEUSIA` as there is no reason other mobs
wouldn't be able to taste it.
do to the refactor you wont "bash" a lot of items if the interaction
fails.
## Why It's Good For The Game
<img width="439" height="68" alt="image"
src="https://github.com/user-attachments/assets/f398fb6c-8cbd-4092-9a64-8cccce87f8b6"
/>
## About The Pull Request
This 1st has to be PR'd so the integration tests can point out all
wallmounts that could not find a support structure to mount on. I then
will do many map edits to align them onto the closest atom
Yes we no longer use wall mount but atom mounted component. All objects
that are mounted on windows/tables & fences now also fall off when
destroyed
It'll probably be a WHILE before I can fix all wall mounts. Long day.
Expect me to misalign many stuff to fix failing CI so make sure to
provide suggestions when possible
Improved wallmount code overall
- Fixes#93793
## Changelog
🆑
fix: fixes all incorrectly maploded wall mounts that aren't actually
hanging on any support structure
fix: objects mounted on tables, windows & fences also fall off now when
destoryed
qol: lights can be mounted on windows
qol: cameras can be mounted on windows
qol: buttons can be mounted on tables
refactor: improved how wall mounts interact with objects as a whole
report bugs on github
/🆑
## About The Pull Request
renames Debug2 and kills Debug as its last use (atleast the one
described in its comment) was removed
added it to the check to print to print stack traces to chat in the
instance your debugging without a debugger attached for some reason (if
this var is enabled on live it already causes random to_world messages,
kinda fuck it we ball at that point)
## Why It's Good For The Game
The first one was ENTIRELY unused now
this name makes more sense
## Changelog
N/A
## About The Pull Request
Moves all blood handling into procs and adds ways to easily hook into
basically every basic blood behavior.
This PR is not meant to fix every single case of janky blood logic in
the game. The main point and motivation of this PR is to add hooks for
blood behaviors. This allows for way more flexibility with blood code.
I am not going to fix our 3000 instances of single-letter vars, wacky
blood transfers, etc. This is just the groundwork for future PRs to
build off of, and by itself, should do very little to change blood
behavior.
I also added a rigorous set of unit tests for verifying that all of the
basic blood volume procs work correctly.
## Why It's Good For The Game
Previously, blood was handled via directly reading/writing
[var/blood_volume]. This was INCREDIBLY inconsistent and there was no
way to hook into it. This PR makes blood handling way more consistent,
which is great for all sorts of features.
## About The Pull Request
Renames burn infestation -> burn infection
## Why It's Good For The Game
These are two radically different things and fortunately we not actually
modeling infestation.
In fact everywhere the user receives feedback about this value it uses
the correct word, infection.
So for the sake of the coders it should be accurate
## About The Pull Request
closes#93805
## Why It's Good For The Game
we actually have almost no emp logging at all lol, not even emp chem
reaction, so you barely can track potential griefer?
## Changelog
🆑
admin: EMP logs are improved, additionally chemical EMP reactions are
now logged.
/🆑
## About The Pull Request
Adds an "Insert" button to chemistry machine UIs so you don't have to
click on the physical machine behind the interface window.
<img width="1615" height="723" alt="Screenshot 2025-11-01 193237"
src="https://github.com/user-attachments/assets/184c02b1-5ee3-4426-af8e-4adae79d8703"
/>
## Why It's Good For The Game
- No more moving or closing UI windows just to insert containers
- Much easier to move beakers between different chemistry machines
## Changelog
🆑
qol: Added Insert beaker buttons to chemistry machines.
code: Minor code update for interacting with chemical machines
/🆑
so, the current `COMSIG_CARBON_SOUNDBANG` signal is kinda lame because:
1) it's relegated to carbon mobs
2) it means ear protection equipment actually has no effect when
`get_ear_protection` is called instead.
3) It's sent in more than one place in the code
So I replaced it with another signal, this one properly sent in
`get_ear_protection`, and therefore `soundbang_act` as well.
What's also lame is that the code for both `get_ear_protection` and
`soundbang_act` can be easily moved to the living type, and it wouldn't
make a huge impact aside causing simple mobs to be stunned very briefly
by flashbangs since they cannot be knocked down anyway. The less the
code is specific to a subtype, the easier it's to work with, the fewer
the paradigms etc.
Another lame thing is some of the code being kinda old. Also I wanted to
fix an issue with the shriek ling ability detailed in #93401. I wanted
to make the ability more consistent with how other sound-related
abilities work by making it use `soundbang_act`, but with an intensity
higher than any other feature so far, beside point-blank flashbangs
(holding on standing on one). I've also buffed the "ear protection"
offered by vacuums from 1 to 3, meaning nothing but point-blank
flashbangs will go through. Yes, this means shrieks are not good in a
vacuum because sound generally propagate in absence of molecules that
can transmit the vibration... at least IRL. The game's an approximation
anyway, but it's still inconsistent, like a fuckton of other things that
are even more outside of the scope of this PR. Well, at least it affects
simple/basic mobs too now.
## Why It's Good For The Game
This will fix#93401 and make some code less old and bad.
## Changelog
🆑
refactor: refactored code for ear/soundbang protection. Flashbangs and
other things can now affect simple/basic mobs as well, not just carbon
and occasionally silicons.
balance: Aliens are no longer impervious to soundbang_act. Still very
resistant to it due to their hardcoded ear protection
balance: How the resonant shriek changeling ability works is now
slightly more consistent with the ear/soundbang protection, meaning it
won't work well in a vacuum, but at least it works on simple mobs now.
fix: Everyone can now hear a changeling shriek, unless they're already
deafened or in a vacuum.
/🆑
## About The Pull Request
- Fixes synthflesh feedback messages
- When applied via touch, synthflesh isn't stored in the body and needs
a different set of feedback messages compared to when applied by
patch/gel.
- Applies a cooldown on the touch application message, so that if
someone builds a shallow pool of synthflesh the chat isn't spammed every
tick
## Why It's Good For The Game
Fixes https://github.com/tgstation/tgstation/issues/93582
## Changelog
🆑 LT3
fix: Synthflesh feedback messages properly reflect the method of
application
fix: Synthflesh feedback messages won't spam the chat log
/🆑
## About The Pull Request
<img width="911" height="633" alt="firefox_JwrWjsNY7Y"
src="https://github.com/user-attachments/assets/39712708-59e3-4c27-92cf-382a809048b4"
/>
If a holy cow udders its last words and no one is around to hear it,
does it make a runtime?
(Yes it does) It turns out that `get_hearers_in_view()` can early return
null as a micro optimization so it needs to be guarded against in here.
Also does a couple micro optimizations since this is fairly hot code.
## Why It's Good For The Game
Fixes a runtime.
## Changelog
Nothing
## About The Pull Request
Fun idea discussed on the discord.
At low pressure, cans of soda will burst at 67.458 kPa, which is WAY
higher than I would have expected, but that may just say something about
the construction of the average can of soda.
## Why It's Good For The Game
Fun little realism feature, which I found amusing enough for a quick 15
minute project. Only applies to cans that are actually exposed to atmos,
so a held can while in space or in the bag won't trigger this reaction.
## Changelog
🆑
add: Leaving a can of soda exposed to the elements at low pressure will
now burst.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
Most screen alerts that use the midnight hud style no longer have the
button baked in their icon. Other screen alerts with their own
background or shape (robot and mech alerts, atmos, heretic buffs or
debuffs etc.) are not affected. Also updated a couple sprites but didn't
spend too much time on them. Mostly reusing existing assets.
Montage of how the alerts look on threee different hud styles
(Operative, Trasen-Knox, Detective, ALSO I FIXED THE BUCKLED ALERT
ALREADY):
<img width="293" height="323" alt="image"
src="https://github.com/user-attachments/assets/3a2b972b-aa5a-4c27-a454-c8c39acf6e20"
/>
It looks only a smidge iffy on the syndicate since the top and bottom
borders aren't layered over all the overlays, but it isn't something to
worry about in this PR.
## Why It's Good For The Game
Screen alerts always had the midnight hud button baked in their icon
states (now overlays), which completely disregard the player's hud
setting, much unlike action alerts buttons. Melbert has also said that
it'd be nice if the code for action buttons could also be used in screen
alerts and viceversa, to slim things down. That's obviously not what I'm
doing today, but having most of the screen alerts already without the
baked background will surely help if we ever pursue that objective.
## Changelog
🆑
refactor: Refactored screen alerts a little. Most should now fit the
player's hud style. Report any issue.
imageadd: A few screen alerts have been polished/updated a little.
/🆑
## About The Pull Request
Saves us like, 10,000 - 20,000 lists per round by not initing a list for
every reagent
Uses a signal to handle allergic reactions blocking metabolism rather
than adding behavior `/reagent`
## Why It's Good For The Game
Will it matter? Probably not, is it cleaner? Heck yeah
## Changelog
🆑 Melbert
qol: Tox damage from allergic reactions is affected by tox damage
modifiers
refactor: Changed how allergic reactions to chem pause metabolism,
report any oddities
/🆑
## About The Pull Request
Fixes a logical inconsistency with several types of containers that are
**functionally open** for game mechanics (allowing refilling, transfer,
etc.) but are **perceived as closed** from a user perspective.
## About The Pull Request
Sterilizine is supposed to provide a 20% surgery speed bonus in
surgeries, but that part of the reagent's effects don't work due to it
using max( instead of min( like the other surgery modifying reagents.
This PR fixes that so Sterilizine can once again make surgeries faster.
## Why It's Good For The Game
Bugfix, the reagent has made surgeries faster before and should still do
it now.
## Changelog
🆑
fix: Sterilizine will now correctly apply its 20% surgery speed bonus.
/🆑
## About The Pull Request
- Fixes#93392
- Replaces all custom callbacks with call to `deconstruct()`. The
callbacks weren't necessary as it did the same thing as `deconstruct()`
but in an round about way
- Removed duplicate `Initialize()` procs and the params `building` &
`ndir` from all wall mounts. Makes everything cleaner
## Changelog
🆑
fix: wall mounts placed by player now falls off when the wall they are
mounted on is destroyed
code: cleaned up wall mount code
/🆑
## About The Pull Request
This is me picking up #93077 but with code changes relative to the two
new flags that Krysonism added in his PR, which unfortunately he never
finished.
## Why It's Good For The Game
Monkeys should be able to ventcrawl even if their left or right arm is
actually a chainsaw or armblade or whatever. See #93077
## Changelog
🆑 Krysonism
balance: prosthetic item limbs are no longer considered equipped items
for some purposes such as ventcrawling.
/🆑
---------
Co-authored-by: Krysonism <robustness13@hotmail.com>