## About The Pull Request
So while playing with All Nighter, I noticed lattes don't actually count
for fueling my character's crippling coffee addiction.
Looking into it, this is true, the list for which reagents count as
stimulants for All Nighter is quite small:
fa0ef6b4b6/code/datums/quirks/negative_quirks/all_nighter.dm (L25-L37)
And importantly, includes _none_ of the coffee or tea derivatives.
But, in the process of adding everything I thought would have a high
enough caffeine content, this list ended up quite big.
More than doubled in size big.
Which is _bad_, because when you haven't slept the quirk loops over
every single reagent in that list to check if you have it, _every single
process call_.
fa0ef6b4b6/code/datums/quirks/negative_quirks/all_nighter.dm (L84-L101)
Soooo, ideally, we probably don't want that.
But hey, upshot, we have this whole system for reagents to just give you
a trait while metabolized and remove it when you're done.
fa0ef6b4b6/code/modules/reagents/chemistry/reagents.dm (L77-L78)
So we make a trait called `TRAIT_STIMULATED`, check for that, and have
each reagent on the list apply it while metabolized.
Now, if we ever feel like it, we can also have other non-reagent stuff
add that trait and have it Just Work.
For ease of reading, the full list of reagents this makes All Nighter
work with is as follows, where `+` denotes it's newly added:
<details>
<summary>All Nighter Reagents, Complete List</summary>
### Coffee &derivatives:
- coffee
- +cafe latte
- +soy latte
- +ice coffee
- +hot ice coffee
- +pumpkin latte
### Alcoholic coffee derivatives:
- +kahlua
- +konococo rumtini
- +irish coffee
- +thirteen loko
### Tea &derivatives:
- tea
- +iced tea
- +letter t
- +arnold palmer
### Energy drinks &derivatives:
- monkey energy
- volt energy
- +space mountain wind
- +demons blood
### Stimulants (drug subtype)
- aranesp
- bath salts
- blastoff
- methamphetamine
- pumpup
- +kronkaine
### Stimulants (medicine subtype)
- stimulants
- +ephedrine
### Powders (if you're insane)
- +coffee powder
- +tea powder
</details>
Note, kahlua is added as it's a coffee liqueur and does contain a not
insignificant amount of caffeine, but due to its lower caffeine levels I
decided its derivatives would be too diluted to matter for the sake of
our poor hasn't-slept-all-night spaceman.
## Why It's Good For The Game
In play it's annoying and unexpected that it works to drink tea but not
iced tea and coffee but not latte, not the third arguably energy drink,
and neither do some of the stimulants work. These inconsistencies would
drive me mad if I actually played more than I coded.
Either way, this lets you fuel your sleep deprivation in _style_.
Code-wise, I imagine using a trait applied on start of metabolization is
much saner than looping over and checking for every reagent in the list
every process tick, especially with a bigger list.
## Changelog
🆑
code: Whether something counts as a stimulant to All Nighter is now
handled by the reagent itself when metabolized, for everyone's sanity.
Side-effect, you need a liver to process stimulants for All Nighter.
balance: Fuel your sleep deprivation in style! Made more reagents work
with All Nighter. This includes all coffee/tea variants, a few other
drinks that would have a high enough caffeine level, kronkaine,
ephedrine, and in case you're insane you can straight up eat coffee or
tea grounds.
/🆑
## About The Pull Request
- Fixes#82119. ph is not computed & shown when recording recipes is
enabled. The ph value was inaccurate anyway because it was not computed
from the recorded recipe but from the beaker.
- Removed deprecated `content` tag from buttons in the UI
## Changelog
🆑
fix: chem dispenser UI doesn't brick when beaker is ejected while
recording recipes
code: removed deprecated `content` tag from buttons in chem dispenser
/🆑
## About The Pull Request
- Fixes#82266. Anything that has reagents can be either grinded or
juiced
- If something doesn't have reagents but has grind results it can still
be grinded but not juiced
## Changelog
🆑
fix: anything that has reagents can be either grinded or juiced
fix: stuff that does not have reagents but has grind results can still
be grinded but not juiced
/🆑
## About The Pull Request
Changes `Joe Assistant splash the contents of the beaker onto you!` to
instead read `Joe Assistant splashes the contents of the beaker onto
you!`
## Changelog
🆑
spellcheck: fixed grammatical error in chemical splashing
/🆑
## 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
**1. Qol**
- Adds examines & screentips for screwdriver, crowbar & wrench acts.
- Adds examines & screentips for inserting, replacing & removing beaker,
Also for inserting items from bags or directly
- Adds an off icon overlay for when the reagent grinder is either
screwed open or loses power,
**2. Code Improvements**
- Replaced `attackby()` with `item_interaction()` so we can end the
attack chain early for non combat operations like inserting beakers/
ingredients for grinding etc.
- Removed custom shake animations & replaced it with the global
`Shake()` proc cause it did the same thing
- Removed constructed version of reagent grinder. We instead just check
`mapload` to see if we need the beaker to be created or not for round
start reagent grinders
- Grinding & Juicing use the same `operate_for()` rather than having
seperate procs for each operation
- Removed trait `TRAIT_MAY_CONTAIN_BLENDED_DUST`. Why do we have this?
Its just used to change the grinder description to warn it may contain
dust. It's a waste.
**3. Fixes**
- You cannot insert hologram items into the grinder. Rather than
destroying that item & making it vanish you simply won't be allowed to
put it inside the grinder so you can save that item
- You can hit the grinder with items like screwdriver, wrench, crowbar,
beaker & even with stuff you would normally put in the grinder when in
combat mode
- Adds `can_interact()` checks for using the UI & other stuff
- Fixes#46356. All items of type `obj/item/grown` can be put from any
bag into the grinder
- The item "and its contents" are now grinded/juiced recursively to get
all the reagents it has to offer just like a real grinder would
- An AI/Human with AI access examining the reagent grinder now actually
works.
**4. Refactors**
- The grinder now measures its available capacity based on the "total
weight" of all items present & not its number. This is more realistic
because the grinder has limited space inside & so inserting huge items
should have greater impact rather than deciding on an arbitrary number
like 10(The grinder having the capacity for 10 items of any size inside
its small compartment makes no sense). Examines are displayed to show
how much capacity of the grinder has been filled. Upgrading the grinder
with better matter bins will allow for higher storage capacities.
- Total power consumed is measured based on the duration & weight of all
items grinded cause you know its realistic.
🆑
qol: adds examines & screentips for tool acts & other operations for
reagent grinder
qol: adds an off icon for when the grinder panel is open/not powered
code: auto docs vars & procs. Shared common proc for grinding or juicing
code: removed trait for blended dust, changed some item interactions to
end the attack chain early & save time
fix: no inserting hologram items into the reagent grinder
fix: you can hit the reagent grinder tools like screwdriver, wrench,
crowbar & even beakers/ingredients etc when in combat mode
fix; adds sanity checks for when & how mobs interact with the reagent
grinder
fix: examining a reagent grinder by an AI/Human with AI access now
actually works.
fix: you can insert Nova flowers & other food items from any bag type
fix: reagent grinder now grinds all the contents of an item recursively
to produce maximum reagents like a real grinder would
refactor: reagent grinder now measures available capacity to store items
as total weight of stored items & not number. Capacity can be increased
with upgraded matter bin
refactor: reagent grinder power usage is now a function of duration &
total weight of items blended, meaining blending more number of
items/larger items will consume more power
refactor: reagent grinder code has been optimized overall. Report bugs
on github
/🆑
---------
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
## About The Pull Request
Continuation of #82197.
Fixes these issues in #82196
- Cyborg self repair
- Cyborg lollipop dispenser
- Mauna mug
- Plasma cutter (Initial charge not the number of laser shots so partial
fix)
## Changelog
🆑
fix: Fixed more energy usages for cells(Part 2). See PR 82198 for
details
/🆑
---------
Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com>
## About The Pull Request
Smoke machines have a plumbing input, but as opposed to as far as I know
all other plumbing machines they cannot easily be rotated. This is
*really* awkward, and in some positions makes it a massive pain in the
ass to position properly.
Giving it the `/datum/component/simple_rotation` component that all
other such machines have fixes this.
## Why It's Good For The Game
It's really really awkward to orient where its plumbing input goes
without this. Try put it against a wall with its plumbing end away from
the wall, it sucks.
## Changelog
🆑
qol: Smoke machines can actually be rotated with alt-click when
unwrenched.
/🆑
## About The Pull Request
Removed Musiver, Godblood, Synaphydramine, Hollow water and unholy water
from rolling in secret recipes. If there is any other reagents that can
appear in secret recipes please tell me, I will add the fix to this PR.
Closes https://github.com/tgstation/tgstation/issues/82140
## Why It's Good For The Game
Some reagents can't be synthesised or gotten by normal means and should
not appear in secret recipes as a required reagent
## Changelog
🆑
fix: Musiver, Godblood, Synaphydramine, Hollow water and unholy water
will no longer show up in secret recipes
/🆑
## 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
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
- Fixes#82122
This is a 2 part fix.
- Reagent holders (cup & syringe the only cases i can find) will update
the target appearance only when their action succeeds. This way they
don't cause items like envelops to update after every interaction.
- Envelope returns the stamp overlay in the return value of
`update_overlays()` rather than calling `add_overlay()` so their
overlays don't add up but rather get removed & replaced correctly.
## Changelog
🆑
fix: reagent containers like cup & syringe only update target appearance
if action was successful.
fix: envelops don't stack overlays when interacting with cup & syringes.
/🆑
## 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
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
Makes Ephedrine not drop small and tiny items, Also makes the movement
speed scale with purity
## Why It's Good For The Game
Ephedrine right now is really hard to use as an escape tool cause you
drop things usually escaped for running away like tools, teleporters
etc, This makes it better as a tool for that without making it too
powerful for combat, Also makes movement speed scale with purity to make
it more meaningful
## Changelog
🆑
balance: Ephedrine spasms won't affect small or tiny items
balance: Ephedrine's movement speed bonus now scales with purity.
/🆑
---------
Co-authored-by: Aki Ito <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com>
There's potentially an infinite loop if the amount to remove falls below
the min quantization level.
---------
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
## About The Pull Request
Deals with `/obj/machinery/grill` & its related components & elements.
**1. Qol**
- Adds examines & screen tips for toolacts, adding fuel & food items on
the grill, Converts some chats into balloon alerts
- Grills can be safely deconstructed with a crowbar when not anchored
- Food items can be grilled & re-grilled any number of times so you can
achieve that perfect crispiness. Its also realistic because there is
nothing physically stopping you from putting that item back on the grill
- Monkey fuel & any other reagent(see examines) can be added into the
grill from any open container & not just from glass bottles
- Grills can now be constructed in the crafting menu. Cargo pack cost
for purchasing grill has been halved
**2. Fixes**
- Grills now won't burn foods into a mouldy mess (if that item did that
that on the girdle). You can safely grill any item without worrying
about losing it. This also means grills no longer cook an item like a
girdle does, for e.g. the grill now won't both cook a meat slab into a
steak & grill it at the same time. You need the girdle for that.
This is only realistic because unlike a girdle which exposes the food to
direct heat the grill only exposes it to light heat & smoke so it does
not have that energy to cook/burn that item. Also this creates
immersion, you now need the girddle to cook the item & the grill to
smoke it so you know more gameplay
- The amount of time an item has been grilled for is now stored on that
food item & not as a locale variable in the grill. This means if you
remove & replace that item on the grill or move that item from 1 grill
to another it will correctly remember how long that item has been
grilled for so you don't have to re-grill that item on a different
machine for the same length of time
- Imposes a maximum limit on the amount of fuel you can put into an
grill (roughly 50 coal stacks). Unlimited space for fuel is not
realistic
**3. Code Improvements**
- Moved all non combat interactions to `item_interaction()` to end the
attack chain early before we even reach `attackby()`
- Removed trait `TRAIT_FOOD_GRILLED` no longer needed as we can re-grill
items as many times needed
- Converts some constant values into `SECONDS` for accuracy
- Autodoc for vars & procs
**4. Refactor**
- Grills now process manualy upon placing food or fuel into it & not
round start
## Changelog
🆑
qol: adds examines & screentips for grill (the machine for grilling
food), converts some chats to balloon alerts
qol: foods that can be re-grilled any number of times
qol: grill (the machine for grilling food) can now be made in the
crafting menu. Cargo pack cost for purchasing grill has now been halved.
qol: monkey fuel & other reagents(see examines) can be added from any
container & not just from glass bottles to the grill (the machine for
grilling food)
fix: grills (the machine for grilling food) now don't burn foods into a
mouldy mess unlike the girdle
fix: correctly computes grill times of items that were previously
grilled
fix: grills now have an upper fixed fuel limit
code: autodoc procs & vars for the grill (the machine for grilling food)
refactor: grills (the machine for grilling food) has been refactored.
report bugs on github, also they only start processing after putting
food/fuel into them.
/🆑
## About The Pull Request
Moves around code for portable chem mixer & chem heater. No functional
changes, As for the HPLC
**1. Qol**
- Adds examines & screentips for
1) Screwdriver, crowbar & wrench acts
2) Inserting & replacing input/output beakers
3) Alt click ejecting input/output beakers
- Balloon alerts replaces chat messages to reduce spam.
- HPLC will now display the status of each reagent if it can be purified
or not before starting the refining process thus saving you the headache
of pressing the start button only to waste power & time & get no work
done
**2. Code Improvements**
- Moved screwdriver, wrench & crowbar acts out of `attackby()` into
their respective tool act PROCS
- Merged procs `calculate_largest_mass()` & ` calculate_smallest_mass()`
procs into a single proc `calculate_mass()` with a boolean var to decide
if we want the smallest or largest mass reagent
- Computes estimated time only when UI changes & not every ui update
**3. Fixes**
- HPLC won't accept hologram or abstract items
- HPLC now displays off icon state & pauses processing when the machine
is either opened, powered off, unanchored or broken
- HPLC will ignore reagents that are either already at max purity or are
inverse thus lowering eta & work done to purify your remaining reagents
**4. Refactor**
- Converted UI to typescript, moved vars such as `in_range` & `color` to
the client side to reduce data sent.
## About The Pull Request
This PR does many things, I'll try to explain the basic/background stuff
to the main thing first:
1. Adds a new remote that allows a human to function like an AI. It
controls a fly that will fly around the station slowly, and when it
reaches a machine then the person can interact with it as if they were
an AI. This required changing a lot of silicon/AI checks with one that
also checks for this remote, and some messing with shared ui state.
2. Moves req_access from the obj and bot to ``/atom/movable`` which lets
it be shared between the two, no more copy-paste and one side lacking
features/checks/signals the other has.
3. Adds a check for AI config for AI-related station traits, which was
lacking prior
Now for the good part...
Adds a new station trait that replaces the AI with a Human.
This person is equipped with an AI headset (including Binary), an
advanced camera console, an omni door wand, the machine controller, and
their laws.
They are immune to the SAT's turrets (even if set to target borgs) and
are slow outside of the SAT, mimicing the actions of the AI.
They interact with the world through their advanced camera console,
which allows them to do most AI stuff needed, and the holopad they can
connect to without having to ring first (like Command can).
They are given a paper with the laws they must follow, but since they
are human they are able to bend it. Cyborgs that run the default lawset
are "slaved" to them via an unremovable law 0, so the Human AI can bend
the laws if they really need to (for their own survival n such), and
make the cyborgs obey their commands above laws, but in general this
shouldn't be a frequent occurrence. This does take into account the
unique AI trait, so it's not guaranteed Asimov.
When this station trait rolls, all Intellicards, AI uploads, and AI core
boards are destroyed and are unresearchable. They can be spawned by
admins in-game if necessary. Maybe in the future we can also exclude
Oldstation from this but I haven't really decided.
Extra perks:
Human AI spawns with a Robotic voicebox (unless they are a body purist)
and teleport blocking implant, so they can't use teleporters to bypass
their on-station slowdown.
They also have an infinite laser pointer that can be used to blind
through their camera console. This is unfortunately nerfed from the
recent borg balance PR that removed its stun. This was meant to be the
alternative to no longer being able to permanently lock borgs down like
AIs can (or more than one, for that matter).
They aren't affected by Roburgers, Acid, and Fuel's toxicity.
Bots salute them like they do Beepsky (which is now a trait)
They spawn with SyndEye to replace the AI's tracking ability
They do not have a bank account
### The machine remote
The machine remote has a little fly in it that flies to the machines it
is pointed to, working as the arms and legs of the Human AI. It scans
the machine and punches in the action the AI does, and is how the AI
accesses basically anything. This fly slowly moves from one machine to
the next, and can be recalled with Alt Click.
It works on machines and bots.
### Video (Low quality to fit Github)
https://github.com/tgstation/tgstation/assets/53777086/e16509f8-8bed-42b5-9fbf-7e37165a11e8
## Why It's Good For The Game
I've seen a funny screenshot one day of a person replacing the AI by
using a bunch of door remotes, camera console, crew monitoring console,
and a few other things. I've been thinking about that for a few years
and really wanted to make it official if not easier to make possible,
because it is an incredibly funny interaction.
This makes it a reality, and while they aren't as powerful as regular
AIs, I think it makes for better and funnier in-game moments. With the
same weight as Cargorilla (1), I hope this wouldn't be rolling too often
and ruin rounds, but instead show off the different capabilities that
Humans and AIs can do, to do the job of an AI. You win some you lose
some.
## Changelog
🆑 JohnFulpWillard, Tattax
add: Adds a new station trait job: The Human AI.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
Meth, maints tar, synaptizine, and nicotine now all use the
`AdjustAllImmobility` to handle their stun reductions, instead of
individually adjusting all 5-6 immobility effects. `AllImmobility`,
`SetAllImmobility`, and `AdjustAllImmobility` now also affect the
unconscious status effect as well. I'm calling this a bug/consistency
issue, since every chem that didn't already use `AdjustAllImmobility`
was adjusting the unconscious status effect anyway, and they are all
clearly trying to do the same thing.
If I missed anything that could also be replaced with
`AdjustAllImmobility`, let me know and I'll fix it.
## Why It's Good For The Game
Makes things more consistent, and consistency is good.
## Changelog
🆑
code: Chem stun reductions are now applied more consistently.
fix: Chem stun reductions should now more consistently apply to
unconsciousness.
/🆑
## About The Pull Request
I was thinking to contribute something to the new away mission map to
make it better. Mapping and all takes too much time for me, so I could
do little. Though it comes with its own unique gimmicks.
To reach the cafeteria, one has to complete a couple puzzles.
The first set is opened by inputing the correct PIN on the password
panel beside it. There're several clues to help you guess this fairly
easy puzzle, in the form of several number graffitis, a scrapped piece
of paper full of numbers, and a board filled with colored dots also
found just beside the panel.
The second one is opened by a keycard, and is generally lazier. To find
it, you'll need to do a bit of (toilet) searching.
As for the unique things this PR adds:
- A fire extinguisher... that actually contains welding fuel
- A (dirt-cheap) hotdog vending machine*
- A completely ornamental maneki-neko (that's the name of the
luck-bringing, paw-waving cat figurine)
- A piggy bank that carries money between rounds. It has a cap of 10k
credits worth of holochips, cash and coins, which is pretty high, but
I'm confident people will just destroy it for its contents the moment
they find it. His name is Pigston Swinelord VI.
- More, totally legit and not actually fake bombable walls :^)
*By the by, you can also find it during the national hotdog day.
Screenshots of the new location:


