## About The Pull Request
~~Kept you waitin huh!~~
The projectile refactor is finally here, 4 years later. This PR (almost)
completely rewrites projectile logic to be more maintainable and
performant.
### Key changes:
* Instead of moving by a fixed amount of pixels, potentially skipping
tile corners and being performance-heavy, projectiles now use
raymarching in order to teleport through tiles and only visually animate
themselves. This allows us to do custom per-projectile animations and
makes the code much more reliable, sane and maintainable. You (did not)
serve us well, pixel_move.
* Speed variable now measures how many tiles (if SSprojectiles has
default values) a projectile passes in a tick instead of being a magical
Kevinz Unit™️ coefficient. pixel_speed_multiplier has been retired
because it never had a right to exist in the first place. __This means
that downstreams will need to set all of their custom projectiles' speed
values to ``pixel_speed_multiplier / speed``__ in order to prevent
projectiles from inverting their speed.
* Hitscans no longer operate with spartial vectors and instead only
store key points in which the projectile impacted something or changed
its angle. This should similarly make the code much easier to work with,
as well as fixing some visual jank due to incorrect calculations.
* Projectiles only delete themselves the ***next*** tick after impacting
something or reaching their maximum range. Doing so allows them to
finish their impact animation and hide themselves between ticks via
animation chains. This means that projectiles no longer disappear ~a
tile before hitting their target, and that we can finally make impact
markers be consistent with where the projectile actually landed instead
of being entirely random.
<details>
<summary>Here is an example of how this affects our slowest-moving
projectile: Magic Missiles.</summary>
Before:
https://github.com/user-attachments/assets/06b3a980-4701-4aeb-aa3e-e21cd056020e
After:
https://github.com/user-attachments/assets/abe8ed5c-4b81-4120-8d2f-cf16ff5be915
</details>
<details>
<summary>And here is a much faster, and currently jankier, disabler
SMG.</summary>
Before:
https://github.com/user-attachments/assets/2d84aef1-0c83-44ef-a698-8ec716587348
After:
https://github.com/user-attachments/assets/2e7c1336-f611-404f-b3ff-87433398d238
</details>
### But how will this affect the ~~trout population~~ gameplay?
Beyond improved visuals, smoother movement and a few minor bugfixes,
this should not have a major gameplay impact. If something changed its
behavior in an unexpected way or started looking odd, please make an
issue report.
Projectile impacts should now be consistent with their visual position,
so hitting and dodging shots should be slightly easier and more
intuitive.
This PR should be testmerged extensively due to the amount of changes it
brings and considerable difficulty in reviewing them. Please contact me
to ensure its good to merge.
Closes#71822Closes#78547Closes#78871Closes#83901Closes#87802Closes#88073
## Why It's Good For The Game
Our core projectile code is an ungodly abomination that nobody except
me, Kapu and Potato dared to poke in the past months (potentially
longer). It is laggy, overcomplicated and absolutely unmaintaineable -
while a lot of decisions made sense 4 years ago when we were attempting
to introduce pixel movement, nowadays they are only acting as major
roadblocks for any contributor who is attempting to make projectile
behavior that differs from normal in any way.
Huge thanks to Kapu and Potato (Lemon) on the discord for providing
insights, ideas and advice throughout the past months regarding
potential improvements to projectile code, almost all of which made it
in.
## Changelog
🆑
qol: Projectiles now visually impact their targets instead of
disappearing about a tile short of it.
fix: Fixed multiple minor issues with projectile behavior
refactor: Completely rewrote almost all of our projectile code - if
anything broke or started looking/behaving oddly, make an issue report!
/🆑
## About The Pull Request
* A generic /mob/eye/camera type has been made, containing everything
needed to interface with a cameranet
* /mob/eye/ai_eye has been refactored into a generic /mob/eye/camera
instance
* Advanced cameras no longer inherit from AI eyes, splitting off
behaviour
* Camera code has been somewhat cleaned up
* Probably some more stuff I'm forgetting right now
## Big man Southport:

