## About The Pull Request
Main changes
- `handle_mutations` is gone, DNA Injectors are now managed via a status
effect
- `handle_diseases` is gone, disease stages are just handled via life
signal
- `handle_bodyparts` is gone, it was unused and in the future any
implementations should use a life signal
- `spec_life` is gone, the main content of it is now in `human/Life`,
most children implementations now use life signal, zombie tongues now
handle zombie groans
- Life signal was split in two (pre and active)
Other changes
- DNA injector code was cleaned up considerably
- HARS now alerts admins when you inject someone else with it like
Monkey
- `COPY_DNA_SE` is no longer mistakenly unused (meaning stuff like
transformation sting no longer copies "active mutations")
## Why It's Good For The Game
Across the course of a full round we spend the same amount of time doing
literally nothing in life as we spend on handling human breathing.
Now in the context of a full round this is 8 seconds. Which in the grand
scheme of things, not a whole lot, but if we can get a tiny performance
gain from... not doing literally nothing (especially when we can do
these things cleaner with signals) that's a win in my book
## Changelog
🆑 Melbert
refactor: Refactored dna injectors (both the ones that change appearance
and activate mutations), report any oddities with them like failing to
revert your appearance or mutations not applying correctly
code: Ever so slightly changed how diseases tick, report any oddities
code: Ever so slightly changed how some species mechanics tick, like
golems and slimes, report any oddities
code: The code behind printing appearance modifying dna injectors from
genetics has changed, report any oddities
code: Some backend transformation sting code changed slightly, report
any oddities
code: Zombie "idle" groaning is now tied to the tongue rather than the
species itself
admin: Force-injecting someone with HARS give an admin alert, the same
as force-injecting someone with Monkey
fix: Several methods of copying DNA (including transformation sting)
mistakenly copied "active mutations", this has been fixed
/🆑
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
## About The Pull Request
- The `prosthetic replacement` surgical operation has been reverted to
be closer to how it used to work: The operation is done targeting the
limb that's missing
The change was made out of necessity, as surgical state was tied to
limbs - you had to operate on the chest to re-attach limbs because there
was no limb to operate on.
To circumvent that, I have done the unthinkable of adding stumps when
you are dismembered.
- Missing limbs are now represented as an invisible, un-removable,
un-interactable limb.
Making this change was not as difficult as originally anticipated, and
(at least surface level) seems to have broken very little.
Surprisingly little had to change to make this work.
Direct accesses to `mob.bodyparts` was changed to `mob.get_bodyparts()`
with an optional `include_stumps` argument.
Similarly, `get_bodypart()` had an optional `include_stumps` added.
This means we ultimately barely needed to change anything, and in fact,
some loops/checks were able to be streamlined.
## Why It's Good For The Game
- As mentioned, this change was out of necessity and was easily the
least intuitive part of the broader changes. Reverting it back to how it
used to work should make it far easier for people to pick up on, and
means we can cut out a bunch of bespoke instruction sets that I had to
include.
- The addition of stumps also adds a ton of future potential - code wise
it allows for stuff like better damage tracking (we can transfer damage
between limb <-> stump rather than limb <-> chest), and feature we can
do "fun" stuff like have stumps bleed on dismemberment that you can
bandage.
## Changelog
🆑 Melbert
del: "Add prosthetic limb" surgical operation has been reverted to be a
bit closer to how it used to work - you operate on the missing limb /
limb stump, rather than on the chest.
refactor: Missing limbs are now represented as limb stumps. In practice
this should change nothing (for now), as no features were rewritten to
make use of these besides surgery. Please report any oddities with
missing limbs, however.
/🆑
## About The Pull Request
Heckacious Larincks mutation capitalizing wasnt consistent with the rest
of mutations, dis fix
## Why It's Good For The Game
consistency on (in?) grammar
## Changelog
🆑
spellcheck: fixed heckacious larincks not being properly capitalized
/🆑
## About The Pull Request
What it says on the tin. `times_fired` is the most unused parameter in
all mob procs. I say most because there were just 2 cases where it was
used
- handling breathing
- handling heartbeat
Besides these 2 cases this parameter did nothing in every proc. Removing
it does 2 things
- Makes those procs more readable as it now has 1 less parameter that
was documented poorly and did nothing
- Makes those procs slightly faster as we are passing 1 less variable to
its parameter call stack
It can easily be substituted with `SSmobs.times_fired` which was its
original value anyways
## Changelog
🆑
code: removes an unused parameter `times_fired` from mob life procs.
Making them function slightly faster
/🆑
## 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#94223
Also hulk now tracks your limbs, meaning that new limbs become green and
old ones lose their color upon getting detached.
## Changelog
🆑
fix: Hulk and infusions no longer texture robotic limbs
/🆑
## 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
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
Empath has become a component instead of a trait, letting it store
variables or whatever components are good for. Also, it works slightly
differently for empath quirk users and moon heretics alike.
Additionally:
- You can only shiver when you see an evil person once. After that it
won't happen again.
- Empaths no longer get a mood debuff from seeing someone distressed.
- Moon heretic empaths no longer get smited by evil people.
- Moon heretic empaths aren't scared of evil people.
The component also supports empaths being able to tell if a fake dead
body is actually dead, and being able to use empath on yourself, but
those aren't enabled for the empath quirk or moon heretics. (Self-empath
would probably powercreep self aware)
## Why It's Good For The Game
While the empath quirk is incompatible with the evil quirk, the trait
wasn't. That means you could potentially become an evil empath and still
feel bad about other people feeling bad and get smited by other evil
people. Being an empath is different from having empathy, and there's
now a personality trait (compassionate) that has a very similar feature
so the mood debuff got axed and moon heretics can't get smited by
mending touch anymore.
I think being a heretic and looking into pierced realities probably
means you have the mental fortitude to not freak out when you see an
evil person. Evil people are (probably) a lot less scary than whatever
mind destroying thing is in those holes.
As for the only-getting-scared-once bit, freaking out when you see an
evil person is flavorful but annoying after it happens multiple times.
Especially if it happens after examining the same person multiple times.
## About The Pull Request
Heretic has received a complete overhaul. This PR touches nearly every
aspect of the antagonist. For readability's sake, not every change is
going to be listed in this pull request.
For the full list of changes please refer to the design doc:
https://hackmd.io/@BiST8PJVRjiwVPY86U3bLQ/B11HyChz1g.
Code by Me, @Xander3359 and @Arturlang
TGUI by @Arturlang
Sprites by OrcaCora and GregorDM
Writing bits by @necromanceranne
### Core changes
- Cross-pathing has been removed. Main knowledge spells are now
exclusive to their path (for the most part).
- For every main knowledge unlocked (save for the robes and the blade
upgrade), Heretics can choose one option from a draft of 3 random side
knowledges (this is a free point).
- Heretics can now purchase side knowledges from a new tab, the
"Knowledge Shop". Side-knowledges have been divided by tier (Stealth,
Defense, Summons, Combat and Main). Tiers are unlocked as you progress
toward your main path.
- Heretics now gain the grasp and mark upgrade immediately, but their
main knowledge choices cost twice as much (except for the first spell,
the robes and the blade upgrade).
- Path specific robes have been introduced! They come with their own set
of quirks.
- Each Path has received a passive ability. This passive is upgraded
when you first create your robes, and again when you complete the Ritual
of Knowledge.
- Paths have been rebalanced as a result of the removal of cross-path
progression. Cosmic and Moon paths have received soft reworks.
- Upon unlocking the path 2nd level or reaching a total of 8 points
worth of knowledge, Heretics will lose the ability to blade break (and
the limit on blades all together).
- Ascension now automatically calls the shuttle with no possibility of a
recall.
- Late join Heretic has been removed.
### New UI
<img width="750" height="635" alt="moon path ui"
src="https://github.com/user-attachments/assets/184ef783-5c9c-48a1-a2f7-4807ca93e990"
/>
### Knowledge shop
<img width="787" height="669" alt="Knowledge shop"
src="https://github.com/user-attachments/assets/3dc89b84-8c70-4d47-b612-54396e3ea6e7"
/>
### Quality of life //General balance changes
- Heretics will now gain X-ray vision for a few seconds when nearby an
eldritch essence (this effect has a cooldown).
- Ritual of knowledge now requires 1 uncommon item instead of 2. You may
now use a stunprod instead of a baton to complete the ritual. Beartraps
have been removed from the list of possible reagents.
- The maximum number of possible sacrifices required to ascend has been
reduced from 6 to 5 while the minimum has been upped to 4.
- Codex Cicatrix no longer requires a special pen to be made.
### Passive abilities
- Heretics now start with a passive ability. You can find what it does
on the path info tab after a path has been selected, and what they gain
when upgraded.
- Crafting your first set of Eldritch robes will bump your passive to
level 2.
- Unlocking the 2nd level will subsequently unlock your "Ritual Of
Knowledge"
- Completing the ritual of knowledge or ascending will net you the final
level.
### Path Specific Robes
- Armorer's Ritual is no longer a side knowledge. Each path will have
their own unique version of the ritual. This is placed after the 2nd
spell in the tree.
- Robes can no longer be destroyed by fire and acid, grant t4 flash
protection (Moth Heretics stay winning) and protection against basic
syringes, to bring them on par with other antagonist's armor sets.
- The recipe to craft the robes is now a set of armor/vest, a mask (any
mask will do now, not just gas masks), plus the unique reagent required
for the blades (Plasma for Cosmic, Trash For Rust, match for Ash and so
on)
- Wearing the robes as a non-heretic may yield some unfortunate
side-effects.
### Moon Path Rework
Moon path rework.
Moon Heretics gain immunity to brain traumas and slowly regenerate brain
health. Equipping the moon amulette channels its effects through the
moon blade; making it unblockable and cause sanity damage instead of
brute. Ring leader's Rise now summons an army of harmless clones that
explode when attacked; the explosion briefly stuns non-heretics and
cause sanity and brain damage to them. Moon blade can also now be used
when pacified and Moon spells are no longer blocked by regular anti
magic, only mind magic protection.
**Cosmic Path Rework**
Cosmic path has received the biggest batch of changes alongside Moon.
The path has been dead last in ascension and pickrate (less than 5%) for
almost 2 years. It did gain some popularity over the last few months,
reaching the highest ascension rate in the game (12%) while mantaining a
relatively low pickrate.
Cosmic sits in a weird spot, where pretty much every knowledge
surrounding the path is either mediocre or, in the case of the
ascension, dysfunctional. Yet it has maintained a smidge of relevancy
due to how quickly Cosmic heretics can capture and sacrifice targets
thanks to Star Touch.
As a result, the best course of action would be to rebalance the
entirety of the kit; granting the heretic more tools to manipulate space
and dictate the flow of a fight, while lessening their ability to end a
confrontation by instantly sleeping their opponents.
lastly The Star Gazer is now ghost controlled ; And they shoot lazers!
<img width="636" height="451" alt="gazer gag 3"
src="https://github.com/user-attachments/assets/601d6881-c042-4e42-8ce6-ac90cd27848b"
/>
## Why It's Good For The Game
### Ok...but why do we want this?
Again, if you want my full reasoning, please check my doc
https://hackmd.io/@BiST8PJVRjiwVPY86U3bLQ/B11HyChz1g.
To keep it short and concise; Heretic is too complex and unintuitive for
its own good. Too impenetrable for new players and too abusable for
experienced players. This can be chalked up to a lot of poor design
decisions. But ultimately, what I believe being the biggest contributor
to the current status of Heretic is the ability to move into different
paths, also known as "Cross-Pathing".
### Cross Pathing my beloathed.
Cross-pathing, while cool in theory, overcomplicates the antagonist and
overloads them with power. Players dealing with the heretic are
incapable of working out what a given heretic can do. This also leads to
late game heretics having 3 rows Worth of action buttons and virtually
no weakness.
Over the last year, I've often received the understandable but also kind
of unfair accusations of making Heretic too powerful without a clear aim
or purpose.
My goal with the paths I've reworked over the last year (Rust,Void and
Blade) wasn't necessarily to just make them stronger (although that was
also part of the goal, as they were paths that were underperforming),
but for them to have more interactions with the sandbox and to better
live up to the fantasy presented to the player.
If an harbringer of frost gets countered by a cup of coffee, we probably
messed something up.
Unfortunately, the current incarnation of Heretic doesn't really allow
for surgical balance changes to specific paths. Every time a knowledge
gets buffed, we make every path that can easily tap onto that knowledge
stronger by default. It doesn't take a genius to understand why this
system is ultimately unsustainable.
### Blade Breaking
I feel that after a heretic has reached the near peak of their power,
they no longer need the ability to instantly escape any encounter. Check
my doc for my full reasoning.
## Less versatile, more specialized paths.
By removing cross-pathing, we remove a huge maintainability burden from
the antagonist. Paths can now be designed around clearer strengths and
weaknesses. They become easier to balance and less of an headache to
understand for everyone.
It also means we can give paths some needed quality of life quirks
without having to worry how such a change might have a knock-on effect
for other paths.
Ash heretics can finally let loose without dying by their own flames.
Cosmic Heretic can go to space without having to carry a modsuit. Moon
Heretic can use their abilities without fear of one random trauma
ruining their day, and so on.
### What a horrible night to have a curse...., wait how do I curse
people again?
As of right now the heretic tree has quite a hefty amount of trinkets
that pretty much never see use.
Partly because the tree itself is a nightmare to navigate. And partly
because why would anyone set up an elaborate plan or scheme when they
can unleash 2 rows of spell in the span of bunch of seconds.
Heretics mostly gravitate towards powers that push them towards greater,
more potent combat strength. If it doesn't contribute to killing people
quicker, it isn't worth doing for most. And given the opportunity cost
associated for taking those powers, they will remain that way so long as
there are better choices to be poached.
The new draft system encourages Heretics to play more with the tools at
their disposal. If you want to go for a specific combo from the side
path options, you may now do so by tapping into the knowledge shop.
Yes, the shop does include a few knowledges from the other paths. But
these are limited to 1 per path, are very expensive and can only be
unlocked very late into the shift.
## Drip Of the Mansus
The iconic heretic robe is actually sequestered to a side path that is
most easily access by only two paths at a time. Since heretic paths are
being made to be much more specialized, the most obvious way in which
this can be showcased is through an easily
identifiable outfit.
By using the robes, we can both telegraph WHAT heretic you are looking
at, and just how much power they've accumulated and when it is
reasonable to take the kid gloves off and treat them as a genuine
threat. If a heretic is in their
robes, that heretic is now a significantly more prominent danger to the
station.
It also serves as a useful means for gating some of the more powerful
effects of a heretic's path behind the robes, AND enable options for
disarming them of that power should they be captured without making it
something endemic to their mob.
A major problem with heretics is a lack of certainty as to how powerful
they have become. A heretics robes is one of the milestones to help
players dealing with heretics identify that.
### Will this be 100% fair and balanced?
This is a massive overhaul to a pretty complex and bloated antagonist.
I've done my best to show the changes to several maintainers and other
members of the community for their feedback. But at some point we'll
have to see how this behave in the environment to get a feel if
something is over or undertuned. (that's my way of saying, yes this is
likely gonna require a testmerge or two).
What I will say is that I'm not trying to change the core identity of
Heretic.
Heretics should have the upperhand in single encounters early on, be
able to joust a small group of players after they unlock their final
spell, and end the round when they ascend. They're a progression
antagonist. They should retain their payoff as well as pose a danger as
they grow stronger.
But if more players feel like they are more reliably able to play the
antagonist in more varied and interesting ways, rather than the
antagonist largely existing as a measuring stick for 'robustness' due to
its elitist design philosophy, then the rework has been a success. There
should be something for
everyone in the antagonist, as is true for all of our antagonist roles.
## About The Pull Request
ports https://github.com/DaedalusDock/daedalusdock/pull/1144
ports https://github.com/DaedalusDock/daedalusdock/pull/1147
full credit to @Kapu1178 for the juice
instead of `reacher.CanReach(target)` we now do
`target.CanBeReachedBy(reacher)`, this allows us to give special
behavior to atoms which we want to reach, which is exactly what I need
for a feature I'm working on.
## Why It's Good For The Game
allows us to be more flexible with reachability
## Changelog
🆑
refactor: refactored how reaching items works, report any oddities with
being unable to reach something you should be able to!
/🆑
## About The Pull Request
When a Mind Reader examines someone who is typing, it will show them
what they are actively typing
<img width="518" height="97" alt="image"
src="https://github.com/user-attachments/assets/8d54aa56-85fc-4e03-b0a3-bfb8e475beff"
/>
No, it won't read OOC messages.
## Why It's Good For The Game
Your next line is, "This sounds really funny for gimmicks like security
interrogations or fortune telling, or for getting the jump on someone as
they try to get the jump on you, or just to be a badass by finishing
people sentences"
## Changelog
🆑 Melbert
add: When a mind reader examines a mob, they'll get a glimpse into what
that mob is currently typing, before they even send the message.
qol: Mind Reader now groups up all the information it gives you in a box
admin: Mind Reader now logs everything the reader gleamed from the
read-ee
/🆑
## About The Pull Request
fixed copy paste mistake where there are 2 constructors for chav, 1
below elvis since it was copy pasted without being changed
## Why It's Good For The Game
chav accent might have been using the elvis word replacements and elvis
didn't replace words at all??
## Changelog
nobody will notice this :trollface:
## About The Pull Request
Increases the minimum possible damage an unarmed attack can inflict by
your athletics level.
For a normal human punch, you would typically roll between 5 and 10
damage. For a legendary athlete, they will always roll 10 damage.
For a normal human kick, you would typically roll between 7 and 15. For
a legendary athlete, they will instead roll between 14 and 15.
This alteration cannot increase your maximum potential damage. Only
improve the floor. If your arm has a max value of 1, it will be still 1
even if you're a legendary athlete.
TRAIT_STRENGTH increases the maximum possible damage you can roll by 2,
regardless of limb values. You still need to roll that damage, and this
is not a flat increase to the damage you deal.
The Strength gene has a higher instability due to its new functionality.
(5 > 10)
Your athletics skill also improves the possible outcomes of a stagger
combo.
## Why It's Good For The Game
Kryson has been nudging about this for weeks at this point so I'm taking
him up on his offer and implementing athletics benefits to standard
unarmed attacks.
Damage consistency does improve the average unarmed damage output of the
standard spaceman's humble fist, but it still keeps it within a
particular damage bound. Effects that increase the actual damage are
still gated behind temporary buffs, limb improvements or genetics, which
mostly means you're interacting with other players in some fashion or
will need to interact with other players to get the full monty of
possible unarmed improvements.
It also just _feels_ right. Improving fitness gives a lot of minor
imrpovements, but this one seems obvious for what it otherwise
thematically should be doing. If you appear to be strong, getting
punched by you probably will hurt and you are probably pretty good at
hitting with a particular kind of explosive power consistently.
## Changelog
🆑
balance: Unarmed attacks deal more consistent damage and more impactful
against staggered opponents the more athletic you are.
balance: The strength gene now improves your unarmed upper potential
damage a bit. It increases instability slightly more as a result.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
### Special versions are no longer vulnerable to recoil
There are two versions of hulk that are not available under normal
circumstances. The version given by wizard's Transformation, and the
version that Warlord pirates spawn with. These versions no longer break
their arms when destroying walls.
Normal versions, like the genetic hulks and the orc variant, still
suffer this effect.
### oof ow my bones
Hulk recoil damage now utilizes RNG wound determination. This allows for
the wound to escalate normally if the wound meets the threshold. The
damage passed means that there is a roughly 50/50 chance to cause a
dislocation, a very slim chance to roll a fracture, and this probability
will grow worse once the arm is wounded and threshold penalties start to
take effect.
This also means that the mutation respects wound resistance and wound
vulnerability, where as the previous behavior did not.
### Cleans up some mutation code a smidge
There is clearly some leftovers from prior refactors still littered
through mutation code, so I did some maintenance while I was here.
## Why It's Good For The Game
https://github.com/tgstation/tgstation/pull/51389 introduced this
weakness to dissuade hulks from flattening walls all the way to the
armory (for the fuckbillionth time). However, it applies to all versions
of hulk, including instances where it is an antagonist's ability or
power. Rather than have antagonists suffer from balance considerations
largely aimed at crew/tiders, we make them exempt so that they can SMASH
to their heart's content.
Hulk wound determination was kind of weird. For one, it relied heavily
on the arm health consistently being 50. When it wasn't, you started
getting into less reliable behaviour. In addition, it does not at all
respect any kind of vulnerability or resistance to wounding.
It is possible that utilizing this system was so that the wounding
effects would be staggered out rather than sporadic, and so slightly
fairer on the user by being more reliable. However, I think letting it
operate similarly to how our natural wound determination effects work
provides some more interesting outcomes for those who might want to use
the mutation in an earnest fashion, and still otherwise limits those
people who are just looking to low effort grief.
I think in retrospect this might have been a pretty heavy-handed nerf,
but I'm not wholly reversing it, I'm just making it...different.
Outcomes should be largely the same.
## About The Pull Request
Fixes#85028
Obscured flags and covered flags are tracked on carbons, updated as
items are equipped and unequipped. It's that shrimple.
Closes#92760
Just removes the species exception checks for not making sense
Also refactors handcuffs / legcuffs removal. In all of these situations
they were hardcoded when they could easily just use an inventory proc to
work.
## Why It's Good For The Game
Stops a million excessive calls to `check_obscured_slots`
Makes obscured behavior more consistent
Makes obscured behavior easier to use
Cleans up human rendering (There was some cursed stuff before with
render item -> updated obscured -> update body -> cause side effects)
## Changelog
🆑 Melbert
del: Golems which somehow manage to grow wings and somehow manage to
equip something that covers their jumpsuit can no longer fly.
(Seriously, this will not affect anyone)
refactor: Refactored clothing obscurity entirely. Items should be a
loooot more consistent and what covers what, and should update a lot
snappier. As always, report any oddities, like mysteriously disappearing
articles of clothing, hair, or species parts
refactored: Refactored handcuffs and legcuffs a bit, report any odd
situations with cuffs like getting stuck restrained
/🆑
## About The Pull Request
This fixes several bitfield operations that were missing parenthesis
encapsulation. I noticed this problem in:
- #92601
And decided to use regex to search for similar patterns which I came
across in:
- Move loops bypassing the `MOVELOOP_STATUS_RUNNING` status
- Elastic arms mutation bypassing `ABSTRACT` object flags for picking up
objects
- Species radiation bypassing `HEAD_HAIR` hairstyle flags for balding
- Damaged APC board status bypassing `EMAGGED` and `BROKEN` status for
screentips
- Shuttle cleanup code bypassing `MOVE_CONTENTS` for moving old turfs
- Tram crossing signals bypassing `NORTH` and `EAST` direction checks
## Why It's Good For The Game
Code behaves as intended.
## About The Pull Request
Fixes the issue of usr pointing to admins by making Trigger pass down
clicker, as usr is fucky and can be passed down by other unrelated
procs. Fun.
Added the clicker arg to all usages of Trigger as well
Also changes isobserver check in antagonist ui_act code that prevents
observers from clicking UI's instead to check if the ui.user is
owner.current
## Why It's Good For The Game
Fixes admins giving heretic to people opening the heretic UI for the
admin instead
(cherry picked from commit 0bc42d6940)
## About The Pull Request
Fixes the issue of usr pointing to admins by making Trigger pass down
clicker, as usr is fucky and can be passed down by other unrelated
procs. Fun.
Added the clicker arg to all usages of Trigger as well
Also changes isobserver check in antagonist ui_act code that prevents
observers from clicking UI's instead to check if the ui.user is
owner.current
## Why It's Good For The Game
Fixes admins giving heretic to people opening the heretic UI for the
admin instead
## About The Pull Request
There was a PR I wanted to make, but one of the features I wanted the
addition to have was for an affected mob to only speak aphasic, but
understand whatever languages they'd normally be able to understand.
This, in turn, required refactoring language holders to separately block
language speech and comprehension. This change, I decided, would be good
to split into its own PR.
## Why It's Good For The Game
Allows more fine-grained control over what languages an atom is blocked
from speaking or understanding. This will be useful for future PRs or
admin events.
## Changelog
no player-facing changes
## About The Pull Request
There was a PR I wanted to make, but one of the features I wanted the
addition to have was for an affected mob to only speak aphasic, but
understand whatever languages they'd normally be able to understand.
This, in turn, required refactoring language holders to separately block
language speech and comprehension. This change, I decided, would be good
to split into its own PR.
## Why It's Good For The Game
Allows more fine-grained control over what languages an atom is blocked
from speaking or understanding. This will be useful for future PRs or
admin events.
## Changelog
no player-facing changes
This PR aims to clean or bring up to date portions of code about dna,
the dna console and mutations. This includes taking care of or removing
some of the awful choices like the pratically useless
`datum/mutation/human` pathing, or the class variable, in favor of using
sources to avoid potential issues with extraneous sources of a mutation.
The files changed are over a hundred just because I removed the
`datum/mutation/human` path, but the actual bulk of the code is mainly
shared between the datum/dna.dm, _mutations.dm and dna_console.dm.
Mutation shitcode is hurting my future plans for infusions a little.
Also it's a much needed refactor. Drafted 'till I'm sure it works
without issues.
🆑
refactor: Refactored mutation code backend. Report any issue.
/🆑
## About The Pull Request
This PR aims to clean or bring up to date portions of code about dna,
the dna console and mutations. This includes taking care of or removing
some of the awful choices like the pratically useless
`datum/mutation/human` pathing, or the class variable, in favor of using
sources to avoid potential issues with extraneous sources of a mutation.
The files changed are over a hundred just because I removed the
`datum/mutation/human` path, but the actual bulk of the code is mainly
shared between the datum/dna.dm, _mutations.dm and dna_console.dm.
## Why It's Good For The Game
Mutation shitcode is hurting my future plans for infusions a little.
Also it's a much needed refactor. Drafted 'till I'm sure it works
without issues.
## Changelog
🆑
refactor: Refactored mutation code backend. Report any issue.
/🆑
Refactors most of blood handling code untouched by #90593 and completely
rewrites all blood decals, components and reagents.
- Blood types now have behavioral flags which allow them to control
where they leave decals/DNA/viruses. Oil no longer transfers DNA and
viruses with it, while podpeople water-blood doesn't leave visible
decals on turfs and items, but still can be picked up by DNA scanners.
- Multiple blood types have received unique handling - liquid
electricity blood now glows in the dark, oil trails are flammable and
lube ones are slippery. Oil blood can be restored with fuel, lube with
silicon and slime with stable plasma (as normal plasma already passively
regenerates their blood), instead of everything using iron. Saline
solution only supplements on iron-based blood and won't do anything to
help with bloodloss for species who rely on different blood types.
(Roundstart this applies only to Ethereals)
- All blood logic has been moved away from the blood reagent itself into
a blood element that is assigned to the blood reagent by default, and to
any reagent that's drawn from a mob as their "blood" (in
``transfer_blood_to``). This means that blood you draw from lizards will
be green and have lizard's blood description instead of mentioning red
blood cells, Ethereal "blood" will actually contain their DNA and genes,
etc.
- Refactored all blood decals. Blood states are no more, everything is
now handled via blood DNA. Credits to MrMelbert and Maplestation, as a
significant amount of code has been taken from
https://github.com/MrMelbert/MapleStationCode/pull/436 and many of his
followup PRs. Oil and xenomorph splatters are now subtypes of blood,
blood drying is now animated, blood trails now curve and can be
diagonal.
- Rewrote bloodysoles and bloody_spreader components, credits to Melbert
again for the former, while latter now makes more sense with its
interactions. Bloody soles no longer share blood DNA with your hands.
- Ported Melbert's bloody footprint sprites and bot-blood-spreading
functionality.
- Removed all species-side reagent interactions, instead they're handled
by said species' livers. (This previously included exotic blood
handling, thus the removal)
- Slightly optimized human rendering by removing inbetween overlay
holders for clothing when they're not needed.
- Blood-transmitted diseases will now get added to many more decals than
before.
- Cleaned up and partially refactored replica pods, fixed an issue where
monkeys/manipulators were unable to harvest mindless pods.
- Exotic bloodtype on species now automatically assigns their blood
reagent, without the need to assign them separately.
- Clown mobs now bleed (with colorful reagent instead of blood during
april fools), and so do vatbeasts (lizard blood)
- Implemented generic procs for handling bleeding checks, all sorts of
scanners now also correctly call your blood for what it is.
- Podpeople's guts are now lime-green like their organs, instead of
being weirdly greyish like their water-blood. (Their bleeding overlays
are still grey, as they're bleeding water)
- Slimepeople now can bleed. Their jelly is pale purple in color, but
their wound overlays copy their body color.
- Injecting/spraying/splashing/etc mob with a reagent preserves its
data, so you could theoretically recycle fine wines from someone's
bloodstream
- Fixed burdened chaplain's sect never actually giving a blessing when
applying effects, and giving a blessing when nothing can be healed.
Inverted check strikes again.
- Closes#91039
A lot of blood here has dried, visually the blood colors are almost
exactly the same as before either of the blood refactors.


## About The Pull Request
Refactors most of blood handling code untouched by #90593 and completely
rewrites all blood decals, components and reagents.
- Blood types now have behavioral flags which allow them to control
where they leave decals/DNA/viruses. Oil no longer transfers DNA and
viruses with it, while podpeople water-blood doesn't leave visible
decals on turfs and items, but still can be picked up by DNA scanners.
- Multiple blood types have received unique handling - liquid
electricity blood now glows in the dark, oil trails are flammable and
lube ones are slippery. Oil blood can be restored with fuel, lube with
silicon and slime with stable plasma (as normal plasma already passively
regenerates their blood), instead of everything using iron. Saline
solution only supplements on iron-based blood and won't do anything to
help with bloodloss for species who rely on different blood types.
(Roundstart this applies only to Ethereals)
- All blood logic has been moved away from the blood reagent itself into
a blood element that is assigned to the blood reagent by default, and to
any reagent that's drawn from a mob as their "blood" (in
``transfer_blood_to``). This means that blood you draw from lizards will
be green and have lizard's blood description instead of mentioning red
blood cells, Ethereal "blood" will actually contain their DNA and genes,
etc.
- Refactored all blood decals. Blood states are no more, everything is
now handled via blood DNA. Credits to MrMelbert and Maplestation, as a
significant amount of code has been taken from
https://github.com/MrMelbert/MapleStationCode/pull/436 and many of his
followup PRs. Oil and xenomorph splatters are now subtypes of blood,
blood drying is now animated, blood trails now curve and can be
diagonal.
- Rewrote bloodysoles and bloody_spreader components, credits to Melbert
again for the former, while latter now makes more sense with its
interactions. Bloody soles no longer share blood DNA with your hands.
- Ported Melbert's bloody footprint sprites and bot-blood-spreading
functionality.
- Removed all species-side reagent interactions, instead they're handled
by said species' livers. (This previously included exotic blood
handling, thus the removal)
- Slightly optimized human rendering by removing inbetween overlay
holders for clothing when they're not needed.
- Blood-transmitted diseases will now get added to many more decals than
before.
- Cleaned up and partially refactored replica pods, fixed an issue where
monkeys/manipulators were unable to harvest mindless pods.
- Exotic bloodtype on species now automatically assigns their blood
reagent, without the need to assign them separately.
- Clown mobs now bleed (with colorful reagent instead of blood during
april fools), and so do vatbeasts (lizard blood)
- Implemented generic procs for handling bleeding checks, all sorts of
scanners now also correctly call your blood for what it is.
- Podpeople's guts are now lime-green like their organs, instead of
being weirdly greyish like their water-blood. (Their bleeding overlays
are still grey, as they're bleeding water)
- Slimepeople now can bleed. Their jelly is pale purple in color, but
their wound overlays copy their body color.
- Injecting/spraying/splashing/etc mob with a reagent preserves its
data, so you could theoretically recycle fine wines from someone's
bloodstream
- Fixed burdened chaplain's sect never actually giving a blessing when
applying effects, and giving a blessing when nothing can be healed.
Inverted check strikes again.
- Closes#91039
#### Examples
A lot of blood here has dried, visually the blood colors are almost
exactly the same as before either of the blood refactors.


I was about to start working on something, but then I've noticed
chromosomes-related code was looking quite old and had some magic
numbers in it, so I've decided to update it a little.
Better code.
N/A
---------
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
## About The Pull Request
I was about to start working on something, but then I've noticed
chromosomes-related code was looking quite old and had some magic
numbers in it, so I've decided to update it a little.
## Why It's Good For The Game
Better code.
## Changelog
N/A
---------
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
## About The Pull Request
Fixes#90637
Adds on remove effects for Farsight and Rock Absorber, because I forgot.
## Changelog
🆑 Melbert
fix: Losing Farsight or Rock Absorber mutations will properly drop their
effects as well
/🆑
## About The Pull Request
- Hypermetabolic Blood
- You bleed 1.5x more, but regenerate blood 6x faster.
- For reference: A moderate slash wound is ~2 blood loss per tick, a
crit slash wound is ~4 blood loss per tick, and you regenerate ~0.25
blood per tick.
- For weak bleed wounds, you will net lose less blood per tick with the
mutation than without.
- However, for strong bleed wounds you will net lose more blood per tick
with the mutation.
- Ultimately, you will (obviously) recover much faster once closing the
wound.
- Affected by synchronizer and power
- Rock Eater
- You can eat materials like a golem.
- Rock Absorber
- You can eat materials like a golem, and you will also gain golem buffs
from them.
- Combination gene from "Rock Eater" and "Stoner"
- I didn't (deeply) vet if any of these effects would be OP combined
with other genes, but I'm chalking it up to emergent gameplay if I miss
something
- Farsight
- Gives you an action button which lets you expand your view range
- Affected by power
- Inexorable
- Disables soft crit, but entering the threshold for soft crit will
cause ticking brute/toxin damage and force you to whisper.
- No slimepeople can't cheese this
- Also is an innate "painkiller".
- Affected by synchronizer
## Why It's Good For The Game
Just some random mutation ideas I had, for more genetics shenanigans.
They're all relatively unobtrusive but have some niche potential
(Bleeding more for Blood Cult? Farsight + Thermals? Inexorable +
Martyrdom?)
## Changelog
🆑 Melbert
add: "Hypermetabolic Blood" Mutation
add: "Rock Eater" Mutation
add: "Rock Absorber" Combination Mutation
add: "Farsight" Mutation
add: "Inexorable" Mutation
/🆑