## Why It's Good For The Game
You know how most away missions are not that special at all? Yeah,
@mc-oofert set an example of a pretty decent one actually, if not a tad
small. I thought it could use a touch of another mind actually
contributing to it too, because it deserves it.
Also, this sets the basis for other persistent piggy banks. I don't
think they should all have that 10k cap like this one, perhaps 1k is
enough. Beside, the code that mothblocks did for json database datum is
pretty good, so there is not a whole lot of shitcode here.
## Changelog
🆑
add: Added a cafeteria to the museum away mission, with a few special
things to it. To reach it, you'll have to complete a couple puzzles
however.
map: The museum away mission now has a couple restrooms.
add: Hotdog vending machines may spawn during the National Hot Dog Day.
/🆑
## About The Pull Request
Food items with kronkaine in it now count as great baits (this is the
case of the "all-natural" bait from that overpriced cargo pack I'm
converting into a less expensive goodie in another PR)
Sufficiently high fishing skill (and the relative skillchip) allows you
to list fishes in a fishing spot by examining it twice.
## Why It's Good For The Game
Little fishing things off the top of my head before I move on bigger
stuff.
## Changelog
🆑
add: Fishes love kronkaine.
qol: Examining a fishing spot twice with sufficiently high fishing skill
(or the skillchip) will get you a list of fishes that can be caught.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Simply allows you to drag from storage containers directly onto
All-In-One Grinders. Current behavior just spills it on the same tile.
## Why It's Good For The Game
I already had to put all these items in the box in the first place, this
just makes it slightly easier on the way back.
## About The Pull Request
I requested this as a change on the Hive Head PR but Ghommie didn't
notice and merged it anyway so I had to do it myself instead of forcing
the underclass to do it for me 😔