## Changelog
🆑
code: made /proc/getviewsize() pure
refactor: mob/eye/ai_eye has been restructured, now inheriting from a
generic mob/eye/camera type
refactor: advanced cameras and their subtypes are now
mob/eye/camera/remote subtypes
code: the cameranet no longer expects the user to be an AI eye
code: remote camera eyes have had their initialization streamlined
code: remote cameras handle assigning and unassigning users by
themselves now
code: remote cameras now use weakrefs instead of hard referencing owners
and origins
code: also the sentient disease is_define was removed (we don't have
those anymore)
fix: AI eyes no longer assign real names to themselves, fixing their
orbit name
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
This allows you to use a fishing rod during the "manipulate organs" step
of the aforementioned surgery to snatch organs from a target.
Unlike other fish sources, this one has a negative fishing difficulty of
-20, which when summed with the default minigame difficulty should still
result in a negative difficulty. In layman terms, this means the
minigame is skipped here (unless you're wearing some clunky stuff like
insulated or boxing gloves). It also has a wait time of 8 to 13 seconds
versus the more random standard 3 to 25 seconds.
A small side-effect of this is that explosions during the "manipulate
organs" step will basically disembowel you, but it kinda fits anyway.
By the by, because of this, there is a tiny chance bluespace fishing
rods can yield you random organs. Worry not, they're newly generated, so
you won't be snatching it from another player by accident (at least for
now).
## Why It's Good For The Game
It adds more possible weird and rare shenanigans involving surgery.
## Changelog
🆑
Add: You can use a fishing rod to snatch organs during organ
manipulation surgery
/🆑
## About The Pull Request
I've been meaning to do this for some time. I need this for
portable/handheld aquariums/fishtanks to be possible. I'll sprite and
code them before I call this PR ready, however suggestions and code
reviews are welcome in the meantime.
Being a pretty heavy refactor, some things might break (we have more
than a few unit tests so perhaps not) while others, coincidentally,
might be fixed without me knowing. Anyway I'm sure this PR fixes
aquarium beauty, which wasn't really working to begin with because the
code was so fucking bad. Nothing really worth of a CL entry tho.
TODO:
- [x] handheld aquariums, craftable with a kit and little plastic or
buyable from the fun vendor ig.
- [x] an aquarium upgrade for handheld aquariums to bypass possible
restrictions.
- [x] update the beauty element to consider items, which shouldn't
contribute to the area beauty when held or otherwise not on a turf.
## Why It's Good For The Game
This should make handheld aquariums possible.
## Changelog
🆑
refactor: refactored aquariums heavily. Please report any fishy bug.
add: Added portable/handheld fish tanks to the game. They can be crafted
with an aquarium kit and 5 sheets of plastic. While portable, they
cannot store fish that are too big or if there're too many already. This
restriction can be removed by using the new "bluespace fish tank kit"
techweb item.
map: Replaced the lawyer's stationary pet aquarium with a fish tank, so
you can carry McGill around.
balance: Reduced the iron cost of stationary aquariums a little.
/🆑
## About The Pull Request
Partial revert of #86701
Implements a shared holder particle system, somewhat inspired by
https://github.com/Baystation12/Baystation12/pull/34014 (thanks Kapu).
Atoms can be assigned "shared" particles via add_shared_particles, with
an optional "alternate" key passed as a second arg if you're planning to
edit the returned particle holder (for example, color it like slimed
status does). Removing is done via remove_shared_particles with an
option to delete the shared holder if nothing is using it anymore (on by
default). This system should be prioritized over normal particle holders
when a lot of entities would be using a certain particle effect (like
fires) as it conserves a lot of clientside performance.
Burning, acid, decaying, firestacks and slimed status now use this
system which should help with clientside performance and amount of atoms
created/destroyed.
## Why It's Good For The Game
Less clientside lag.
## Changelog
🆑
refactor: Firestacks, burning/acid/decaying effects and (brought back
after being temporarily removed) slimed status effects now use a new
"shared" particles system, which should considerably improve client
performance when encountering a lot of burning/slimed entities.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## 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
adds repairbots to the game!

