## About The Pull Request
So, my original goal was just a refactor for the emissive overlays of
eyes, as a way to implement the specular emissive introduced by smartkar
some time ago, but somehow I found myself dragged into a bigger refactor
or cleanup of organ damage, thresholds, failures. One of the main
problem was that there were no procs called when a organ suffered enough
damage to fail or when recovering from failure. It'd just enable or
disable a bitflag, leaving it up to subtypes to decide how to tackle
organ failure their own ways: diverse, funky and sometimes incompatible.
More often than not relying on their very own "update_thingamajig" kinda
procs that run whenever the organ takes damage, rather than just when
the threshold is reached (low, high, failure. There are however a couple
organs with their own quirky thresholds, I let those slide).
There's also a bit of old code, especially for ears, with the
`AdjustEarDamage` and temporary deafness both predating the framework
for organ damage as far as I know. It really needed a coat of fresh
paint.
Oh, there were also more than a handful of organs that still heavily
relied on some ORGAN_TRAIT source instead of the `organ_traits` list and
the two add/remove procs `add_organ_trait` or `remove_organ_trait`. This
include organs that lose or gain specific traits when failing et
viceversa.
~~Lastly, felinids (and the halloween ghost species) having reflective
eyes. It's just a nod to the tapetum lucidum that animals with night
vision often have (including cats), which is why their eyes are a bit
brighter in the dark. Felinids however, do not have night vision (nor do
ghosts). This is merely cosmetic.~~ Cut out for the time being due to
issues with the specular emissive...
## Why It's Good For The Game
Refactoring / cleaning up old organ code.
## Changelog
🆑
refactor: Refactored organ damage code a little. Hopefully there won't
be issues (otherwise report them).
/🆑
## About The Pull Request
1. Literally didn't pass the mutation to mutate
2. This used to use `easy_random_mutate`, so it should set scrambled for
parity
## Changelog
🆑 Melbert
fix: Fixes dormant DNA activator
/🆑
## About The Pull Request
TL;DR: "What do you mean we didn't have an old fashioned in the game
before?"
This adds a bunch of different classic cocktails to the game that I
always felt were rather odd holes in the lineup of drinks that
bartenders could make, as well as a few less classic ones 'cause why
not. Adds thirteen new alcoholic drinks and one non alcoholic one.
Mechanically relevant drinks include the Blue Blazer and Hot Toddy which
warm you up like coffee, Bitters and Soda which settles upset stomachs,
and the Suffering Bastard which, in it's role as a hangover cure, calms
nausea, prevents headaches, and very slowly heals brain damage, giving a
way to heal chip brain damage that doesn't require chemistry or surgery.
Full list here: https://hackmd.io/@0lHAWBNkSXixU4v6xxYS_w/SkjlmIbsgx
<img width="439" height="435" alt="drinks"
src="https://github.com/user-attachments/assets/406ca285-63af-49d4-b0e8-176edb251291"
/>
PS This is basically my first real project and also my first time
spriting for anything, so I would really appreciate any advice or
reccomendations.
## Why It's Good For The Game
More variety for service is always nice, but also many of these drinks
are extremely commonly ordered in real world bars. Adding them here
fills some weird gaps in the bar's line up, allows people to order more
drinks that they personally like, and decreases the amount of awkward
interactions in which people order a drink that they're familiar with
and then get confused when a partender somehow can't give them an
daiquiri despite having everything to make it.
## Changelog
🆑
add: You can now make 15 new classic (and some less classic) cocktails.
Includes old standards like the Old Fashioned, Daiquiri, Ramos Gin Fizz,
and more!
/🆑
## About The Pull Request
Closes#92778Closes#86829
<img width="347" height="39" alt="image"
src="https://github.com/user-attachments/assets/c50bd1ff-8c00-47a7-a31a-617fae2adc5b"
/>
1. Splits `TRAIT_UNKNOWN` into `TRAIT_UNKNOWN_APPEARANCE` and
`TRAIT_UNKNOWN_VOICE`
2. Renames some stuff like `getvoice` and `getspecialvoice`
3. Gets rid some crummy signals around `get_visible_name` and
`get_voice`
4. Heads now apply the disfigured trait when relevant (rather than
snowflake checking for damage amount)
5. Ling voice refactored into using special voice (it was only used by a
viro symptom anyways; I don't anticipate this overlap being problematic)
6. Mask voice changer refactored into a trait
## Why It's Good For The Game
Potted plants shouldn't have magical voice concealing powers -
especially not over radio, but not over in person either. It's a damn
plant
So I addressed this by refactoring our face and voice system. Overall
things should be a lot cleaner and easier to use.
## Changelog
🆑 Melbert
refactor: Refactored a lot of code relating to human face and voice, ie,
what shows up in examine and in say. Report anything odd when examining
people, with ID cards, when talking over radio, or when disguised
refcator: Refactored how you get disfigured when your head's super
damaged
refactor: Refactored ling mimic voice and traitor voice changer
del: Potted plants no longer hide voice. They still hide appearance,
though
qol: Honorifics now show in examine / in world, rather than only when
speaking.
/🆑
## About The Pull Request
Revival of https://github.com/tgstation/tgstation/pull/79691
A while back, I made this PR, but lost motivation after diving too deep
into the code soup of can_breathe and related procs. Now, I have removed
those parts, and have simplified that part of the code to the point I
think it's ready for review.
Many reviews from the previous PR have been addressed in this PR.
<hr>
<details>
<summary>Details</summary>
Asthma is a 4 point negative quirk that emulates real life asthma. It
works by slowly decreasing the amount of pressure each breath you take
receives, until your lungs completely seal, ensuring death if you dont
get oxyloss meds/windpipe surgery.
Inflammation (the tracker for intensity) increases whenever you breathe
smoke, use a cigarette, metabolize histimine, or suffer an asthma
attack.
Asthma attacks have a low chance of happening every second, starting 10
minutes after you spawn and with a 20-30 grace period between attacks.
They are "diseases" that cant be outright cured by albuterol, only put
into remission. They increase inflammation at varying rates depending on
their severity, with extreme asthma attacks being a immediate threat to
your life while mild ones might not even cause inflammation. The
response to these is always the same - use your inhaler before you start
choking.
Asthmatics start with a rescue inhaler, a low-capacity inhaler loaded
with albuterol, which I will get to later.
Albuterol is a new medicine thats a little tricky to make but still
doable. It can be efficiently created with inverse convermol, or
transmutated from salbutamol and convermol. The opposite is true, with
albuterol able to be turned into salbutamol. Two canisters are available
in chemvends.
Upon use, it increases the virtual pressure of all breaths taken by 40%.
This allows for you to breathe in lower pressure environments, as well
as enhancing the effects of things like healium.
It's OD causes your diaphram to spasm, causing sporadic losebreath and
forced breathing.
Inhalers are a fancy new reagent application apparatus that uses the
INHALE reagent bitflag.
Inhalers themselves are rather unremarkable, they are merely the method
of using inhaler canisters (they also have a rotary display
approximating the uses left in a canister - just like real life
inhalers).
Inhaler canisters are the reagent containers, and are generally low
capacity. They can only be used in a inhaler, and contain aerosolized
chemicals.
Inhaler canisters and inhalers are unlocked from chemical synthesis, and
are printable for cheap from a medlathe.
In order to use a inhaler, one must uncover the mouth of a carbon and
wait a few seconds (its faster if its a self-application) before a small
amount of the reagents are delivered via the INHALE bitflag. This only
works on things currently breathing - if theyre dead, have no lungs, or
just, arent breathing - it will fail. This includes asthmatics with 100%
inflammation.
</details>
<img width="181" height="74"
alt="282863233-77a7cd6b-44d2-458e-9966-06d485df1521"
src="https://github.com/user-attachments/assets/293b6659-0834-4e9a-b033-cc3b0cfde18e"
/>
<img width="1465" height="202"
alt="282863346-2a247736-0c3a-43b0-a60b-7cff10ce4963"
src="https://github.com/user-attachments/assets/5d9a13dc-b7b2-4de2-adda-8fbc8276e667"
/>
Sprites are not mine; they are from swanni and I can NOT sprite for the
life of me
## Why It's Good For The Game
1. Asthma is just cool. One of my favorite features on bay was the fact
lung damage required you to turn up the pressure on your O2 tank to
survive, and this does precisely that.
2. Its always fun to add new ways to interact with atmos as a player
that arent grossly broken, and I fail to see how a 40% increase of gas
intake will really affect balance too badly.
3. Inhalers are badass.
## Changelog
🆑
add: Asthma quirk, based on IRL asthma
add: Inhalers, a new reagent administering method that uses INHALE
add: Albuterol, a new reagent that increases the amount of gas you
inhale by 40%
balance: Inverse convermol now forms once the reaction is done, not on
metabolize
/🆑
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
There was a PR I wanted to make, but one of the features I wanted the
addition to have was for an affected mob to only speak aphasic, but
understand whatever languages they'd normally be able to understand.
This, in turn, required refactoring language holders to separately block
language speech and comprehension. This change, I decided, would be good
to split into its own PR.
## Why It's Good For The Game
Allows more fine-grained control over what languages an atom is blocked
from speaking or understanding. This will be useful for future PRs or
admin events.
## Changelog
no player-facing changes
## About The Pull Request
This PR aims to clean or bring up to date portions of code about dna,
the dna console and mutations. This includes taking care of or removing
some of the awful choices like the pratically useless
`datum/mutation/human` pathing, or the class variable, in favor of using
sources to avoid potential issues with extraneous sources of a mutation.
The files changed are over a hundred just because I removed the
`datum/mutation/human` path, but the actual bulk of the code is mainly
shared between the datum/dna.dm, _mutations.dm and dna_console.dm.
## Why It's Good For The Game
Mutation shitcode is hurting my future plans for infusions a little.
Also it's a much needed refactor. Drafted 'till I'm sure it works
without issues.
## Changelog
🆑
refactor: Refactored mutation code backend. Report any issue.
/🆑
## About The Pull Request
Adds a new quirk, (-10 cost) called Immunodeficiency, and a new inverse
chem of spaceacillin, sepsisillin. Both cause the same effect. (Well,
the quirk version is permanent obviously) When affected by either of
these, viruses will progress faster and you will catch them more easily,
burns will necrotize faster and be harder to sanitize, and alien embryos
will gestate more quickly. These effects can be mitigated with
spaceacillin, but even while under the effects of spaceacillin, you'll
only be about on par with or slightly worse than a normal person, as
opposed to the blanket protection that spaceacillin normally provides.
Owners of the quirk will be provided with a bottle of 3 low dose (1
minute duration) spaceacillin pills to mitigate their condition, and a
sterile medical mask(the noninternals kind) for style and flavor.
## Why It's Good For The Game
More unique quirk options = good. Reasons to actually ask RP and
chemists for things = good. More inverse chems = good.
Also, the sepsisillin was too good an inverse name and effect to resist.
Sepsisillin also has some interesting use cases.
Example: Need a guy dead and work in medical? you could just stab him,
or... you offer him a coffee. Inside said coffee is 10u of sepsisillin
and the deadliest blood transmitted virus (to minimize collateral
damage) you can cook up. Watch as he drinks said coffee, feels fine, and
then 2 minutes later suddenly starts attempting to un-dock from his
lungs.
## Testing Images:
Spawns with mask and pills:


Monkeyhuman with Fungal TB after 1 minute.

Monkeyhuman with Fungal TB and Immunodeficiency after 1 minute.

## Changelog
🆑
add: Adds new immunodeficiency negative quirk, and sepsisillin, the
inverse of spaceacillin. Both have an immune system weakening effect,
mitigate-able with spaceacillin.
/🆑
---------
Co-authored-by: ThrowawayUseless <notarealemail@emailservice.fake>
## About The Pull Request
This overhauls nearly all aspects related to heart attacks, making them
more urgent and threatening. It also enables the use of defibrillators
for quicker, less invasive treatment of heart attacks.
They are now a status effect instead of a virus, with a fixed countdown
of about two and a half minutes before full stoppage. As this timer
counts down, symptoms steadily escalate from audio cues to suffocation
and dizziness. Through treatment, the countdown can be wound back and
eventually cured (or you can just swap the heart like usual. Boring!!).
### Treatment
Replacing the heart is no longer the *only* option for treatment. Now,
heart attacks can be cured with the use of a defib. Each shock will
rewind the countdown (and symptoms) heavily, curing it after 2-4 zaps in
quick succession. In lieu of a defib, most other shock sources will
work, albeit much less effectively.
So, if you're in security and *really* don't feel like going to medical,
you can just have your fellow officers taze you back to health!

The emergency penthrite given after the attack has a new icon/message,
and is slightly less forgiving. You can still use it to shock yourself
back to life, still being a very risky move.
The heart attack doesn't manifest on medical HUDs immediately. It only
appears after the victim has reached stage 3 for the first time. At
stage 3, it's pretty apparent to both the victim and anyone around that
they're having a heart attack anyways, but until then it will be on the
victim to identify symptoms. Heart attacks will always be reported on
health analyzer scans, shown as the organ failing due to a myocardial
infarction and a tooltip suggesting defibs/other shocks to treat it.
This also adds two tips, for secoffs and medics, on how to treat a heart
attack.
Defibs also now use up charge for restarting a stopped heart, instead of
only when reviving a corpse.
## Why It's Good For The Game
Making heart attacks more of a threat gives way more weight to something
people should be afraid of, but aren't. Heart attacks fail to emulate
anything resembling a heart attack, to the point that it is lame and
dissapointing. They're an annoyance and a trip to the surgery room for
anyone familiar enough with the game. This iteration may be more
dangerous, but it's also more *exciting* (and can be treated faster).
Broadening the ways to treat a heart attack, or just stave off symptoms,
gives an amount of player agency over this threat. It may be more
urgent, but it doesn't mean it has to be a trip to medbay every time.
You can look for other ways to get zapped (security will help if asked,
I promise) or sandbox up your own solution.
Also, treating heart attacks with defib shocks just makes sense. Why do
we have to trash the whole heart? Usually after a heart attack it still
has like, a year or so of juice left before it quits for good.
More threatening heart attacks also further incentivize synthetic hearts
and working out, or any other clever ways of shielding oneself from an
attack (in case you're paranoid like that).
And lastly, the whole reason I started with this PR in the first place
-- I think it is a bit odd having heart attacks be handled as *diseases*
in the code. Status effects make more sense.
## Changelog
🆑 Rhials
balance: Heart attacks are now more violent and urgent. If you can hear
your own heartbeat and are short of breath, you should probably see a
doctor.
balance: Heart attacks can now be treated and eventually cured with
repeated defibrillation shocks.
balance: Heart attacks can now be treated and eventually cured with
repeated shocks from other sources.
/🆑
## About The Pull Request
One of the more recent incidents involving viral outbreaks utilized
these viruses to easily produce a ton of advanced, mutated diseases out
of the floor diseases. You can get some details here:
https://github.com/tgstation/tgstation/issues/90054
These diseases have bespoke behaviours, yet are capable of being
mutated. It doesn't really make much sense for them to be advanced
diseases because of their unique behaviour. Given it starts with a flag
that indicates that it is meant to not spread, but ,obviously, mutating
it causes it to become contagious anyway, we've just made them basic
viruses with some of the relevant parts of the symptoms they were using
added in.
## Why It's Good For The Game
It makes it too easy to get an advanced virus with which to mutate.
Which results in...well, a Urgathoan/Nurgle Incident waiting to happen.
Don't drink spoiled milk, kids. Or do if you're based.
## Changelog
🆑
code: Changes floor diseases from advanced diseases into basic diseases.
Should mostly function the same, except you can't mutate them.
/🆑
## About The Pull Request
Converts `/datum/player_details` into `/datum/persistent_client`.
Persistent Clients persist across connections. The only time a mob's
persistent client will change is if the ckey it's bound to logs into a
different mob, or the mob is deleted (duh).
Also adds PossessByPlayer() so that transfering mob control is cleaner
and makes more immediate sense if you don't know byond-fu.
## Why It's Good For The Game
Clients are an abstract representation of a connection that can be
dropped at almost any moment so putting things that should be stable to
access at any time onto an undying object is ideal. This allows for
future expansions like abstracting away client.screen and managing
everything cleanly.
## About The Pull Request
Reverts PR #83456 which added the weight system as well as applying it
to two symptoms, sneezing, and coughing.
## Why It's Good For The Game
The weight system was originally added to in the hopes a general nerf to
dangerous diseases. This also had the side effect of reducing a decent
amount of potential from good diseases by a fair bit as well. The PR I
am reverting was merged during a time where the Virology job was just
removed and people were throwing nerfs at it left and right to see what
would stick.
A minor nerf to Virology from #83459 and #83423 however has already
solved most of the issues regarding dangerous diseases by allowing
people with low resistance diseases to self-cure themselves
automatically as well as reducing the overall stage speed by a fair bit
allowing for a lot more time to make up a cure and respond in a timely
manner. While the latter made airborne spreading methods overall less
effective. This was ultimately done at a point where several other nerfs
or changes regarding advanced diseases were made with the purpose of
nerfing the Virology section of the game even further to a ridiculous
degree such as #83458 and #83454. As a side effect, this also closes
#86952.
It doesn't help that the PR didn't make a token effort in making the
change known in a way ingame to anyone working on Virology. Thus making
it seem as if the symptom cap was reduced to 5 for most cases for
unknown reasons causing a lot of frustration where even reaching to
other people in a well populated server wouldn't know why the symptom
cap would only allow 5 symptoms.
## Changelog
🆑
del: Removed the weighting of viro symptoms
/🆑
Co-authored-by: David Andersen <DAVID.ANDERSEN6113@STU.MTEC.EDU>
## About The Pull Request
Reverts #83361
## Why It's Good For The Game
I PR'd the original with the intent of making disease battling more
engaging by adding warnings and sneeze dodging, but this was rejected
and instead we got a very awkward middle ground where no one is happy
and the original PR didnt accomplish what it set out to accomplish. You
can't dodge the sneeze because it's a shotgun spread and invisible :/.
The sneeze catchers are even somewhat buggy and the sneeze warning leads
to extra chat clutter
## About The Pull Request
This is a small change in the symptom of regenerative coma, which I made
so that it would not block other treatment methods in critical condition
due to the insane rate at which self-made viruses spread during contact
transfer. This results in the almost ubiquity of this symptom, which
strongly affects your game, which is very difficult to notice if you are
not a doctor. Very often, this symptom spoils the miners' game, which
leads to idiotic accidental deaths when you use a luxury pen before a
fight and expect that you will be able to fight from a critical
condition, but fall asleep in battle due to an accidentally acquired
virus.
(Or to put it briefly, the TRAIT_NOSOFTCRIT trait (for example,
penthrite gives it) now blocks falling into a regenerative coma.)
## Why It's Good For The Game
There will be no more stupid, pointless and difficult-to-control lapses
into a regenerative coma when you don't need it and you can continue to
live without it.
## Changelog
🆑
add: TRAIT_NOSOFTCRIT now blocks falling into a regenerative coma.
/🆑
## About The Pull Request
This PR adds a small, pre-canned virus to the game, the "Localized
Weightloss Malfunction" virus, or weightlessness virus. Weightlessness
is a weak contact virus that can only spawn due to randomized virus
spreading virus.
The virus itself applies weightlessness via having the mob produce their
own internal supply of gravitium, resulting in a lack of control from
gravity. This is a bit of a patch job, and if we'd like to make this
apply a more specific status debuff that can be managed, but this works
well enough for proof of concept anyway.

The disease is cured via liquid dark matter, but has a reasonable chance
to self-cure as well similar to most diseases do nowadays.
## Why It's Good For The Game
Seemed like an interesting mechanical intersection, and while it can be
frustrating, it is by no means a round removal virus. It is debilitating
enough that it would necessitate a medbay visit. Liquid dark matter also
serves as a occasional grenade chemical, but giving it a medical use
provides another inch of plausible deniability.
I made this PR a little bit ago on a whim, and it's been sitting on my
repo for a hot second here, so I thought I'd get this moving if there's
no major issues.
## About The Pull Request
This PR kills the abstract internal and external typepaths for organs,
now replaced by an EXTERNAL_ORGAN flag to distinguish the two kinds.
This PR also fixes fox ears (from #87162, no tail is added) and
mushpeople's caps (they should be red, the screenshot is a tad
outdated).
And yes, you can now use a hair dye spray to recolor body parts like
most tails, podpeople hair, mushpeople caps and cat ears. The process
can be reversed by using the spray again.
## Why It's Good For The Game
Time-Green put some effort during the last few months to untie functions
and mechanics from external/internal organ pathing. Now, all that this
pathing is good for are a few typechecks, easily replaceable with
bitflags.
Also podpeople and mushpeople need a way to recolor their "hair". This
kind of applies to fish tails from the fish infusion, which colors can't
be selected right now. The rest is just there if you ever want to
recolor your lizard tail for some reason.
Proof of testing btw (screenshot taken before mushpeople cap fix, right
side has dyed body parts, moth can't be dyed, they're already fabolous):

## Changelog
🆑
code: Removed internal/external pathing from organs in favor of a bit
flag. Hopefully this shouldn't break anything about organs.
fix: Fixed invisible fox ears.
fix: Fixed mushpeople caps not being colored red by default.
add: You can now dye most tails, podpeople hair, mushpeople caps etc.
with a hair dye spray.
/🆑
## About The Pull Request
I'm making sure that `update_body_parts()` is properly called when
changing bodypart overlays, so that they actually show up the very
moment they were changed. However, to avoid redundant
`update_body_parts()` calls on init or while changing species, I've
added a living flag that stops `update_body_parts()` from being called
in these situations. I also scoured the codebase for other redundant
`update_body_parts()` to remove and things to clean up a little.
## Why It's Good For The Game
This automates the process of calling `update_body_parts()` a bit.
## Changelog
Mainly backend.
## About The Pull Request
Makes the cure_text start with a capital letter, making it more inline
with how other cures are formatted.
## Why It's Good For The Game
Text looks cleaner.
## Changelog
🆑
spellcheck: capitalise cure_text for advanced slime mutation
/🆑
## About The Pull Request
<details>
- renamed ai folder to announcer
-- announcer --
- moved vox_fem to announcer
- moved approachingTG to announcer
- separated the ambience folder into ambience and instrumental
-- ambience --
- created holy folder moved all related sounds there
- created engineering folder and moved all related sounds there
- created security folder and moved ambidet there
- created general folder and moved ambigen there
- created icemoon folder and moved all icebox-related ambience there
- created medical folder and moved all medbay-related ambi there
- created ruin folder and moves all ruins ambi there
- created beach folder and moved seag and shore there
- created lavaland folder and moved related ambi there
- created aurora_caelus folder and placed its ambi there
- created misc folder and moved the rest of the files that don't have a
specific category into it
-- instrumental --
- moved traitor folder here
- created lobby_music folder and placed our songs there (title0 not used
anywhere? - server-side modification?)
-- items --
- moved secdeath to hailer
- moved surgery to handling
-- effects --
- moved chemistry into effects
- moved hallucinations into effects
- moved health into effects
- moved magic into effects
-- vehicles --
- moved mecha into vehicles
created mobs folder
-- mobs --
- moved creatures folder into mobs
- moved voice into mobs
renamed creatures to non-humanoids
renamed voice to humanoids
-- non-humanoids--
created cyborg folder
created hiss folder
moved harmalarm.ogg to cyborg
-- humanoids --
-- misc --
moved ghostwhisper to misc
moved insane_low_laugh to misc
I give up trying to document this.
</details>
- [X] ambience
- [x] announcer
- [x] effects
- [X] instrumental
- [x] items
- [x] machines
- [x] misc
- [X] mobs
- [X] runtime
- [X] vehicles
- [ ] attributions
## Why It's Good For The Game
This folder is so disorganized that it's vomit inducing, will make it
easier to find and add new sounds, providng a minor structure to the
sound folder.
## Changelog
🆑 grungussuss
refactor: the sound folder in the source code has been reorganized,
please report any oddities with sounds playing or not playing
server: lobby music has been repathed to sound/music/lobby_music
/🆑
## About The Pull Request
Fish (the item that you catch with a fishing rod) now has an edible
component attached to it, making it possible to eat them if you really
have to, at the cost of eventually killing and deleting the fish,
however, you normally shouldn't.
Along with the seafood and meat foodtypes flags, it possess the gore and
raw foodtypes too, making them pretty awful to eat unless you're a
(non-vegan) lizard, felinid, or wearing the strange bandana*, which can
only be found in the cqc kit case. Furthermore, it carry diseases like
the ones from food left on the floors for too long, so a strong stomach
is required to safely eat it even if you actually like it, dummy...
UNLESS you fry or grill it, thus killing the diseases (as well as the
fish) and removing both the gore and raw food types, then it becomes an
actually ok meal... UNLESS you're dumb enough to eat a pufferfish, a
donkfish or a slimefish.
That is more or less the general rule. A few fish stray for it. For
example, lavaloops are never raw (still gorey). The skeleton fish are
never edibles, and holodeck fish is, well, holographic and thus
disappears if you try to eat it.
*the strange bandana is a reference to MSG, and this is a reference to
the MGS3 fish eating animation.
This is WIP btw, I'll have to test it and add some then polish it.
## Why It's Good For The Game
Whole unprocessed fish should be technically edible, even if not safe to
eat nine times out of ten. Also I kinda need this if I want to add a
tasty fishing spot to the kitchen deepfriers.
## Changelog
🆑
add: Whole, unprocessed fish is now edible. However it's pretty much
reccomended to grill or fry it for over 30 spess seconds before
attempting to eat it.
fix: germ-covered, dirty food no longer tries to infect you through
contact.
/🆑
## About The Pull Request
Fixes several errors to spelling, grammar, and punctuation.
## Why It's Good For The Game
## Changelog
🆑
spellcheck: fixed a few typos
/🆑
## About The Pull Request
Fixes several errors to spelling, grammar, and punctuation.
## Why It's Good For The Game
## Changelog
🆑
spellcheck: fixed a few typos
/🆑
## About The Pull Request
title above.
## Why It's Good For The Game
allows people with hereditary manifold sickness to purchase a single
pack of big pharma endorsed overpriced medicine.
edit: the 2 pack cargo crate has been increased to 600 credits, to
better reflect the goodie case price and because companies taking
advantage of people with medical conditions is soul
## Changelog
🆑
add: big pharma now supplies a single pack of experimental medication as
an easy to access (albeit expensive) cargo goodie!
balance: price for the cargo crate with 2 pill bottles of experimental
medication has been increased to 600 to better reflect the goodie case
price.
/🆑
---------
Co-authored-by: CRITAWAKETS <sebastienracicot@hotmail.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
Fixes runtime in /mob/living/carbon/human/Life() proc when a mob has a
disease that failed to have a severity string assigned.
## Why It's Good For The Game
Runtime in life proc bad
## Changelog
🆑 LT3
fix: Fixed players being incorrectly immune to certain virus severities
/🆑
## About The Pull Request
https://github.com/tgstation/tgstation/pull/85091 was great in that it
no longer said "You don't need to breathe!" before the NOBREATH actually
kicked in.
It now meant though that that it would message "You don't need to
breathe!" Every time that the virus hit on_stage_change and it was on
stage 4 or 5
Apparently on_stage_change can and will still be trigger when the virus
is at max stage because now the self resp virus was spamming "You don't
need to breathe!" every time that the virus tried to change a stage -
which was a lot more often than the previous (albeit erroneous) message
that was looking for a 5% probability before say its "You don't need to
breathe!" message.
<details>
<summary>For reference; I made the message display the stage during
testing, to confirm it was hitting this while at stage 5, and
yeah.</summary>

</details>
This PR changes it slightly so that the "You don't need to breathe!"
only comes up when it reaches stage 4, which in all my tests it passed
on its way to stay 5.
Though for the people that miss that, it also occasionally says "You
realize you haven't been breathing" upon activate() though this is with
the probability check
In my tests, though, the prob of 5 was still a bit high (maybe because
we sit at stage 5 with a healing virus longer than we sit at stage 1-3
which is when the message was triggering before that fix PR) so I
changed the probability to 3
Also, when it reaches stage 3, and it already hit its peak so the virus
is on its way to curing, it will send the message "You need to breathe
again". This might be helpful when your healing virus starts to
self-heal because you don't take care of yourself. Originally I had it
on stage<4 and stage_peaked that it would give that message but testing
it out, it would bounce between 1 and 2 a lot during self curing and
that got spammy as well. When I cured using reagents, on low resistance
versions of self resp viruses, it did not trigger this message, though
it did when I used low nutrition and spaceacillin to self cure.
## Why It's Good For The Game
I'd almost rather not get a healing virus than see all this spam.
Please make it stop.

Fixes: #85237
## Changelog
🆑 Thlumyn
fix: self-resp viruses don't spam messages as often
/🆑
## About The Pull Request
4th stage had incorrect indentation, causing health updates to only run
on brute loss and not stamina
## Changelog
🆑
fix: Fixes Hereditary Manifold Sickness's 4th stage not updating health
when it should
/🆑
## About The Pull Request
"You realize you haven't been breathing." and "You don't feel the need
to breathe." are displayed once stage changes past 4th, thus removing
your need to breathe.
also why was pick wrapped in "[ ]" what even
## Why It's Good For The Game
Its confusing to new players and blatantly misleading. Its a noobtrap
and not a funny one.
## Changelog
🆑
qol: Self-respiration no longer sends misleading messages and instead
tells about lack of need to breathe once it actually gives you the
effect
/🆑
## About The Pull Request
fixes an oversight I made in #83459 which left the mood penalties
unchanged on the downside of buffs to mood for overcoming bad viruses -
they were supposed to be equal on both sides of neutral sanity (which
for your average spaceman is, fittingly, 'unstable' or 'disturbed')
## Why It's Good For The Game
might arguably be a balance change and wasn't what I originally tested
on, but it wasn't intended for them to be unequal. testing/observation
since says this will probably have a slight but appreciable penalty on
being in low mood for recovering from viruses, but they're so much
easier to cure otherwise now that it's likely to be negligible.
encouraging people to take care of themselves is good.
## Changelog
🆑
fix: Mood buffs/penalties are now properly equal on both
positive/negative sides.
/🆑
## About The Pull Request
Recently we allowed items held in your hands to catch fire if you catch
fire.
This makes sense but the code had a few oversights, then we reverted it.
This PR reintroduces the feature, but with a few refinements.
The basic feature is simple: If you are on fire then items you are
holding will also catch fire, in the same vein as items you are wearing
on your head or hands.
There are also a few caveats we forgot about the first time we added
this:
- If your gloves cannot catch fire, your held items will not catch fire
(because your hands aren't on fire).
- If you are extinguished, your held items will also be extinguished.
- Stopping, Dropping, and Rolling on top of any items will also
extinguish those items.
As part of this change, after an argument about whether or not this is
an oversight in coding-general, I've made the proc `get_equipped_items`
take a bitflag instead of a series of booleans as an argument and added
a new one for "include held items", so that we need no longer argue
about whether holding something counts as "equipping" it (in all other
parts of the game than this proc, it does). This is what gives the PR
most of its code footprint, don't be scared.
## Why It's Good For The Game
Items you are holding in your hands _should_ catch fire if everything
else on your person is on fire, and taking an item off of your body to
put it in your hands shouldn't protect it from fire, because those
things don't make intuitive sense.
If we want an item to be able to catch fire when worn, then it should do
so.
This might expose some issues where we were improperly setting the
flammability flags on items, but any weapon which will burn in your
hands now would also have burned if you were wearing it on your belt or
back, so making those issues more visible should be a bonus (we'll also
stop them from burning on your back or belt).
If you see someone holding a piece of paper that you really don't want
them to read you can now set them on fire to stop them from reading it,
whereas previously they would deftly hold the very flammable object out
of reach of their flaming body.
## Changelog
🆑
balance: Items held in your hands can catch fire.
balance: Items you are holding won't catch fire if your hands cannot
catch fire.
balance: When you stop being on fire so will items you are holding.
balance: If you roll around on your burning items they will stop being
on fire.
/🆑
## About The Pull Request
Reworks sneezing. Instead of a range check that checks if you're facing
someone, it is now a skill check
https://github.com/tgstation/tgstation/assets/7501474/c11ffa16-9bd2-4ed1-8022-2094360657bc
All sneezes shoot projectiles, but depends on the virus if they're
infectious. Using the sneeze emote is the only method that doesn't shoot
a sneeze
## Why It's Good For The Game
I think the invisible infection mechanics are unfun. A lot of station
dangers challenge your knowledge and mechanical skill, while viruses are
gotten by being around people in a roleplay game. You can get a round
seriously ruined if you walk past someone with a sneezing virus and
don't immediately rush spaceillin or chemistry, which I don't think is
mechanically interesting.
Now if you get infected, it's a skill issue. Get good and dodge the
sneeze
Note that this is just one method of infection. I didn't touch coughing
and airborne viruses, which do constant area checks and infect everyone
around. I plan to, but not now. I'll probably make coughing do a cone or
something, and ignore the airborne viruses since they can't be modified
and are generally less broken
## Changelog
🆑
balance: You can now dodge sneezes
balance: Infectious simple diseases that use sneezes now infect with
sneezes and have lowered airborn transmission
balance: Damageless attacks, projectiles, hugs etc no longer drain
shields
/🆑
- [x] Make sneezes shoot to your cursor so you can either intentionally
sneeze on people or sneeze away from people if you react fast
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
The floor diseases were supposed to be more of a joke, but it seems to
be a bother for many due to the scarcity of cures.
This PR changes the floor diseases cures to some common chemicals.
## Why It's Good For The Game
They weren't supposed to suffer this much.
## Changelog
🆑
balance: Floor diseases cures are now common chemicals: Milk, Chlorine,
Space Cleaner
/🆑
## 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.
/🆑
## About The Pull Request
#83459 made stealth a function of being equal to or higher than severity
which made a lot of previously visible positive viruses hidden.
Unintended behavior, fixes it.
## Why It's Good For The Game
fix good, most people without HUDs can't see these anyway. It's almost a
QOL thing to just be able to ask a doctor "hey do I have a positive
virus" since if it's perfectly positive, there's nothing really gained
by people not knowing (you, enemies, and friends alike.)
## Changelog
🆑
fix: positive viruses are no longer hidden.
/🆑
## 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>
## About The Pull Request
Makes sure viruses respect the weighted 6 symptom cap. 8 symptom viruses
are not something this world is prepared for.
Fixes https://github.com/NovaSector/NovaSector/issues/2727
## Why It's Good For The Game
fix bug
## Changelog
🆑
fix: viruses can no longer potentially have 8 symptoms
/🆑
<!-- 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
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->
Adds symptom weights. Sneeze and cough have double weighing
## Why It's Good For The Game
<!-- 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. -->
Sneezing and coughing are very commonly used symptoms in order to mass
spread diseases. They're usually a given since it gives everyone your
virus.
By increasing their weighting, mass spreaders are limited to less
symptoms. Reduces station-wipe potential of lethal diseases and nerfs
positive viruses by requiring people to actually go to medbay and get
them (even if its just the pill table).
We can make viruses less symptom heavy now that we don't have to worry
about the virologists' enjoyment, making it less horrible to deal with.
Instead of combusting, freezing, becoming blind, starving and your skin
melting, you now wont starve (unless you got infected through fluids,
but that's a lot more direct and avoidable so probably fine)
## 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. -->
🆑
tweak: Sneezing and coughing symptoms have double the weighting
/🆑
<!-- 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

what it says on the tin. we're in virology rework season again #79854
makes natural healing enough for people to kick the teeth out of bad
viruses without chem. (still needs exact testing to dial in, but
ideally, chems will be a buff but no longer a mainstay. #83453 will
help, and things like fungal TB will be unchanged.)
makes viruses progress a bit slower across the board - this was part of
why you could have a bad virus shoot up to stage 5 from having been at
stage 1 out of nowhere, even after having mostly fought it off. this is
probabilistic, but the prob is lower now.
makes viruses only hide if their stealth stat is higher than their
severity. if you want your virus to be sneaky, you need to spec into
hiding it and run fewer symptoms (#83458 will fuck with this if
implemented - stay tuned.)
## Why It's Good For The Game
people don't like getting griefed by one-sided mechanics. while i think
i got some of the way there in #79854, the felt impact of that PR was
undercut by me being conservative with the values for what players'
actual choices outside of chem could do and SD still existing. I'm
hoping to go back and fix that first one since thankfully @Time-Green is
working on #83453.
Logic remains much the same as in https://hackmd.io/@Higgin/HJljdBuNp -
I am leaving this as a draft until I've had at least a few more tests on
the values, but I'd like to see this TM'd in a round or two with
advanced diseases floating around if possible.
edit to add some clarification:
if you do nothing, I balanced the worst viruses to be about a 50% chance
of death.
if you do the right thing, it should work 100% of the time or close to
it.
the problem I'm trying to address here is that the second one was
nowhere near 100%.
## Changelog
🆑
balance: Viruses now self-heal much more effectively with good mood,
sleep, food, and spaceacillin.
balance: Viruses now punish being hungry more. Stay fed!
balance: Spaceacillin now gives 200 ticks of symptom resistance,
declining over time, rather than 100.
balance: Viruses now progress slightly slower.
balance: Viruses now only hide if their stealth stat is greater than
their total computed severity.
/🆑
## About The Pull Request
This PR moves random name generation for species onto their languages.
What does this mean?
- For species with a predefined name list, such as Lizards and Moths,
nothing.
- For species without predefined name lists, such as Felinids, their
names will now be randomly generated from their language's syllables.


(In the prefs menu:)

Why?
- Well, we actually had some dead code that did this. All I did was fix
it up and re-enable it.
- Generates some pretty believable in-universe names for various
languages that are lacking name lists. Obviously defined lists would be
preferred, but until they are added, at least.
- Moves some stuff off of species, which is always nice.
- Also hopefully makes it a tad easier to work with name generation.
There's now a standard framework for getting a random name for a mob,
and for getting a random name based on a species.
Misc:
- Adds a generic `species_prototype` global, uses it in a lot of places
in prefs code.
- Makes `GLOB.species_list` init via the global defines
- Deletes Language SS
- Alphabetizes some instances of admin tooling using the list of all
species IDs
- Docs language stuff
- Deletes random_skin_tone, it does pretty much nothin
## Changelog
🆑 Melbert
refactor: Random Name Generation has been refactored. Report any
instances of people having weird (or "Unknown") names.
qol: Felinids, Slimepeople, Podpeople, and some other species without
defined namelists now automatically generate names based on their
primary language(s).
qol: More non-human names can be generated in codewords (and other misc.
areas) than just lizard names.
/🆑
## About The Pull Request
- Tuberculosis makes you cough more, and is no longer restricted to
stage two
- Nicotine Addiction Withdrawal makes you cough less often
- Medicine Addiction Withdrawal makes you cough less often but now
carries across all stages
## Why It's Good For The Game
Nicotine Addiction currently makes you cough 10x more often than
Tuberculosis, the lung disease. Kinda nonsensical right?
This makes smoking a single cigar (which instantly makes you addicted
because lol) pretty insufferable to be around, and while this makes
sense OOC it's a roleplaying game and being actively avoided in a
roleplaying game is not fun
So tweaking the values should make it a bit more sensible
Initial values looked like `TB: 1% chance per second` vs `Nicotine: 10%
chance per second` 🥴
## Changelog
🆑 Melbert
qol: Tuberculosis makes you cough more
qol: Nicotine Addiciton makes you cough less
qol: Medicine Addiction maybe makes you cough more, maybe makes you
cough less
/🆑
## About The Pull Request
Adds anosmia quirk. Anosmia, also known as smell blindness, is the loss
of the ability to detect one or more smells.
I tried to find all smells action and (most likely) update all of them,
unfortunately I can't change descriptions for this quirk.
## Why It's Good For The Game
Some characters will be able to not feel smells
That affect:
* Gases feelings and alerts (CO2, Plasma, miasm) - you don't feel them
* Bakery and cooking
* Changeling ability to feel other changelings by smell
* Some unimportant spans
## About The Pull Request
Adds a new final objective option with a classic premise; the forced
battle to the death.
The concept is that the Syndicate will provide you with an implanter
tool you can use on an arbitrary number of crew members. Once you have
at least 6 (though there is no ceiling) you can activate the implants to
start the Battle Royale and broadcast the perspectives of everyone you
implanted live to the entertainment monitor.
After activation these implants cause you to explode upon death. If at
the end of 10 minutes, more than one person remains unexploded then all
of the remaining implants will detonate simultaneously.
Additionally, one of the station's departments (Medbay, Cargo, Science,
or Engineering) will be chosen as the arena. If after 5 minutes pass
you're not within that department (or if you leave it after that time
has passed) then you will be killed.
The Syndicate plan on both using the recorded footage to study
Nanotrasen technology, and also to sell it as an underground blood
sport, and so have employed a pirate broadcasting station to provide
colour commentary.
The implantation is silent, however it requires you and your target to
be adjacent and stood still for one and a half seconds.
Once implanted, it will occasionally itch and eventually signal to the
implantee that something is up, so once you start implanting someone
you're on a soft timer until you are given away. You can also implant
yourself if you want to do that for some reason.
Removing an implant from someone has a 70% chance of setting it off
instantly, but it _is_ possible. If the implant is exposed to EMP, this
value is randomised between 0 and 100%. You could also try doing surgery
while the patient is wearing a bomb suit or something, that puzzle is
for you to solve and I'm not going to tell you the answers. I'm sure
you'll think of ones I haven't.
## Why It's Good For The Game
Adds a somewhat more down-to-earth but still hopefully exciting and
threatening option which should let people mess around with the sandbox.
The mutual death element provides some roleplaying prompts; nothing
actually _forces_ you to fight apart from fear of death and it may be
possible to find other ways to survive, or perform some kind of
solidarity behaviour with your fellow contestants. Maybe you'll try that
but one of your fellow contestants just wants to be the last survivor
anyway. Maybe you'll pretend you're setting up some kind of mutual
survivorship thing in order to make sure you're the sole survivor.
Gives some people to watch on the bar TV channel.
The crew apparently love playing Deathmatch while dead so we might as
well enable doing it while alive.
Also I'm going to follow this up with a separate PR to remove the Space
Dragon objective and it felt like it'd be a good idea to do one out one
in
## Changelog
🆑
add: Adds a new Final Objective where you force your fellow crew to
fight to the death on pain of... death.
/🆑
## About The Pull Request
Stops activation of all neutered symptoms in a advanced disease.
## Why It's Good For The Game
Closes https://github.com/tgstation/tgstation/issues/68944
## Changelog
🆑
fix: Narcolepsy is no longer activated while neutered.
/🆑
## About The Pull Request
Using these search regexes:
Ending in 0:
`addtimer\((.*),\s?(\d{1,3})0\b\)`
replacement:
`addtimer($1, $2 SECONDS)`
Two digit ending in odd:
`addtimer\((.*), (\d)([1-9])\)$`
replacement:
`addtimer($1, $2.$3 SECONDS)`
Single digit ending odd:
`addtimer\((.*), ([1-9])\)$`
replacement:
`addtimer($1, 0.$2 SECONDS)`
## Why It's Good For The Game
Code readability
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
After months of preparation, and further months of work, I am finally
done. Please bear with me, as this is a massive refactor, but I have
already atomized everything I could. This is now ready for review.
General
- The hilbert hotel slimes are now a subtype instead of a varedit.
- The `use_mob_ability` subtree now also accepts non cooldown abilities.
If set_behaviours is set up properly, mobs won't keep continously
triggering it as if it were a 0 second cooldown action. The alternative
would have been turning the slime abilities into cooldown abilities.
- Wrestling off a slime now signs up to the `COMSIG_ATOM_ATTACK_HAND`
signal, instead of being part of attack_hand.
- Adds datum/ai_controller/controller as a fourth, optional argument to
`/datum/ai_behavior/find_hunt_target/valid_dinner()` to make it possible
to access blackboard keys.
- Slimes no longer attack windows if they would accidentally move into
them (when the conditions are met), since random walk behaviour ignores
tiles they can't go in. It was also not worth to keep. Did you know this
was the sole override of `ObjBump()`?
- Examine was made less snowflaky/bespoke. Also added a new element:
`/datum/element/basic_health_examine`, which is a simple bespoke element
that prints out a custom message based on how damaged the basic mob it
is attached to is.
- Slimes only perform knockdown instead of paralysis, as they can attack
more often now, and paralysis is not that fun.
- LAssailant has been removed due being archaic code. To befriend a
slime, you have to spawn a monkey with the slime console, or feed them a
sheet of plasma. Simple grabbing the monkey or stuffing them in
disposals do not work anymore. Slime console spawned monkeys will have a
visible status effect, with pheromones coming off them to make this
clearer.
Actions
- Feeding, reproduction and evolution is no longer a verb.
- Slime feeding is no longer an action button. You have to use right
click, or as previously, mousedrop. Slimes can always unbuckle from mobs
they are attached to.
Hunger
- Instead randomly changing the starvation and max nutrition values
while growing up, evolution costs 200 nutrion. This makes the code more
readable, and behaviour more predictable, while still giving the
intended time between evolving and splitting. As a result, I could also
turn these into defines.
- Added a component that handles doing an effect over time while buckled
to a mob, until the mob dies or you get unbuckled.
- Slimes gained nutrition is no longer randomly multiplied by the damage
config value, but rather gain nutrition equal to twice the damage dealt.
You'll have to eat one monkey to evolve, just as before.
- Slimes do not heal passively. They only heal from eating. It was a
rather miniscule value that did not have much effect.
- Slimes generate electricity from hunger threshold, instead of the
random amount of hunger threshold + 100.
Environment
- Slimes take 15 damage from cold every second, instead of using a
complex formula (that also decreased the damage up to a point?).
- Slimes still heal from burn damage, but this is now set on the damage
coefficient list.
- Slimes instead of getting stunned by the cold, freeze in an ice cube.
BZ instead of setting them unconscious, calls the stasis status effect,
allowing you to safely stash your hungry slimes for later. They also no
longer slow down from the cold, as they are already slowed down by the
damage they get. Conversely they no longer get a speed up from a random
amount of temperature. I could be convinced to readd this either as part
of the basic sensitive component, or a similar one.
AI
- Removed the attacked_stacks system. Slimes will just perform regular
retaliation if you hit them in a harmful manner.
- Slimes now use the pet orders component. They will interrupt their
feeding when given a command by their master.
- Slimes have their own subtrees. I tried to replicate as much as I
could from the old code, dividing ancient code artifacts and intentional
stuff, so there might be some weirdness.
- Slime speech has been almost fully reduced to basic blorbing, as you
can not even understand them anymore, and most of them require the slime
to loop through all of their surroundings.
- Discipline does not have stacks either. Disciplined baby slimes have a
chance to clear their attack and hunt blackboard keys. All slimes will
stop feeding on the target otherwise.
- Since discipline is not a stack, rabidity instead gets removed at a
10% chance per disciplining.
- Slimes faces are a bit more randomly picked now.
## Why It's Good For The Game
- We want to convert all simple animals to basic mobs. Old slime code
was also very strange, and had some systems that have been replicated by
components.
- Slimes fully paralyzing you is not fun at all. Knockdown should give
you a fighting chance when a slime would like to eat you.
- Slimes slow down from the heavy damage they get from the cold, so I
don't think they need extra slowdown, nor do they need to speed up from
warmth, as they are already fast.
- Slimes turning into an icecube instead of becoming paralyzed from the
cold is more fun for the slimes, as they can break out for a few
moments. It is also funny.
- Slimes entering proper stasis from BZ is not just a visual indicator
of a slime that is safe to approach, but also keeps the slimes's hunger
value in check, allowing it to not starve while stopped. They can also
look around and blorble, instead of staring at a black screen, if player
controlled.
- The attack_stack and discipline_stack behaviours were rather
overcomplicated, and the xenobio mains I talked with didn't even know it
was a thing, so I argue it needed simplification.
- The bespoke friendship system of slimes was also too complicated.
Slimes slowly gained levels of trust, and at certain levels commands
costed friendship, and other levels, they did not. The binary friend/not
friend system that everything else in the game uses is much more
sensible.
- Using right click for feeding is much more sensible than using an
action, and then picking someone from a dropdown.
- Slime speech was very soulful but not only did it loop through
everything in sight, you couldn't even understand it unless you spoke
slime. Maybe it can be readded later in a different form.
- Slime's passive healing was miniscule, and having them rely on feeding
is more interesting.
also
fixes#81463
## Changelog
🆑
refactor: Slimes are now basic mobs. Please report any strange
behaviours!
balance: Slimes only stun you for two seconds when they shock you, the
rest of the duration is a knockdown.
balance: Slimes are not stunned from the cold, but rather, get frozen in
a freon icecube. BZ also puts them in complete stasis, instead of making
them unconscious. Their speed is likewise unchanged by temperatures.
balance: Slimes do not passively heal, they instead rely on feeding.
fix: Slimes can use the buckling screen alert to unbuckle and stop
feeding, along with clicking on the mob they are riding
/🆑
## About The Pull Request
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>
When I made SSpolling, jlsnow gave me his blessing to delete the orbit
polling component [where you orbit something for 20 seconds before it
chooses a ghost from the orbiters]
It's only used in a few places like soulstones replacing
jobbanned/inactive players, etc.
Also upgraded SSpolling; you can now place a little icon on the sides in
the chat message, chat message looks a lot nicer, the alert pic and the
jump target don't have to be the same anymore, and I made it be able to
pre-pick candidates since 90% of the use cases would just want 1
candidate
Also prints to chat who the chosen one was
Also made slime intelligence potions ask the user for a reason, which
will be displayed in the alert poll