Anyway now bees created by the "beesplosion" reaction and by the Hive
Head changeling power no longer produce corpses, and have a death
animation.
## Why It's Good For The Game
It looks better.
It was weird that the bees would create corpses if killed but not if
they expired.
## Changelog
🆑
image: adds a visual effect for hive head bees despawning
/🆑
## About The Pull Request
- Fixes#81687
Thermic constant of Cryostylane reaction now reduced from -7.5 to -1.5.
Meaning for every 1u of Cryostylane created the overall temperature of
the holder reduces by 1.5k so for e.g. if you create 30u of cryostylane
without any heating the temps reduces by 30 * 1.5 = 45k(the drop of
temperature increases as the reaction temps grows closer to optimal
temperature in our case -200k)
When testing upon adding 30u of water, nitrogen & stable plasma and
cooling the mixture to 270k via tier1 chem heater you acheive 30u of
Cryostylane at 82% purity and the final temps are 180k
P.S. adjusted range of chem debuger to include negative values. Helped
me in debugging this
## Changelog
🆑
fix: Cryostylane reaction now has a moderate & not extreme cooling
effect. Helps you achieve more pure amounts of Cryostylane
/🆑
## About The Pull Request
This PR buffs gorillas by making them more formidable threats while also
adjusting some of the related traitor items as well. The changes are as
listed:
- Gorillas now have the same understanding of language as monkeys. They
speak and understand monkey, and cannot speak but understand galactic
common.
- Gorillas are now slightly faster than humanoids when not holding
anything. While Usain Bolt may be slightly faster than a gorilla, you
are not.
- Gorilla damage increased from 18-20 to 25-30.
- Object damage doubled, going from 20 to 40.
These changes altogether make gorillas much more scary to come across,
as they'll be able to outpace you and get to the part where they maim
you much quicker. Crewmembers beware!
Furthermore, I've done some additional changes to the gorilla-related
traitor items as well:
- Gorilla cube box is replaced in the uplink by a singular gorilla cube.
Due to the changes above, this singular gorilla should be far more
useful than the 3 gorillas this item gave prior. The gorilla cube box
has been left in for any sort of mapping or admin shenanigans.
- Magillitis Serum Autoinjector has been buffed for self-use as a
consequence of the above changes, while nerfing its use against other
players to make them easier to kill. Additionally, Magillitis Serum
Autoinjector now also grants the resulting gorilla a self-regeneration
buff which kicks in after 12 seconds of not taking damage. I threw in
this additional buff as making yourself into a sentient gorilla pretty
much shows everyone you're valid salad, prevents you from using a lot of
traitor items and its cost of 15 is quite high.
## Why It's Good For The Game
Gorillas are fun, but in previous history we couldn't let them be too
powerful since it was relatively easy to mass-produce them via Genetics.
Since gorillas are pretty much traitor and admin-event exclusive now, we
can do more right by them by allowing them to be more like real-life
gorillas: faster than most humans, very powerful, and very scary if you
run into one who doesn't like you.
## Changelog
🆑
balance: Gorillas are faster, stronger, but not bigger too. Note while
holding an item, they are the same speed as they were prior.
balance: Gorillas now have the understanding of languages as monkeys do.
balance: The Gorilla Cube Box for traitors has been replaced with a
singular gorilla cube. Due to the aforementioned changes, this singular
gorilla should be as scary if not scarier than 3 gorillas were prior.
balance: Magillitis Serum Autoinjector now grants the resulting gorilla
a slow passive regeneration effect which kicks in after not taking
damage for 12 seconds.
/🆑
## About The Pull Request
While on the floor, you can:
- Use the UIs of Atmos machinery (except thermomachine and bluespace gas
vendor), Holopads, Crayons (spray cans too), radios, and Disposal bins
- Close extinguisher cabinets with Right-Click
- Click and drag yourself onto a photocopier to climb onto it.
I also changed all instances of ``ui_status`` to have all the args it's
being passed, I was messing with it a bit but it's gonna be for a later
PR.
## Why It's Good For The Game
It's an extra layer of harmless realism, also nice QoL for people who do
not have functional legs and do not have a wheelchair.
## Changelog
🆑
qol: You can use atmos machines, holopads, crayons, spray cans, and
disposal bins while floored.
fix: You can close extinguisher cabinets while floored.
fix: You can climb onto a photocopier from the floor.
/🆑
<!-- 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
### Riot Armor and Helmets (including SWAT armor and plate armor;
partially includes Syndicate modsuits and other suits with a module)
TRAIT_SHOVE_KNOCKDOWN_BLOCKED is now called
TRAIT_BRAWLING_KNOCKDOWN_BLOCKED. This is possessed by riot suits, SWAT
suits and now **plate armor**. Not the chaplain variety, because fuck
them I guess. (this was apparently deliberate so don't complain to me,
okay?)
Anyone with this trait is now unable to be knocked down by;
- Pure RNG on blunt objects attacks to the chest (Probability is
otherwise altered by melee armor already)
- Unarmed punches, both RNG and deterministic
- Bodies thrown at them. Instead, dealing stamina damage and causing
them to become staggered.
A new trait called TRAIT_HEAD_INJURY_BLOCKED, which protects from
various head injury related effects. This is possessed by riot helmets,
SWAT helmets, plate helmets, hardhats and applied to MODsuits with armor
boosters activated/the infiltrator suit while active.
The trait is also granted to anyone wearing a modsuit with the Head
Protection module installed. This can be printed from round start, and
comes pre-installed into all the engineering modsuits, security moduits,
research modsuit and magnate modsuit. (I had to bump up the security
modsuit complexity a bit to put it in iunno if we have a policy about
that)
Anyone with this trait is protected against:
- Bottle smashes to the head.
- RNG Blunt force trauma to the head by blunt objects (Probability is
otherwise altered by melee armor already)
- Partially protects against getting your spine snapped during a bad
tackle (this used to be a check ONLY for the riot helmet or hardhat)
### Bottle Smash
The bottle smash's chance of a knockdown is based on the force and
knockdown duration of the bottle, altered by relevant head melee armor.
It's no longer basically guaranteed due to weird math that would
determine whether or not you were knocked down only if your armor
exceeded certain values or not.
### Misc Changes
Any instance that would check either for riot armor or riot helmets
instead checks for the new traits.
## Why It's Good For The Game
People weren't particularly happy with the possibility of getting
ownzoned by a naked assistant or random toolbox-wielding tider while in
dedicated melee protection armor as a result of pure RNG jank. [There
was a whole thread here about
it](https://tgstation13.org/phpBB/viewtopic.php?f=83&t=35645) with
regards to unarmed combat.
If you're in riot gear, you should feel like you can confidently combat
improvised/blunt weapons at a cost of general protection from the more
serious dangers to your wellbeing (AKA lead poisoning or heatstroke. Get
it....it's bullets and lasers...)
For some reason, bottle smash knockdowns, despite using the values
just...conveniently don't get blocked by armor except for extreme
values? If at all? I felt like this was really weird for something with
such a hefty and fairly powerful knockdown effect, particularly one you
can lob at someones head at range. I remember, way back when I first
started playing, that this was a feature that used to stun, and one I
used a lot to get cheap kills. The amount of bullshit stuns I got on
people with it still haunt me to this day. It hasn't improved in the
current era, despite being a knockdown, simply because any knockdown
still takes several seconds to exit. An arbitrarily low knockdown is
still a several second one. It's time to bring this in line with similar
equipment.
Rather than using flat values that are _clearly_ meant to be only
applicable to riot armor the decade ago that the code was written, let's
use traits instead. That's way better than relying on magic numbers that
may become irrelevant when the code around it changes, which anyone
touching that code may not even be aware existed.
Since we're using a trait, we can actually allow modsuits to
occasionally fill defensive niches that aren't strictly armor values.
Handy.
## 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. -->
🆑
balance: Nanotrasen, in direct response to the increasing danger posed
by wannabe martial artists and rioters in the fringes of the Spinward
Sector, have upgraded the impact dampeners found in their riot armor.
Staff have also started to rediscover the value of medieval armor; it
isn't particularly easy to topple a knight in a suit of plate with just
your fists.
balance: Melee-focused armor is now more able to protect you from
various RNG-based knockdowns, such as critical hits from punches (as
well as the ones applied through the staggered status), shoves, critical
hits with a blunt weapon to the chest, and body throws.
balance: Melee-focused helmets also protect you from head injuries, such
as bottle smashes, accidentally hitting something dense during a tackle,
and critical hits from a blunt weapon to the head.
balance: Bottlesmash knockdowns are less reliable in general.
add: A new module, the Safety-First Head Protection module, protects you
from head trauma! Available in most modsuits expected to take hits to
the head often. And from roundstart exofabricators.
/🆑
<!-- 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. -->
## About The Pull Request
- Fixes#81537. For competing reactions where reaction B consumes the
results formed from reaction A `total_step_added` yields values higher
than the actual volume of products formed causing the reaction to end
early leading to less volume of product formed as explained in the
comment
- Removes `update_total()` from instant reactions as it already does
that for us making it a little faster
- merges `remove_all_direct()` with `remove_all()` to reduce code as
their functionalities are very similar
## Changelog
🆑
fix: multiple reactions occuring in the same holder like mixing drinks
will yield correct reagent result volumes
code: Removes `update_total()` from instant reactions improving
performance slightly
code: merges `remove_all_direct()` with `remove_all()` to reduce code
size
/🆑
## About The Pull Request
Makes it so that regenerative nanites no longer harm slimepeople and in
fact heal them. This was originally PRed downstream by myself in
[Bubberstation](https://github.com/Bubberstation/Bubberstation/pull/1143)
and i've thought to PR it upstream as well to avoid conflicts in the
future, i do think it's a ok change for upstream as well, whilst Nukies
cannot be slimepeople on TG similar to Bubber, they can (in theory)
induct a traitor slimeperson into the team who wouldn't be able to get
healed from the nukie borg. The traitor could also emag the nukie borg
to flip them from working for the nukies. Odds of either of those
happening? Very implausible. However, i still i don't see how it would
negatively affect nukies either.
## Why It's Good For The Game
It's kind of dumb that these magical syndicate nanites that are meant to
be able to heal virtually any wound flounder in the face of slimepeople.
## Changelog
🆑
fix: Restorative Nanites now heal Slimepeople just as well as they do
other people.
/🆑
## About The Pull Request
Just makes salicylic acid and oxandrolone scale with purity (so they're
consistent with libital & aiuri scaling)
## Why It's Good For The Game
Now mass producing good salicylic acid / oxandrolone with a chem factory
takes some effort.
## Changelog
🆑
balance: Oxandrolone now scales with purity. Its default purity is 100%
balance: Salicylic acid now scales with purity. Its default purity is
100%
/🆑
## About The Pull Request
This PR adds a new mobility option for wizards, the Telegram Scepter, a
magical rod that teleports you anywhere you point it.
But be warned, its method of teleportation is very volatile, putting you
in a state of flux. While the scepter itself has no cooldown, using it
while in flux will damage you severely and purge some of your chems. In
fact, any form of magical teleportation will damage you while in flux.
https://github.com/tgstation/tgstation/assets/51863163/b1008f6c-d724-4b7d-8e47-b70e2e770183
Non-wizards who attempt to utilize the wand will find themselves in a
state of permanent flux, meaning any and all teleports are met with
damage. It's also less precise.
Also adds an admin-only version which has infinite range and applies no
flux.
Any semblances to any other game is purely coincidental, I assure you.
Misc. Details:
- I added the ability to pass sound datums to playsound, so it doesn't
override custom sound settings you may want.
- I moved the teleport signals out of the pure-sounding proc `check
teleport`.
## Why It's Good For The Game
I've always thought wizard mobility has been rather lacking, in that you
generally only pick Jaunt.

So when someone threw an offhanded suggestion to make a certain item
from a certain game in discord, my wheel started to turn.
And here we are.
- Teleporting anywhere you can see is very powerful (especially in
conjunction with the Scrying Orb) so this makes it a very high potency
item a wizard can pick up, almost like a targeted blink.
- It is, however, offset by a few things: Namely, the flux mechanic
putting a soft cooldown on teleporting (lest you kill yourself), and it
being an item, meaning you may have to pick up Instant Summons for added
safety.
Overall, I thought it to be a very flavorful mobility option for
wizards. Maybe it will shake up spell selection. Who knows?
## Changelog
🆑 Melbert
add: Wizards have a new mobility option available, the Telegram Scepter.
The ability to travel anywhere you can see at the point of a wand... but
at a price?
/🆑
## About The Pull Request
Nuka Cola now causes irradiation.
## Why It's Good For The Game
Most of our speed bonuses, such as Methamphetamine, comes with a
downside (the usual one being brain damage), because speed is king.
When you give people a speed boost that comes with absolutely NO
downsides outside of visual, it turns out people abuse it, a lot.
Even a small speed boost ends up being abused. It is not uncommon to see
security officers saddled with two, three bottles. Nor is it uncommon to
see tiders use it to escape said officers, or antags to escape said
tiders. Do you see the problem here? It has become a situation where not
having it puts you at a disadvantage, which is sad.
Irradiation fits thematically, too. And it also shows you when someone's
using it, since they start glowing green.
## Changelog
🆑 Melbert
balance: Scientists have discovered Nuka Cola is not good for short term
health.
/🆑
## About The Pull Request
This adds a new trait, `TRAIT_ANALGESIA`, and makes various painkillers
(+ tenacity trauma) apply said trait.
This prevents various pain-related effects, such as screaming due to
pain, and also provides a speed bonus during surgery.
## Why It's Good For The Game
Gives more of an incentive to actually use reagents such as morphine or
miner's salve.
## Changelog
🆑
add: Painkillers (i.e morphine, miner's salve) now actually induce
analgesic effects, preventing various pain-related effects, such as
screaming due to pain, and also provides a speed bonus during surgery.
add: The tenacity trauma (traumatic neuropathy) also applies analgesic
effects.
refactor: Simplified code related to reagents adding traits.
/🆑
## About The Pull Request
This refactors how machines are deconstructed in the following ways
- You can no longer override `obj/machinery/deconstruct()`. If you want
customized behaviour then override `on_deconstruction()` instead.
This comes with the added benifit of no longer needing to check for the
`NO_DECONSTRUCTION` flag because the machine base proc does that for us
& if it finds that flag it won't proceed to call `on_deconstruction()`
meaning no machine will have a chance to spawn anything which is the
current behaviour.
This is required to make #81290 work for all machines at least so that
machine can send the `COMSIG_OBJ_DECONSTRUCT` signal without subtypes
overriding & forgetting to call the parent proc
- `dump_contents()` only gets called when the machine is deconstructed
not destroyed thus not leaving behind any of its contents inside. Fixes
https://github.com/tgstation/tgstation/pull/81290#issuecomment-1925752583
## Changelog
🆑
fix: machines that should not drop contents when deleted no longer do.
refactor: refactors how machines are deconstructed. report bugs on
github.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
<!-- 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
This adds the ability for shakers to pour drinks with custom names and
descriptions. You can alt-click on a shaker and it will prompt you to
set the name and desc for the drink, and they will be given to
description of whatever drinking glass you pour into.
Washing the glass will remove these customization (it will also now
remove any changes made using a pen).
https://github.com/tgstation/tgstation/assets/42454181/6cf336f0-0621-49f3-baf1-91038f454c24
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->
## Why It's Good For The Game
While this already kind of exists by using a pen to change the name and
desc, this is pretty annoying to do for every single glass of a beverage
you serve. It also is overwritten whenever the kind of drink in the
glass is changed. This PR will let bartenders serve plenty of their own
special concoctions without having to rename every single glass they
serve.
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->
## 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. -->
🆑
add: Shakers can now pour drinks with custom names and descriptions!
Alt-click the shaker to enable this.
/🆑
<!-- 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: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
Adds fire ants as a chem. They work pretty much exactly the same as
normal ants, but they deal roughly 2x damage. Also mildly cleans up
whatever ant code I touched
## Why It's Good For The Game
Doesn't really make sense that when you scoop up an anthill of fire
ants, you get a beaker full of normal ants. It's honestly an injustice.
Also, new flavours for the bartender and chef to work with are always
nice.
## Changelog
🆑
add: Fire ants can now be scooped up and used as a chem like normal
space ants
/🆑
---------
Co-authored-by: Aki Ito <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com>
## About The Pull Request
One of the bar restaurant bots asks for cucumber lemonade but it has no
price attached to it, so it takes this drink (that requires help from
botany) and gives nothing in exchange, this fixes that.
## Why It's Good For The Game
bug fix
## Changelog
🆑
fix: Bar bots asking for Cucumber Lemonade now gives you money for
completing it.
/🆑
## About The Pull Request
Alternative title: The screwdriver cocktail is now the world's worst
screwdriver (for real this time).
As mentioned in my writeup in the related issue (#81017), as far as I
know, it has never actually worked.
Tl;dr: It requires `on_transfer` to be called with the method as
ingestion, but in no way does transferring into a drinking glass ever
use that method, and most ways don't even specify a method and thus
`on_transfer` doesn't even get called in the first place.
Then I went back to the original pr and tried it, and it didn't work.
Then for resolving it, it feels unwieldy to do all this trickery on the
reagent to change a value on the drinking glass when the drinking glass
already has the perfect procs for this: the `on_cup_change` and
`on_cup_reset` callbacks.
Instead of using `on_transfer` and registering a hell of a lot of
signals to re-check the master reagent every time the contents get
changed, we just check whether the style we changed into is that of a
screwdriver cocktail.
This actually works.
Oh, and I also added use sounds because it didn't have them, which I
believe only actually get used when using it as a tool and thus only
when it's a screwdriver.
## Why It's Good For The Game
Fixes#81017.
## Changelog
🆑
fix: As they should've for a while, screwdrivers (cocktail) actually
work as screwdrivers (tool).
sound: The screwdriver cocktail also actually plays the screwdriver
sound when used.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
What it says on the tin. I also replaced checks with it everywhere I
found appropriate, hopefully without accidentally breaking anything.
## Why It's Good For The Game
We have a helper for most other antags, and it makes code a lot cleaner
and easier to read. I'm surprised we didn't have this one already.
## Changelog
🆑
code: added an IS_CHANGELING() helper and used it where applicable
/🆑
## About The Pull Request
- Fixes#81333
Should calculate purity before we remove the reagents
## Changelog
🆑
fix: Instant reactions yield reagent results again
/🆑
## About The Pull Request
Cause it only makes sense
Currently the purity of reagents created in a reaction is computed as
follows
`total sum of purity of all reagents present / total number of reagents`
This is incorrect because regardless of how much "volume" of an
impure/pure reagent is present the purity of the final solution is
unaffected. Logically if we have more amount of an impure reagent the
more impure the final solution should be & same for opposite case. This
is the case for ph, where if we have a large volume of say "acidic"
reagent then changes in other reagents have a small effect to the
overall "acidity" of the solution. The same concept now applies for
purity as well
`get_average_purity()`accounts for volume thus yielding more realistic
results. The effect becomes more significant with larger volumes of
reagents.
🆑
fix: reactions now compute purity of reagents based on their volume,
meaning larger amounts of reagents created will have more significant
effects on the final purity of the solution
/🆑
## About The Pull Request
Rather than replacing the entire raw message, just adds to spans.
Also adds some flavor ™️ while i'm here.
## Changelog
🆑 Melbert
fix: Tinacusiate should break less, and break less things
fix: Speaking to a Sign Languager with Tinacusiate in your system
doesn't mess with their text, because they're not speaking.
/🆑
## About The Pull Request
[Converts all manual extraction of rbg with rgb2num. It's just
better](ae798eabd5)
[Yanks out old HSV management, replaces it with list
stuff](4997e86051)
There's this old lummy era clunky code that passed HSV as text
We can now cleanly replace it with passing hsv as lists from a rgb2hsv
proc
So let's just do that.
Also, cleans up spraytan code (and ethereal lighting)
## Why It's Good For The Game
Code better