this pr serves as a massive rework and buff to floorbots. i was a bit
sad that they dont get built much anymore so ive given them tons of more
utilities and uses.
Repairbots still inherit to place tiles and repair breaches. but they
can now rebuild walls, rebuild windows and repair structure and
machinery. Also Ive given them voicelines to add more character to them.
In short, they are very depressed with their job (however they express
their happy go lucky attitude when u emag them where they will start
deconstructing the station)
to demonstrate capabilities, here's a slightly sped up clip of some
repairbots patching up an area that was maxcapped 4 times:
https://github.com/user-attachments/assets/bddac3b0-1984-4571-85d3-c5283dd7c0de
When repairbots feel threatened, they will retract into their little
toolbox which u can pick up and hold in ur hand, either to conveniently
carry and plop them down at breached sites, or to bash skull with it
U can build them using a toolbox, proximity sensor, cyborg arm and a
conveyor belt
## Why It's Good For The Game
refactors floorbots and makes them alot more useful tools for engineers
to use
## Changelog
🆑
refactor: floorbots have been refactored, please report any bugs
add: adds repairbots to the game!
/🆑
## 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
Closes#87203
Forgot that move_force was a thing
## Changelog
🆑
fix: Fixed tethers being able to move immovable objects (and delete
gravgens)
/🆑
## About The Pull Request
Changes the color of hallucination cores from red (?) to hot pink.
Adds the Perceptomatrix Helm, a hallucination anomaly core item.

This helmet shields the user's brain from all external stimuli while
creating a 1:1 replica of it, beamed straight into their mind. What this
means in practice is that the user's perception is hypercharged and
their brain shielded from psychic phenomena.
The sprite is a resprited marine helmet. It's mid and I don't like it
but I'm not a spriter.
List of effects:
Perception:
- Flash/Weld Immunity
- True Night Vision
- Blindness and blurriness immunity
- Expanded FOV
Brain Shielding:
- Perceptual Trauma Immunity
- Hallucination Immunity
Psyshield:
- Conversion and Mindswap Immunity
- Magical Mind Resistance (Much more limited than normal resistance)
- Technically counts as casting clothes
Additionally, you can an ability to invoke hallucinations on others on a
25-second cooldown.

## Why It's Good For The Game
I'm kinda tired of half the anomaly cores in the game having jack and
shit going for them. I also think there's a moderate lack of psychic
content in the game, so here we go.
### Yeah this is cool but like isn't it kinda fucking nuts? Holy shit
dude
Let's dissect this.
> Perception:
> - Flash/Weld Immunity
> - True Night Vision
> - Blindness and blurriness immunity
> - Expanded FOV
This part effectively amounts to nothing but night vision sunglasses.
> Brain Shielding:
> - Perceptual Trauma Immunity
> - Hallucination Immunity
This isn't all that impactful, either. Hallucination immunity is
immensely irrelevant. Perceptual trauma immunity, which means you ignore
effects like blindness or imaginary friends, is very, very niche.
> Psyshield:
> - Conversion and Mindswap Immunity
> - Magical Mind Resistance (Much more limited than normal resistance)
> - Technically counts as casting clothes
Basically just having a mindshield, and that only if you don't get it
taken off anyways. Mindswap immunity could be nice, that's really not
something you can even get otherwise.
Magical mind resistance isn't very good. It blocks mind reading,
nullblade sneak attacks, eye of god, many forms of telepathy, psyker
magic, the curse of madness, the curse of babel, and that's about it.
It's nice, but it won't stop a fireball.
A lot of this can in the end be duplicated with sunglasses &
oculine/mesons and welding protection, and a tinfoil hat, which is
partly why I added the ability. It staggers for a small duration and
causes hallucinations, and it's pretty fun to use, despite its effects
being rather understated.
## About The Pull Request
existance doesnt exist so i changed it to existence
## Why It's Good For The Game
existance dosent exist
## Changelog
🆑
spellcheck: spellecheck: existence not existance
/🆑
## About The Pull Request
- Moves remote materials attack chain to item interaction level. Another
step in moving away from `attackby()`
- Fixes#40070. Though the timer subsystem maybe affected by FPS, round
start trigger is always done after everything is set up which is now
used by remote materials
## Changelog
🆑
fix: silo connection on some machines won't time out when changing FPS
settings
code: improved attack chain code for silo connection
/🆑
## About The Pull Request
Initially this was added in:
- #87285
And then removed in:
- #87305
Not sure if @SmArtKar was aware that screentips can be added to
components.
## Why It's Good For The Game
Consistency.
## Changelog
🆑
fix: Fix missing screentips plasmaman helmets and MOD suit hat
stabilizer helmets.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
With this PR, I'm introducing fishing bluespace capsules to the game.
They can be found on the black market, but I'll get a couple more ways
to get them before it's ready.
Anyway, they're special bluespace capsules that spawn a fishing spot of
your choice. The fishing spot can be changed by alt-clicking the
capsule, and so far it has 5 choices, plus 2 locked behind emagging for
obvious reasons:
- Freshwater: pretty basic, you get freshwater fish from this.
- Saltwater: mainly saltwater fish.
- Tiziran: You get tiziran fish here, like the gunner jellyfish,
armorfish, needlefish, dwarves moonfish and the new, bigger zagoskian
moonfish. By the by, moonfish now periodically lay moonfish eggs, a
staple of lizardfolk cuisine.
- Ice fishing spot: A small ice turf with a hole dug in it; salmon,
arctic char, arctic chrabs and the bonemass (skeleton fish).
- Hot Spring: Somehow the new home to the ought-to-be-extinct
sacabambaspis. It also doubles as a better shower overall, with mild
healing on top of stamina recovery. Felinids still hate it though, and
won't benefit from the healing.
- Lava: A 2x2 square of pure lava. Requires an emag for obvious reasons.
- Plasma: Ditto, but it's plasma instead of lava.
As a sidenote, unlike standard shelter capsules, these require their
area to be clear of pipes and cables on top of the other requirements,
unless emagged. Obviously, I've done some changes to allow pipes and
cables to not be hidden by water turfs, though I'm still keeping these
reqs because I don't think these fishing spots would look great if
riddled with cables and pipes. I may remove this extra req later if it
proves to be a tad too tedious.
Also they don't knock you back when expanding.
Screenshot from a recent test (fixed the misplaced decal and tweaked a
few things since then):

