* removes the force drop when trying to attack with an unwielded crusher (#83641)
## About The Pull Request
What it says on the tin. If you're not wielding the crusher, rather than
forcefully dropping everything in your hands, you simply just don't
attack.
## Why It's Good For The Game
This was added when the crusher was able to be held in one-hand, before
we got the two-handed component. However, for some inexplicable reason
there was a noob trap added into that feature that has existed for
almost five years. Maybe skoglol had their reasons for putting it in
there at the time, but I don't believe this is anything other than
unnecessarily punishing in the modern state of the code. A return works
just fine.
The PR that added it for anyone curious
https://github.com/tgstation/tgstation/pull/45110
## Changelog
🆑
qol: Failing to hit someone with a proto-kinetic crusher one-handedly no
longer force drops everything in your hands.
/🆑
* removes the force drop when trying to attack with an unwielded crusher
---------
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
* Removes references to no-longer-existent "Tesla Energy Relay" from nukeop uplink (#83644)
## About The Pull Request
Title
## Why It's Good For The Game

## Changelog
🆑 PapaMichael
spellcheck: Nukie uplinks no longer claim to have nonexistent "Tesla
Energy Relays"
/🆑
* Removes references to no-longer-existent "Tesla Energy Relay" from nukeop uplink
---------
Co-authored-by: PapaMichael <papa.michael.1996@gmail.com>
* Minor Spider Rebalance (#83554)
## About The Pull Request
Breacher and Viper player-controlled Spiders have swapped castes; Vipers
now come from Abnormal Eggs, while Breachers will now come from Enriched
Eggs. This means that Vipers may be seen more, while Breachers require
the Nest to acquire at least a single kill to wrap and create an
Enriched Egg from. Nurse Spiders also perform their heal action much
faster, at the cost of a bit less healing. It was very difficult to heal
others due to the long do_after and thus we saw very few Nurse Spiders.
Breacher Spiders also are now NOT immune to cold, and will die if they
try to space a room or go into space.
## Why It's Good For The Game
Breacher Spiders are in kind of a difficult spot, both in theming and
balance; their space resistance made them able to vent the station in
multiple places by breaking key walls, and they had no need to commit to
their sieges because they could escape into space at all times. It also
broke part of the dynamic of Spiders wanting to keep the atmosphere in
the station, and disincentivizing Breachers from venting the station
also makes them more coherently a part of the Nest because they won't
reduce the Nest's habitable area.
Viper Spiders were seen quite little instead of the other options in the
Enriched Egg; now, hopefully we'll see more. Likewise, the Breacher is
quite powerful for being an Abnormal Egg, so perhaps now we'll see more
focus on cocooning to unlock the powerful Breachers, or just overall
less of them, which will help even the odds.
Nurse Spiders were VERY underutilized despite their power— the do_after
for their healing just felt obnoxiously long, and especially in tense
situations, you'd have shuffle and Spiders yelling at one another
because two of them have to Space Hulk the hallway for a semi-extended
period of time. Now, Nurses will be able to heal and move on a bit
faster. I don't believe this will create too many issues, balance-wise,
as the time-to-kill on Spiders is still quite low for all but the
tankiest against lasers and even welders.
## Changelog
🆑 Jane
balance: Spider Breachers and Vipers have swapped castes. Breachers come
from Enriched Eggs while Vipers come from Abnormals! Breachers can no
longer survive in spaced rooms/temperatures. The Nurse wraps wounds
faster, but with less damage healed per wrap.
/🆑
* Minor Spider Rebalance
---------
Co-authored-by: DrAmazing343 <147954468+DrAmazing343@users.noreply.github.com>
* Adds Soup boiling SFX (#83649)
## About The Pull Request
In honor of the new sound effects general
https://github.com/tgstation/tgstation/assets/51863163/b2db8ee1-51ef-45a8-9cc8-31594d034ea5
Adds a sound effect that plays when soup is boiling (IE, it only plays
when smoke appears over the soup pot)
It has a sharp falloff and a distance penalty so it will really only be
heard in the kitchen (or though the kitchen's walls), maps with ranges
close to the counter like Metastation notwithstanding.
## Why It's Good For The Game
A touch of atmosphere
## Changelog
🆑 Melbert
sound: Boiling soup now makes a sound.
/🆑
* Adds Soup boiling SFX
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Added the zipzap to the ocean sources (#83645)
## About The Pull Request
In this PR I am just adding the Anxious Zipzap from #83508 to an actual
fishing source, as that was left out of the original PR by mistake. It
compiled properly and loaded as a server.
## Why It's Good For The Game
Adding a way to actually obtain a recently added fish (with the only
other way to interact with the power generation mechanics being an emag)
seems like it would be good overall.
## Changelog
🆑
fix: Made the anxious zipzap accessible.
/🆑
* Added the zipzap to the ocean sources
---------
Co-authored-by: jwc1015 <64438862+jwc1015@users.noreply.github.com>
* Revert "Blade creation ritual returns lost blades" (#83594)
Reverts tgstation/tgstation#82592
The point of the limit on blades is to punish heretics for handling them
carelessly, allowing them to undo that for free is lame.
Maybe someone can re-add this as a separate ritual which has its own
requirements, maybe a knowledge requirement.
🆑
del: Heretics can no longer return their stolen blades, that's the point
of the limit
/🆑
* Revert "Blade creation ritual returns lost blades"
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Adds Crutches to Medbay & Crafting (#83242)
## About The Pull Request
Added crutches! Wooden ones can be made with wood. Medical ones can be
bought from the medvendor.
Crutches will reduce slowdown from missing a leg by 60%, and they will
remove the limping from fractured bones. They're also a fairly decent
bludgeon. However, they do nothing if both legs are cut off. Canes now
also remove broken bone limping as well
Changed the 'white cane' name to 'probing cane' to better reflect its
function.
Shuffled some wound and mob code around, added signals for limbless
slowdown and limping.
Crutches make you waddle.
SPRITES BY XHORIAN!!!!!!!!!!!!!




## Why It's Good For The Game
> Added crutches! Wooden ones can be made with wood. Medical ones can be
bought from the medvendor.
> Crutches will reduce slowdown from missing a leg by 60%, and they will
remove the limping from broken bones. They're also a fairly decent
bludgeon. However, they do nothing if both legs are cut off.
Currently there's no way to abate slowdown from a missing leg except
getting on a vehicle, which I think is pretty lame. What if all the
doctors are busy, missing, or dead? What if medbay is a hole? A crutch
helps make up for the loss at the cost of a hand slot.
> Changed the 'white cane' name to 'probing cane' to better reflect its
function.
'White cane' was undescriptive.
> Shuffled some wound and mob code around, added signals for limbless
slowdown and limping.
I dont know where to put the friggin signals
## Changelog
🆑
Carlarc, Xhorian
add: Added crutches! Wooden ones can be made with wood. Medical ones can
be bought from the medvendor.
add: Crutches will reduce slowdown from missing a leg by 60%, and they
will remove the limping from fractured bones. (canes do that now too)
They're also a fairly decent bludgeon. However, they do nothing if both
legs are cut off.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
* Adds Crutches to Medbay & Crafting
* This should do the trick
* Missed one
* fix
---------
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com>
Patches exploit with (and pre-emptively bumps the usage costs) to the new Adrenal Glands (#83612)
## About The Pull Request
1.
Because the reset timer was not done with `TIMER_UNIQUE|TIMER_OVERRIDE`,
this meant that you could pop the ability, wait 19 seconds, and then pop
it again. And now you had all the benefits of the ability without any of
the downsides, because the timers would not reset and instead run
simultaneously.
I fixed this by both adding the timer flags and by preventing usage of
the skill while you are under the effects of it. (Just in case.)
2.
With permission from Jacquerel, I bumped the chemical cost and dna cost
back up to similar numbers as before. I think the PR swung the hammer
way too far in that direction (You don't make it more spammable while
also making it better, you either do one or the other!)
## Changelog
🆑 Melbert
balance: Re-ups the cost of the new ling adrenal ability
fix: Patches an exploit with new ling adrenal ability
/🆑
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Borgs: the moduling (Various fixups to borg module code) (#83116)
- Gets rid of the item addition copypaste code (Why nobody did this for
7 years is beyond me)
- Adds variable and proper checks for if a module is already installed
(Borgs will no longer eat up unlimited masses of lavaproof track
upgrades, among others) (Technically this never allows duplicates, at
least currently, as I don't recall any modules being capable to used
multiple times intentionally without also deleting themselves with
single_use)
- Unsingleletters most if not all of `robot_upgrades.dm`
Makes the borg module code much cleaner, makes it significantly easier
for new ones to be added. Fixes unintended behaviour with some modules
being able to stack, which until now was always solved by copypasting
code.
🆑
fix: Fixed some borg modules just being constantly eaten up by borgs
even when they shouldn't allow duplicates
refactor: Borg module code now has better handling for adding/removing
items, and to prevent duplicate module usage (Unless one wishes to
override the behaviour.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
* Welp
* fix
---------
Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com>
* Gondolas are now basic mobs (#83451)
## About The Pull Request
This PR turns gondolas into basic mobs and does some fiddling with
gondola pods
Their verbs are now action buttons which they lose upon delivering. If
set to stay, they won't have their abilities afterwards (or wont get
them in the first place if the delivery is already done).
Lets them survive without a pod requirement in case admins want to spawn
one for their own stuff, so I also removed it from the snowflake checks
to exclude them from stuff.
Also replaced the hardcoded "cant speak" with simply giving the mute
trait, so admins can make gondolas speak if they want to for any reason.
## Why It's Good For The Game
The pet level of simple animals can finally be killed off, also gives
admins more control over gondola-related stuff if they so wish.
## Changelog
🆑
refactor: Gondolas (including gondola pods) are now basic mobs.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
* Well then. Hope it works.
* Ohhh.
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
* Mining armor and suit storage cleanup/generalization/modernization (#83437)
## About The Pull Request
### Suit Storage
Makes the suit storage of the various suits consistent across one
another. Now, all the mining suits use a single list which is easier to
maintain.
**The affected suit list is as follows;**
Explorer Suits (and therefore Syndicate Explorer Suits), Goliath Cloaks,
Bone Armor, Drake Armor, Godslayer Armor, Berserker Armor, Mining
MODsuits, H.E.C.K. Suit.
**The list of holdable items is as follows;**
Flashlights, Proto-Kinetic Accelerators, Advanced Mining Scanners /
Mining Scanners, Pickaxes, Upgraded Resonators / Resonators, Ore Bags,
Air Tanks, Spears, special monster organs like Regenerative Cores,
Knives, Proto-Kinetic Crushers, Cleaving Saws (the one that Blood-Drunk
Miners drop), Grappling Guns and Climbing Hooks.
~~It probably doesn't matter too terribly much because you know only air
tanks are going in that slot 95% of the time~~
### Bone Armor and Goliath Cloaks
Bone armor and goliath cloaks both have the same armor values,
environmental protections and coverage as the explorer suit (bone armor
includes the feet due to the sprite physically covering the feet, which
is not a terribly significant balancing point but worth mentioning).
They use the armor plate component to improve the parts of bone armor.
However, they use bone talismans instead of goliath hide to be upgraded.
Goliath cloaks come fully upgraded. You'll see why in a second.
Their recipes are slightly different. Goliath cloaks take nine hides
(I'm so sorry this is for consistency I promise you can't use the
upgrade system with something that deletes its own armor values like
this) and three sinew. Bone armor takes three goliath hides and 6 bone.
### Berserker Armor
Berserker armor can now be improved to the same armor value as drake
armor by using a full suit on both the body and the helmet of the
berserker armor. (Each drake makes two suits, so you need to use up both
suits).
Instead of an armor boost, rage now halves incoming brute damage. Fuck
you, Bubblegum!
### Minor Mining MODsuit Tweak and other armor value changes
The base value for the armor is now 20, rather than 15, so that when it
reaches max ash accretion it has equivalent armor to a fully upgraded
explorer suit. This is only a value difference of 5, but it always
annoyed me seeing it.
All the above mentioned suits also now have a value of about 10 wound
armor. This is because miners do actually experience wounding on
lavaland. Some of the armors had this wound armor. Some didn't. Now they
all do. I don't believe this to have been a deliberate design choice,
but rather, an oversight. Iunno, someone who keeps track of this please
tell me otherwise.
Upgraded suits get a prefix to show they are upgraded. Now, never doubt
whether the miner you are fighting is in a baseline explorer suit or a
riot suit level improved explorer suit ever again!
### Berserker Armor actually covers up clothing/hair underneath properly
and other minor stuff
This is why I started this PR by the way. This one fix. I expand the
scope of my horizons so broadly when I really sit down and PR, don't I?
H.E.C.K. and Berserker helmets can be used for internals.
## Why It's Good For The Game
There is a great deal of inconsistency with regards to the various
lavaland armor you can find and use. Some armors were wildly inferior to
others and only really having value for aesthetic. Some just seemed to
have oversights that didn't seem quite right. And most importantly, the
actual storage list for mining suits in general were not only
inconsistent in of themselves, but were also not being updated as time
goes on.
Bringing them all into line allows for miners to have a bit of freedom
of choice when it comes to appearance, without it becoming a balancing
sticking point nor a detriment to their effectiveness. It is also much
easier to maintain one list than six or seven lists.
Assuming that the baseline of the explorer suit is a-okay for someone to
possess, goliath cloaks and bone armor should now feel more like
fashionable choices rather than, in some cases, being either a worse or
better choice to take (its bone armor, bone armor is the best of these,
its really good generalist armor). I don't care what effect it has on
the ashlander economy. Neither should you.
The minor tweaks and fixes are just stuff that annoyed me for autism
reasons or were oversights due to changes to the items in question or
the game around it. I doubt anyone but me cares very much about these
minor differences, but I like consistency.
## Changelog
🆑
balance: The various mining related suits now have consistent suit
storage. Try putting a knife into your explorer suit's suit storage
today!
balance: Bone armor work similarly to explorer suits, with similar armor
values and options to upgrade their parts. However, they use bone
talismans instead of goliath hides to upgrade. Magic? Just believing
really strongly that the drake is hitting you slightly less hard because
of the talismans? You be the judge.
balance: Goliath cloaks come fully upgraded. However...
balance: The recipes for bone armor and goliath cloaks are slightly
different. Particularly goliath cloaks, which need a lot more dead
goliaths to make. Sorry.
balance: Mining MODsuits achieve at maximum ash accretion the same
amount of melee armor as an upgraded explorer suit.
balance: These various suits also consistently have wound armor.
fix: Berserker armor properly hides underclothing and hair.
balance: Berserker armor pieces can absorb drake armor to gain their
enhanced protection. Become the warrior of Khorne you've always wanted
to be.
balance: Berserker rage now halves brute damage rather than just adding
Melee Armor to you and your squishy body.
qol: Berserker and H.E.C.K. helmets can be used for internals.
/🆑
* Mining armor and suit storage cleanup/generalization/modernization
* There we go.
* Guess I missed this one
---------
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com>
* Cuffed people can sign (to a limited degree), signing tone emotes improvement (#83501)
## About The Pull Request
Currently, if you handcuff someone and they only have sign language
available to speak in (mute, no tongue, nearby people are deaf, you have
bronchitis(?)), they are rendered totally unable to communicate with
anything but emotes. This is stifling to trying to roleplay with nearby
people who want to keep you cuffed for whatever reason (security,
antagonists, weirdos who keep hugging you, etc).
So instead, I've made it so that if you use sign language while
handcuffed, you are still able to sign, but to a much more limited
degree (3 - 5 words per message).
If you're put in a straightjacket, you're still totally unable to use
sign language.
Additionally, I spruced up the messages that sign language uses to
signify tone (?, !) and added one for EXCLAIMED QUESTIONS?! I also made
the emotes work as emotes, rather than the small (easily missable)
messages in the chat box. These emotes will not fire if you sign with
tone while cuffed, to avoid you becoming a spam machine.
## Why It's Good For The Game
It lets cuffed sign language users communicate, which is usually a
pretty good thing when it comes to improving a scene for both them and
the people they're playing with.
It improves the descriptiveness of the inquisitive and exclamatory tone
messaging for sign language users, and also adds one for a combination
of the two tones.
## Changelog
🆑
qol: Sign language users can now sign in cuffs, but to a very limited
degree. They also have more descriptive emotes for questions,
exclamations, and a combination of the two.
/🆑
---------
Co-authored-by: san7890 <the@ san7890.com>
* Cuffed people can sign (to a limited degree), signing tone emotes improvement
---------
Co-authored-by: Joshua Kidder <49173900+Metekillot@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
* Fixes being permanently attached to tram (#83606)
## About The Pull Request
Verifies transport contents at time of tram departure, removing any
invalid movables
Fixes https://github.com/tgstation/tgstation/issues/77722
## Why It's Good For The Game
Movables no longer get invisibly, permanently attached to the tram in
rare event transport moves before contents are updated.
## Changelog
🆑 LT3
fix: Fixed bug where players could be invisibly attached to the tram
forever
/🆑
* Fixes being permanently attached to tram
---------
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* Refactored ghetto chem separator (#83275)
## About The Pull Request
This completely reworks how ghetto chem separator works & brings more
depth & immersion to it. To understand the new system let's compare it
with the current one
**Old System**
1. You insert a beaker containing the reagents you want to separate.
2. You use a lighter/whatever to light a flame, Flame has _magic &
unrealistic_ properties such as
- It will never heat the beaker above 100k
- It doesn't burn oxygen or use fuel source to sustain it
- Distillation rate is a constant 5u/s. It doesn't increase as the
solution boils hotter
3. The apparatus sorts the reagents alphabetically? & transfers the 1st
reagent from sorted list to the target beaker. It does not care if each
individual reagent has their boiling points & how to separate them based
on that etc. It's just bland overall
**New System**
1. You insert a beaker containing the reagents you want to separate,
just lke the old system
2. You use a lighter/whatever to light a flame just like the old system,
however flame behaves in a more realistic fashion as follows
- It will heat the beaker all the way to 1000k if you let it run long
enough
- It now burns oxygen & uses a fuel source(a secondary beaker which you
must insert containing flamable reagents like oil, welding fuel etc).
When oxygen is the fuel source no O2 gas is required
- Distillation rate starts at 2u/s & increases with rising temps
- Intensity of the flame depends on the quality of reagents used as
fuel, Oil has best flammable quality & will heat the beaker faster,
other reagents mixed in various proportions can produce better quality
flames which you can understand by examining the aparatus
- The flame intensity can be adjusted via the burner knob setting
3. Each reagent now has their _boiling computed_ computed from their
mass allowing for realistic interactions, like having to control the
temp's just right to separate your required reagent
4. Temps automatically cooldown and you can install a condenser to
Facilitate faster cooling
Here's the demo video explaining everything
https://github.com/tgstation/tgstation/assets/110812394/ba591859-3fff-4d06-90f8-024c7266f830
## Changelog
🆑
refactor: ghetto chem separator has been reworked from scratch. See PR
83275 for details
qol: adds examines & screentips for ghetto chem separator
/🆑
* Refactored ghetto chem separator
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Minor code clean-up for Cryo (#83477)
## About The Pull Request
- Converts `attackby()` to `item_interaction_with()`
- Prevents abstract/hologram beaker interactions with Cryo
- Cryo respects `NO_DEBRIS_AFTER_DECONSTRUCTION` by properly removing
the mobs visual contents flag & related traits inside
`handle_deconstruct()` instead of `on_deconstruction()`
- Uses `CHEMICAL_VOLUME_ROUNDING` define for rounding reagent volumes.
Everything else is just shuffling code around
## Changelog
🆑
fix: Cryo tube respects `NO_DEBRIS_AFTER_DECONSTRUCTION` for the
occupants visual contents flags & traits & won't allow hologram/abstract
item interactions
code: Cryo has improved attack chain & uses defines for reagent volume
rounding
/🆑
* Minor code clean-up for Cryo
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Adds an ion storm law that affects the humanity status of station pets (#83527)
## About The Pull Request
Adds a few laws that basically do this:

Has a chance to select a concept that is related to other lawsets, just
in case.
## Why It's Good For The Game
I think it is funny when the AI has to care about the station pets. I
have added the AI law "POLY IS HUMAN" in the past to relative hilarity,
especially when Poly decides to give the AI an order. The other pets
aren't likely to do this, but it's still cute to make the AI care about
the existence of lower lifeforms.
## Changelog
🆑 Vekter
add: Adds an ion law possibility that changes the human status of
station pets.
/🆑
* Adds an ion storm law that affects the humanity status of station pets
---------
Co-authored-by: Vekter <TheVekter@users.noreply.github.com>
* fix: allow giant spiders aggressively grab again (#83531)
## About The Pull Request
Remove check that restricted non-carbon mobs from upgrading grab, using
`max_grab` instead which exists for this purpose
All mobs now have `max_grab` set to `GRAB_PASSIVE` by default, overrided
where required.
Giant spiders can now agressively grab, which makes `ambush` spider
playable again (i hope).
closes#83485
## Why It's Good For The Game
Ambush spider works as intended, as it has `STRONG_GRABBER` trait, but
effectively it didn't work, as spiders couldn't grab agressively.
## Changelog
🆑
fix: ambush spider (should instantly agressive grab) and other giant
spiders can now agressively grab
/🆑
* fix: allow giant spiders aggressively grab again
---------
Co-authored-by: Gaxeer <44334376+Gaxeer@users.noreply.github.com>
* Fix not being able to stop looking vertically (#83503)
## About The Pull Request
This fixes a bug with the look down/up verbs where you are not able to
*stop* looking unless you're on a tile where you're able to *start*
looking.
## Why It's Good For The Game

## Changelog
🆑
fix: you are now able to cancel the look up/down verbs from anywhere
/🆑
* Fix not being able to stop looking vertically
---------
Co-authored-by: Echriser <EthanSC2001@outlook.com>
* Makes disease airborne spread more realistic (#83423)
## About The Pull Request
1. Rather than checking every life tick to try to spread via air, it
checks every breath tick. IE, every 8 seconds.
2. Wearing a mask now protects you from catching airborne diseases,
rather than only protecting you from spreading it.
3. Wearing a mask is no longer guaranteed effective (unless on
internals), it now scales based on BIO armor. This is doubly effectively
for people wearing a mask to stop spreading to others vs wearing a mask
to block spreading to them.
## Why It's Good For The Game
Wearing any kind of mask means airborne viruses will never spread, but
also wearing any kind of mask on the opposite end is pointless unless on
internals. Kinda silly.
This PR unifies those behaviors. Wearing a mask to stop spread is still
rewarded, as BIO armor is doubly effective at stopping a spread attempt
as blocking a spread attempt.
Ultimately the goal of this is to give players a realistic way to
protect themselves against airborne transmission vectors besides staying
on internals 100% of the time.
## Changelog
🆑 Melbert
balance: Wearing a mask can now prevent you from being spread airborne
diseases. Prior, it only stopped you from spreading it yourself.
balance: Wearing a mask no longer 100% guarantees you don't spread
viruses to others people - it now scales on the masks BIO armor. Get a
sterile mask from Medical for max safety.
balance: Wearing a mask to stop you from spreading to other people is
doubly effective than wearing a mask to prevent spread to yourself -
Mask up for the greater good!
balance: Passive airborne virus spread attempts are now done every time
you breathe (every eight seconds), rather than every two seconds. The
chance of spread is the same, though - it has been scaled up to
accommodate.
code: Cleaned up a fair bid of airborne-transmission-code. Report any
oddities.
/🆑
* Makes disease airborne spread more realistic
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Restrict AI floor bolt external manipulation (#83463)
## About The Pull Request
My delayed reaction to #68451
**When an AI is alive, on main power, and not SSD its bolts cannot be
raised or lowered externally thus returning some small amount of
autonomy to everyone's favorite brain in a box.**
I tested to be sure this change does not interfere with (de)construction
or other tool actions besides their "must be anchored" requirements.
Should maintainers wish I can adjust the check to allow external
lowering, but not raising, of the bolts anytime to satisfy those
scenarios.
I decided to include "is on backup power (incapacitated)" in the check
as a middle ground so when moving an AI from a bombed sat or the like
anyone who is now used to being able to wrench for a rescue is not
caught off guard since AI gets a harsh penalty for moving bolts on
backup power (most likely overlooked in the original PR). This also
means if you really want to move an active AI Core against its will you
still have a path forward aside from _convincing_ the AI to raise them
voluntarily.
## Why It's Good For The Game
IMO this sort of check should have been included in the original
changes, or at least made to post the anchor status message to the AI's
chat rather than a balloon they are likely to miss. An incapacitated AI
is much more likely to be watching their core.
In the grand scheme this changes very little for anyone out to get an AI
since they will most likely just card or smash it to death anyway. It's
mostly just good for a little silicon piece of mind.
## Changelog
🆑
balance: When an AI is alive, on main power, and not SSD its bolts
cannot be raised or lowered externally.
/🆑
* Restrict AI floor bolt external manipulation
---------
Co-authored-by: Wayland-Smithy <64715958+Wayland-Smithy@users.noreply.github.com>
* projectile dismemberment respects limb dismemberability (#83479)
## About The Pull Request
projectile dismemberment respects limb dismemberability
## Why It's Good For The Game
bug bad
## Changelog
🆑
balance: you may not decap people with a plasma cutter
/🆑
* projectile dismemberment respects limb dismemberability
---------
Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
* Allows the fermenting (wooden) barrel to be emptied and to be wrenched + add contextual helpers to help visualize its interactions (#83491)
## About The Pull Request
Wooden barrels can now be wrenched down to be anchored, which should
make them a lot more convenient if you want to avoid people constantly
pushing them around.
They can also now be emptied by right-clicking with an empty hand, to
help with accidents that do unfortunately happen, like when you add an
additional fruit that you didn't mean to add to the barrel on accident.
I also figured I'd improve its readability by giving it contextual
helpers, and I'm quite pleased with the results.
## Why It's Good For The Game
More QoL functionalities is always good. More controls visibility is
just better for accessibility.
## Changelog
🆑 GoldenAlpharex
qol: Fermenting (wooden) barrels can now be emptied when opened by
right-clicking with an empty hand!
qol: Fermenting (wooden) barrels can now be anchored/unanchored using
wrenches!
qol: Fermenting (wooden) barrels now have contextual helpers, to show
what you need to do at a glance to interact with them.
code: Documented a few of the fermenting barrel's variables.
/🆑
* Allows the fermenting (wooden) barrel to be emptied and to be wrenched + add contextual helpers to help visualize its interactions
---------
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* adds missing context tips to atmos canisters (#83602)
## About The Pull Request
What the title says
## Why It's Good For The Game
Being able to understand game mechanics by examining objects is very
helpful.
## Changelog
🆑 grungussuss
fix: added missing context tips for atmos canisters
/🆑
* adds missing context tips to atmos canisters
---------
Co-authored-by: grungussuss <96586172+Sadboysuss@users.noreply.github.com>
* Remove a bunch of unnecessary periods from photo descriptions containing living entities. (#83564)
## About The Pull Request
Looking at a picture I noticed the description was a bit off, so I did
some testing:

Lo and behold, wow it really does just slap periods on everywhere huh?
So I just went through the code for getting mob photo descriptions and
shuffled around where and when the periods are placed til it no longer
did that:

Also replaced a single letter variable while I was at it.
### EDIT:
Also added newlines between them, for good measure.

## Why It's Good For The Game
Think it's better for there to not be excess periods. ..
### EDIT:
The added newlines also make it, well, more readable.
## Changelog
🆑
spellcheck: Photo descriptions containing living entities no longer have
a pile of unnecessary periods. .. Which they used to have between
describing different entities. .. Also removed that additional space
they had too sometimes..
qol: Photo descriptions containing living entities have these
sub-descriptions split into newlines for ease of reading.
/🆑
* Remove a bunch of unnecessary periods from photo descriptions containing living entities.
---------
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
* print 5 cable coils instead of 1 in lathes (#83601)
## About The Pull Request
What the title says.
## Why It's Good For The Game
It is incredibly tedious to get a large amount of cables from lathes,
considering you need a lot most of the time (especially in engineering),
it should be printing way more than one piece of cable.
## Changelog
🆑 grungussuss
qol: lathes will now print cables coils in packs of 5
/🆑
* print 5 cable coils instead of 1 in lathes
---------
Co-authored-by: grungussuss <96586172+Sadboysuss@users.noreply.github.com>
* Fixes runtime with serializing photo metadata (#83562)
## About The Pull Request
So while working on an entirely unrelated thing, I noticed runtimes
appearing in my logs after taking a picture.
Specifically a bad index runtime for the 77th line here:
2f6920105e/code/modules/photography/_pictures.dm (L66-L78)
And the 199th line here:
2f6920105e/code/datums/datum.dm (L193-L200)
This seemed to be caused by the fact `serialize_list(...)` is called
with a null `semvers` parameter, which then causes it to try to add to a
null list.
I asked about this in code general on the main discord, and got told
just putting an empty list in when `serialize_list(...)` is called
should be fine.
This resolves the runtime.
## Why It's Good For The Game
Better to not have two runtimes added to the logs whenever someone takes
a picture.
Fixes#80514.
* Fixes runtime with serializing photo metadata
---------
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Reworks Adrenaline Glands into Repurposed Glands (Realingment) (#83474)
Adrenaline Glands have been removed and replaced with Repurposed Glands.
This ability removes use of your arms in exchange for regenerating your
legs, breaking cuffs, giving you speed, damage slowdown immunity, and
regenerating and doubling your stamina temporarily.
It's probably a bit overtuned right now. I remembered how useless this
ability is and it made me mad.
I'm tired of AG being a completely useless noob trap that doesn't do
anything of value and isn't even accurate to its description or flavor.
Taking inspiration from Realignment, this turns it into what skoglol
tried and failed to turn it into: An escape plan that can't be used as
free stimulants.
🆑
balance: Reworks Adrenaline Glands into Repurposed Glands (Realingment).
Lose the use of your arms, but you can escape any situation!
/🆑
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
* Gives the Lawyer a pet goldfish (#83461)
## About The Pull Request
The law office now has a pet, a goldfish named McGill.
## Why It's Good For The Game
I've wanted to integrate aquariums and fishes in general into more
roundstart, since it currently either requires being built and/or
ordered, and thought giving it as a pet to the Law Office would be
pretty cool since the law office doesn't have one and deserves one, and
also just a silly reference.
## Changelog
🆑
add: The Law office now has a pet goldfish.
/🆑
* Modular maps
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
## About The Pull Request
So, with the somewhat-recent power changes, cells now have a shitton of
charge compared to the old one.
Now, recently, the `model.respawn_consumable` call in
`/mob/living/silicon/robot/proc/charge` was changed to use this
variable, so every time you had a borg inside a charger, it would
constantly drain 0.5% of its cell charge, and use it for the light
replacer charge calculation.
### The light replacer
So, we now have about 200000 as the charge coefficient on bluespace
cells. On code that was made back for 1000 charge in like 2012 according
to the gitblame. Slight issue: **There's a fucking for loop looping
200000 times every time we charge**, calling
`/obj/item/lightreplacer/proc/Charge` every time it loops. It has no
break condition, so it does this every machinery tick. This, with a
single janiborg with a blue cell kills the machinery subsystem and
causes a hell of a lot of overtime, and a hilarious profiler log:

### The fix
Simply not make the light replacer calculation loop like this and just
use division and a modulo, like a normal sensible coder, plus adjust it
to the new cell values.
See the profiler log now:

## Why It's Good For The Game
It fixes a potentially game killing bug. A FUCK moment to be sure
## Warning for upstreams
_Looks at Nova and Skyrat_ check your Charge() proc usages, I know you
have at least one extra hit for it.
## Changelog
🆑
fix: Fixes janitor borgs killing the machinery subsystem by charging
light replacers 200k times a tick.
/🆑
## About The Pull Request
- Presumably due to being spawned off-station on (I believe) the
centcomm Z-level, Minebots ordered via points and that are delivered by
the shuttle are stuck with their AI in the idle state. Rather than
override a bunch of base-level AI code, I made clicking on them set
their status to active. Right-clicking will set this without opening the
bot's UI, while left-clicking will do both. Examine text now gives users
a hint about this.
- Removed text about feeding the mining bot ore to befriend it, as this
functionality was removed in an earlier PR.
## Why It's Good For The Game
Bugfix.
## Changelog
🆑
fix: Minebots purchased via mining points are no longer stuck in idle
mode. Clicking on them will activate their AI.
spellcheck: Removed the examine text about feeding ore to minebots; this
functionality was removed already.
/🆑
## About The Pull Request
### New fish
#### anxious zipzap
An incredibly anxiety-ridden and electroreceptive fish. Worried about
the walls of its tank closing in constantly. Both literally and as a
general metaphorical unease about life's direction.
It produces electricity, and HATES being with any other fish. One other
zipzap is allowed at most.

#### monocloning jumpercable
A surprisingly useful if nasty looking creation from the syndicate fish
labs. Drop one in a tank, and watch it self-feed and multiply. Generates
more and more power as a growing swarm!
A far better option for power generation than the zipzap, but it's a
syndicate fish. Get an emag or get very lucky!

Working spacebase example

### Aquarium type
Bioelectricity Generator! It boosts the power of electroreceptive fish
to very dangerous levels! But, uh, you put a tesla coil, and voila! Free
power! ...Free power if you keep the fish fed! More fish, more power!

You can convert an aquarium into a bioelectricity generator by
researching the new node, "Marine Utility", from bio processing. Then
you build the biogen upgrade kit and apply it to an already existing
aquarium.
### Fish Traits
#### Electrogenesis
Trait turns the fish into a shock weapon while it's alive, and every
time it feeds, it releases a weak tesla bolt to anyone close to the
tank.
#### Anxiety
anxious fish die when any other fish are in the tank. Please keep them
alone :[
## Why It's Good For The Game
Fish are great, but fish don't have anything to give back to the
station, right? Well, there's some small stuff, but I wanted to add a
bit of functionality towards being able to benefit from having fish.
The anxiety trait with the zipzap gives spessmen a bit of a challenge.
You can settle for one fish generating power per tank and do a
multi-tank generation setup, or you can do some crossbreeding to make a
fish WITH electroreceptive but WITHOUT anxiety. Neat!
## Changelog
🆑
add: New fish, the anxious zipzap
add: New syndicate fish, the monocloning jumpercable
add: New aquarium, the bioelectricity generator
fix: Mixotrophic fish now properly lack food requirements
/🆑
<!-- 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
Renames the gripping gloves to Enhanced Retrieval gloves
## Why It's Good For The Game
These gloves in fact do nothing for your grip, they actually only let
you tackle things, alternate name suggestions are welcome.
## Changelog
🆑 oranges
spellcheck: Gripper gloves are now Enhanced Retrieval gloves
/🆑
---------
Co-authored-by: Fikou <23585223+Fikou@ users.noreply.github.com>
## About The Pull Request
NODE Drones now have higher move resistance
(MOVE_FORCE_EXTREMELY_STRONG), preventing them from being bumped off the
node, pulled away, or lifted away by a fulton extraction kit.
As an extra layer of assurance, the NODE Drone will depart from the site
if it is moved off of its vent.
## Why It's Good For The Game
Closes#83164.
I'm pretty sure these things shouldn't really be ever moving off of
their vents.
## Changelog
🆑 Rhials
fix: You can no longer force NODE Drones off of ore vents. That includes
using fulton packs!
fix: When a NODE Drone is forcibly separated from its vent, it will fly
away.
/🆑
## About The Pull Request
`move_on_shuttle` was a variable that existed on `/mob` despite only
ever being used by cameras. This PR downgrades the variable to only
exist on `/mob/camera` types, but have the only thing that variable do
is add a trait that blocks movement on shuttles if not allowed. This
allows us to check the variable without casting to camera, which is what
some code was un-necessarily doing. This also retainst the ability to
add the trait later on to different mobs who we may not want to be on
shuttles that aren't `/mob/camera`.
## Why It's Good For The Game
There's no point for this variable to live on `/mob` if all it can do is
clog up the VV screen, especially if the current utilization for it is
only cameras. Let's move it off `/mob` and turn it into a trait so it
still has the similar utilization on a global level without typecasting
- as well as make it actually work since needless typecasting was
introducing a minor bug
## Changelog
Irrelevant.
---------
Co-authored-by: Time-Green <7501474+Time-Green@ users.noreply.github.com>