## About The Pull Request
This has the potential to create a lot of needless mob updates which is
not great. Now should only update a mob's clothing if it was actually
washed.
This PR
1) ensures that all wash() procs return a bitflag.
2) ensures that `wash()` proccalls which result in expensive operations
like icon updates only do so when it is necessary
## Why It's Good For The Game
Updating mob sprites is expensive, and doing it when nothing has been
changed is bad.
## Changelog
Nothing really player facing
## About The Pull Request
Fixes issues with var typing and proc arguments, discovered using
OpenDream's WIP TypeMaker feature (using improvements I haven't PR'd
upstream yet).
## Why It's Good For The Game
Codebase maintenance.
## About The Pull Request
1. Having a broken arm will affect your accuracy when firing a weapon
with that arm, even potentially causing damage to you if it's a weapon
with recoil. This effect is not applied under the effects of a
painkiller.
2. The sister effect of this (punching someone with a broken arm) now
also has an interact with painkillers (it can no longer block your
attack).
3. Being drunk heavily affects ranged weapon accuracy, unless you're the
bartender
4. A lot of hand handling cleanup, using new macros to make it a lot
more readable at a glance
## Why It's Good For The Game
We have this system for modifying firearm accuracy but we don't really
use it commonly, and I feel like it slots in well with a lot of places
For broken arms, it adds some more depth to the wound system, in the
same way that trying to punch someone with a broken arm causes pain. (I
actually want to expand this to melee weapon accuracy and attacking with
melee weapons in general, but that's for a later time)
For drunkenness, it just adds to the drunk shenanigans. It also slightly
reduces the effectiveness of drinks as combat healing chemicals, such as
quadsec - makes it a bit more of a trade off.
## Changelog
🆑 Melbert
balance: Having a broken arm affects your accuracy with ranged weapons
fired with that arm. Utilizing a painkiller will nullify this effect,
however.
balance: Painkillers will prevent your punches from being cancelled due
to having a broken arm. You'll still take damage, though.
balance: Being drunk now affects your accuracy with ranged weapon. The
bartender is immune to this effect via their skillchip.
code: A lot of code involving left and right hand handling has been
cleaned up, easier to read. Report any oddities, like left and rights
being flipped
/🆑
## About The Pull Request
Diseases copy their instances, so they should be cleaned up afterwards
Closes#86800
## Changelog
🆑
fix: Fixed infective components not cleaning up disease datums after
themselves
/🆑
## 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
- Afterattack is a very simple proc now: All it does is this, and all
it's used for is for having a convenient place to put effects an item
does after a successful attack (IE, the attack was not blocked)

- An overwhelming majority of afterattack implementations have been
moved to `interact_with_atom` or the new `ranged_interact_with_atom`
I have manually tested many of the refactored procs but there was 200+
so it's kinda hard
## Why It's Good For The Game
Afterattack is one of the worst parts of the attack chain, as it
simultaneously serves as a way of doing random interactions NOT AT ALL
related to attacks (despite the name) while ALSO serving as the defacto
way to do a ranged interaction with an item
This means careless coders (most of them) may throw stuff in afterattack
without realizing how wide reaching it is, which causes bugs. By making
two well defined, separate procs for handing adjacent vs ranged
interactions, it becomes WAY WAY WAY more easy to develop for.
If you want to do something when you click on something else and you're
adjacent, use `interact_with_atom`
If you want to do something when you click on something else and you're
not adjacent, use 'ranged_interact_with_atom`
This does result in some instances of boilerplate as shown here:

But I think it's acceptable, feel free to oppose if you don't I'm sure
we can think of another solution
~~Additionally it makes it easier to implement swing combat. That's a
bonus I guess~~
## Changelog
🆑 Melbert
refactor: Over 200 item interactions have been refactored to use a
newer, easier-to-use system. Report any oddities with using items on
other objects you may see (such as surgery, reagent containers like cups
and spray bottles, or construction devices), especially using something
at range (such as guns or chisels)
refactor: Item-On-Modsuit interactions have changed slightly. While on
combat mode, you will attempt to "use" the item on the suit instead of
inserting it into the suit's storage. This means being on combat mode
while the suit's panel is open will block you from inserting items
entirely via click (but other methods such as hotkey, clicking on the
storage boxes, and mousedrop will still work).
refactor: The detective's scanner will now be inserted into storage
items if clicked normally, and will scan the storage item if on combat
mode
/🆑
## About The Pull Request
Removes miasma generating random viruses (in two locations for some
reason)
Also removes diseases being generated by gibs, which is responsible for
a lot of disease spam
## Why It's Good For The Game
New diseases are spread through events and virology (and some other
minor sources). Miasma and gibs are a source of random viruses that
dilutes player response to diseases. It's frankly exhausting curing the
disease outbreak, just to see 10 others pop-up. Hopefully we can reduce
the madness a bit and place more focus on individual diseases
## Changelog
🆑
del: Miasma and gibs no longer generates random diseases
/🆑
Something like lung rot could be cool though, but out of scope for the
current PR
## About The Pull Request
- Adds Strong Stomach quirk.
- 4 points
- You can eat dirty food without risk of getting disease.
- You suffer less negative effects from vomiting. Vomit stuns you for
half the duration, and you lose half as much nutrition.
- Reverts https://github.com/tgstation/tgstation/pull/76864 , integrates
its effects into Strong Stomach instead.
## Why It's Good For The Game
- Lotta people (namely Lizards and sometimes Felines with Deviant
Tastes) run gimmicks involving them being a gremlin person and eating
trash off the ground, and it's rather hard to accomplish this now since
it makes you a public medbay enemy # 1. This quirk should give them an
option to avoid that.
- Also (as mentioned in the title) both CDDA and PZ have this trait and
I can't believe we're missing it! This is something in
modifiable-character-traits/quirks-101.
- I moved the effects from #76864 to this quirk because 1. I thought it
was more fitting and 2. I thought the original PR was kinda wack for
what is (generally) a neutral quirk.
## Changelog
🆑 Melbert
add: Adds the Strong Stomach quirk, which allows you to eat grimy food
without worry about disease, and makes you a bit more resilient to the
effects of vomiting.
del: Deviant Tastes no longer prevents you from getting a negative
moodlet from eating dirty food. Strong Stomach does that now.
/🆑
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
## About The Pull Request
Attempting to fix this hard del here:

I think the cause is from the turf changing, which
`/datum/elements/connect_loc` does not seem to take into consideration.
Now it should.
Also cleans up the signals in `/datum/component/infective/` which may be
another potential cause of issues.
## Why It's Good For The Game
Code that cleans up after itself is nice.
## Changelog
🆑
fix: fixes a hard del with decals
/🆑
## About The Pull Request
In the code description for the `ORGAN_ROBOTIC` flag, it says that
robotic organs are not supposed to decay or regenerate health. I went
and fixed this and added some more "robotic" behavior.
New changes for robotic organs:
- No longer heal damage passively
- No longer gain health from revival
- No longer heal in the smart organ fridge
- No longer heal from pluoxium
- Robotic ears no longer heal from ear healing items (earmuffs, etc.)
- Robotic eyes are immune to changeling blind stings
- Robotic eyes no longer heal from occuline
New changes for diseases:
- Some diseases now require an organ to work. A robotic organ will give
immunity to the disease symptom unless the disease has "Inorganic
Biology".
- The transmission methods for diseases require organs to work but
robotic organs are immune. (except inorganic biology) Airborne disease
transmission require lungs. Ingested (drunk or eaten) disease
transmission requires a stomach. Blood (inject or patch) disease
transmission requires a heart.
- Organs removed from a mob that is afflicted with a disease will be
infectious while handling or transplanting it. (again, robotic organs
are immune unless inorganic biology is present) Certain admin spawned or
special diseases are exempt from this transmission method.
- A stomach is required for nebula nausea, gastritium, carpellosis,
metabolic boost, vomit, weight loss, death sandwich poisoning,
- Lungs are required for choking, asphyxiation, cough, cold9, oxygen
restoration, sneezing, flu, cold, spanish flu, tuberculosis
- A liver is required for tissue hydration, plasma fixation, parasitic
infection
- Ears are required for deafness, sensory restoration
- A heart is required for toxolysis, heart failure
- Eyes are required for sensory restoration, hyphema
- A tongue is required for voice change, parrot possession, pierrot
throat
- Wizarditis no longer requires a head (wtf?) to function
## Why It's Good For The Game
Robotic organs should behave as intended. Not naturally healing (like
organic organs) was supposed to be their downside to counteract their
their ability to not decay upon death.
## Changelog
🆑
fix: Fix robotic organs to not gain health passively, from revival,
smart organ fridge, pluxium, occuline, and earmuffs.
add: Some diseases now require the appropriate internal organ to work. A
robotic organ will give immunity to the disease symptom unless the
disease has "Inorganic Biology".
add: Disease transmission methods now require an internal organ to be
successful. Robotic organs give immunity. (except inorganic biology)
Airborne disease transmission require lungs. Ingested (drunk or eaten)
disease transmission requires a stomach. Blood (inject or patch) disease
transmission requires a heart.
add: Organs removed from a mob that is afflicted with a disease will be
infectious while handling or transplanting it. (again, robotic organs
are immune unless inorganic biology is present) Certain admin spawned or
special diseases are exempt from this transmission method.
add: A stomach is required for nebula nausea, gastritium, carpellosis,
metabolic boost, vomit, weight loss, death sandwich poisoning
add: Lungs are required for choking, asphyxiation, cough, cold9, oxygen
restoration, sneezing, flu, cold, spanish flu, tuberculosis
add: A liver is required for tissue hydration, plasma fixation,
parasitic infection
add: Ears are required for deafness, sensory restoration
add: A heart is required for toxolysis, heart failure
add: Eyes are required for sensory restoration, hyphema
add: A tongue is required for voice change, pierrot throat
bal: Remove head requirement for wizarditis disease
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
Eating decaying fungus, liking the taste but caring about how dirty it
was is a bit strange.
## Why It's Good For The Game
Consistency.
## Changelog
🆑
qol: People with deviant tastes now don't care about dirt on the food.
/🆑

## About The Pull Request
There is a 10% chance of getting one of 3 new diseases when you eat
dirty things.
Things become dirty when left on the floor for [more than 5
seconds](https://en.wikipedia.org/wiki/Five-second_rule).
But you can wash (with any method you know from spraying water to
cleaning with soap) or cook them later to avoid this.

Packaged, bowled, canned food (any food that spawns package as trash
afterwards) is protected from this effect.
Makes crafted food spawn on nearby tables when the hands are full.
Except the one behind you.

#### New diseases:
40% chance:

40% chance (Vomiting is of special type that does not stun):

20% chance:

## Why It's Good For The Game
Things that are left on the floor for too long intentionally are trash
that should be disposed by janitor. If you make a meal or prepare a
medication, it makes sense that you should keep your product sanitized.
Things that are dropped unintentionally are supposed to be picked up
quickly. "Oops I dropped this pie, need to pick it up quickly before the
germs spread". 5 seconds are enough for this. If you didn't manage you
will be like "Oh dammit, now I need to wash this pie in a sink".
Now players will consider to not just throw items meant for eating onto
the floor neglecting the fact that it looks odd. If they still ignore
it, people who consume the items will receive a harmless but annoying
disease.
In general this PR aims to force some IC gameplay onto Medics, Chefs and
Botanists so that they care a bit more about things they make for other
players.
The items have a warning message saying that they are dirty and
dangerous, so the consumers have a way to detect dirty items and an
option to wash them with soap/rag/sink/shower/fire extinguisher to
remove the harmful part from the edible item.
So to avoid this, players just need to examine an item before eating it.
Botanists can spray a pile of fruits from a hose for the same effect,
and washed items that stay on floor dont regain germs until moved to
another tile.
Food that converts into another item during cooking (like meat slab
turning into steak) or crafting, will not retain the infection. This
kinda simulates the sanitizing during cooking.
Medics can use elevated structures (e.g. conveyor belt) to avoid getting
their pills dirty during creation in plumbing. Or they can wash the
pills they want to distribute in the shower before packaging them into
pill bottles or a bag.
## Changelog
🆑
add: Food and pills have a 10% chance to infect with one of three new
diseases on consumption when left for more than 5 seconds on the floor.
You can wash it to avoid disease. ChemMaster and Pill Press are added to
the list of elevated structures (Considered as tables for pills). Made
harvest spawn on top of hydrotrays to stay protected from germs.
add: Added three new advanced diseases: Gastritium, Carpellosis, Nebula
Nausea with static cures obtained by digesting dirty food.
fix: Food no longer decomposes on Hydrotrays, Grilles, Bonfires and all
dense kitchen machinery
code: Decomposition now uses `germ_sensitive` component and follows 5
second rule too.
qol: Crafted food items spawns on nearby tables (except the one behind
you) instead of dropping on floor when hands are full.
/🆑
Makes the code compatible with 515.1594+
Few simple changes and one very painful one.
Let's start with the easy:
* puts call behind `LIBCALL` define, so call_ext is properly used in 515
* Adds `NAMEOF_STATIC(_,X)` macro for nameof in static definitions since
src is now invalid there.
* Fixes tgui and devserver. From 515 onward the tmp3333{procid} cache
directory is not appened to base path in browser controls so we don't
check for it in base js and put the dev server dummy window file in
actual directory not the byond root.
* Renames the few things that had /final/ in typepath to ultimate since
final is a new keyword
And the very painful change:
`.proc/whatever` format is no longer valid, so we're replacing it with
new nameof() function. All this wrapped in three new macros.
`PROC_REF(X)`,`TYPE_PROC_REF(TYPE,X)`,`GLOBAL_PROC_REF(X)`. Global is
not actually necessary but if we get nameof that does not allow globals
it would be nice validation.
This is pretty unwieldy but there's no real alternative.
If you notice anything weird in the commits let me know because majority
was done with regex replace.
@tgstation/commit-access Since the .proc/stuff is pretty big change.
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Makes condiments their own subtype, fixes geese, prepares for merging
* Fixes geese checking drink type instead of edible foodtype to eat gross food.
* Renames foodtype var on drinks to drink_types to prevent above from happening again because it KEEPS HAPPENING. DRINKS AREN'T FOOD!
* Makes Condiments their own subtype of reagent_containers because they don't make any use of being a subtype of food, at all.
* Starts moving things from food to /food/drink subtype in preparation for merging /food/drink with /drink
* fully removes Food subtype
* /reagent_containers/drinks are now /reagent_containers/cup - This is so it's no longer confused with eachother.
* /food/drinks is now /reagent_containers/cup/drinks, so we can keep their special abilities.
* Fixes a LOT of errors with food, which are STILL checking the reagent_containers, despite ACTUAL food being refactored away from it a long time ago.
This doesn't compile yet, but I do want to make sure my progress is well tracked.
* remove copypaste code, changes soda cans
* Removes most copy paste code between the two drinks, moving most stuff to parent whenever needed.
* Made soda cans their own subtype since they didn't share anything with glass bottles anyways.
* Fixes more problems with food/drinks, especially with geese. Geese really were just broken this whole time and no one said a word...
* Removes a snowflake signal, now that both drink types share a common one.
* Adds everything to the .dme
Currently my goal is to get this all compiling, then remove isGlass var by making glass be all glass ones only.
* Moves all icons into a single drinks dmi
I'm not that great at icon stuff, hopefully I didn't forget/break anything.
* Turns juices into their own subtype
This allows us to let them check for type in molotov, to both get rid of a use of isGlass, and so non-glass non-cartons don't show up as 'carton'.
* fixes compile issues, adds updatepaths
* a better updatepaths
* updates the damn maps now
* properly names the updatepath
* how did that get there
* i suck at handling merge conflicts
* how am i this bad
* code improvement and soda fix
* more fixes
* Don't be a timer
Ports from old food bottles to trans the reagents, rather than add a timer to.
* Merge conflicts and fixes bottle smashing
* Bottle smashing is now consistently functional regardless of how much liquid they have in them, when before it would spill first, then smash on the second hit.
* runs updatepaths again
refactors our disease code a tiny bit
removes permeability_coefficient variable from clothing, it decided how much stuff like chems or disease passed through your clothes, while BIO armor only decided how much you could spread diseases yourself, making it pretty much laughable
permeability_coefficient is now fully rolled into bio armor, so your bio protecting stuff will now protect you from other biological hazards like blobs
See title. Also refactors caltrops into a component because they use connect_loc_behalf which requires them to hold the state.
This also fixes COMPONENT_DUPE_SELECTIVE from just outright not working.
connect_loc_behalf doesn't make sense as an element because it tries to hold states. There is also no way to maintain current behaviour and not have the states that it needs.
Due to the fact that it tries to hold states, it means the code itself is a lot more buggy because it's a lot harder to successfully manage these states without runtimes or bugs.
On metastation, there is only 2519 connect_loc_behalf components at roundstart. MrStonedOne has told me that datums take up this much space:
image
If we do the (oversimplified) math, there are only ever 5 variables that'll likely be changed on most connect_loc_behalf components at runtime:
connections,
tracked,
signal_atom,
parent,
signal_procs
This means that on metastation at roundstart, we take up this amount: (24 + 16 * 5) * 2519 = 261.97600 kilobytes
This is not really significant and the benefits of moving this to a component greatly outweighs the memory cost.
(Basically the memory cost is outweighed by the maint cost of tracking down issues with the thing. It's too buggy to be viable longterm basically)
* Makes turfs persist signals
* Splits connect_loc up into two elements, one for stuff that wishes to connect on behalf of something, and one for stuff that just wants to connect normally. Connecting on behalf of someone has a significant amount of overhead, so let's do this to keep things clear
* Converts all uses of connect_loc over to the new patterns
* Adds some comments, actually makes turfs persist signals
* There's no need to detach connect loc anymore, since all it does is unregister signals. Unregisters a signal from formorly decal'd turfs, and makes the changeturf signal persistance stuff actually work
* bro fuck documentation
* Changes from a var to a proc, prevents admemems and idiots
* Extra detail on why we do the copy post qdel
Enter(), Entered(), Exit() and Exited() all passed the old loc forward, but everything except a single a case cared about the direction of the movement more than about the specific source.
Since moving multi-tile objects will have multiple sources of movement but a single direction, this change makes it easier to track their movement.
Cleaned up a lot of code around and made proc inputs compatible.
I'll add opacity support for multi-tile objects in a different PR after this is merged, as this has grown large enough and I don't want to compromise the reviewability.
Tested this locally and as expected it didn't impair movement nor produced any runtimes.
Makes acid levels a component.
Merges the acid effect object into the component.
Reworks acids decay rates slightly.
Rebalances xenos acid spit so that they can still melt through walls.
Misc. associated changes:
Adds defines for a lot of the acid associated constants.
Documents clean types and adds CLEAN_TYPE_ACID
Adds and implements a return bitflag for COMSIG_COMPONENT_CLEAN_ACT
Adds a looping sound for acid.
Makes /atom/proc/acid_act return a boolean.
Fixes waterclosets creating a new reagent holder datum every time they are used.
Removes waterclosets regenerating reagents on-use and restricts their reaction volume to 5 units.
Adds and implements a couple reagent signals.
Renames a few vars so Rohesie can stop telling me to rename more vars.
Adds SIGNAL_HANDLER, a macro that sets SHOULD_NOT_SLEEP(TRUE). This should ideally be required on all new signal callbacks.
Adds BLOCKING_SIGNAL_HANDLER, a macro that does nothing except symbolize "this is an older signal that didn't necessitate a code rewrite". It should not be allowed for new work.
This comes from discussion around #52735, which yields by calling input, and (though it sets the return type beforehand) will not properly return the flag to prevent attack from slapping.
To fix 60% of the yielding cases, WrapAdminProcCall no longer waits for another admin's proc call to finish. I'm not an admin, so I don't know how many behinds this has saved, but if this is problematic for admins I can just make it so that it lets you do it anyway. I'm not sure what the point of this babysitting was anyway.
Requested by @optimumtact.
Changelog
cl
admin: Calling a proc while another admin is calling one will no longer wait for the first to finish. You will simply just have to call it again.
/cl
* Don't initialize the atom_colours list on atoms until it's actually needed
* Moved bloody_hands var to mob/living/carbon/human instead
* Added COMSIG_COMPONENT_CLEAN_RADIATION signal to reduce moms spaghetti
The shower and suit storage unit now calls this signal instead of either doing it manually or doing it via the washed proc
* Cleaned up carbon washing, renamed washed to wash
* The wash proc now doesn't take the washer as first arg because that wasn't used anywhere
* The wash strength is no longer optional
* Carbons now overrides the wash proc instead of using the signal
* Properly check for obscuredness before washing any equipped items
* Properly wash all items and bloody hands etc
* Added clean_lips proc for humans for cleaning any lipstick
* Cleaned up washing. Washy stuff now calls wash instead of calling the clean signal directly
* Renamed is_cleanable to ismopable, gives this category a more fitting purpose. Many things beyond floor decals are cleanable. It is now also determined using the atom layer instead to make it more generic.
* Properly utilize the is_cleanable define
* Added wash override for turfs where they also wash any mopables on the same tile
* Space cleaner and cleaning element etc now simply washes the mob instead of doing its own manual cleaning on ~some~ equipped items
* Non-component washables now simply override wash instead of registering for the clean signal
* Fixed some left over clean signal registers not returning true
* Added clean_strength var to space cleaner
* Moved human wash proc next to the other washing procs
* Also wash glasses and mask if not obscured when washing face
* Fixed attempting to "scoop up" cleanable decals using a rag
* Fixed plasmaman spacehelm icon not updating when washed
Also removed a duplicated worn_overlays proc
* Fixed head icon not updating when washing lipstick
* Moved radioactive clean signal register to where it should be
* Added atom radiate VV verb for debugging
* Redesigned the CLEAN constants into a more sensible flags setup
This makes it more dynamic, cleaning apparatuses can clean more specific than just a cleaning strength.
* CLEAN_TYPE_* flags indicate a specific cleanable, such as blood, fingerprints or disease
* CLEAN_* consts consist of a combination of cleaning types to make cleaning apparatuses have a consistent behaviour on what they clean
* Fixed broken rad removal logic in showers
* Apply suggestions from code review
Co-authored-by: Rohesie <rohesie@gmail.com>
* Removed unneccesary bool from sink code
* Fixed wrongly named variable in turf wash
* Renamed bloody_hands to blood_in_hands
Co-authored-by: Rohesie <rohesie@gmail.com>
This is in preparation for step_x support as the default behavior for these procs is necessary for proper functionality.
turf/Enter and atom/movable/Move default code got rewritten to replicate default byond functionality with minor changes.