## Why It's Good For The Game
The idea stems from how not all fishing spots aren't designed to be
accessible every round, which is fine, because we have the fish-porter
for that. However, even the fish-porter should have its limits in terms
of what it can provide by itself (linking is all fair and game), so I've
thought having something of a middle point would been neat, also as a
way to mess around with the station layout a bit, to empower the player
with a little extra "terraforming".
## Changelog
🆑
add: Added fishing bluespace capsules to the game, which can be used to
spawn a variety of fishing spots, from freshwater to tiziran sea to hot
springs, and also lava and plasma if emagged.
add: Added two new fish: the zagoskian moonfish and the sacabambaspis.
Moonfish will now periodically lay moonfish eggs.
map: The 'crashed pod' lavaland ruin now has a hot spring, and the
cursed hotspring on icemoon now has a plastic chair and a fishing
toolbox.
/🆑
## About The Pull Request
The `/datum/component/blob_minion` component now properly logs spoken
messages before relaying them.

Radical.
## Why It's Good For The Game
Closes#86904.
## Changelog
🆑 Rhials
fix: Blob Overmind/Minion/Blobbernaut speech is now logged. Beware.
/🆑
## Why It's Good For The Game
Clarity and consistency regarding DM's systems.
Internally, `eye` is used for anything that controls the client's view.

How `eye` is used in DM is consistent with how we use the term, so I
figured this would add clarity.
Being named mob/camera also makes it unclear exactly what it's doing.
The name implies that it would function similar to how mob/camera/ai_eye
does, but most of the time it's only used as... an eye.
My ulterior reason for this PR is that I want to clean up
mob/camera/ai_eye and it's subtypes after this.
## Changelog
🆑
server: mob/camera has been renamed to mob/eye, which may break
downstreams
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
I hate this timeline. What title says, makes jetpacks and wings allow
you to bump into things you're moving into.
## Why It's Good For The Game
This feels awful and requires you to stop pressing movement keys for a
moment before resuming movement to get out of the "stuck" state
## Changelog
🆑
fix: Fixed wings and jetpacks sometimes preventing you from opening
doors
/🆑
## About The Pull Request
It turns out the "shapeshifted from spell" status ejects everything
inside the shapeshifted mob when removed. That's been causing a little
issue with the fishing rod from the profound_fisher component, which a
few mobs have. This PR fixes just that.
## Why It's Good For The Game


