## About The Pull Request
Surprisingly never came up until now, anyways this needs to deleted in
case the `Execute()` fails because undeleted SQL queries are bad (iirc)
## Why It's Good For The Game
No more random errors
## Changelog
Unneeded
## About The Pull Request
<details>
<summary> expand to spoil the fun of exploring something for yourself
</summary>
firstly, the new ruin: outpost 31
its layout is vaguely based off an official map of the Outpost 31 from
the Thing movie but i ran out of space halfway

the boss drops a keycard for the storage room that you cant get in
otherwise, containing its own special item, and other stuff probably
useful for crew
crusher loot: trophy that heals you on each hit
the ruin is guarded by like 3 flesh blobs, very resilient (and slow)
masses of flesh that deal 3 brute damage, not harmful in melee but WILL
attempt to grab and devour/assimilate you which is FAR more lethal
https://github.com/user-attachments/assets/542cc6d0-f4ee-4598-9677-a03170c6c1c3
Boss: The Thing (with creative liberties otherwise this thing would
instakill you if it was true to source material)
difficulty: medium apparently idk mining jesus beat it with 400ms or so
HP: 1800
It is a much higher ranking changeling than those infiltrating SS13
It has 3 phases, 600hp each. Depleting its phase health will turn it
invincible and it will heal back half in 10 seconds. In order to prevent
this, the two Molecular Accelerators must be overloaded by interacting
with them to blast the changeling with deadly scifi magic or whatever
they do, forcing it to shed its form further and go to the next phase.
Not necessary for phase 3 because it literally just dies then
it focuses mostly on meleeing you and making certain tiles impassable
for you with 1hp tendrils, all attacks are telegraphed so theres no dumb
instakills here
it alternates between aoe abilities and abilities
melee behavior:
- if too far, charge at target (charges twice on phase 3)
- too close, shriek (unavailable in phase 1) (technically AOE but its
more like a melee ability you know??)
- otherwise just try to melee
Shriek: if the player is too close emit a confusing shriek that makes
them confused and drop items
aoe behavior (phase 2, 3 only):
1: Puts 4 tendrils in a line cardinally
2: Puts tendrils around itself
3. Puts a patch of tendrils around and under the target, 3x3 in phase 3
4. Phase 3 only - spits patches of acid into the air that hurt when
stepped on
_(crusher is hard ok)_
https://github.com/user-attachments/assets/cbb98209-d3f0-470d-b0e8-4e310c5b709c
unique megafauna loot for this boss is like 1 AI-Uplink brain
its like a BORIS module but for humans i think you can figure out what
that means
while in a human shell they cannot roll non-malf midrounds and cannot be
converted, and cannot be mindswapped
the human MUST have all robotic organs (minus tongue because its not in
the exosuit fab and that kinda sucks to get)
will undeploy if polymorphed
https://github.com/user-attachments/assets/abcc277a-995a-4fa7-b980-0549b6b7cf52
</details>
## Why It's Good For The Game
icebox is severely lacking in actual good ruins (fuck that one fountain
ruin)
i feel that the loot given by megafauna has been and still apparently is
exclusively to make the victor more powerful, which kinda sucks because
thats just powergaming???? the loot of this boss is more crewsided,
specifically aiding the AI in a VERY limited quantity (1), so its not
anything good for powergamers, good for crew if the AI is not rogue
## Changelog
🆑
add: outpost 31, the icebox ruin. Also its associated mobs, and
megafauna, and loot. Im not spoiling anything, find it yourself.
/🆑
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
## About The Pull Request
This PR adds a "withdraw" button to the pAI candidacy menu, which
immediately (or near-immediately, given there's a small delay between
tgui refreshes) removes your information from the pAI device's candidate
download screen.
(The below video was recorded on a local instance of Monkestation, but
I've verified that it works exactly the same on tgstation proper too.)
https://github.com/user-attachments/assets/8508f17f-db61-4ae9-bdc8-b4214489b8b6
## Why It's Good For The Game
Being able to withdraw your candidacy means that, should you need to go
AFK or otherwise leave the game for an extended period of time, your
candidate details won't clog up the candidate download screen. Plus, you
won't frustrate players who download a pAI, only to find that they're
AFK.
## Changelog
:cl:MichiRecRoom
qol: pAIs can now withdraw their candidacy at any time.
/🆑
## About The Pull Request
The roundstart report has been changed in the following ways:
- There are now only four alert levels: Yellow Star (0-65 Threat), Red
Star (66-79 Threat), Black Orbit (80-99 Threat), and Midnight Sun (100
Threat).
- The roundstart report is now 100% accurate.
- Extended rounds will still show the "No credible threat" alerts, but
this should only happen if an admin sets the round to Extended.
## Why It's Good For The Game
The current roundstart report system is too granular as it is now, which
leads to situations where players will suicide 5-10 minutes into the
round due to the threat level being too low. Making it potentially
random was meaningless, because players would just act on whatever it
said without actually giving the round a chance to do anything.
I also feel like this brings back a fair bit of paranoia to the round,
as low threat levels would often just result in people expecting nothing
to happen. That can be fun when the report is lying, but it doesn't
happen often enough to really make it worth keeping.
We tested this a few months ago and the results seemed positive. We also
had a lot of discussion about the matter and, while I'm open to changing
implementation in some ways, I'm pretty set on this being a beneficial
change, at least in the short term until we can make Dynamic more
interesting.
I kept the high threat level stuff because it's fun to know some crazy
shit might happen. I might bring back the random threat level thing to
differentiate between those but I don't really care tbh; the targeted
behavior here is people bailing on low threat rounds, not people knowing
it's a high threat round.
## Changelog
🆑 Vekter
balance: The roundstart report will now display a more broad, less
specific message about threat levels when between 0 and 80 threat.
/🆑
# About The Pull Request
## Nearsighted Sources
Nearsighted now associates/tracks severity applied by each source.
Previously, nearsighted only used a single variable which had to be
shared by every source, which caused problems for things like scarred
eyes which needed independent behaviour.
This implementation allows sources with different severity levels to
coexist without needing workarounds
There are now two different severity types for nearsightedness:
* Correctable: Can be mitigated with vision correction (like glasses)
* Absolute: Cannot be mitigated from any source, used for scarred eyes
Which can allow nearsighted sources to not be affected by vision
correction.
Also, since there is no more technical conflict between the two quirks,
I've made it so that nearsighted and scarred eye can be selected
together (as a QOL change)
There is also a new unit test for this new behaviour
(nearsighted_effect) that checks application and removal
## status_effect/grouped minor rework
Grouped status effects now have `source_added()` and `source_removed()`
procs, which are called whenever a source is added or removed from the
effect
I did this because the previous implementation was somewhat unwieldy.
Inherited status effects would recieve the _currently existing_ effect
through merge_with_existing, and require them to modify the existing
effect's properties, which is odd and not intuitive to work with (the
proc's `src` was not the existing effect)
It not being called for every source also made users repeat code in
`on_creation()` and `merge_with_existing()` for every source added.
This new interface should prevent repetition and be generally more
intuitive to work with.
# Changelog
🆑
refactor: Nearsighted has been reworked to track severity applied from
each source, as well as allow "non-correctable" nearsightedness (for
things like scarred eyes).
qol: The above being possible now means that you can select the
Nearsighted and Scarred eye quirks together
fix: Any bug that would occur from becoming nearsighted with a scarred
eye should be fixed now
code: status_effect/grouped merging code has been improved (i hope)
/🆑
## About The Pull Request
I don't think the PAI one is actually a major issue but it might be so
I'm just bein safe
Anyways sanitizing input is probably a good
## About The Pull Request
Closes#88510
Also fixed incorrect icon positioning on Big Brother's trim (Human AI)
and medieval punpun icon flickering
## Changelog
🆑
fix: Fixed chameleon cards not updating sechud icons
image: Fixed human AI's and medieval punpun's ID trims
/🆑
## About The Pull Request
Spessmen now need to blink! If you have non-robotic eyes, you'll
automatically blink every once in a while. Lizards have asynchronous
blinking, and whenever they blink one of their eyes (chosen at random)
will blink slightly sooner.
https://github.com/user-attachments/assets/e62020ef-d2f8-4634-9399-a27244326cfe
You can also blink manually, as emotes now fire the animations.
https://github.com/user-attachments/assets/80d6304f-f3c2-424a-a5aa-96a4aee7acdc
Adds a new eye-related quirk, Fluoride Stare! It will spawn you without
eyelids, preventing random or manual blinking and forcing you to wet
your eyes with some saline solution (of which you get a bottle, and a
dropper to apply it) every minute or so.
Additionally, eyes now display their color on their organ sprite,
instead of always showing up as blue.
(Don't tell roleplayers, but Fully Immerse smite now blinds you when you
blink, for true full immersion)
## Why It's Good For The Game
Spessmen blinking is just soulful, and brings some life into the game.
As for the quirk, its just a funny bit/reference that people can use
to... torture themselves?
## Changelog
🆑
add: Spessmen now blink.
add: Added a new Fluoride Stare quirk, keep those eyeballs wet, lest
they crack!
image: Eyes now display their color on their organ sprite, instead of
always being displayed as blue.
/🆑
## About The Pull Request
Moved broken on 516 UI's to browser datum
They now work and have a dark theme
Most of them are admin ones (All except 1)
I tried to check all the raw HTML UI's by typing `<< browse(` into the
VSC search and going through each element, but I might have missed
something.
What worked as it was, I didn't touch, except for the Dynamic control
UI's
## Why It's Good For The Game
Admin can do their things on 516
Coders/Mappers can debug some stuff on 516

## Changelog
🆑
fix: Admin/Debug UI's (Especially the Game Panel) now work properly on
Byond 516, instead of showing raw HTML
/🆑
## About The Pull Request
You can now use a fishing rod to fish random vending products from
vending machines, using holochips, coins and spacecash as bait. The
value of the money used as bait will positively influence the chance of
getting the pricier vending items, while using less than the minimum
paycheck (25 credits) will increase the minigame difficulty and carries
an additional, small risk of getting a dud or even hurling the vending
machine in your direction.
This also warranted a slight refactor of how vending product prices are
set.
## Why It's Good For The Game
Expands the list of things you can do with a fishing rod. Like for the
organ manipulation fishing PR. This is not about getting fish, but the
unconventional things we can do along the way.
Now tested, it works.
## Changelog
🆑
add: You can now try to fish random products out of vending machines
with a fishing rod and a few bucks.
fix: Fixing the 1000 cr holochip loot from exploration drones.
/🆑
## About The Pull Request
Logs whenever there's a HTTP error on the DM side of TTS.
## Why It's Good For The Game
Can help identify bugs and errors.
---------
Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
## About The Pull Request
Adds `Debug` group to initialization messages
## Why It's Good For The Game
You can finally hide those annoying messages, and leave it on special
Logs/Debug tabs
<details><summary>Video</summary>
https://github.com/user-attachments/assets/0b0d5219-d420-4d49-aa90-069961dcdaeb
</details>
## Changelog
🆑
qol: Now you can hide `Initialized some shit within 0s` messages, by
unchecking `Debug Log` checkbox into the chat tabs settings
/🆑
## About The Pull Request
Was just scrolling through the Paradise github since they seem to have
more work done for 516 to see if there's anything I can port over, found
this and thought why not.
Ports parts of https://github.com/ParadiseSS13/Paradise/pull/25105
Specifically, updaing all hrefs to use the internal ``byond://``, and
adding it to grep.
## Why It's Good For The Game
More work towards 516.
## Changelog
Nothing player-facing.
## About The Pull Request
Rewrite ticker `Reboot` proc slightly to use a timer and callback for
the delay before the reboot, tracks this timer in the stat panel for
players to see. Also adds a verb to cancel a pending reboot independent
of the delay round end verb.
## Why It's Good For The Game
It's nice to be able to see exactly how much time is left until the
server restarts, and it's even nicer to see that the round end has been
delayed when the "admin has delayed round end" message gets buried in a
fast moving chat.
## Changelog
🆑
qol: The time until the server reboots is now visible in the status tab.
admin: Added a cancel reboot verb to the server tab.
/🆑
## About The Pull Request
This adds a constant notice to the stat panel for clients on BYOND 516.

## Why It's Good For The Game
Best to make sure everyone knows that various UIs will likely be
janky/borked on BYOND 516. Hopefully this is hard to miss.
## About The Pull Request
- if an explosion epicenter is not on a station area, then it will not
screen shake all mobs on the z level if it was really far
## Why It's Good For The Game
- why should a bomb from 100 tiles away screenshake the entire z level?
- players have brought up their annoyance with icebox gitbtonite shaking
the entire z level every time one explodes.
## Changelog
🆑 grungussuss
del: screenshake from explosions will no longer happen when it's really
far and not on a station area (turf)
/🆑
## About The Pull Request
A) Queue time can be null and it'll be valid for hotstarting loops
B) Pushoffs working even when you're moving feels much better
C) Jetpacks were having race issues with drift handlers because those
were also using comsigs which is a remnant of old code back when they
were components. Handlers should fire last, post-comsigs.
D) We should not be hard-blocking jetpack movement when doing final
slowdown step. Like really.
## Why It's Good For The Game
Jetpacks ACTUALLY don't suck this time around.
## Changelog
🆑
qol: Jetpacks should ACTUALLY feel better now
/🆑
## About The Pull Request
Closes#88363
Smokey remains sometimes triggered instantly upon initializing, which
happens before the smoke SS is set up - thus runtiming due to attempting
to add newly created smoke to a non-existing carousel. Solved by moving
fluid SS init above atoms, god knows this'll probably happen more down
the line.
## Changelog
🆑
/🆑
## About The Pull Request
~~This adds a new test for the CI/CD so that we can load all space ruins
instead of it being RNG.~~
Adds more robust logging for ruins so we can see when they fail/succeed
and how many are placed on a map.
This also removes a deprecated CI config setting. It prevented ALL ruins
from spawning during CI tests which is bad.
The config setting was made redundant in:
- #87910
## Why It's Good For The Game
More robust CI/CD.
## Changelog
🆑
code: Add better logging for ruins
/🆑
## About The Pull Request
We don't check if the loop is actually queued as we attempt to remove,
fire and queue it, which makes our loop potentially run in parallel with
a higher priority loop, which (for some reason specifically on during
engiborg tests and specifically on wawa) was causing a flaky CI failure.
Closes#88400
## Changelog
🆑
/🆑
## About The Pull Request
This PR improves our jetpacks in 2 major ways: partially decoupling them
and intentional space movement from SSnewphys, and implementing
consistent pushoff speeds.
Currently jetpacks work by applying constant newtonian force whenever an
input key is held down by a client and stabilizing the movement every
time they get processed by SSnewphys which is an SS_TICKER subsystem,
which means that it attempts to fire prior to everything else and has a
wait of a single tick. This would be fine if we could guarantee that
there isn't another SS_TICKER subsystem with a higher priority that
constantly overtimes... oh right, that'd be the most important subsystem
of SSinput.
Newtonian impulses, both when starting a drift and when applying
continious force rely on SSnewphys to fire the loop, which can end up
not happening due to overtime in input (and is a frequent issue on
highpop). To circumvent this, newtonian impulses now forcefully fire
their drift loop regardless of SSnewphys, thus ensuring that the
movement always happens in the tick it was called (If you ask something
to move with an ``instant`` flag you'd expect it to move the same tick).
Second issue stems from the fact that jetpacks try to move you at your
movement speed, except when pushing you off objects they hijack normal
movement code that would've ran, resulting in a single tile of slow,
janky movement (Or, when moving along walls, making the controls feel
"sticky" and worse than what you'd have without a jetpack in the first
place). By forcefully applying enough force to make players move at
expected speeds, we can solve that issue.
Third issue stems from a minor mistake in SSnewphys processing order -
process() on jetpacks ran **after** moveloops have fired, so all
stabilization only applied next tick. I swapped fire orders around which
solves this problem too, although it won't be triggering much as
stabilization would now forcefully fire the related loop by itself.
https://github.com/user-attachments/assets/1068f68b-2cd1-49b0-bff0-1f79ed0aed5a
Also I've refactored wings to be jetpacks since they behave exactly the
same, which is a bit cursed if you think about it.
## Why It's Good For The Game
Jetpack movement is highly inconsistent in speed/smoothness, janky and
gets ruined by even a slightest amount of overtime in subsystems above
it - this should solve all of those issues.
## Changelog
🆑
qol: Jetpacks are significantly smoother and nicer to use now - and not
affected by lag anymore!
code: Cleaned up spacemove/jetpack code a bit and moved some common code
to helpers.
refactor: Wings are now... jetpacks. They behave exactly the same and
this should reduce the amount of copypaste code in spacemove
significantly.
/🆑
## About The Pull Request
You can now fish from aquariums if you wish to. This includes some
backend changes to make it possible for the fish table from
get_fish_table() to contain instances, and all that it entails up to
spawn_reward(), which is a requirement for the gimmick to respect the
various traits and other variables of the already instantiated fish
rather than read from cached properties.
## Why It's Good For The Game
The fish progress score/index had only little nasty flaw that has been
nagging me since day one: Not all fish species can be caught. Skipping
McGill, which is a peculiar case that for cheevo purposes should be
considered a standard goldfish, there is the one, unsignificant yet rare
purple sludgefish which can only be gotten as a rare evolution of the
generic sludgefish. Talk about petty, but this may be a long-term nit I
prefer to handle right now.
Also why not? The 'unmarine mastodon' is near impossible to get unless
you somehow find a oil well which is locked behind a specific ruin.
## Changelog
🆑
fix: Aquariums are now potential fishing spots.
/🆑
## About The Pull Request
This fixes double html encoding with AI shuttle calls, due to
`tgui_input_text` being called without setting `encode = FALSE` -
`SSshuttle.requestEvac` expects unencoded text.
I added documentation to `SSshuttle.requestEvac`, including clarifying
that it expects non-html-encoded text.
## Why It's Good For The Game
' is annoying
## Changelog
🆑
fix: Fixed double-encoded messages with AI shuttle call reasons.
/🆑
## About The Pull Request
`boldannounce` is NOT for use ICly it's only for OOC stuff. `bolddanger`
is identical it just doesn't carry the same baggage
## Changelog
🆑 Melbert
fix: Stuff like the SM exploding will no longer output to your OOC tab
/🆑
## About The Pull Request
Somewhat of a port of
https://github.com/ParadiseSS13/Paradise/pull/26401, albeit re-done from
scratch (with the power of find and replace)
Caller is a protected/reserved var in 516. We use it a lot. It's used in
more places than this, but I'm a perfectionist and can't think of better
names for most of the other uses (mostly mob AI, holocall, and
`InterceptClickOn` related), so I'm just doing pathfinding for now.
## Why It's Good For The Game
Prep for compiling on 516
## Changelog
No user-facing changes - this is merely renaming vars.
## 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
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
Was investigating some stuff downstream related to undeleted SQL
queries, and these two queries were related.
thought it'd be best to make them not block
`/client/proc/set_client_age_from_db`, as the results are never checked
anyways, not even for errors.
I've added a new proc to SSdbcore, `FireAndForget` - takes the same
parameters as NewQuery, but instead of returning the query, it just
asynchronously executes and then deletes it.
## Why It's Good For The Game
less undeleted sql queries, less blocking. yay?
## Changelog
does this count as user-facing? unsure how i'd changelog this tbh
## About The Pull Request
This adds plenty of useful stuff regarding byond-tracy, altho mostly
focused on the [Paradise
fork](https://github.com/ParadiseSS13/byond-tracy).
- Adds two new config options **(THEY ARE DISABLED BY DEFAULT)**
- `ALLOW_TRACY_START` gives admins with +DEBUG the "Run Tracy Now" verb,
which will allow them to start profiling with byond-tracy mid-round.
- `ALLOW_TRACY_QUEUE` gives admins with +DEBUG the "Toggle Tracy Next
Round" verb, which will initialize byond-tracy during world init the
next round (in the same way as passing `-params tracy` or defining
`USE_BYOND_TRACY`)
- If byond-tracy fails to initialize, the error will be logged and
available to view for the whole round.
- If `MC_TAB_TRACY_INFO` is defined, information about byond-tracy now
appears in the MC tab - if it's running or not, if it errored (and what
the error is), why it's running, if its queued for next round, etc.
- byond-tracy is now properly shut down when the world shuts
down/reboots, minimizing the risk of data loss or crashing
- More info regarding byond-tracy init is sent to `world.log`
## Why It's Good For The Game
Profiling is super helpful, and this should make things quite easier
## Changelog
No user-facing changes
## About The Pull Request
This makes `/datum/player_details` properly track BYOND version and
build separately, as opposed to just the full version string.
Whenever a client logs in, and their BYOND version is 516, while their
previous version was 515, or vice versa, it'll set a newly added client
var, `rebuild_plane_masters`, to TRUE.
During the `COMSIG_MOB_LOGIN` signal handler of a mob's HUD
(`/datum/hud/proc/client_refresh`), it will check to see if
`rebuild_plane_masters` is TRUE - if so, it will set the appropriate
`relay_loc` of (based on client BYOND version) of its plane master
groups, and rebuild their plane masters.
## Why It's Good For The Game
Makes testing stuff across 515 and 516 easier, as your screen won't
break when switching between the two.
## Changelog
516 is _still_ in private alpha, so no user-facing changes.
## 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
1. Deletes `INFINTIE`, it is misleading and not at all a big number and
causes bugs
2. Adds `STATUS_EFFECT_PERMANENT` and `STATUS_EFFECT_NO_TICK` to make it
clearer what infinite status effects are
## About The Pull Request
autotator, malf and blob's candidates would all get wiped out by this,
as `can_roll_midround()` returns TRUE if they can roll midround
## Why It's Good For The Game
seems like we want candidates in these roles, given the game is trying
to get some
## Changelog
🆑
fix: dynamic rulesets can get candidates for their roles
/🆑fixes#87535
## 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
Adds a new boolean that lets you opt out of automatically linking
zlevels in `LoadGroup()` (as implemented in
https://github.com/tgstation/tgstation/pull/87029); and forwards that
support to map jsons. Does ***not*** change any /tg/ map jsons in the
process; as they all still work as intended.
A modified Icebox JSON loading correctly:

### How do I disable automatic z-level linking?
Add the following to your json; under planetary:
``` "height_autosetup": 0, ```
For each z-level's trait; you can then add either `"Up": true` or `"Down": true` to link them manually, as you would've prior to #87029 .
## Why It's Good For The Game
tl;dr, map experimentation. It was prior possible to have station segments separated by z-level that weren't vertically linked; which was put to practice most prominently on Nova Sector, of all places, - but #87029 made it automatically assume that they should be linked in that manner.
This middleground keeps the new assumption while preserving the old manual process for any mapping projects that need it.
## Changelog
🆑
code: Mappers can now opt out of automatically linking their up/down station traits.
/🆑
## About The Pull Request
I'm adding a score that tracks which types of fish you've caught across
multiple rounds. To do so, I had to add a new score subtype that manages
the score value not being a number. Thankfully the achievement code is
fairly flexible so not a whole lot had to be done, although I've to add
a new column to the achievements table in the DB, because the 'value' is
for integers, while we need one for text strings ~~(the contents of the
list are converted to text with a delimiter before being saved cuz I'm
not sure if and how our DM slash SQL integration handles using lists
directly and I don't want to waste time finding it out)~~.
EDIT: It's mostly done beside the reviews that are going to point out
things that need to be changed. The UI changes are done. It's time for
reviews.
Here are screenshots of the UI with all fish still uncatched beside one
(I've since then the typo on its name and removed an extra zero from the
index number, as well as a nit with the spacing between cells):


## Why It's Good For The Game
We have about dozens over dozens of different fish in the game now, many
of which are just fluff anyway. It's getting to the point it's perhaps
doable to add a score or something to be a braggard about.
## Changelog
🆑
add: Added a new score that keeps track of all different fish that
you've caught between shifts.
server: Added a new schema table to store the aforementioned entries and
the ckeys associated to them, with an additional timestamp column.
/🆑
## About The Pull Request

## Why It's Good For The Game
gives players more control over how loud they want certain sounds to be
## Changelog
🆑 grungussuss
sound: the volume that ship ambience, ambience, radio noise and
announcements play at can now be tweaked in preferences, check your
preferences!
/🆑
## About The Pull Request
Rewrite `/datum/generecipe` to have two variables, `input_one` and
`input_two` that hold the type path of the ingredients for the recipe,
instead of it being a semicolon-separated string.
## Why It's Good For The Game
Better code, will catch invalid type paths in recipes at compile-time.
## Changelog
No player-facing changes