<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->
## About The Pull Request
The unfathomable curio now only blocks when equipped to the belt slot,
and not when equipped in the hand.
The shielded component now no longer blocks despite not having a wearer,
and does not block if the wearer is not the same as the owner in the
``hit_reaction()`` proc.
Fixes https://github.com/tgstation/tgstation/issues/82068
## Why It's Good For The Game
The curio was only blocking while in-hand, rather than how it should be;
in the belt slot. Now it does what it is supposed to.
On top of that, this fixes what I think has been a bug for quite some
time with shield_inhand just not being respected whatsoever with regards
to whether or not the component worked. It only really determined
whether or not you got the sprites added/removed, but didn't factor into
the blocking ability whatsoever.
## Changelog
<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->
🆑
fix: Unfathomable Curios now properly block as expected.
fix: The shielded component actually respects the shield_inhand when
determining blocking potential.
fix: Ensures that the shielded component has a wearer before attempting
to block, and that this wearer is the same as the owner of the item.
/🆑
<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Wisdom Cows can now be milked for a random reagent (excepting the
randomly generated reagent blacklist).
Also I changed it to say `you milk the cow` instead of `you milk the
udder` because the latter is stupid.
## Why It's Good For The Game
My experience is that people totally ignore this event when it occurs,
which is _fine_ when we have so many events and they don't all need to
be high impact but I think someone discovering that you can milk the cow
for cognac or meth or something could add something to a round.
I want people to bicker over ownership of the cow, basically.
If the reagent is annoying you can simply speak to the cow to receive
its wisdom and it will disappear.
## Changelog
🆑
add: Wise cows produce surprising milk.
spellcheck: You now milk the owner of an udder, not the udder.
/🆑
## About The Pull Request
use_glow variable is now actually checked (i think this is a fix?)
sets it to FALSE for snow storms cuz it looks cool
## Why It's Good For The Game
i think its more visually appealing for the no glow part
and also bug fix
i mean check this swag

## Changelog
🆑
fix: Certain weather types that arent supposed to be glowing no longer
glow
image: Snow storms no longer glow
/🆑
## About The Pull Request
Allows players to modify the suit sensors of someone else's jumpsuit
without first requiring them to disrobe them.