## Changelog
🆑
fix: Fixed fishing rod duping with poly belts and shapeshift spells.
spellcheck: Fixed a small typo when examining fishing rods.
/🆑
## About The Pull Request
There were checks in living limbs that were checking the wrong thing, at
least one of which was introduced by a feature change in a PR I merged
but didn't notice.
Notably:
- We were checking if the person with the limb was invisible, not the
thing they were trying to touch.
- We were checking if the person with the limb was anchored, not the
thing they were trying to grab.
Now your arm will no longer reach out and grab wires that are under the
floor.
Additionally to this:
- I made all of the output say "Your left arm" or "Your left leg"
instead of "Your flesh left leg" because it sounded stupid.
- I removed an unused argument from `can_be_pulled` because it was
confusing me when I looked at the proc.
- I reworded some of the user feedback messages because "the thing
pretending to be your left arm feels funny" just isn't very evocative.
The diff is long because I reversed the order of arm/leg operations
because the leg block is much smaller :clueless:
## Why It's Good For The Game
Fixes bug.
I like it more.
## Changelog
🆑
fix: Living Limbs no longer try to grab things that are under the floor.
spellcheck: Living Limb feedback messages now don't redundantly specify
that they are flesh arms.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
- Fixes#87664
storage hooks onto pre attack whereas the material container uses
attackby so the storage component was intercepting the bananium before
the material container could consume it.
This also ends the attack chain early so optimization
## Changelog
🆑
fix: MK honk shoes now consume bananium & can clown again
code: material container objects end their attack chain early
/🆑
## About The Pull Request
Fixed sect nullrod bonus component by adding comsig_sect_change to
signals registered.
This didn't work if you picked nullrod before sect. Now it does!
## Why It's Good For The Game
bug
## Changelog
🆑
fix: Fixed sect nullrod bonus component
/🆑
This is used to set the nuke disk's safety factor from applying on very
low pop player counts, as it's unlikely the disk can be secured.
I don't believe this precludes the event from being randomly chosen, but
it makes sure it wont be a certainty on very low pop when the disk
hasn't been secured from lack of players
Just to clarify this applies only at 9 population or lower.
## Why It's Good For The Game
On very very low pop, the disk is often unsecured, and.. more
importantly, a lone op is likely to have a very high chance of easily
succeeding as there is not enough crew to upkeep a watch on the relevant
areas.
This event is fun on higher populations, and needing to protect the disk
makes sense, but on very lowpop, I think it doens't quite work as
designed, as instead it just means a lot of low pop rounds will end due
to a loneop spawning if there's any ghosts about at all.
## Changelog
🆑 oranges
balance: Nuclear disk no longer needs to be secured at sub 10 population
/🆑
## About The Pull Request
Fixes bug introduced by
https://github.com/tgstation/tgstation/pull/84306 that broke borg
throwing
## Why It's Good For The Game
Bugfix. Lets borgs throw again
## Changelog
🆑
fix: Fix borg throwing not working
/🆑
## About The Pull Request
Massive cleanup/pseudo-refactor of projectile and projectile-adjacent
code. One letter variables, weird logic, some runtimes, all of that.
Atomized in a separate PR from the actual refactor so we don't end up
with a 5k line PR.
## Why It's Good For The Game
Makes the code possible to work with before I nuke pixel_move and kevinz
units™️
## About The Pull Request
https://github.com/user-attachments/assets/25fd12e9-4c84-4ac3-a4c5-0f77cab74ba3
## Why It's Good For The Game
my really poor code kept shitting itself so lets just make it avoid any
of the issues by just not doing it
## Changelog
🆑
qol: manufacturing assembling machines instead craft using the resources
on top of them, they are no longer block movement and have new sprites
/🆑
## About The Pull Request
Soooooooooooooooooooooooooooooooo tasting code has been jank for a good
damn while, and with this we aim to fix that- let's start from the
beginning.
Earlier when I was making a food item, I noticed that it'd never
actually have the taste I gave it, just tasting indescribable as things
without tastes do.
Weird, cause it definitely has a taste set, and plenty of nutriment
subtype reagents!...
When looking into it, I noticed that we only copy the tastes to
*specifically* the base nutriment and the vitamin subtype:
https://github.com/tgstation/tgstation/blob/57b718ad20c3b6af02dbdbc87f3cae4dd4d7e297/code/datums/components/food/edible.dm#L215-L216
But! Surely the other reagents should have tastes, right?.... No:
https://github.com/tgstation/tgstation/blob/57b718ad20c3b6af02dbdbc87f3cae4dd4d7e297/code/modules/reagents/chemistry/reagents/food_reagents.dm#L119-L120
we were always returning the tastes data, but never actually setting it
except for those two reagents, overriding any and all tastes.
This caused the non-taste of the proteins and fats to override the food
taste applied to the vitamins with their volume.
So, to fix this, we replace these hardcoded ids with a check for
`carry_food_tastes` on the nutriment reagent, such that each can
individually define whether they carry food tastes. This lets oils have
their own tastes, while letting all other nutriments carry the tastes.
We then make `get_taste_description(...)` return the base flavour if no
special flavour is found, and add base flavours to proteins and vitamins
based on what pure proteins/vitamins with no further additives would
roughly taste like.
This fixes our issue!....... Except, we now always taste something "rich
earthy pungent" when we eat. Looking into it, that's the organ tissue
reagent, used in our stomachs:
https://github.com/tgstation/tgstation/blob/57b718ad20c3b6af02dbdbc87f3cae4dd4d7e297/code/modules/reagents/chemistry/reagents/food_reagents.dm#L232-L236
....Because whenever we ingest something, we taste the contents of our
stomach. This was previously less noticeable, as while it *did* count,
it only added a weight for _no flavour_.
To fix this we just, well, make it so you taste what you're eating and
not the container itself.
It's as simple as separating the tasting code from the reagent holder,
and making the tasting that happens on ingest exposure use that logic
instead.
We keep the old logic for the INTJ skillchip and tasting machine, just
re-routed through this, and split up some procs to avoid too much
duplication.
This fixes our issue! Though, there's still some minor issues.
This lets us add organ tissue instead of nutriment to other organs so
they no longer taste indescribable, as it actually works properly now,
but letting organ tissue hold flavours would risk having the stomach
organ tissue permanently leech the flavours of the organ tissue you eat.
So we make a subtype of organ tissue for the stomach, stomach lining,
which cannot hold flavours.
This lets us apply the base organ tissue to all other organs without
risking stomach contamination.
## Why It's Good For The Game
It's jank to taste your stomach contents.
It's jank for organs to taste like nothing.
It's jank for reagents with flavours to never taste like anything.
It's jank for tasteless reagents to block out food flavours.
It's jank for organs to only sometimes contain organ tissues.
yeah.
## Changelog
🆑
refactor: Refactored tasting code. Please report any jank tasting
behaviours.
fix: You taste what you eat instead of the contents of your own stomach.
fix: Other basic nutriment subtypes also carry food flavours, instead of
outweighing the food flavours with their lack of flavour.
fix: Basic nutriment subtypes have a flavour they default to, in case of
not carrying any food flavours.
fix: Oils taste like oil instead of tasting indescribable.
fix: Clothing eaten by moths actually carries its flavours instead of
tasting indescribable.
fix: Organs use organ tissue instead of nutriment.
fix: You can actually taste organ tissue.
qol: Mineral slurry tastes like minerals instead of tasting
indescribable.
fix: Tasted flavours can actually be "strong" in addition to mild or "a
hint of", as intended.
qol: Flavours are only strong when their percentage of what you're
tasting is more than 4x taste sensitivity instead of 3x, for most
default tongues being 60% and lizards 40% of the drink.
qol: Tasted flavours are sorted by strength, stronger flavours coming
first.
qol: Tasted flavours are grouped into "strong", "mild", and "hint" in
the message, replacing "You can taste a hint of bitterness, alcohol, a
hint of sweetness, and a hint of cola" with "You can taste alcohol and a
hint of bitterness, sweetness, and cola".
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## 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
Outfit was directly assigning the attached hat and i forgor to remove
the var which is how it compiled in the first place
## Changelog
🆑
fix: Fixed deathsquad commandos not getting their berets
/🆑
## About The Pull Request
This makes the GPS UI give the general direction of a GPS on a different
linked z-level.
https://github.com/user-attachments/assets/98c6dfd8-5ced-4145-b14a-3813821ef30c
## Why It's Good For The Game
Makes navigating through space less of a chore, as previously, I believe
the only way was to manually write down or memorize what direction was
linked to what z-level.
## Changelog
🆑
add: GPSes now show the general direction of cross-linked z-levels.
/🆑
## About The Pull Request
The following effects will trigger allergic reactions for the "Food
Allergy" quirk
- For Alcohol allergies:
- Drinking any ethanol (beer, wine, etc)
- For Bug allergies:
- Drinking ants
- Getting stung by a bee
- Getting bit by a (giant) ant
- Getting bit by a (giant) spider
- For Sugar allergies:
- Drinking Sugar
Other notes
- Any mob undergoing surgery will benefit from ethanol speeding it up,
rather than just carbons
## Why It's Good For The Game
I saw a random discord comment that said "Bee stings should trigger bug
allergies" and I thought it was funny, so I added it, then I thought I
could add similar triggers to a few other things.
Important to note for the reagent based effects, they only trigger on
ingestion. And on top of that, it's a % chance to trigger, scaling with
the amount you drink at once. So you can sneak a sip of alcohol if you
want to roll the dice (I figure if I made syringes kill you, I'd have to
up the point reward, which I don't want to bother with)
## Changelog
🆑 Melbert
add: Drinking any ethanol (beer, wine, etc) will trigger alcohol
allergies
add: Drinking ants will trigger Bug allergies
add: Getting stung by a bee, or bitten by a (giant) ant or (giant)
spider, will trigger bug allergies
add: Drinking plain sugar or caramel will trigger sugar allergies
qol: Ethanol can speed up the surgeries of any mob type applied to,
rather than solely humans.
/🆑
## About The Pull Request
Refactors `/datum/component/holderloving` as a whole. It was registering
a lot of unnecessary signals and was doing too much in general(vars like
`can_transfer` simply isn't required)
Fixes
https://github.com/tgstation/tgstation/pull/87131#issuecomment-2403284265
properly by adding an extra `newloc` argument to
`temporarilyRemoveItemFromInventory()` which simply hints where we want
to move the object without actually removing it from the player.
Using this argument we can fix camera assembly construction code because
we now hint we want to move the gas analyzer into the camera and the
signal handler code for drones can correctly check for locs
## Changelog
🆑
refactor: cleaned up how drone holds their tools from the toolbox.
report bugs on github
/🆑
## About The Pull Request
...preventing runtimes and playing dry click sounds correctly i think?
was that part of the issue caused by the runtime? iunno
## Why It's Good For The Game
Fixes https://github.com/tgstation/tgstation/issues/68161
## Changelog
🆑
fix: fixed akimbo firing automatic guns runtiming on the offhand gun
when it's empty, possibly causing dry fire clicks to not play
/🆑
## About The Pull Request
Recovery of #85771, minus directional window leaning (because it looks
goofy)
## Changelog
🆑
add: You can now lean on windows the same way you can lean on walls
fix: You no longer stop leaning on walls after clicking on anything
/🆑
## About The Pull Request
Closes#87379
Also cleaned up the code and made the wearer be the source of the sound
for sanity purposes
## Changelog
🆑
fix: Rustle component no longer counts diagonal steps as two moves
/🆑
## About The Pull Request
Hat stabilization is now a component shared between MODsuits and
plasmaman helmets, only change this results in is attached helmets
applying their visor flags to plasmaman helmets (like it was with
MODsuits), but that should not have any impact envirohelms already cover
your face
## Why It's Good For The Game
Less copypasted code and maybe some day we can get hat stands.
## Changelog
🆑
refactor: Refactored hat stabilizers into a component shared with
plasmaman helmets
/🆑
---------
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>