## About The Pull Request
Melbert asked me to make this and I thought it'd be relatively easy and
plausibly useful so I did.
This PR adds a feature to the VV menu for mobs which allows you to apply
and configure an AI controller from a list of templates.
It's not as versatile as coding one would be, but it should be able to
accomodate a lot of generic scenarios.
Some examples of basic stuff you can set it up to do:
- Give Ian a machine gun he will fire at nearby people while staying
within a specified min/max range.
- Have Poly fire brimstone beams on cooldown at whoever is nearby
(although she won't bother trying to line up cardinally).
- Assign a gorilla to be someone's personal bodyguard which will follow
them around and attack anyone who hurts them.
I have also made an executive decision to remove the restriction that
basic ai controllers can only be placed on basic mobs.
We've removed _most_ non-basic simple mobs from the game, and also have
more recently updated most AI behaviours to work agnostically of whether
they are assigned to a basic mob or not... which means that they'll
largely work on carbons.
Coincidentally, this feature makes sure to ask if you want an AI
controller to remain active on a mob which already has a client.
Assigning an active AI controller to a live player which forces their
character to automatically attempt to run away from whoever the last
person to attack them was is ~~not recommended behaviour because it's
largely untested~~ highly recommended behaviour because I think it's
very funny (makes it very hard to play though).
I'm gonna do another PR some time which cleans up `random_speech` so
it's configurable and then let you slap that on whoever as well.
## Why It's Good For The Game
Enables a greater level of admin abuse.
## Changelog
🆑
admin: Added easier tooling for admins to add or change the AI
controllers on mobs
/🆑
## About The Pull Request
del() log, radio log, check antagonists, law/dna/fingerprint logs all
use browser instead, which means darkmode, wahoo



The only difference now is that they are in darkmode, really.
Also removed browse calls to pipe dispensers (the machine) and windoor
assembly, as they both use TGUI now so these don't do anything.
Lastly, adds an early return to the tram admin tool if you don't select
a tram, cause I found it annoying.
## Why It's Good For The Game
Try to use old admin tools, get flashbanged
## Changelog
🆑
admin: Check antagonists & del/law/dna/fingerprint/radio log panels use
browsers which means they have darkmode. Also the tram panel will cancel
out if you click cancel.
/🆑
## About The Pull Request
this adds a new define, `DISABLE_DREAMLUAU` (commented out by default),
which does... exactly what it says on the tin. it fully disables any
dreamluau-related code (the "Open Lua Editor" admin verb is left in,
albeit just giving the user a warning saying Lua is disabled, just so
there's no confusion about the verb itself being missing)
when compiling with OpenDream outside of CI (so dreamluau code will
still be linted), `DISABLE_DREAMLUAU` will be defined by default, tho.
## Why It's Good For The Game
makes OpenDream testing easier
## Changelog
no user-facing changes. or even code changes for most cases.
## About The Pull Request
This PR reimplements https://github.com/tgstation/tgstation/pull/71538
atop `master`. Quoting the original PR:
> Every `icon_exists()` call will cache the entire file. Past me didn't
realise _why_ file opts were so expensive, but I do now. This is
immeasurably slower on a single call, and _significantly_ faster on
subsequent calls to the same file.
I attempted to handle some of the review comments that were posted
there, by splitting screaming functionality into its own proc.
* `if(icon_state in icon_states(file))` and `if(!(icon_state in
icon_states(file)))` were refactored to use `icon_exists(file,
icon_state)`.
* Where screaming was seemingly wanted (and where there wasn't a more
descriptive error inside the `if` block), I refactored them to use
`icon_exists_or_scream(file, icon_state)`
* The exception to the above was under
`/datum/unit_test/turf_icons/Run()` and
`/datum/unit_test/worn_icons/Run()`, where `icon_states()` was being
passed a mode flag. Given that this is only used in unit tests (where
performance isn't a priority), I opted to leave these be.
Additionally, I revised the documentation comment for
`/proc/icon_exists()`, as I felt it was a bit vague currently.
## Why It's Good For The Game
https://youtu.be/Z9G1Mf6TZRs
## Changelog
No player-facing changes (hopefully).
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
## About The Pull Request
Bandaid fix of broken shadows on 516.
Renamed refresh button to rebuild for consistency in plane debugger
(Edit/Dubug-Planes).
Rebuild now also reapplies parallax, so it will not be turned off after
rebuild.
Closes#89230
## Why It's Good For The Game
faster 516 adoption
## Changelog
🆑
fix: fixed shadows on 516
/🆑
## About The Pull Request
I swear it's the last one

### Added two new fishes to the rift pool:

#### The __mossglob__ is the Fisherman's Bane. The apex of evil. The
be-all-end-all in fisher destruction.
It is haunted. It deals toxic damage. It throws itself around. It's
coated in a deadly and hallucinogenic compound. Its mossy coating is
slippery. It revives itself. It throws itself out of aquariums. Best of
all, it is extremely easy to catch.
How do you deal with it? Well, probably by not fishing in a portal to
hell. Otherwise... good luck?
Suiciding into it empowers it by 15% and seals you inside. JOIN THE
MOSS!

#### The __babbelfish__ is a strange sort of predator, a psychic fish.
It casts a psychic aura near itself, ~~disturbing people~~ (nvm lol the
demoralizer datum is bad), killing fish nearby and then eating their
corpses.
When it dies, it emits an awesome psychic wail, which will instantly
kill all fish in audible range and severely incapacitate psy-sensitive
humans:
I can't play the ogg here but credits to grungus for it


There is also a secret, secondary function of the babbelfish: Splitting
one in half (a terrible idea) and shoving it inside your ears will
unlock your full psychic potential, granting you psychic resistance and
grant you the ability to either understand or speak every single
language, at a terrible cost.
#### ARMS
Failing the fishing minigame while fishing in a heretical rift will now
cause the rift to tear your arm (and its fishing rod) off your joints
and greedily slurp it up. The Mansus does not care for losers. (Getting
bored and walking away while the minigame is up also counts as failure.)
However, these missing items can, in fact, be fished back up, which also
includes arms -and- heads lost normally to the rift! Not only that, but
you're able to fish up random arms of any type, presumably from other
fools across time and space.
#### This PR probably shouldn't be merged until the bug that causes
finite fish counts to not be finite is fixed. Infinite fire sharks are
bad enough...
Added ABSTRACT flag to profound_fisher fake rod.
objectify() now works with instances of objects.
Apparently snuck in a random-ass refactor to smoker lungs.
Psychic resistance now prevents the instadeath from trying to
telekinetically grasp at a opened rift.
Hallucinogenic fish with a stinger now inject their hallucinogenic
toxins.
I woudl like to preemptively apologize to ghommie
## Why It's Good For The Game
__Mossglob__
I think the game's missing a fish that's just extremely dangerous to be
around, the piscine equivalent to radioactive waste. You can't bin or
tank it, because it flies off. You can't kill it, because it's
atmos-proof and revives itself anyway. Trying to keep it on a table to
turn into disgusting mold 'slices' is a challenge in and of itself. This
fish will (not) make people think twice about fishing in hell, and give
another reason for security and command to give PSAs to not interact
with the rifts across space and time around the station, which I think
is wonderful.
__Babbelfish__
This fish punishes sloppy fishermen who hold up their catch and then
store it inside their bag for the poor fish to slowly asphixiate to
death in. The fish griefing that will happen from it will be
_wonderful_.
The organ thing is a clear reference to HHG, but it has its own twist.
You can speak all languages, or understand all languages... but rarely
both. It'll make for some silly situations where people just 'make
strange noises' at you or try to act as translator for, say, ashwalkers
or xenomorphs while being completely clueless as to what anyone is
actually saying.
__ARMS__
Arms. Arms arms. Someone asked me if rifts let you fish up arms and i
said ___IT DOES NOW___.
## Changelog
🆑
Ghommie, carlarc, grungus
add: Added two new fish to heretic rift fishing.
add: You can now fish up arms, heads, and other items lost to heretic
rifts!
admin: objectify() now works with instances of objects. Mark a player,
then an object, and use those marks to call that global proc and you can
turn people into pre-existing items.
add: Psychic resistance now prevents the instadeath from trying to
telekinetically grasp at a opened rift.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
adds Space Dragon, which is missing, to the banning panel as it should
already be there
## Why It's Good For The Game
makes it easier for admins
## Changelog
🆑
admin: added Space Dragon role to the banning panel
/🆑
## About The Pull Request
mimics are basicmobs now
the only change not carried over worth mentioning is that all mimics are
a consistent speed because i cant imagine a gun or object with aimbot
going at you mach 2 would be very fun
mimic crates had some stuff changed compared to their simple animal
variant
they open and close their lid when attacking (unless locked) to be like
menacing or something like animals flash colors to ward off people
attempting to open a nonsentient hostile crate mimic will make it lock
itself (if it contains anything) and attack you
mimics are a really stupid naming for these because like
mimic crates pretend to be crates
anything else inheriting from mimics are just used to make objects alive
https://github.com/user-attachments/assets/34a733a4-45a3-409e-8a6a-b2a8c7540898
ranged mimics now use viscontents (they also keep trying to pointblank
people for some reason i think thats ok though unless its a wand of
fireball)
ranged mimic (any ranged weapon animated by a bolt of animation)
https://github.com/user-attachments/assets/c3f1d2f5-cfb8-46a9-a58c-255c53a034db
## Why It's Good For The Game
fixes#85668
## Changelog
🆑
refactor: mimics (bolt of animation, malf ai Machine Override, etc) are
basicmobs
fix: crate mimics may now be opened
/🆑
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
## About The Pull Request
Lets other admins see what you sent in a classified command report.

## Why It's Good For The Game
Admins can see this anyway and I've previously wanted to look this up to
see what another admin is doing.
## Changelog
🆑
admin: All admins will now see what is in a classified command report
🆑
Co-authored-by: Josh Powell <josh.powell@softwire.com>
## 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
The map loading function was ignoring JSON values when a map's config
file was custom loaded. (things like - minetype, planetary, etc.)
To resolve this I just made the loadConfig return a json and then use
that json.
## Why It's Good For The Game
Better custom map support!
## Changelog
🆑
fix: Fix custom map loading ignoring JSON values that were ignored
previously. (minetype, planetary, etc.)
/🆑
## 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
Per DarkenedEarth's request on discord, adds a new Fun menu secret which
makes the shuttle go back to the station after a configurable delay with
an announcement (also configurable). After docking at the station it
behaves like BYOS (still requiring to wait for it's arrival despite it
being docked).
## Why It's Good For The Game
Admins want it to hunt early EORGers or make events or something like
that.
## Changelog
🆑
admin: Admins can now return the shuttle back to the station without
ending the round
/🆑
## 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
Addition to [#84910](https://github.com/tgstation/tgstation/pull/84910)
Added a "print" button to the request manager. It simply prints at the
centcom station the paper that was faxed to the admins.
Also added "Auto-print Faxes" button to the request manager, which
allows you to enable automatic printing of requests on the admin fax
<details>
<summary>Screenshots</summary>



</details>
## Why It's Good For The Game
The message in the chat may get lost. In this case, it will no longer be
possible to print the paper sent to the CC
Changing the allow_exotic_faxes variable will allow you to fax something
unusual to the station in (very rare) situations. No need to manually
change this variable
## Changelog
🆑
add: added a "print" button to the request manager
add: admin fax can now send exotic items
add: added "Auto-print Faxes" button to the request manager, which
allows you to enable automatic printing of requests on the admin fax
fix: fixed a bug where pressing the print button would cause the receive
animation to appear on all admin faxes.
/🆑
## About The Pull Request
- Fixes#87829
Ensures we can't enter invalid values that actually run timed in this
specific case
## Changelog
🆑
fix: greyscale modify menu has better validation for player entered
colours
/🆑
bounty pr
## About The Pull Request
Lets anyone with permissions verify any admin past 2fa, not just ones
lower than them on the ~totem~ permission pole.
## Why It's Good For The Game

(also fixes an exploit where you could action protected admins who were
deadmined because `D` wouldn't be set by that point.)
Closes#88283
Closes https://github.com/tgstation/tgstation/issues/88320
Fixes a harddel caused by the limp status effect not being properly
deleted
Reduces update-body calls in:
- Initialize from 4 to 1
- On z-level change from 2 to 1
- On move with bloody shoes from 1 to 0
Mostly by just passing along the proper argument and removing seemingly
unnecessary update body calls
## 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
~~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
Title. I may have been wrong about how depended on this behaviour was
Also, uh, fixes#87986
## Why It's Good For The Game
trim_reduced no longer needs to exist because trimtext() does it faster,
and there's no reason to have a special proc if trim just calls that
proc anyways. I sincerely doubt the proc overhead is so severe that we
need another proc that will ever only be called directly 3 times in the
code.
Since trimtext() does something we don't expect, it's better to just
have SDQL2 queries use trim() so we're all on the same page.
## Changelog
NO!!!
## 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
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
/🆑
## 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 ternary statement to the logging for adding admin remarks (notes,
messages, watchlists) to specify if a note is secret.
No change to actual administrative functions, just the logging.
## Why It's Good For The Game
Accurately reflects the note added!
## Changelog
🆑
admin: When a secret note is applied, it'll now be logged as a secret
note (instead of appearing like a regular note).
/🆑
## About The Pull Request
Fixed being unable to aghost while corpselocked, via adding another
parameter to ghostize that checks if it's an aghost or not
## Why It's Good For The Game
i wana leave my body when testing as ethereal
## Changelog
🆑
fix: Fixed being unable to aghost while corpselocked
/🆑
## 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
Previous attempt - https://github.com/tgstation/tgstation/pull/87227
`/atom/proc/singularity_pull(obj/singularity/singularity, current_size)`
has first arg typed, but other procs were just referencing it as a
un-typed variable.
Since args are not standartized AND
`atom/proc/singularity_pull(obj/singularity/singularity, current_size)`
is out-dated, since it can be called by things that has
`/datum/component/singularity` - not just by
`obj/singularity/singularity` - This PR just adds args to every
`proc/singularity_pull()` as follows:
`proc/singularity_pull(atom/singularity, current_size)`
## Why It's Good For The Game
Standartization
## Changelog
No changelog needed
## About The Pull Request
BYOND added a native `trimtext` proc in 515, which as far as I know,
does the same thing as the `trim_reduced` proc - trims whitespace off
both ends of a string, but `trimtext` should be faster, as it's a
builtin rather than implemented in DM.
Also, added a global `_trimtext` proc, for use from SDQL2 or Lua, as
it's a builtin and can't be `call()`'d.
## Why It's Good For The Game
Micro-optimizations my beloved - especially since I imagine this proc is
called quite a lot, even if it doesn't really have a performance impact
anyways, but it can't hurt.
## Changelog
🆑
refactor: Refactored some text helper procs to use BYOND's native text
trimming proc.
admin: Added a _trimtext proc, for use with SDQL2 or Lua scripting.
/🆑
## About The Pull Request
Adds proper law logging to the law panel.
I asked Melbert if he wanted it inside silicon.log, admin.log, or both.
He said admin.log
## Why It's Good For The Game
Logging is good for adminbus and what can be high impact adminbus.
## Changelog
🆑
admin: The Law Panel now properly logs and communicates law edits.
/🆑
## About The Pull Request
This moves all the shuttle related admin verbs into its own category to
make it less cluttered. It was a PIA to debug shuttle related code while
having to hunt down these verbs.
## Why It's Good For The Game
Better UI.

## Changelog
🆑
admin: Organize admin verbs for shuttle events into shuttle category
/🆑
## About The Pull Request
Adds VV header for items, letting quick modification of a few of an
item's combat values..

## Why It's Good For The Game
In testing, I find I tweak these values commonly, to test how effective
an item is vs armor, or how strong a new item should be, etc etc. So
having quick access to these might be cool
I thought about adding a few more like throwforce but I didn't want to
clutter it too much
## Changelog
🆑 Melbert
admin: Items now have a header in VV allowing for quicker editing of
combat properties
/🆑
## About The Pull Request
Before there were two settings for human authority:
`ENFORCE_HUMAN_AUTHORITY` and `ENFORCE_HUMAN_AUTHORITY_ON_EVERYONE`
The first, if enabled, would not let non-humans be heads of staff unless
they had a specific var on their job set to TRUE.
The second, if enabled, would simply ignore that var and reject the
non-human anyways.
This PR replaces both of those settings with a single one,
`HUMAN_AUTHORITY`. You can set it to one of four settings:
* "OFF": human authority will be turned OFF. Non-Humans will be able to
be heads of staff.
* "HUMAN WHITELIST": human authority will be turned OFF, HOWEVER; if a
job has its new `human_authority` variable set to
`JOB_AUTHORITY_HUMANS_ONLY`, then whoever picks that job will be forced
to be human.
* "NON-HUMAN WHITELIST": human authority will be turned ON. However, if
a job has its `human_authority` variable set to
`JOB_AUTHORITY_NON_HUMANS_ALLOWED`, a non-human can become that job.
This is what we have now, it works the same as if
`ENFORCE_HUMAN_AUTHORITY` were turned on. This is also what I've set as
the default value.
* "ENFORCED" human authority will be turned ON. Non-Humans will never be
able to be heads of staff. This is what
`ENFORCE_HUMAN_AUTHORITY_ON_EVERYONE` used to do.
You can also now set the `human_authority` variable through
`jobconfig.toml`!
## Why It's Good For The Game
Allows more configuration options for downstreams, and lets keyholders
and headmins have more options over how to set up human authority.
## Changelog
🆑
config: Both human authority settings were combined into a singular one,
allowing for more flexibility
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
Adds the following new general shuttle events:_
**Hitchhiker**
- 1% chance
- A single assistant in an EVA suit and some PBJs in a suitcase
**Assistant Wave**
- 0.1% chance
- Spawns 10 assistants with internals
- For clarity, they don't get sent to the shuttle, but get launched at
it from space. It's a scuffle of 10 assistants trying to get in without
being spaced or succumbing to the cold/pressure
**Intern Wave**
- Admin only
- Unarmed and armed version
- Spawns centcom interns, with a little announcement to warn they're
coming
I've also fixed projectiles bugging out and admin forced shuttle events
not activating if they were added after the shuttle launched
<details>
<summary>Admin only events added</summary>
**Nukie**
Spawns a single nukie, armed with a shotgun, pistol and edagger.
Basically the deathmatch nukie loadout, you dont want to fight this
**Meaty ores**
Meaty-ores meteors. Have a 4% chance to hit the shuttle, posing a
potential hazard
**3 player controlled fire-sharks**
3 fire sharks controlled by players. Not much to talk about here
**Fireball Wave**
Shoots a wave of fireballs at the shuttle. I think it's cool but
apparently shuttle walls and windows deflect fireballs so it's kind of
moot unless you're outside :/
</details>
## Why It's Good For The Game
The assistant and hitchhiker events are some flavoring that I thought up
a while ago. The Hitchhiker is just intentionally a flavor addition, but
the assistant wave and intern wave can be used by admins to repopulate
or retake the emergency shuttle as well.
## Changelog
🆑
add: Adds an assistant and hitchiker shuttle event, replenishing the
crew mid flight!
admin: Adds two intern wave shuttle events
code: You can now supply shuttle events with outfits!
code: You can now shoot projectiles with the shuttle events!
fix: Fixes projectiles bugging out when fired in shuttle transit space
fix: Fixes admin forced shuttle events not activating when added mid
transit
/🆑
## About The Pull Request
Changes map votes to be based on a persistent tally count.
Tallies for maps are cached between rounds and are added to by map
votes.
When a map is chosen, and it wasn't the only valid one, the tallies for
said chosen map will be reset.
Refactors map vote handling and moves it from SSmapping to SSmap_vote.
Rock the Vote has been removed as a result of this refactor.
## Why It's Good For The Game
Makes it more likely that all maps will be played over the course of a
server instead of always being truly random.
Removes some clutter off of SSmapping.
🆑
refactor: Map Votes are now carried over between rounds. When a map vote
is actually a contest, the winning map will have its votes reset.
/🆑
## About The Pull Request
Insert() does not return anything, replace_into relied on that so the
tool ended up just cutting out all the organs it was supposed to insert
after putting them in
## Changelog
🆑
admin: Fixed VV DNA infusion tool
/🆑