## Why It's Good For The Game
It's annoying for players, usually antags, who are attempting to kidnap
someone and then disable their suit sensors they must first entirely
disrobe them, change the sensors, and then put everything back onto
them.
## Changelog
🆑
balance: You can now adjust the suit sensors of another player in the
strip menu. No longer must you first take it off.
/🆑
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
## About The Pull Request
After months of preparation, and further months of work, I am finally
done. Please bear with me, as this is a massive refactor, but I have
already atomized everything I could. This is now ready for review.
General
- The hilbert hotel slimes are now a subtype instead of a varedit.
- The `use_mob_ability` subtree now also accepts non cooldown abilities.
If set_behaviours is set up properly, mobs won't keep continously
triggering it as if it were a 0 second cooldown action. The alternative
would have been turning the slime abilities into cooldown abilities.
- Wrestling off a slime now signs up to the `COMSIG_ATOM_ATTACK_HAND`
signal, instead of being part of attack_hand.
- Adds datum/ai_controller/controller as a fourth, optional argument to
`/datum/ai_behavior/find_hunt_target/valid_dinner()` to make it possible
to access blackboard keys.
- Slimes no longer attack windows if they would accidentally move into
them (when the conditions are met), since random walk behaviour ignores
tiles they can't go in. It was also not worth to keep. Did you know this
was the sole override of `ObjBump()`?
- Examine was made less snowflaky/bespoke. Also added a new element:
`/datum/element/basic_health_examine`, which is a simple bespoke element
that prints out a custom message based on how damaged the basic mob it
is attached to is.
- Slimes only perform knockdown instead of paralysis, as they can attack
more often now, and paralysis is not that fun.
- LAssailant has been removed due being archaic code. To befriend a
slime, you have to spawn a monkey with the slime console, or feed them a
sheet of plasma. Simple grabbing the monkey or stuffing them in
disposals do not work anymore. Slime console spawned monkeys will have a
visible status effect, with pheromones coming off them to make this
clearer.
Actions
- Feeding, reproduction and evolution is no longer a verb.
- Slime feeding is no longer an action button. You have to use right
click, or as previously, mousedrop. Slimes can always unbuckle from mobs
they are attached to.
Hunger
- Instead randomly changing the starvation and max nutrition values
while growing up, evolution costs 200 nutrion. This makes the code more
readable, and behaviour more predictable, while still giving the
intended time between evolving and splitting. As a result, I could also
turn these into defines.
- Added a component that handles doing an effect over time while buckled
to a mob, until the mob dies or you get unbuckled.
- Slimes gained nutrition is no longer randomly multiplied by the damage
config value, but rather gain nutrition equal to twice the damage dealt.
You'll have to eat one monkey to evolve, just as before.
- Slimes do not heal passively. They only heal from eating. It was a
rather miniscule value that did not have much effect.
- Slimes generate electricity from hunger threshold, instead of the
random amount of hunger threshold + 100.
Environment
- Slimes take 15 damage from cold every second, instead of using a
complex formula (that also decreased the damage up to a point?).
- Slimes still heal from burn damage, but this is now set on the damage
coefficient list.
- Slimes instead of getting stunned by the cold, freeze in an ice cube.
BZ instead of setting them unconscious, calls the stasis status effect,
allowing you to safely stash your hungry slimes for later. They also no
longer slow down from the cold, as they are already slowed down by the
damage they get. Conversely they no longer get a speed up from a random
amount of temperature. I could be convinced to readd this either as part
of the basic sensitive component, or a similar one.
AI
- Removed the attacked_stacks system. Slimes will just perform regular
retaliation if you hit them in a harmful manner.
- Slimes now use the pet orders component. They will interrupt their
feeding when given a command by their master.
- Slimes have their own subtrees. I tried to replicate as much as I
could from the old code, dividing ancient code artifacts and intentional
stuff, so there might be some weirdness.
- Slime speech has been almost fully reduced to basic blorbing, as you
can not even understand them anymore, and most of them require the slime
to loop through all of their surroundings.
- Discipline does not have stacks either. Disciplined baby slimes have a
chance to clear their attack and hunt blackboard keys. All slimes will
stop feeding on the target otherwise.
- Since discipline is not a stack, rabidity instead gets removed at a
10% chance per disciplining.
- Slimes faces are a bit more randomly picked now.
## Why It's Good For The Game
- We want to convert all simple animals to basic mobs. Old slime code
was also very strange, and had some systems that have been replicated by
components.
- Slimes fully paralyzing you is not fun at all. Knockdown should give
you a fighting chance when a slime would like to eat you.
- Slimes slow down from the heavy damage they get from the cold, so I
don't think they need extra slowdown, nor do they need to speed up from
warmth, as they are already fast.
- Slimes turning into an icecube instead of becoming paralyzed from the
cold is more fun for the slimes, as they can break out for a few
moments. It is also funny.
- Slimes entering proper stasis from BZ is not just a visual indicator
of a slime that is safe to approach, but also keeps the slimes's hunger
value in check, allowing it to not starve while stopped. They can also
look around and blorble, instead of staring at a black screen, if player
controlled.
- The attack_stack and discipline_stack behaviours were rather
overcomplicated, and the xenobio mains I talked with didn't even know it
was a thing, so I argue it needed simplification.
- The bespoke friendship system of slimes was also too complicated.
Slimes slowly gained levels of trust, and at certain levels commands
costed friendship, and other levels, they did not. The binary friend/not
friend system that everything else in the game uses is much more
sensible.
- Using right click for feeding is much more sensible than using an
action, and then picking someone from a dropdown.
- Slime speech was very soulful but not only did it loop through
everything in sight, you couldn't even understand it unless you spoke
slime. Maybe it can be readded later in a different form.
- Slime's passive healing was miniscule, and having them rely on feeding
is more interesting.
also
fixes#81463
## Changelog
🆑
refactor: Slimes are now basic mobs. Please report any strange
behaviours!
balance: Slimes only stun you for two seconds when they shock you, the
rest of the duration is a knockdown.
balance: Slimes are not stunned from the cold, but rather, get frozen in
a freon icecube. BZ also puts them in complete stasis, instead of making
them unconscious. Their speed is likewise unchanged by temperatures.
balance: Slimes do not passively heal, they instead rely on feeding.
fix: Slimes can use the buckling screen alert to unbuckle and stop
feeding, along with clicking on the mob they are riding
/🆑
## About The Pull Request
I've recently noticed that the maploaded penguins from the snowdin away
mission were dying from unsafe atmos/temperature. This sparked the idea
of making a (focus only) unit test that would prevent this sort of
issues from happening.
This PR also implements the usage of the `atmos_requirements` and
`body_temp_sensitive` elements for simple animals too, cutting down the
copypaste.
## Why It's Good For The Game
More unit tests to make sure things are done correctly.
## Changelog
🆑
fix: Made sure that mapped critters (i.e. penguins on the snow cabin
away mission) can survive in the environment they're spawned in.
/🆑
## About The Pull Request
Fixes#81755
Alright instead of piggybacking off the departmental/non-departmental
distinction and prevent ourselves from constantly abusing the cargo
budget in order to achieve the very-specific effect of not wanting
players to abuse this card in certain contexts let's just leverage the
framework and expand it so that we can snowflake for admin/`holder` use
cases in stuff like debugging code on a local server while preventing
some player from stealing it off a newbie admin and immediately wrecking
the economy (although it is funny).
## Why It's Good For The Game
Probably a bad idea to continue to abuse the cargo budget like this
since the only reason why it's structured that way is just for specific
use-case exemptions in certain contexts - let's just do our own thing
now :3
## Changelog
🆑
admin: Advanced Debug Cards will still provide a whole lot of access,
but the way the money on those cards work is now a bit different.
Players shouldn't be able to use the money on those cards in any context
though, don't fret about that. Just know that the money printer goes
wrrrr
/🆑
---------
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
## About The Pull Request
Removes the camera assembly structure middleman between the camera
wallframe and camera machine. All its behavior has been instead moved to
the camera, and I've tried to keep as much of the behavior the same as
before.
This also fixes the issue that camera assemblies had where, upon the
construction being finished, it would move itself into the newly
finished camera machine, therefore taking itself off a wall, therefore
deconstructing itself. This resulted in 2 piece of iron being in each
camera machine (except roundstart ones), and because camera machines
rely on the assembly inside of them for upgrades and such, upgrading
didn't work at all.
I've also made camera nets use defines (not in map) so it's easier to
find a list of them all, and tried to add autodoc comments to nearly
every var in camera code.
## Why It's Good For The Game
Removes copy paste and spaghetti code between structure and machine
camera, thus making it easier to work around with.
Closes https://github.com/tgstation/tgstation/issues/79019
## Changelog
🆑
fix: Cameras built in-round can be upgraded again.
fix: Deconstructing cameras now more consistently return to you the
upgrades inside of the camera.
fix: RD's telescreen can now properly see Ordnance cameras again.
fix: [Deltastation] Library art gallery no longer has an invisible
camera.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Adds a photobooth machine to the HoP line which can be used to update
your security records photo.
It updates the records of the person's name, which means hiding your
identity and wearing an ID will let you change other people's photos. If
you aren't hiding your identity and are wearing someone else's ID, it
won't update at all because it will be unable to find your record.
There's 2 variants of this machine, one at the HoP line that's tied
behind Law Office access (so Lawyers have an extra thing they can help
out with if no one's available, but maybe it would be better behind
Library access since Curators are our "photographer" role?), and the
Security one that requires Security access.
The Security one has a special feature that it adds a height chart
behind the player.

