* Attack chain refactoring: Broadening `tool_act` into `item_interact`, moving some item interactions to... `atom/item_interact` / `item/interact_with_atom`
* Patches up merge skew (#80197)
## About The Pull Request
Yeah #79968 (1e76fd70b4) was not
compatible with master but no one said anything on the PR so i got
jebaited into merging it. The code should be up to the same standards
per the documentation I read (preventing thwacking the target in certain
situations while not returning anything in other situations)
master will definitely compile now though
* Patches up merge skew
* Merge conflicts
* Modular adjustments
* Removes this entirely duplicated proc...
* Update tool_override.dm
* Update weldingtool.dm
* Update tool_override.dm
* Update tool_override.dm
* Nope. Copy paste begone.
A skyrat edit is so much easier to deal with here
* Update brand_intelligence.dm
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Abductor Ship Bitrunner Domain (#80106)
## About The Pull Request
Adds in a new Bitrunner domain called Abductor Ship which is an
assault-type domain themed as an abductor mothership. It adds in a new
Abductor simplemob, gives them enemy AI almost identical to the
Syndicate Assault mobs and then sets them up in a new modular Domain map
fit with a custom Safehouse and multiple enemy types.
The domain is the same reward and difficulty level as the Syndicate
Assault mission and can be easily compared to it, while also being fresh
and having a cool themed map to run around in and blast aliens. I don't
know, I think it's cool...
## Why It's Good For The Game
Fun alien destruction, more Bitrunner content. Can you really go wrong
with that? It seems like bitrunning becomes dry when you've exhausted
all your domain options and have gotten used to them.
## Changelog
🆑
add: Added new modular Assault-Type domain "Abductor Ship"
add: Added new simple mob abductor agents team
/🆑
* Abductor Ship Bitrunner Domain
---------
Co-authored-by: IsaacExists <125638858+IsaacExists@users.noreply.github.com>
* No longer stuck inside legion when you revive (#80112)
## About The Pull Request
Since legions applied stasis, upon reviving you could not escape without
last resort. This fixes that.
side fix of calling gib ensuring the gibs get spawned
## Why It's Good For The Game
fixes#80111
being permantly imprissoned inside a legion is not that fun
## Changelog
🆑
fix: Being revived inside a legion now sets you free
fix: in some rare cases gib() did infact not spawn gib
/🆑
* No longer stuck inside legion when you revive
---------
Co-authored-by: Autisem <36102060+Autisem@users.noreply.github.com>
* Replaces unused xeno "weed extract" item in abandoned crates with, well, weed (#80157)
## About The Pull Request
Rather than granting you an otherwise-entirely unused "weed extract"
item on a rare 1% roll, an abandoned crate will now give you a random
assortment of cannabis seeds and samples.
## Why It's Good For The Game
Getting an unusable do-nothing item as a reward is kinda lame, this is
at least smokable.
## Changelog
🆑 Melbert
qol: Replaces unused xeno weed extract item in abandoned crates with a
random assortment of cannabis.
/🆑
* Replaces unused xeno "weed extract" item in abandoned crates with, well, weed
* Merge
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* [no gbp] some medbot fixes (#80150)
## About The Pull Request
medbots now drop hats when tipped closes#80134
medbots now drop their items when they explode
player controlled bots now have their normal speed back
## Why It's Good For The Game
they will now correctly drop their hats when tipped
## Changelog
🆑
fix: medbots now drop hats when tipped and drop their items when they
explode
/🆑
---------
Co-authored-by: san7890 <the@ san7890.com>
* [no gbp] some medbot fixes
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
* Rename notify_ghost_cloning to notify_revival (#80096)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->
## About The Pull Request
Renames
- `/mob/proc/notify_ghost_cloning` to `/mob/proc/notify_revival`
- `/mob/dead/observer/proc/notify_cloning` to
`/mob/dead/observer/proc/send_revival_notification`
- `/atom/movable/screen/alert/notify_cloning` to
`/atom/movable/screen/alert/revival`.
I could have found a way to merge both procs together but default
parameters keep me up at night.
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->
## Why It's Good For The Game
Conciseness, code that is named after a removed feature is silly.
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->
## Changelog
<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->
nothing playerfacing
<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
* Rename notify_ghost_cloning to notify_revival
* Missed wow
* Modular
---------
Co-authored-by: distributivgesetz <distributivgesetz93@gmail.com>
Co-authored-by: SomeRandomOwl <somerandomowl@ratchtnet.com>
* Moves `thinking_IC` variable to a trait (#80122)
## About The Pull Request
This was another boolean that was used to just manage stuff codeside
that really was not accessed _too_ much and is ultimately not useful as
a variable on `/mob`. This just moves it to a trait because it's only
really used in a few spots for a similar intent+purpose.
## Why It's Good For The Game
Less stuff to deal with in the average view variables window whenever
looking at a mob, which is really nice and welcome.
## Changelog
Doesn't concern players.
* Moves `thinking_IC` variable to a trait
---------
Co-authored-by: san7890 <the@san7890.com>
* Reworks `invisimin` variable to a trait (#80121)
## About The Pull Request
This was a variable that existed on the `/mob` level despite only ever
being altered in one place. Perfect to just make a trait since it's all
managed in one spot anyways (and no other code is really reliant on this
flag being flipped, it's just for the code to know to add/remove
invisimin status).
I also tweaked some messages so they could be more consistent, lmk if
that should be changed
## Why It's Good For The Game
Less not-useful stuff to scroll through in View Variables, better
scoping of a variable to an intended location.
## Changelog
Not necessary
* Reworks `invisimin` variable to a trait
---------
Co-authored-by: san7890 <the@san7890.com>
* Moves the new "Turn Target into MMI" verb into a VV dropdown option and rewrites the code around it. (#80097)
## About The Pull Request
Removes the Turn Target into MMI verb and re-adds it as a VV dropdown
option.
Rewrites the code around this to support what is effectively an
admin-forced action, which MMI code previously didn't support cleanly.
## Why It's Good For The Game
#79896 added a new debug verb, unfortunately because of how that debug
verb was defined (it has args for a target mob in the proc params) it
automatically gets added to the right click context menu instead...

Which is not ideal for admins as they're one misclick away from just
deleting a mob.
This moves it to the VV dropdown menu for humans and rewrites the code
behind it, which previously relied on the MMI attackby proc which
expects a user and thus has side effects as a result.
This new code is more suited to an admin force-insertion than the old
code which removed the brain and forced the now brainless mob to insert
its former brain into the MMI (with the potential to fail on user input
for the now brainless mob).

## Changelog
🆑
admin: Removed the "Turn Target into MMI" right click context menu verb
entirely, and instead added the same command as a VV dropdown on human
mobs.
/🆑
* Moves the new "Turn Target into MMI" verb into a VV dropdown option and rewrites the code around it.
---------
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
* Falling down a z-level while standing up can (occasionally) break your legs. Felinids will now always land on their feet (for better or for worse).
* This whole proc needs to be overridden??
* Update living.dm
* Delete human.dm
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Demotes the "electrical conductivity" flag from `flags_1` to `obj_flags` (#80033)
## About The Pull Request
Code to handle this flag only ever existed on the `/obj` sublevel, so
there's no need for it to be on the `/atom` level `flags_1`. There was
probably a point in time in which mobs or turfs conducted electricity
but there's zero code for it anymore so we truly just live in a society
now.
## Why It's Good For The Game
Frees up a slot on `flags_1` (which is really nice actually), proper
scoping of certain bitflag stuff, etc.
## Changelog
Not relevant to players.
I may have screwed something up, will be doing a few passes on this
myself to ensure all the search and replaces went alright but we should
be good™️
* Demotes the "electrical conductivity" flag from `flags_1` to `obj_flags`
* Modular
* Update misc.dm
---------
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Replaces cosmic heretic clone damage with organ damage (#80051)
## About The Pull Request
This PR replaces clone damage dealt by the cosmic blade with damage to a
random organ (8, 12, 14 respectively). To compensate for this, burn
damage will now deal 5-14-28, which is slightly weaker immediate damage
than before (6-16-32).
Someone suggested that blades should remove blood from the victim,
however I felt like that was too punishing considering the speed of
blood regeneration.
Feel free to share suggestions in the comments, if you know of a better
idea. Main point of this PR is to get rid of clone damage sources.
## Why It's Good For The Game
These are the last sources of clone damage in the game. We don't need it
anymore.
## Changelog
🆑
balance: Clone damage dealt by the cosmic blade has been replaced with
organ damage and increased burn damage. Clone damage dealt by the cosmic
beam has been removed. The star gazer now deals burn damage instead of
clone damage.
fix: The health of mobs combo'd by a cosmic blade will now update
correctly.
/🆑
* Replaces cosmic heretic clone damage with organ damage
---------
Co-authored-by: distributivgesetz <distributivgesetz93@gmail.com>
* Removes the vestigial slime reagent system (#80068)
## About The Pull Request
Slimes, unique among simple and basic mobs, had a reagent holder. During
life, they removed some of the reagents in the holder, but they never
actually metabolized them. Two reagents, frostoil and capsaicin did not
know this, and checked every time in on mob life if the mob they were in
was a slime, which was never the case.
Slimes also checked if they had morphine or frostoil in them when they
detected a change in their reagents, on_reagent_change, and applied a
slowdown. There are not many ways to put these reagents in slimes in the
first place. Chempuffs, syringes (but not hyposprays) work, and I assume
smoke too. I removed this dead code.
I did see this comment _"Should be moved to the reagents at some point
in the future. As it is I'm in a hurry."_ and I did try to move the
effects to reagents' onExpose(), creating a status effect that only
applies to mobs without reagents, lasts as long as it would have lasted
based on reagents, and respects that morphine and frostoil doesn't
stack. However, while doing this I realized I would be making reagents
2, in a much worse, overcomplicated manner.
In the end, I have decided to completely remove the reagent holder of
slimes, and the morphine and frostoil effects.
## Why It's Good For The Game
These systems are rather vestigial, and there isn't really much to gain
from them. The interaction with heat and gas types is a much more unique
system, so perhaps it will be better if we focus on them.
Also makes it easier to convert them to basic mobs, and also, keeps them
consistent with the rest of our mobs.
## Changelog
🆑
del: Removes the slime's reagent holder. This will make them not slow
down from somehow imbibing morphine or frostoil.
/🆑
* Removes the vestigial slime reagent system
---------
Co-authored-by: Profakos <profakos@gmail.com>
* Blood brothers is now a single person conversion antagonist (#79971)
## About The Pull Request
Instead of choosing 2-3 brothers, *one* person will be selected and
given a flash which can convert one other person over. In accordance to
the existing 10% chance for 3 members, there is a 10% chance that the
first person converted will receive a flash of their own.
Expectation is people will flash a friend or a robust guy or whatever.
My intent is primarily to see if this kind of blood brothers is more
enjoyable to play with/against, and if their inclusion in a round
increases the general chaos of it. My theory is that since most likely
blood brothers will be people who know each other, that it can become
more consistently interesting to the rest of the crew. That or they just
murderbone together idk
Fikou and head admins said they wanted this to replace rather than add
which I agree with.
## Why It's Good For The Game
Keeps the sandboxy aspect of blood brothers (no uplink) while likely
making it more enjoyable to play. Conversion is equally as simple as
revs for the user, and is just as intuitive to the one being converted
since there are no new mechanics thrown in your face.
Blood brothers is currently disabled everywhere on the main servers
except for MRP. I think this form will be more appealing to all
rulesets. If left enabled, Dynamic now has more antagonists to make
rounds diverse with and I want that
## Changelog
🆑
add: Instead of teaming up random people together, blood brothers will
now start out with one player and let them convert a single other person
over to blood brother using a flash.
/🆑
* Blood brothers is now a single person conversion antagonist
* Update oneclickantag.dm
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Add Felinid Laughter (#80056)
## About The Pull Request
This PR allows the Felinid race to use the human laughter sounds when
they proc the laugh emote.
## Why It's Good For The Game
Felinids are closely related to humans, and while their voice is
distinguishable, the sound of laughter should be the same. It makes
happy and cheerful interaction more entertaining when you can actually
hear the laugh.
## Changelog
🆑
sound: Added human laughter to felinids
/🆑
* Add Felinid Laughter
---------
Co-authored-by: IsaacExists <125638858+IsaacExists@users.noreply.github.com>
* basic cats and mini kitchen helpers (#79800)
## About The Pull Request
this pr transforms cats into basic pets! cats now have some new
behavior. they can carry fish and hunted mice in their mouths to deliver
it to kittens, and kittens will eat them.


if a kitten sees you holding food, it will point at you and meow loudly
until u give it the food.
becareful when putting male cats near each other, there is a small
chance they get into a heated argument and meow loudly at each other
until one of them flees.
also added a new small cat house for cats. cats will use these homes if
u build one near them (using 5 wood planks)

Chefs can craft the cake cat and breadcat. these are useful cats because
they can help the chef around in the kitchen. they will turn stoves and
grills off when food is ready, so they dont burn. and the cake cat will
help the chef decorate his donuts
## Why It's Good For The Game
refactors cats into basic mobs and gives them a deeper ai
## Changelog
🆑
refactor: cats are now basic pets. please report any bugs.
add: the cake cat and bread cat can now help the chef around in the
kitchen
/🆑
* basic cats and mini kitchen helpers
* Modular
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Fixes needless DM_VERSION check in Poly code (#79951)
## About The Pull Request
This is useless now that #79134
(1d6533c525) is merged and we require 515
for everything now.
## Why It's Good For The Game
They forgot
## Changelog
No effect to players.
* Fixes needless DM_VERSION check in Poly code
---------
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* Bumps compile to 515 (#79134)
## About The Pull Request
LSP supports it, let's GOOOOOO
I've removed the 515 tests since they're stable, alongside the libcall
wrapper. left the rustgcall wrapper cause yaknow memes
Just removed all the 515 and 514 particular define wrappers. gaming
## Changelog
🆑
server: Minimum compile version has been bumped to 515. clients still
support 514 but we're gonna start using 515 restricted features for
serverside now.
/🆑
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
* Bumps compile to 515
* Fixes a TGS regression in its API
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Certain ID trims affect secbot response (#79980)
## About The Pull Request
A prior refactor of how ID cards worked removed (without commentary?)
the long-previously-existing behaviour that Agent IDs cause a
subtraction from the level of suspicion that security bots see from you.
I have not only restored this behaviour, but applied it to a handful of
other ID cards (based on trim).
When Beepsky looks at you he will make an assessment based on various
factors controlled by his bot settings:
- If Beepsky is set to check ID and your identity is concealed (you
appear as "Unknown") add 4 points.
- If Beepsky is set to check Weapons and you are holding a restricted
weapon without a permit, add 4 points.
- If Beepsky is set to check Weapons and you are wearing a restricted
weapon on your belt or back without a permit, add 2 points.
- If Beepsky is set to check records and you are set to Arrest, add 5
points.
- If Beepsky is set to check records and you have some other
non-innocent status, add 2 points.
- If you are wearing a wizard's hat, add 2 points.
- If you are not human, add 1 point (police are racist).
- If you are loyalty implanted, subtract 1 point.
Factors added or restored in this PR based on your ID now are:
- If you are wearing an Agent ID, subtract 5 points.
- If you are wearing a Cybercop ID, subtract 1 point.
- If you are wearing a Centcomm ID, subtract 10 points.
- If you are wearing an Admin ID, subtract infinite points.
- If you are wearing a prisoner ID, add 1 point.
- If you are wearing a Syndicate or Battlecruiser ID, add 5 or 10
points.
If Beepsky is _emagged_ then he will view all targets as having 10
threat, regardless of their ID card.
If you complete this process with >4 points he will attempt to arrest
you.
The upshot of my changes are:
Wearing an Agent ID card will cause Beepsky to overlook the fact that
you are carrying a gun in your hands without a permit, unless you are
also set to arrest.
Wearing an Agent ID card will cause Beepsky to overlook the fact that
you are set to arrest, unless you are carrying a gun in your hands.
Wearing a prisoner ID while not human will cause Beepsky to try and
arrest you if you have a weapon on your belt or back (if he is set to
care about weapons permits or unless you have one).
Wearing a centcomm ID card will cause Beepsky to treat you as above the
law in basically all circumstances, up to and including when you try and
beat him to death. He will simply sit there and take it.
In addition to this, this information forwarded to AI is now also
available to player secbots upon examine.
Players can't become secbots very easily because you can't upload PAIs
into them or enable their sentience in the panel, but it sometimes
happens via random event or admin intervention.
## Why It's Good For The Game
I think this was removed by mistake? It wasn't included in the changelog
and everyone I talked to thought it was still true.
It's a fun feature which makes agent IDs marginally more useful.
I think Beepsky and pals judging you based on your job makes sense, even
if it is mostly applied to fluff roles.
## Changelog
🆑
add: Agent IDs once more trick Beepsky into treating you more leniently.
add: Prisoner IDs make Beepsky treat you somewhat more suspiciously, as
do Syndicate IDs. Wearing a Centcomm ID means that Beepsky is aware that
you are above the law.
add: Player-controlled security bots can view someone's assessed threat
level by examining them.
/🆑
* Certain ID trims affect secbot response
* Quick pass on Skyrat based ID_trims
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: SomeRandomOwl <2568378+SomeRandomOwl@users.noreply.github.com>
* fix parrots sometimes not appearing dead (#80055)
## About The Pull Request
sometimes parrots will not appear dead
## Why It's Good For The Game
parrots will now appear dead
## Changelog
🆑
fix: fix parrots not appearing dead sometimes
/🆑
* fix parrots sometimes not appearing dead
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
* Punished sect blessing rework (#80043)
## About The Pull Request
Instead of punished sect healing people like the normal bibble- you take
their burdens on instead!
All bodypart damage and wounds is transferred onto you, as well as
blood, suffocation, cloning damage and toxins
The amount of damage you take is dependant on your burden level,
decreasing by 7% with every burden level (100% at level 0, 93% at level
1, 37% at level 9 (the point at which you become a psyker))
the punished sect is now an absolute trauma, this makes more sense
because aheals shouldnt really clear it more than they clear stuff like
paraplegics
## Why It's Good For The Game
I think it's an interesting tweak of letting this chaplain sect do
something the others can't in healing, yet at a possibly huge cost.
## Changelog
🆑
add: Instead of punished sect healing people like the normal bibble- you
take their burdens on instead!
/🆑
---------
Co-authored-by: tralezab <40974010+tralezab@ users.noreply.github.com>
* Punished sect blessing rework
---------
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: tralezab <40974010+tralezab@ users.noreply.github.com>
* Removes some done todos (and ones that I think are dumb) (#80017)
## About The Pull Request
Most of these are mine that I just forgot about, only one I think anyone
cares about is the one in mobs.dm about making delta time match
subsystem yielding, but I think it's a bad idea so it's gone
Oh also, replaces an old comment of mine with an actual explanation
(it's about the icon cache and shit)
* Removes some done todos (and ones that I think are dumb)
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Gives drones the ablity to using the crafting menu again (#79960)
## About The Pull Request
It looks like fix removed the drone's ability to use the crafting menu
even if they technically have hands. I also added the ability for
non-shy drones to be able to strip a person. Mainly because derelict
drones need to strip things for parts and syndicate drones need the
ability to tie shoelaces.
## Why It's Good For The Game
It's fun being a drone but with all the shy restrictions its very
difficult to even fix maintenance without the crafting menu. As for the
ability to strip, when your a derelict drone you get bodies that have
great hats and they want that.
## Changelog
🆑
fix: All drones now can craft again
add: Non-Shy drones can now strip people of their things
fix: Centered the "pull" button properly over the drop button
/🆑
* Gives drones the ablity to using the crafting menu again
* Removes the modular version of this that we already had
---------
Co-authored-by: WarlockD <warlockd@gmail.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Cleanbots are now always blue (#79973)
## About The Pull Request
Makes cleanbots always blue
## Why It's Good For The Game
The randomization looks hideous every time I see one, the artists made
these blue for a reason
## Changelog
🆑
image: Premade cleanbots are now always blue.
/🆑
* Cleanbots are now always blue
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Changes `dreaming` variable on carbons to a trait (#79940)
## About The Pull Request
The documentation lied, it was a boolean that we only used in one file,
so lets just make it a trait and cut down on how much scrolling the
average person has to do when looking at carbon variables
## Changelog
Does not concern players.
* Changes `dreaming` variable on carbons to a trait
---------
Co-authored-by: san7890 <the@san7890.com>
* Fixes Ranged Guardians from Shooting while Incorporeal (#79925)
## About The Pull Request
Fixes#79921
Otherwise, on the tin. Attack mode is for attacking, scouting mode is
for scouting. We were listening for clicking and stuff like that but it
was still failing somehow so this is le fix
## Why It's Good For The Game
You aren't supposed to shoot in this mode, only scout.
## Changelog
🆑
fix: Ranged Guardians (Holoparasites/Power Miners/etc.) can no longer
use ranged attacks in scouting (incorporeal) mode.
/🆑
* Fixes Ranged Guardians from Shooting while Incorporeal
---------
Co-authored-by: san7890 <the@san7890.com>
* Removes some code soul (`IF YOU ARE COPY PASTING THIS...`), replaces it with a macro (#79935)
## About The Pull Request
Replaces all instances of `SSblackbox.record_feedback\("tally",
"admin_verb", 1, (.+)\)` with `BLACKBOX_LOG_ADMIN_VERB($1)`
This makes so the funny comment isn't necessary.
It also reveals one location which someone did not heed the comment, the
`debug_controller` proc copy+pasted the line but did not change the
fourth argument. PEOPLE DON'T READ!
* Removes some code soul (`IF YOU ARE COPY PASTING THIS...`), replaces it with a macro
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Fixes race condition in Life() (#79934)
## About The Pull Request
This fixes the following runtime by adding sanity checking for
`reagents`:

It can be null, which I presume is from the mob being qdeleted in the
middle of a `Life()` tick but I'm not 100% sure of that.
The check for `QDELETED(src)` happens after `handle_organs()` and
`handle_dead_metabolism()`, which there was no protection against there
being a null reagent var for either of those procs.
I was debating moving the order of the procs around, but I decided
against it because I think it may be this way for a reason
(`organ.on_death()` gets called in `handle_organs()`), plus again I'm
not 100% sure that the `reagents` is being nulled from qdeletion.
## Why It's Good For The Game
Fixes a bug that kept coming up in CI
## Changelog
🆑
fix: fixed a runtime in handle_dead_metabolism()
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
* Fixes race condition in Life()
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
* Fixes Ghostize Runtime (#79927)
## About The Pull Request

I had this runtime sitting around for who-knows-how-long so I decided I
would just fix it today. `ghostize()` is expected to work on all
subtypes of `/mob` so it's a bad idea to access a variable that only
exists on `/mob/living` (and there is no real point to move
`timeofdeath` up a level imo, we already have too much clutter there and
`/mob/camera/imaginary_friend` would _never_ need it).
## Why It's Good For The Game
We should only access variables like these when when they exist.
## Changelog
No shot a player would ever notice this
* Fixes Ghostize Runtime
---------
Co-authored-by: san7890 <the@san7890.com>
* Adds INTJ skillchip (#79902)
## About The Pull Request
Adds a new skillchip, it lets you taste food by examining it.

This has all of the effects of tasting food (various moodlets based on
quality and food type) and can also trigger food allergies if you have
them, however it does not consume the food nor give you any nutritional
benefit.
You can buy it from a vendor or sometimes it spawns in maintenance.
## Why It's Good For The Game
The players are constantly clamouring for more additions to our most
loved and useful feature, skill chips.
<details>

</details>
## Changelog
🆑
add: A new skill chip can be found in maintenance or purchased from the
vendor, allowing you to experience food in new and exciting ways.
add: Abductors also have access to this incredible power, simply using
their genius level brains.
/🆑
* Adds INTJ skillchip
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
* Fixes hearing messages from speakers on another z level (515 fix) (#79888)
515 changed get_dist to return inf when either end is on another z
level, instead of just the maximum range. `/mob/living/Hear` early
returns when the speaker is too far away to hear. Previously we would
get around this by passing in INFINITY as the range for the message, but
the INFINITY define is just a very large number instead of real infinity
which is what byond gives back for get_dist.
I also improved the unit test a little while debugging this.
* Fixes hearing messages from speakers on another z level (515 fix)
---------
Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
* Removes non-working "Make AI" VV (#79889)
## About The Pull Request
Removes the "Make AI" from the VV dropdown.
## Why It's Good For The Game
This button doesn't work, and this function already exists in the player
panel.
It doesn't make sense to exist in multiple places, with it not working
in 1 particular place.
## Changelog
🆑
admin: Remove "Make AI" from VV dropdown
/🆑
* Removes non-working "Make AI" VV
---------
Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com>