This machine is used by either right-clicking on it or by pressing a
button, so the HoP can do it remotely from their line (except on Tram
where it's in the library), and after a few delays it'll update your
records automatically to how you look like.
Emagging the machine will remove its access restrictions but every time
it updates your photos it will spam camera flashing and blind you.
Sprites
Open

Closed

Security version on the left, has a red tint on it

Video demonstration (old sprites):
https://github.com/tgstation/tgstation/assets/53777086/a2e59f08-2d58-4f5b-b081-e137c7606d35
## Why It's Good For The Game
Current security records has no way to change your photo ID, something
that was a feature before it was moved to TGUI. The only alternative is
to fully delete your record and make a new one with a photo and the same
name, but this shares a major issue with the HTML UI: You're immediately
sold out by the fact you have a background. No matter how well you try
to cover your tracks, any security officer looking at records will see
you are the only photo on the manifest that has a background and even a
camera in your hand, which makes it impossible to get away with it
unless security essentially takes pity on you.
This opens up the ability to fully mask yourself in records, finally.
This is also better even for non antagonists because you can now
properly update your photos to match what you look like in the event of
an appearance change or even just a job change, which makes it a benefit
for HoPs who likes to keep records as up-to-date as possible.
## Changelog
🆑 JohnFulpWillard, Twox
add: Added a new photobooth machine to the HoP's line.
fix: Things checking for access now checks your off hand, too.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
Fixes being unable to start self-surgery while laying down.
Closes https://github.com/tgstation/tgstation/issues/82034
## Changelog
🆑 LT3
fix: Fixed being unable to start self surgery
/🆑
## About The Pull Request
Three changes to ghost orbit popups. Let's check them one-by-one.
First off -- The obsession awakening and blob host midrounds now have a
ghost popup when summoned via Dynamic. They already have them when
summoned by a random event roll, so this is mostly just bringing the two
different spawn methods in line with each other. None of the other
midround dynamic picks (autotraitor, revs, etc) have had this added,
because they're less focused on spectacle and require more mystery to
function properly.
Second -- The electrified railings on the tram no longer notify ghosts
every time someone gets shocked. Electrocute_act is called on anything
that passes by it, and the popup would be thrown regardless of whether
or not they've "fallen in the path of an oncoming tram" or not. Making
it check if the electrocute_act actually successfully stunned a player,
and that they're about to be hit, would probably require an unwieldy
rewrite to the behavior that I'd rather not resort to. I brought this
helper call into this world, and now I'm taking it out.
Lastly -- The supply pod random event can now be properly jumped to.
Originally, it would track the landing indicator, which would delete
almost immediately and leave an un-orbitable popup on your screen. Now
you jump to the landing zone, regardless of when you click the toast
popup.
This is really long PR body for such tiny changes please don't think
this is anything more than it actually is.
## Why It's Good For The Game
Minor improvements to some ghost orbit popups, because Observers are
players too!
## Changelog
🆑
qol: Dynamic midrounds "Obsession Awakening" and "Blob Host" now have
ghost orbit popups, so you can see them happening in real time.
qol: There is no longer a ghost orbit popup for players being shocked by
an electrified tram rail.
qol: The Stray Cargo orbit popup no longer has a half-second window to
orbit before it becomes useless.
/🆑
## About The Pull Request
We currently have 2 types of xenos in the codebase, simple animal and
carbon.
I'd like to unite them both under basic, and I thought I should go for
simple animal first since it's more of a conversion than a remake.
This helps set a base for a future basic-only xeno, which would require
the following:
- Basic mobs (or just anything than Carbon) to have Organs, which we can
then use for things like referring to their plasma sac for egg-laying,
etc.
- All xeno types having a basic mob variant, preferably with an AI so
they would work without a player.
- Something be done about larva, either we'd split basic xenos into
"larva" and "adult" (like carbon) or have it be a separate path that can
also have organs so they can still have hivemind.
Everything else seems to have been done overtime as simple animals have
been converted to basic (HUDs and holding things now seem possible,
etc.)
Even if this doesn't work out, at least this cuts off a good chunk of
the remaining simple animals to convert to basic.
Sprites used (for mapping helpers):
Fire medkit
Toxin medkit
Oingo Boingo punch face (i tried to shrink it down)
## Why It's Good For The Game
This helps advance us move away from simple animals, and helps move
carbon xenos to basic mob later too if that's what we want to go for.
## Changelog
🆑
refactor: Xenomorphs (Lavaland & Oldstation ones) are now basic mobs.
/🆑
## About The Pull Request
- Fixes#82019
Yeah you can't put stuff that don't exist inside storage items that
actually exist.
## Changelog
🆑
fix: abstract(like the dual hand thingy on your hand) & hologram things
can't be put inside storage items
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
Previously the follow link before the name didn't work because by the
time you clicked it, the old mob it referenced was gone
## Changelog
🆑
fix: the follow link upon poll completion should work properly now
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Fixes#76495
This PR prevents (most) screen elements from running base
`/atom/proc/Click` and `/mob/proc/ClickOn()` when clickend.
(The only exception I found to it was the cursor catcher for scopes.)
Why?
Most, if not everything in `ClickOn` is considered "in world"
interacting. It abides by `incapacitated`, runs `faceAtom`, etc.
This means, currently, you can "interact" with screen elements using in
world elements. For example, TK-ing / pointing a gun at your mood face.
Right now this affects very little, but there is a large potential for
errors. All you have to do is forget a sanity check in `afterattack` and
suddenly you have an item that can affect your screen objects.
The only example I found was the `/item/godstaff`, which can color some
of your screen elements. But there may be more. Like guns.
Note:
Many, many screen elements ALREADY do not fall down into atom click.
They simply don't call parent. Which is totally fine.
I am just ensuring ALL* screen elements do not fall down into atom
click.
## Changelog
🆑 Melbert
fix: Blocks mobs from trying to "physically" interact with some of their
hud elements, such as using Telekinesis or point a gun at your mood
meter.
/🆑
## About The Pull Request
Adds a quirk that gives the user a "Cyborg Pre-approved" dogtag upon
gaining, or (more usually) spawning with, the quirk. Wearing this dog
tag is to be considered granting full permission to be borged.
## Why It's Good For The Game
Waiting for medical to spend 15 minutes running tend wounds on your dead
body, not to mention having to deal with your organ damage if you've
been dead for a while, kinda sucks. It sucks more when you're waiting
and just watching your stuff walk out the door. And if you're a Plasma
man, you might as well go take a nap. Meanwhile, the rules get a bit eh
about when you're allowed to just start throwing bodies at robotics. Not
everyone appreciates being shifted to an entirely new role as a cyborg,
but some players don't mind.
I appreciate all you do medical. But if my body is more than a five
minute fix to being revived, just borg me fam. You got other people you
could be working on.
This isn't supposed to be mandatory in the opposite direction, mind. I
intend that medical can still revive people with the tag, at their own
discretion.
## Changelog
🆑
add: Added a new Neutral Quirk to indicate to Medical you're willing to
be borged
/🆑
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
## About The Pull Request

Bitrunners are now equipped with body cameras.
The Quantum Console now holds a switch which you can toggle on to
broadcast your body camera footage to the station's Entertainment
Monitors.
I also cleaned up some balloon alerts
## Why It's Good For The Game
I did a gimmick with a bunch of bitrunners and thought it was lame I
couldn't watch them as they did the bitrunning part.
So here we are. I think it is pretty neat and fun, and also kinda
thematic, since it is VR after all.
## Changelog
🆑 Melbert
add: Bitrunners can now broadcast their Bitruns to the station's
Entertainment Monitors.
/🆑
## About The Pull Request
`src` is a a datum, so `get_hearers_in_view` fails
## Changelog
🆑 Melbert
fix: Puzzlegrids now report their answers properly
/🆑
## About The Pull Request
Yeah i am not about to create 30 different PR's to address 1 issue at a
time. The changes are small enough to be grouped together in bulk.
This fixes the following issues specified in #82196
- Borg & exosuit RCD (Fixes#82193)
- Motorized wheelchair
- Canister shielding
- Electrolyser
- Potato cell
- Space heater
- Microwave
## Changelog
🆑
fix: Fixed cell energy usage for a bunch of stuff(Part 1). See PR 82197
for details
/🆑
---------
Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com>
## About The Pull Request
- Dehardcode blood deficiency
- Deletes "update mail goodies"
- Deletes "updates quirk mail goodies"
- Both of these were only used to update blood deficiency mail goods, we
can just do that with a signal.
- Deletes hardcoded "get_quirk / lose_blood" calls
- While you can `get_quirk`, much like you can `GetComponent` generally
speaking it's much cleaner to do it via signals.
- In this case I added a signal to `handle_blood`.
- And by adding this signal we can do similar dehardcoding for
jellypeople, removing their `spec_life` and running it off the signal.
## Why It's Good For The Game
Ye olde "consistency and cleaner code". And probably a tiny but of
optimization to be yeeked out of it since we don't need to iterate over
a mob's quirk list every life tick, nor every time we change specieses.
But that's probably not even a drop in the bucket so not even worth
mentioning.
Blood defi still happens in sync with Life (as noted by the comment).
## Changelog
🆑 Melbert
refactor: Blood deficiency and slimepeople now handle blood a tiny bit
differently, report any oddities.
refactor: Blood deficiency now handles its mail goods a tiny bit
different, report any oddities.
/🆑
- Refactors `/datum/bioware` -> `/datum/status_effect/bioware`.
- Literally everything bioware datum does is done by the status effect
API, including handing dupes / unique keys
- Tallies all blackbox surgeries done rather than just nerve splicing
## About The Pull Request
Removes all arbitrary energy and power units in the codebase. Everything
is replaced with the joule and watt, with 1 = 1 joule, or 1 watt if you
are going to multiply by time. This is a visible change, where all
arbitrary energy units you see in the game will get proper prefixed
units of energy.
With power cells being converted to the joule, charging one joule of a
power cell will require one joule of energy.
The grid will now store energy, instead of power. When an energy usage
is described as using the watt, a power to energy conversion based on
the relevant subsystem's timing (usually multiplying by seconds_per_tick
or applying power_to_energy()) is needed before adding or removing from
the grid. Power usages that are described as the watt is really anything
you would scale by time before applying the load. If it's described as a
joule, no time conversion is needed. Players will still read the grid as
power, having no visible change.
Machines that dynamically use power with the use_power() proc will
directly drain from the grid (and apc cell if there isn't enough)
instead of just tallying it up on the dynamic power usages for the area.
This should be more robust at conserving energy as the surplus is
updated on the go, preventing charging cells from nothing.
APCs no longer consume power for the dynamic power usage channels. APCs
will consume power for static power usages. Because static power usages
are added up without checking surplus, static power consumption will be
applied before any machine processes. This will give a more truthful
surplus for dynamic power consumers.
APCs will display how much power it is using for charging the cell. APC
cell charging applies power in its own channel, which gets added up to
the total. This will prevent invisible power usage you see when looking
at the power monitoring console.
After testing in MetaStation, I found roundstart power consumption to be
around 406kW after all APCs get fully charged. During the roundstart APC
charge rush, the power consumption can get as high as over 2MW (up to
25kW per roundstart APC charging) as long as there's that much
available.
Because of the absurd potential power consumption of charging APCs near
roundstart, I have changed how APCs decide to charge. APCs will now
charge only after all other machines have processed in the machines
processing subsystem. This will make sure APC charging won't disrupt
machines taking from the grid, and should stop APCs getting their power
drained due to others demanding too much power while charging. I have
removed the delays for APC charging too, so they start charging
immediately whenever there's excess power. It also stops them turning
red when a small amount of cell gets drained (airlocks opening and shit
during APC charge rush), as they immediately become fully charged
(unless too much energy got drained somehow) before changing icon.
Engineering SMES now start at 100% charge instead of 75%. I noticed
cells were draining earlier than usual after these changes, so I am
making them start maxed to try and combat that.
These changes will fix all conservation of energy issues relating to
charging powercells.
## Why It's Good For The Game
Closes#73438Closes#75789Closes#80634Closes#82031
Makes it much easier to interface with the power system in the codebase.
It's more intuitive. Removes a bunch of conservation of energy issues,
making energy and power much more meaningful. It will help the
simulation remain immersive as players won't encounter energy
duplication so easily. Arbitrary energy units getting replaced with the
joule will also tell people more meaningful information when reading it.
APC charging will feel more snappy.
## Changelog
🆑
fix: Fixes conservation of energy issues relating to charging
powercells.
qol: APCs will display how much power they are using to charge their
cell. This is accounted for in the power monitoring console.
qol: All arbitrary power cell energy units you see are replaced with
prefixed joules.
balance: As a consequence of the conservation of energy issues getting
fixed, the power consumption for charging cells is now very significant.
balance: APCs only use surplus power from the grid after every machine
processes when charging, preventing APCs from causing others to
discharge while charging.
balance: Engineering SMES start at max charge to combat the increased
energy loss due to conservation of energy fixes.
/🆑
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
Refactors a lot of the unused defines.
## Why It's Good For The Game
Refactors a lot of the unused defines.
## Changelog
Nothing player facing
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Fixes#82135
All occupants of vehicles (including mobs you can ride) will now die if
anyone drives that vehicle into the supermatter crystal.
## Why It's Good For The Game
It may not be canonically true that driving the clown car into the
supermatter dusts all occupants but by god, it should be.
This is the result that you expect to occur upon doing such a thing.
## Changelog
🆑
fix: Driving a vehicle into the supermatter will kill everyone riding
the vehicle
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Adds in a new trait to handle the tackle defense bonus that was
previously granted by `TRAIT_FAT` to solve a few problems that were
occurring downstream, this new trait is handled by the stomach organ and
handles it all automatically. Also edits the lipoplasty check to see
that the target is fat from eating too much.
## Why It's Good For The Game
No functions will have their results altered by the change and it will
help solve some some issues downstream.
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
cultists can now convert pets on their side. when you convert a pet, it
will become much more dangerous and obedient to you, it will also gain a
new dangerous AI. cultist pets will look for fellow dead cultists, and
revive them by dragging them to nearby revival runes and activating it.
if there is no revival runes around them then they will create their own
and drag u to it. u can give them commands to follow, attack, or to
create revival runes. they will also go around to crit non cultists so
cultists can convert them

they will also now feed on organs and blood for healing
## Why It's Good For The Game
adds a extra layer to cult, u can now command non-sentient pets to aid
you
## Changelog
🆑
add: cultists can now convert pets to their side
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
- Adds "Primal Instincts" brain trama.
- Special trauma
- Randomly, your body will be taken over by monkey AI.
- You will still be in control of the body, but you will have to fight
against the monkey ai for actions.
- There is a probability the monkey AI that takes control is aggressive,
meaning it will attack anyone nearby.
- While primal, you can understand monkey language.
- Adds "Kleptomania" brain trauma
- Severe trauma
- When you have empty hands, you will passively try to pick up things
near you.
- There is no feedback message associated, so you may not even notice
you did this.
- This effect is temporarily disabled if you have taken damage recently.
- Adds "Possessive" brain trauma
- Mild trauma
- Randomly, your held items will become undroppable for a short to
medium length of time.
## Why It's Good For The Game
I was looking through AI stuff recently and remembered we support
allowing AI controllers to work in cliented mobs, but we don't use it
anywhere (outside of adminbus)
So I wanted to add a brain trauma themed around that. Simple enough.
But I didn't want to PR just a single trauma, that's boring so I thought
of some additional ones. Just to spice up the other two trauma pools. I
especially wanted to add some traumas that interact with inventory and
items, because while a lot of our traumas involving how a person
interacts with the world, not many involve how a person interacts with
themself.
## Changelog
🆑 Melbert
add: Adds 3 Traumas: Primal Instincts (special), Kleptomania (severe),
and Possessive (mild)
/🆑
## About The Pull Request
- Fixes#82043
The issue goes deeper than just the chainsaw. The problem is we are
dropping our item too early if the dual handed checks fail. This doesn't
fully stop the equipping process and still causes the action buttons to
be added as if the equipping process succeeded
The solution is too unequip/drop the item and reverse all steps related
to the equipping process after it has fully completed inside
`COMSIG_ITEM_POST_EQUIPPED` to properly reverse the effects of equipping
and also cancel further actions by returning `COMPONENT_EQUIPPED_FAILED`
## Changelog
🆑
fix: failing to equip a dual handed item should properly clear out all
status effects related to equipping it, for e.g. remove the action
button from chainsaw
/🆑
## About The Pull Request
Inspired by #82099
- Hand labels now has a small visual associated.
- Hand labels now function like stickers, meaning burning temperatures
will remove hand labels from objects.
- General refactor of hand labels. Hand labeler now uses the new
interaction functions. Labels are now objects.

## Why It's Good For The Game
I thought it'd be a nice small touch to show visually when things are
labelled, so you can tell at a glance rather than needing to examine (or
hover) it.
If people preferred or used the invisible labels for certain gimmicks, I
can add a translucent label option as well. Maybe one that requires
plastic to print.
## Changelog
🆑 Melbert
qol: Hand labels now have a visual effect associated, and are also
affected by heat / can be cleaned off like stickers.
refactor: Refactored hand labels. They're objects now!
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Broadly this code is copied over from the preference code used for
picking prosthetic limbs, with a few changes to make it fit.
It also changes how the quirk displays in the medical records, now
mentioning which side is disabled instead of just half their body.
## Why It's Good For The Game
So of course, first and foremost, I want it personally.
I'm now running a hemiplegic character on Manuel, and I want to able to
pick which side is hemiplegic to match me using heterochromatic eyes to
make it look like they're missing an eye. It's minor, but I think it'd
be nice.
Then, because of that, I think it'd be nice to have for posterity. If I
want it, and I can code it, then the next person who wants it doesn't
have to, y'know?
Lastly, gameplay-wise, it doesn't really matter which side is
hemiplegic, you're permanently missing an arm and a leg either way. So I
feel there's practically no 'powergaming concerns' to be had when it's
this utter shitass to use regardless and the benefits to be gained would
be infinitesimally small in comparison.
## Changelog
🆑
add: Hemiplegic now lets you pick which side is disabled.
add: The medical records text for hemiplegics now shows which side is
disabled.
/🆑
## About The Pull Request
Vending machine no longer shocks you twice when you pulse high voltage
wire.
as a bonus fixed a bug in airlock wires code - wires window closes when
you get shocked
## Changelog
🆑
fix: Vending machine no longer shocks you twice when you pulse high
voltage wire.
fix: Airlock wires window closes when you get shocked
/🆑
## About The Pull Request
Fixes an oversight in #57889, where the strip_menus list is set, but
never accessed, leading to whenever you drag to open the menu, it always
opens a new window.
## Why It's Good For The Game
Noticed this while porting the TGUI strip menu, and I figured I should
fix it here too. From the design of the strippable element, it seems
that this was the original design, but somehow got lost along the way.
## Changelog
🆑
Fix: Opening a mob's strip menu multiple times will now properly update
the window.
/🆑
## About The Pull Request
I've fucked up the logic, so it requires the user to be both the host
and an admin to open it, which was the case when I tested it locally.
This PR fixes that and other issues (and **un**dumbs some of the code).
The spinning screen modifier has also been scrapped for being downright
awful and breaking my screen.
## Why It's Good For The Game
Fixing stuff I've thankfully noticed early.
## Changelog
🆑
fix: The deathmatch modifiers modal menu can actually be opened now.
Also fixed a bunch of issues it had.
/🆑
## About The Pull Request
This GAGsification is a request from Fitz Sholl, using their wonderful
sprites to breathe some new life into a mostly forgotten outfit.
EDIT: I increased the available amount from 1 to 4. Meaning that a
robust Sensei can have a class of three

~~there's also a second version which is a rendition of the prexisting
one which I couldn't bring myself to delete completely, DBZ was a
massive part of my childhood and will never leave me.~~

## Why It's Good For The Game
As Bruce Lee was reported saying, "Be like water, water can flow, or
water can crash" What does that mean? I don't know exactly, but it's
cool as hell, look like water while handing out an absolute savage
beating? You can now.
## Changelog
🆑
image: modified gi sprites, making them more customisable.
/🆑
## About The Pull Request
Okay, so, turns out smoke machines, cigarettes, vapes and all sorts of
things intentionally unmix your mixes.
Why? For chaotic effects. Well sadly it just deletes chems from mixes
and makes them completely useless.
It also tends to have very little effect on deathmixes and moreso just
gimps you ability to use them for healing.
This is pretty bad, especially for machines like the smoke machine that
are specifically intended for chemists.
This PR entirely removes all uses of remove_any as well as the proc
itself from the game. It's just bad.
## Why It's Good For The Game
As it turns out, the game intentionally gimping your chem mixes just to
fuck with you is bad.
Especially when it's both obscure and not really all that fun for
gameplay.
## Changelog
🆑
balance: Smoke Machines, Showers, Vapes, etc will no longer arbitrarily
delete a random amount of the chems they are processing
/🆑
## About The Pull Request
This PR adds the base to simple modifiers that the host can select to
make the minigame ~~worse~~ more entertaining for everyone.
Here's the screenshot of the UI (without a few modifiers I added later):

## Why It's Good For The Game
I've seen this minigame is frankly popular lately, so I thought I could
contribute to it.
## Changelog
🆑
add: Added 20+ modifiers to the deathmatch minigame, which can be
enabled by the host.
/🆑
## About The Pull Request
We have a `crafted_food_buff` in the code meant for specific food buffs
(and perhaps one day, debuffs) that has gone unused ever since it was
created during the 'Foodening' PR.
Anyway, yeah, this PR takes the fire step to implement it with ice cream
and other frozen treats.
Frozen treats (all food found in the `food/frozen.dm` file) have it by
default. Other ice cream holders such as waffles cones (and now regular
waffles too!) can aquire it when filled with ice cream. Using the ice
cream vat also adds the 'Chef Made' trait now, which is required for
food effects to happen.
Also very slight food effect refactor. There's no need to have five
different alert screen objects when only have to switch icon states.
This PR also adds an action speed modifier to the generic 'haste' food
effect. I'm confident the original creator would have done that too, but
action speed modifiers aren't as well-known.
## Why It's Good For The Game
People tend to make one feature, call it a day and then move on to the
next. Food effects are nice, however they're barely implemented, and I
don't like food being all the same-ish in the end.
## Changelog
🆑
add: Ice cream and frozen treats now have a chilling effect.
add: You can add a scoop of ice cream on waffles.
balance: added an action speed modifier to the generic food haste effect
(you do things, and not just run, an itsy bitsy faster)
/🆑
## About The Pull Request
Fixes a slowly increasing lag for psykers, subtly introduced by #80042
Turns out the code expects all of the images to fully fade out before
any new images start fading in, thus the expiry time + fade out time
must not exceed the cooldown time.
Note that this will still be laggier than if you're NOT a psyker because
of how things are rendered, but it should stay consistent.
Fixes#81446Fixes#80442Fixes#80798
## Why It's Good For The Game
letting literally thousands of images build up on the client is not a
good thing, turns out.
## Changelog
🆑
fix: Psyker vision no longer causes infinitely worsening lag
/🆑
## About The Pull Request
I have been dissatified with the situation of skateboards for a long
while now, especially with the 'pro' and 'hoverboard' versions that
provide negligeable bonuses for the high price they warrant.
On top of all things, this PR makes the aforementioned two subtypes
faster than the standard and improvised skateboards.
Second, the hoverboard now hovers and can be used in zero g (more info
in the CL). The thing costs about 2000, so this is pretty much deserved.
Third, skateboards respect move intents. While in walk intent, you will
ride it slowly, but you also won't crash against other things.
Fourth, improvised skateboards are a nick more unstable and not
mechanically on par with standard skateboards.
## Why It's Good For The Game
Skateboard were cooler back when you would go fast and die young by
crashing into an airlock/spessman/wall at stim speed imho, also see the
first paragrath of the above section.
## Changelog
🆑
balance: The pro skateboard and hoverboard are now faster.
balance: The improvised skateboard is a nick more unstable than the
standard, so the two aren't exactly the same.
add: Riding a skateboard on walk intent will prevent you from crashing
into things, at the cost of speed.
add: hoverboards now actually hovers and can be used even in zero g.
There are a caveat to it: It cannot be ridden on open space gaps deeper
than one level or actual space, unless there're objects that prevent
falls, like lattice or catwalks.
/🆑
## About The Pull Request
Originally part of the other blackmarket PR, but it seemed a tad awkward
to have it mandatorily installed on mobs rescued from the holding
facility.
But yeah, this PR adds a neck item that causes the wearer's death with a
5 seconds countdown when triggered, which can be bought from the market
uplinks. The box comes with a yellow button to trigger it, but it can
also hold a signaler (which the wearer cannot tamper) if you wish to use
assemblies. Take note that, upon being worn, the item cannot be removed
by any mean beside beheading iirc (so HARS should counter it), and
fire/acid if you have a ton of patience because of its high armor
values.
## Why It's Good For The Game
More mean and evilish stuff to populate the black market with.
## Changelog
🆑
add: Added a collar bomb to the black market.
add: Added a possible kit to the special syndie bundle B, which also has
uses these collars.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
The Pathfinder module sucks cock because it doesn't work. And the
reasons it doesn't work are as follows:
1. It uses the default JPS pathfinding datum, which has a hard distance
limit of 30, instead of the intended 200.
2. JPS pathfinding as a whole will fail if you encounter more than 3
doors. This is because every door wastes about 5 movement opportunities,
and the default pathfinder only has a limit of 20 before it considers
the entire pathfinding attempt moot and bails out.
Here's how I fixed it:
1. Created a new jps child that has a range of MOD_AI_RANGE
2. Instead of counting all failures during the entire pathfinding
attempt, it will only consider consecutive failures. Every successful
move will reset the pathfinding failure count. This should make JPS
pathfinding more reliable overall?
## Changelog
🆑
fix: Modsuit Pathfinder module is significantly better at finding it's
destination.
/🆑
## About The Pull Request
Instruments now use TGUI as their editor which is pretty cool.
It's mostly a 1:1 remake of the HTML UI except I did make a change to
make the playback options a little more compact, leaving some more space
for the editor before you have to scroll, and some other minor things
that were made to make the UI hopefully nicer to look at and mess with.
When there's a song to play - While playing, Repeat section can't be
edited

Help section and UI when there's no song put in

## Why It's Good For The Game
It is yet another step in finishing up
https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA?view
Instruments especially were in a poor spot because they didn't respect
things like ``IN_USE`` to not refresh if it's not the "UI" you are on,
and such.
## Changelog
🆑
refactor: Instruments now use TGUI.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
Well, it's a station trait that makes a small number of (non-secure)
closets function as if splashed with eigenstatium (which turns them into
teleportation cabins of some sort). However, they're subtler, they lack
the transparency and blueish tint, and don't make sparks.
This PR also demotes the Eigenstate subsystem to a singleton global
datum. It doesn't fire, it doesn't init, it plain doesn't belong amongst
the big boys.
## Why It's Good For The Game
This should be a mildly interesting station trait.
## Changelog
🆑
add: Added a 'Closet Anomaly' station trait, which links and turns a
portion of the roundstart closets into impromptu teleporters.
/🆑
## About The Pull Request
This PR makes 2 changes, one to the crusher and one to the PKA
Crushers: Their projectile no longer overrides eachother, so a mob can
have the blue bubble from several crushers. Triggering it will only
trigger the one that you own, so each player has to go hit the mob to
strike.
PKA: Fixed the minebot passthrough upgrade, and also adds a human
passthrough upgrade. They are incompatible with eachother, so you choose
between solo+minebot or coop, which is a compromise I thought as a
better alternative to taking mod space (the minebot passthrough
currently takes none). This upgrade is available solely at the mining
vendor, for 750 points.
## Why It's Good For The Game
The new mining has been great, and one thing I love is that it
encourages more coop play. Excavating boulders with other miners is much
more engaging and has good teamwork in it, and also is a good way to
encourage miners to stick together more and even fight megafauna in
pairs.
This hopes to make that easier to do, because currently having anyone
with a crusher is sort of a detriment to the whole team. Either the PKA
dude will accidentally shoot the crusher user while they're going in for
a melee kill, or 2 crusher users will be constantly erasing the mark of
the other. This will hopefully make that aspect better, and make mining
with friends a little better.
## Changelog
🆑
balance: Crusher marks no longer overwrite eachother, fauna can have one
from each crusher.
balance: Ash drake's crusher trophy no longer affects people the same
faction as you (like hiero trophy), so you won't friendly fire people
with it.
add: Added a new upgrade: Human Passthrough. You can shoot your PKA
without having to worry about friendly fire with this, for 750 mining
points at your mining vendor.
fix: Minebot passthrough upgrade now properly makes PKAs pass through
minebots.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
This PR fixes yet another small issue with elevation.
## Why It's Good For The Game
This PR fixes yet another small issue with elevation.
## Changelog
🆑
fix: Fixed the larva "hide" ability not properly hiding larvas under
tables.
/🆑