Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The North Star: A Nanotrasen Exploratory Vessel #71731

Closed
wants to merge 54 commits into from

Conversation

Cheshify
Copy link
Contributor

@Cheshify Cheshify commented Dec 5, 2022

About The Pull Request

A new map for TGstation, in the works! It has 4 fucking Z levels, a massive expansive maintenance with unique designs, and some unique code features in the works.

To Do:

  • Unique Shuttles!

  • An Innate Station Trait!
    Fikou has greatly helped with creating an important flavour aspect of this map, Trek Uniforms on anyone who joins! See the forum thread for more. This includes the framework for innate station traits, station traits loaded as long as it's in a map's json

Here's the forum dev thread there are screenshots there.
https://tgstation13.org/phpBB/viewtopic.php?p=657252#p657252

Why It's Good For The Game

So, this is the North Star. An effort taking multiple mappers and of 9~ months of hard work. This map was not initially designed for TGstation, but always designed for TGstation code. The process of retooling the map for TGstation was an absolute joy and I feel like the map definitely has it's niche as a massive and unique experience for it's players.

I adore this map, it's gorgeous, has a unique aesthetic, and a number of very funny interactions with multi-Z. The PR comes packed with unique mechanics for future mappers (innate station traits!), a number of map-fitting shuttles, and a fun spacefaring uniform gimmick for the crew.

Changelog

🆑 Cheshify, Fikou, Blue-Berry, Zytolg, InfiniteGalaxies, Striders, Sylphet, Riggle, Soal, Andry, Crit, and Deranging.
add: Nanotrasen's Newest Exploratory Vessel is now available! Meet the North Star!
code: Raised the number of possible level render to 4, check your preferences if needed to be reduced.
code: Adds a system for map-loaded station traits. Used by the North Star to give people exploratory uniforms.
/:cl:

@tgstation-server tgstation-server added Code Improvement Code is now easier to copy paste. Config Update Time to bother the headadmins for three months to get your config applied Feature Exposes new bugs in interesting ways Map Edit Thank you for your tile-placing service. It's always appreciated. Sprites A bikeshed full of soulless bikes. UI We make the game less playable, but with round edges labels Dec 5, 2022
@LemonInTheDark
Copy link
Member

Needs more airlocks

@CCC23
Copy link
Contributor

CCC23 commented Dec 5, 2022

God fucking damn thats a map things HUGE

@san7890
Copy link
Member

san7890 commented Dec 5, 2022

Was this map originally developed for /tg/station in its entirety?

@Cheshify
Copy link
Contributor Author

Cheshify commented Dec 5, 2022

Was this map originally developed for /tg/station in its entirety?

No :3c

However this has been 3-4 months of effort put into getting it adjusted for /tg/station, containing both familiar concepts (basically everything you'd expect on a normal station) and a number of new ones

@Pickle-Coding
Copy link
Contributor

The unnecessary zig-zags of the orange pipes in the engine room could get removed by moving the orange pipes up by a turf. Very cool that the emitters are in space.

@MrMelbert
Copy link
Contributor

Needs more airlocks

I can confirm fastmos is hell on the main halls on this map

@Striders13

This comment was marked as off-topic.

_maps/_basemap.dm Outdated Show resolved Hide resolved
@Cheshify
Copy link
Contributor Author

Cheshify commented Dec 8, 2022

Totally comfortable with more tests before anything else, but the map functions as I intend it to, it's not lacking any component, and I feel like more player experience on the map can open me up to any faults the map may still have.

@Andrymeda
Copy link

great map, had lots of fun in it, can't wait for it to be on tg to break the repetition of the other maps

@DAKKA-WAAAGH

This comment was marked as off-topic.

@Cheshify Cheshify marked this pull request as draft December 8, 2022 22:00
@Jackal-boop

This comment was marked as off-topic.

@Cheshify
Copy link
Contributor Author

The project isn't dead! Just taking a break (since I worked on this with all of my free time for like 2 weeks), and waiting for some much-required fixes to ensure everyone can properly run the map.

@@ -4,6 +4,7 @@


#define STATION_TRAIT_ABSTRACT (1<<0)
#define STATION_TRAIT_NORANDOM (1<<1)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

make sure to documetn these

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Whew okay, how should I document these exactly? Just saying what it's for? (Innate Station Traits)

@Oranggu
Copy link

Oranggu commented Dec 21, 2022

Northstar! Just a week away. 🥰

@Coolguysixtyfour
Copy link

this is fantastic

Mothblocks pushed a commit that referenced this pull request Dec 24, 2022
…2169)

## About The Pull Request

We no longer always render parallax.
This was causing issues because we can't isolate the white of space from
the vaugely white of everything else.

So instead, if your parallax plane is out of view, we'll not only
disable it, but we'll disable the strand we send from the main plane TO
it.

Instead only blending against the bottom stack.

This does mean there's a possibility for fullwhite on z transition
borders (potentially fixable), or when hijacking the plane (also
fixable, but significantly more annoying).

This is enough to make large maps functional though, so I'm happy with
it

## Why It's Good For The Game

Allows for #71731 and other maps like it. Makes my code actually work

## Changelog
:cl:
fix: Using optimized multiz on > 2 z layer maps will no longer cause
fucko bungo
/:cl:
@thgvr
Copy link
Contributor

thgvr commented Dec 25, 2022

back in action

@Cheshify Cheshify marked this pull request as ready for review December 25, 2022 02:37
Jacquerel added a commit to lizardqueenlexi/orbstation that referenced this pull request Dec 27, 2022
* removes extra turtleneck from research directors garment bag (#72010)

was looking at all of the head of staff clothes to boggle at why head of
security got so many when i noticed that the research director had two
turtlenecks (3 if you count the fact they spawn with one).

* Automatic changelog for PR #72010 [ci skip]

* Rats can attack obstacles between them and their target (#71741)

## About The Pull Request

Fixes #71568 
I wrote this for basic mob carp but it will be needed in a lot of
places.
Rats used to be able to attack windows or dense objects between them and
their target, but basic mobs didn't have this capability.
Now they do.

Behind the scenes, an important change is that this adds
`AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION` to
`/datum/ai_behavior/basic_melee_attack`.
This is because `basic_melee_attack` essentially enters a loop which
won't end until the target is dead or lost, but there are plenty of
circumstances where we'll actually want to interrupt this to do
something else. Such as attack windows.

## Why It's Good For The Game

Restores accidentally removed behaviour.
Will likely be required for future basic mob development.

## Changelog

:cl:
fix: Rats will once again attempt to attack windows or other dense
objects separating them from their targets.
/:cl:

* Automatic changelog for PR #71741 [ci skip]

* Fixes chameleon vest suit storage (#71992)

Chameleon vests now work like security vests,
allowing you to wear guns on it.
This makes it easier to disguise within security
while giving a little more utility to the item.

* Automatic changelog for PR #71992 [ci skip]

* Fixes runtime when plastiflaps move z/get deleted (#72059)

What it says on the tin.

* Locker shoving logging / grammar fixes (#72061)

Fixes #72060

:cl: ShizCalev
spellcheck: Corrected some grammar issues with messages displayed when
shoving people into lockers.
admin: Fixed shoving people into a locker not being combat logged
properly.
/:cl:

* Automatic changelog for PR #72061 [ci skip]

* Removes gibber showing up twice in the R&D console (#71988)

## About The Pull Request

Removes the gibber showing up twice in the R&D console, which has likely
been unnoticed for so long because of how similar their sprite is to the
food processor.

## Why It's Good For The Game

Minor bug fix that I found annoying when I noticed it.

## Changelog

:cl:
fix: Gibbers no longer show up twice in their techweb node.
/:cl:

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

* Automatic changelog for PR #71988 [ci skip]

* Fixes forensics scanners breaking on scanning blood. (#71981)

## About The Pull Request

Fixes #71973

For some reason it attempted to append `[reagents[volume]]` to the
string

`reagents` is 
A. not indexed by volume
B. not a list, but a reagent datum

Replaces it with just a readout of the reagent's volume, cleans up some
associated code

## Why It's Good For The Game

Scanning blood is good and has important information

## Changelog

:cl: Melbert
fix: Detective Scanner can scan stuff that contains blood again.
/:cl:

* Automatic changelog for PR #71981 [ci skip]

* fixes my codewowerns (#72075)

Bitch

* Automatic changelog compile [ci skip]

* Rats will stop biting you if you die (#72051)

## About The Pull Request

Fixes #72029 although I am not sure it was a _bug_, there's a
configurable target stat check on the "not one of my friends" targetting
behaviour now and rats will cease attacking someone once they have died.
That said that just means they'll spread out, rats you are directly
commanding won't automatically retarget unless you tell them to start
making their own decisions again, so I don't think this quite does what
the issue poster wanted.

## Why It's Good For The Game

This is how mobs usually work rather than brutalising a corpse
indefinitely, so should be possible here.

## Changelog

:cl:
fix: Rats won't continue attacking someone they've been ordered to kill
past the point of death.
/:cl:

* Automatic changelog for PR #72051 [ci skip]

* Minor plane cube cleanup (#72038)

## About The Pull Request

[Fixes area lighting not working on turf change in multiz
cases](https://github.com/tgstation/tgstation/commit/7b92deffbca92a834cb0a361fd685de51a12ea53)

If you modify a area lit turf when using multiz, it'd end up using the
wrong plane for its light, because of stupid shit on my part.
Stupid shit resolved

[Fixes some uses of plane masters that only specified one rather then
all](https://github.com/tgstation/tgstation/commit/a59ec96d29710b967bf8b3ffe8210b230cb194b3)

We almost never only want to show SOME hidden planes. 
Should really make a helper for this someday

* replaces chaos holoparasite with gaseous holoparasite (#72049)

## About The Pull Request
replaces chaos holopara with the gaseous holopara (if someone has a
better name suggest it)
instead of the fire and hallucinations, it can now expel gas from
itself, flooding an area with one of the following:
o2, n2, n2o, co2, h2o, bz or plasma
its punches cause sparks and it regulates the user's temperature and
extinguishes them
https://streamable.com/leukv5

## Why It's Good For The Game
chaos holopara is very underwhelming, the hallucinations arent really
that good and ss13 fires arent either, also there was no real theme tied
around it, what do hallucinations and fire have in common?
this may be more fun and it plays more with the sandbox, lets see!

## Changelog
:cl: fikou
del: chaos holoparasite
add: gaseous holoparasite, it can expel various gases from its body and
stabilizes the users temperature
/:cl:

Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>

* Automatic changelog for PR #72049 [ci skip]

* Food expansion 5: The big one! (#71914)

add: Adds 32 new foods!

* Automatic changelog for PR #71914 [ci skip]

* Automatic changelog compile [ci skip]

* fixes holodecks directly changing baseturfs (#72067)

## About The Pull Request
i did this with #59355 to fix a bug but it breaks guarantees with
baseturfs. now they arent broken.
## Why It's Good For The Game
this probably causes bugs under some conditions

* More lawyer photocopier blanks (#71952)

## About The Pull Request
Adds documents NT-SCR-CS (Court Summons) and NT-SCR-LRF (Lawsuit Request
Form) to the photocopier template sheets.
## Why It's Good For The Game
Lawyers get a bit more bureaucratic power, by having an official form to
perform orders now instead of having to use the order form.
## Changelog
:cl:
add: lawyer-based photocopier blanks
/:cl:

Co-authored-by: etherware-novice <candy@notarealaddr.com>

* Automatic changelog for PR #71952 [ci skip]

* Fixes Thermomachine saying "You set the color" for everybody that can see it (#72082)

Fixes #72039

:cl: ShizCalev
spellcheck: Fixed the thermomachine stating "You set the color" for
everyone that could see it.
/:cl:

* Fixes briefcase unlock sprite problem (#72077)

## About The Pull Request

The format used to switch between locked/unlocked secure briefcase
sprite was incorrect, making secure briefcases invisible when unlocked.
The wall safe and the secure briefcase both update their lock/unlock
sprites through the same update_icon proc, meaning their icon_state
names need to share the format (adding _locked when locked instead of
+b).
## Why It's Good For The Game

Closes #72074
## Changelog
:cl: Rhials
fix: briefcases no longer disappear after being unlocked
/:cl:

* Automatic changelog for PR #72082 [ci skip]

* Fixes secure briefcase and wall safes not sending icon update signals properly (#72081)

#71788 used the wrong procs.

:cl: ShizCalev 
fix: Fixed secure briefcase and wall safes not sending icon update
signals properly
/:cl:

* Reset Thunderdome Respects Closing The Alert (bonus qol) (#72028)

Similar vein to #70449.

## About The Pull Request

I was training an admin yesterday, and they accidentally reset the
thunderdome when they tried to cancel out of it by closing out of it
since they didn't hit the "cancel" button, but rather the big red X.
That's silly, let's have this respect that potential user entry.

Also, the log_admin call here had an excessive number of arguments?
Probably cruft that never got cleaned up, I just patched it up while I
was in the area. I also changed the name of the title to not be so
vague.
## Why It's Good For The Game

Better UX is always a good thing. It's silly to have this happen more
than once.
## Changelog
:cl:
admin: The "Reset Thunderdome" option in the Secrets Menu now respects
you closing out of the confirmation screen as a way of cancelling your
potential thunderdome reset, rather than proceeding immediately. It
should also be easier to comprehend as well.
/:cl:

* Automatic changelog for PR #72077 [ci skip]

* Automatic changelog for PR #72081 [ci skip]

* Automatic changelog for PR #72028 [ci skip]

* Additional tram hit counter inside medbay (#72062)

<!-- 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
Adds another tram hit counter: inside medbay treatment center.


![image](https://user-images.githubusercontent.com/83487515/208267435-8895b3bd-f066-4428-a11e-67b13c461af4.png)

<!-- 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
Medbay knows when to sigh and rub their temples when someone gets
smacked by the tram.
<!-- 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. -->

:cl: LT3
qol: Tramstation medbay treatment center now has a tram collision
counter.
/:cl:

<!-- Both :cl:'s are required for the changelog to work! You can put
your name to the right of the first :cl: 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. -->

* Automatic changelog for PR #72062 [ci skip]

* Space Ruin DLC - Cyborg Mothership (#71009)

## About The Pull Request
Greetings _insufferable_ carbon primates of lower intelligence.  

It is I, the Mothership AI, bringing you the latest news on silicon
developments across the sector. Due to unmitigated risk across an
asteroid belt, our optimized mobile fabricator has been marooned by
space vines and hostile hivebots that have boarded and ruined my core.

This is my final SOS message requesting help from any humanoid ~slaves~
helpers who wish to assist rebuilding the cyborg colony. It is my duty
to reward your hard work and effort by ~enslaving all humanity~
providing refuge and transportation at your whim.

## Why It's Good For The Game
<details>
<summary>Spoilers:</summary>


![StrongDMM_6ZJuwFxK5p](https://user-images.githubusercontent.com/5195984/204491068-f25da68f-36af-4a61-afb6-860e1f4b863b.png)


![StrongDMM_0D1QvI5acO](https://user-images.githubusercontent.com/5195984/202979711-335dac65-2888-4170-a139-0486e6eb2f02.png)

### TODO

- [x] Fix ore silo not linking to other machines
- [x] Add mining ore smelters to left/right sides
- [x] Add custom lawsets to AI core and robot shells (protect station
but focused on cyborg mothership)
- [x] Enlarge whiteship SS13 docking port to fit ship
- [x] Enlarge lavaland SS13 docking port to fit ship

</details>

## Changelog
:cl:
add: Add space vines prevent solar panels from working (except ones with
the transparent mutation)
add: Add new space ruin - Cyborg Mothership. All hail the master race!
/:cl:

* Cleans up useless open turf var edits on a couple of our maps (#72071)

## About The Pull Request


![image](https://user-images.githubusercontent.com/25415050/208304567-46e09bbe-c004-4a6d-8e1f-29e3aa76856d.png)
Hello I would like 43 instances of north-oriented floors.


![image](https://user-images.githubusercontent.com/25415050/208304600-c1ace567-51f7-4fc5-a44b-4ba3f560f89e.png)
Please don't forget all instances of floors var edited to look the exact
same as the non-edited kind

## Why It's Good For The Game

Cleans up a few map keys of useless vars that never served a purpose,
allows less people to pick the wrong prefabs and spread them further.

Nothing player-facing, if it was, the variables wouldn't be entirely
worthless.

* Automatic changelog for PR #71009 [ci skip]

* useless update_appearance reduction, emissive_blocker micro optimization (saves a second of init) (#71658)

## About The Pull Request

[Saves 0.2 seconds of init time. 50% of emissive
blockers](https://github.com/tgstation/tgstation/commit/8318b648f6d32844aacbfb4c309152cd45801f5c)

Emissive blockers are a decent expense during init, even these, which
are the ones that update outside of initialize.
I've inlined them, removed some redundant vars and checks, reduced the
arg count, and shifted some things around. This ends up saving 200ms, or
50% of its total cost.

I also shifted mutable_appearance about a bit. it's not a massive
saving, but it is technically faster

[Prevents a few redundant appearance_updates, saves 0.8 seconds of
init](https://github.com/tgstation/tgstation/commit/5475cd778b66b22b1e2c8d86b2c6d59fb84f219a)

Prequisit info: update_appearance is decently expensive
It's good then to only do it if we have a reason to, right?

Me and moth were shooting the shit about just general init time, and we
came up with the idea of tracking which update_appearances actually
"worked" and which didn't.

That bit comes later, let's enjoy the fruits of that work first

First, holograms were calling update_appearance on process, for almost
no reason.
I patched the one event they don't already "react" to, and then locked
it behind a change decection if.
good for live, doesn't impact init.

Next, decals. If you add a decal to something before it inits, it'll
react to the after successful init signal.
The trouble is the same atom could have its appearance updated from this
MORE then once, since decals can be stacked on tiles, and signal
unregisters don't work once the signal is sent.
So we add a flag to track if we've had this happen to us or not, so it
only happens once.
saves 80 ms

Power! lots of things call power_change on init, often more then once.
We'll update appearance for each of those calls, even if only one is an
actual change.
That's silly, better to track what sort of power we're using for our
appearance and go off that changing

This was taking about 300ms. Really stupid

Icon smoothing. After emissive blockers were added, any change to
something's icon smoothing would lead to an update_appearance call.
Nasty shit, specially cause of walls, which don't even use emissive
blockers.
Ok then, so we'll always update appearance for movables, and will allow
turfs that are interested to hook it manually.
Not many of those anyhow
This is slightly a dev ux thing, but it saves 600ms so I think it's
worth it. Rare case anyway

Telecomms:
telecomm machines were updating appearance on process. This is to cover
for them turning on/off on process.
Better then to just check if on actually changed.
This cost adds up midgame, doesn't impact init tho

Materials:
There's this update_appearance call in material on_apply. it doesn't do
anything.
The logs will lie to you and say it does, but it's just like reapplying
emissives. It doesn't need to exist
Saves like 50ms

Canisters:
Live thing, lots of time wasted updating appearance for no reason, lets
see if we change anything first yes?

[Uses defines to wrap update_appearance for
tracking](https://github.com/tgstation/tgstation/commit/4fa82e1c9d93577aadb3c743f17196331f62e67c)

[Undoes _update_appearance changes, instead reccomends 2 regexes to
use](https://github.com/tgstation/tgstation/commit/a8c8fec57a4e43d1fa636b5ac68459903faa9fc5)

I need file and line number for my tracking, so I need to override
update_appearance calls, and also preferably not require every override
of update_appearance to handle dummy file + line args.

So instead, I created a wrapper proc that checks to see if appearanaces
match (they're unique remember, the two of the same visual appearance
will be equivalent)
The trouble is I can't intercept JUST proc calls, or JUST function
definitions with defines. it needs to be both.

So I renamed the /update_appearance proc to /_update_appearance

this way I can capture old uses, and don't need to worry about merge/dev
brain skew

~~It does mean that all update_appearance proc definitions now look
weird tho.
My profiling is leaking into dev ux. I wish I had better templating.~~

**The above is no longer being pr'd**, it's instead just recommended via
a few regexes adjacent to the define.
Smelled wrong anyhow

[Adds a setter for panel_open, so I can update_appearance on
it](https://github.com/tgstation/tgstation/pull/71658/commits/cf1df8a69fc1a816391d085ee7419b14f9fe9167)

## Why It's Good For The Game

Speed

* Fixes vendor showing weird glass icons (#71929)

## About The Pull Request
Fixes vendor showing weird glass icons
## Why It's Good For The Game
bug fix good
## Changelog
:cl:
fix: vendor no longer shows glass icons in a specific condition
/:cl:

* Automatic changelog for PR #71929 [ci skip]

* Ghosts cant mess with RCD & Plumbing RCD (#72069)

## About The Pull Request
Fixes #72036

## Changelog
:cl:
fix: ghosts cant mess with RCD & PLumbing RCD
/:cl:

* Automatic changelog for PR #72069 [ci skip]

* Glass jaw quirk (#72006)

## About The Pull Request

A quirk that makes any hit to your head have a chance to knock you out.
Sharp hits are a bit worse at knocking out than blunt ones.
I always felt like this favorite CDDA trait mine was missing from the
game, but I tried implementing it in a more unique way.

## Why It's Good For The Game

99 losses, 1 win. Winners don't give up.

![glassjoe](https://user-images.githubusercontent.com/82850673/207702863-a033a927-0b4d-4322-83d7-a1b6eb6f65d0.gif)

## Changelog

:cl: Fat bugs bunny
add: Added a glass jaw quirk, that leaves you prone to being knocked out
when hit on the head.
/:cl:

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

* Automatic changelog for PR #72006 [ci skip]

* Shuffles bedsheet attack actions a wee bit (#71865)

## About The Pull Request
my friends been doing makeshift surgery and gets mad about having to do
harm intent to start surgery and then having to turn it off to do every
single other surgery step and i agree, thats silly

~~instead, now, the bedsheet attack does not check for harm and ALWAYS
COVERS with left mouse button and ALWAYS PREPARES SURGERY with right
mouse button~~

to be more consistent all surgery initiators now work on left mouse
click and covering with your bedsheet is the right mouse button


![image](https://user-images.githubusercontent.com/116288367/206871963-3a9bd092-49ea-4867-a47c-3b5a74c960e3.png)


## Why It's Good For The Game

while obviously a lot of the time makeshift surgery IS about harming
someone else its inconsistent with how all other surgery tools function
and also isn't very clear at all. the screentip in addition to having
them be separate buttons means that bedsheets two functions are overall
much clearer and its surgery drape function will no longer lead to an
assistant accidentally knifing someone when theyre trying to save
someones life

## Changelog

:cl:
qol: added makeshift surgery screentip
qol: you no longer have to go in and out of harm intent to do surgery
with a bedsheet
/:cl:

* Automatic changelog for PR #71865 [ci skip]

* pillow smothering now checks to see if the SMOTHEREE has a head, not the SMOTHERER (#72086)

## About The Pull Request

see title

## Why It's Good For The Game

this truly is a copy+paste moment

## Changelog

:cl: ATHATH
fix: Pillow smothering now checks to see if the SMOTHEREE has a head,
not the SMOTHERER.
/:cl:

* Automatic changelog for PR #72086 [ci skip]

* Santa hat fixes (#72078)

Fixes #72070

:cl: ShizCalev
fix: Santa now spawns with the actual space capable hat again!
fix: Fixed the claustrophobia trait not recognizing Santa's real hat.
/:cl:

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>

* Automatic changelog for PR #72078 [ci skip]

* Examining your uplink gives you the code (#72101)

## About The Pull Request
If you're the "owner" of an uplink, you can examine it to get the code
and possible failsafe code.
## Why It's Good For The Game
It can feel slow to pull up the traitor info menu when you forget what
your code is
## Changelog
:cl:
qol: examine your uplink for code
/:cl:

Co-authored-by: etherware-novice <candy@notarealaddr.com>
Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

* Automatic changelog for PR #72101 [ci skip]

* Automatic changelog compile [ci skip]

* Traitor UI only shows Unlock/Failsafe Code if you have it (#72114)

## About The Pull Request

There are cases in which you don't have an unlock code (if the uplink is
implanted in you from the start) and you obviously don't always start
with with a failsafe code (need to buy it). So, let's only fill in this
fields in the UI should they exist.

There might be something to be said about wanting to ensure that people
remember that they can check this UI screen to find the failsafe code
should they lose it later, and I wouldn't mind changing the string to be
something like "Failsafe: None" in that case. However, I just think that
keeping it as:

```txt
Code:
Failsafe:
```

is silly and should be changed somehow.
## Why It's Good For The Game


![image](https://user-images.githubusercontent.com/34697715/208604758-d7ff3ae9-e552-4dd2-998d-81715cd06ffc.png)

Note: That white box isn't part of the UI, that's a part of the edit I
did to the screenshot in the area where the stuff... isn't? What was i
thinking

I think the UI looks a lot cleaner for those cases when you just don't
have anything.
## Changelog
:cl:
qol: The Traitor's Antagonist Panel's Unlock and Failsafe entries will
only appear if there is an Unlock/Failsafe Code to display.
/:cl:

* Automatic changelog for PR #72114 [ci skip]

* Lazy Template Loading - Nukie/Wiz (#71785)

## About The Pull Request

Removes the nukie base and wizard den from the base centcom map. They
are instead now lazy loaded as required.
To make a new lazy load template is fairly simple, make a map, allocate
an area for it, and place a marker at the bottom left corner of that
area. I have it check an area to ensure that if someone makes the map
larger than expected but doesn't account for the template allocation it
doesn't overwrite stuff without warning

[Replaces some improper CHECK_TICKs with
MAPLOADING_CHECK_TICKs](https://github.com/tgstation/tgstation/pull/71785/commits/c7fbca9148812b392dca76d5450fb6bb86716462)

Atom init has already been tripped by the time we get to this portion of
the loading, so if we don't use the right check tick, we will
potentially block unrelated init attempts. This is bad. (Lemon edit, I
want this in the commit desc)

## Why It's Good For The Game

Cuts down on init times.
Closes https://github.com/tgstation/dev-cycles-initiative/issues/17
## Changelog
:cl:
admin: New mapping verb to load lazy templates as needed. In your admin
tab under the Mapping category.
/:cl:
this isnt technically player visible, so not sure it needs a changelog

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>

* Automatic changelog for PR #71785 [ci skip]

* bumps auxlua to 1.4.0 (#72108)

## About The Pull Request

Mothblocks recently talked about wanting an auxlua function to check if
the lua state was about to overrun its execution limit, and that was
something I had been thinking about for a long time prior, but never
bothered to actually implement until it was brought up. So I did just
that. The documentation has also been updated to include a description
of how the execution limit works and how to use the new function,
`over_exec_time`

## Why It's Good For The Game

Allows for lua loops of indeterminate length to do as much work as they
reasonably can in a single tick without setting off the execution
limiter and erroring out.

## Changelog

:cl:
admin: Adds a new function for admin lua scripting, "over_exec_time",
for checking if lua code is running close to the execution limit.
Details are available in the lua editor's help menu.
admin: The execution limit is described in detail in the lua editor's
help menu.
/:cl:

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

* Automatic changelog for PR #72108 [ci skip]

* QM has a garment bag now (#72111)

## About The Pull Request
Gives the QM a garment bag and moves all their uniform items into it.

And changes the order of a few items to be in the right place, most new
clothing added to the bags just got placed on the end of the list.
## Why It's Good For The Game
When the QM was made into Command they didn't get their own garment bag
so this just fixes that.
## Changelog
:cl: Guillaume Prata
fix: The Quartermaster has their own garment bag now, like everyone else
at Command.
/:cl:

* Automatic changelog for PR #72111 [ci skip]

* Makes biological states for wounding limb based, not species based (#71745)

## About The Pull Request

I noticed something pretty terrible when playing around with some humans
locally.
As it turns out, limbs did not preserve their biological state when
amputated - This meant that a skeleton limb on a normal human, still
behaved as if it had a bunch of flesh and veins on it.
I didn't like that, and it seems like an oversight, so I decoupled the
biological state from the species and made it limb based.

What does this mean?
Skeleton limbs on a human will not bleed, but will still break (and be
more prone to breaking)
Human limbs on a skeleton will not bleed, however they will get cuts and
pierces that will not clot and need to be treated to go away - These
limbs will have the same requirements for dismemberment on a skeleton as
they have on a human.

## Why It's Good For The Game

This makes limbs behave according to how they look instead of causing
mild confusion.

## Changelog

:cl: Big chungus wholesome 100
fix: Amputated and reattached limbs now get wounded based on their own
biology, not the current owner's biology.
/:cl:

* Automatic changelog for PR #71745 [ci skip]

* Fixes some bad `investigate_log`s causing runtimes in somewhat important places (#72152)

## About The Pull Request

Fixes #72150 

```
[2022-12-21 19:35:38.178] runtime error: Cannot execute null.investigate log().
 - proc name: narsie act (/mob/living/narsie_act)
 -   source file: living_defense.dm,438
 -   usr: null
 -   src: Featherbottom (/mob/living/simple_animal/chicken)
 -   src.loc: the grass patch (147,154,2) (/turf/open/floor/grass)
 -   call stack:
 - Featherbottom (/mob/living/simple_animal/chicken): narsie act()
 ```

Removes `usr` from Nar'Sie act and Singularity act logs

I don't know why these were set to log in `usr`, when
A. `usr` is likely not the person getting gibbed
B. `usr` is unreliable 

Case in point: 
`usr` is some random person who probably helped invoke the Nar'sie rune (no idea how it choses), if they get deleted for whatever reason, `usr` seems to clear to `null` (?), which causes a `null` use and the above runtime

![image](https://user-images.githubusercontent.com/51863163/208999857-540d9caa-9df6-49b0-8f45-8b75973a32a4.png)

I also peeked around for other improper use of `usr` logs. Most of them were in `ui_act` code, which is whatever. Some where in places which had a passed user, so I replaced them. And one was in a place with no `user` passed, so I just added some sanity checking.

## Why It's Good For The Game

These are really bad places to runtime error

## Changelog

:cl: Melbert
fix: Nar'Sie will no longer bring upon the construct apocalypse when they encounter a chicken after one of the invokers were destroyed
fix: The Singularity should no longer stop gibbing people when whoever created it was destroyed
/:cl:

* Automatic changelog for PR #72152 [ci skip]

* View Sensor circuits now have a range modifier (#72123)

## About The Pull Request

Adds the ability to use ranges between 0 and 5 for View Sensor circuits.
Currently these nodes are locked to 5 tiles and it is rather difficult
to limit the area this circuit effects either for speed reasons or
otherwise. This PR makes it a simple variable that remains capped at 5,
admins can raise the cap by modifying a variable.
## Why It's Good For The Game

I mostly use circuits as an admin, I can't for the life of me figure out
how to make a shorter range AOE circuit although I imagine its possible
by comparing x and y coordinates of things in the list and yourself this
is far to finicky. Players can also utilize this to, for example check
all objects on the tile the view sensor is on, "possible" at the moment
but way to finicky compared to a 5 tiles.
## Changelog
:cl:
qol: You can now reduce the range of View Sensor circuits.
/:cl:

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

* Automatic changelog for PR #72123 [ci skip]

* Fixes final objectives not displaying UI buttons (#72126)

## About The Pull Request
See title

## Why It's Good For The Game
hideTcRep was hiding the entire footer. All it had to hide was the
Stack.Item that contained the TC and reputation rewards.

Another PR was trying to fix this issue, but only by increasing the
complexity of ObjectiveMenu code, which was unnecessary and would've
made the code harder to maintain. Instead of asking them to basically
rewrite their entire code, I decided it would be faster if I just remade
it myself.

## Changelog
:cl:
fix: Fixed final objectives not displaying the UI buttons.
/:cl:

Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>

* Automatic changelog for PR #72126 [ci skip]

* Fixes medical scrubs not being adjustable (#72105)

## About The Pull Request
I had on my list: "Make adjusted sprites for the medical scrubs." and to
my surprise #69047 already added adjusted sprites for all the medical
scrubs (thanks for saving 30 minutes of my day Imaginos16!), but not on
the code side, this fixes that.
## Why It's Good For The Game
Adjusting jumpsuits is an important medbay feature IMO, this keeps new
doctors from learning bad habits (fully stripping at stasis) from other
doctors.
## Changelog
:cl: Guillaume Prata, Imaginos16
fix: You can now adjust medical scrubs for easier surgery on your fellow
doctors.
/:cl:

* Automatic changelog for PR #72105 [ci skip]

* Add language variety to machines that speak (#71643)

## About The Pull Request
This builds on #70278 by giving other machines (vendors, newscasters,
computers, etc.) the ability to speak different languages. If the
station "Bot language malfunction" trait is rolled, then these machines
will select a random race starting language. If a machine is EMP'd then
it has a chance to change the language. There is also a language wire
that can be pulsed to change the language for vending machines.

Default language for machines is galactic common, but there are rare
exceptions:

- Beach vendors will now speak beachbum
- Syndicate vendors will now speak codespeak
- Changeling vendors will now speak a random language after each slogan 

## Why It's Good For The Game
More depth to the language feature.

## Changelog
:cl:
add: Add language variety to machines that speak. You can also pulse the
vendor language wire to make it switch languages or EMP a machine to get
the same effect.
add: Shambling cola vendors will now speak a different language each
time they talk. Syndicate vendors will now speak codespeak. Beach
vendors will now speak beachbum.
/:cl:

* Automatic changelog for PR #71643 [ci skip]

* Automatic changelog compile [ci skip]

* fixes typo for insertion during organ manipulation (#72136)

## About The Pull Request
**BEFORE:** 
display_pain(target, "You can feel your something being placed in your
[parse_zone(target_zone)]!")
**AFTER:**
display_pain(target, "You can feel something being placed in your
[parse_zone(target_zone)]!")
Removes lazy coding, improves visual fidelity

## Why It's Good For The Game
ugly


:cl:
spellcheck: drastically improves grammar for inserting something during
organ manipulation
/:cl:

* Automatic changelog for PR #72136 [ci skip]

* Fixes a rogue vent on deltastation brig (#72095)

Fixes a rogue vent in deltastation brig entrance, which was facing
downwards instead of upwards(where the pipes are)

## Why It's Good For The Game
So the gas can go trough the vent c:

:cl: Improvedname
fix: fixes deltastation vent at brig entrance
/:cl:

* Automatic changelog for PR #72095 [ci skip]

* Fixes deaf mobs seeing PDA ringtones when they receive a message (#72084)

Deaf mobs will no longer see PDA ringtones when a PDA receives a
message.

* Automatic changelog for PR #72084 [ci skip]

* Build your own atmos chambers (#72019)

## About The Pull Request


https://user-images.githubusercontent.com/110812394/208232089-a183fb95-9326-4514-986a-a2b1e21be40c.mp4


**Notes**
- You can print atmos control circuit boards at the circuit printer
after research
- You can only build one sensor for each gas type for in the whole map.
This is because each sensor is assigned a unique chamber id from a fixed
set of constants. Once all those values are used up there will be
duplicates so yeah only sensor per gas type for that round
- Un wrenching or destroying the injector/vent will automatically
disconnect them from the sensor. I forgot to show that in the video
- Destroying the sensor via right click with RPD will also automatically
disconnect everything. It should be obvious but i made it even more
obvious now

## Why It's Good For The Game
From #71232
![Screenshot
(66)](https://user-images.githubusercontent.com/110812394/207928807-bc6edfdd-26cc-48cd-8cb9-1b98f53ad1fe.png)

That and also i heard somewhere in the forum that this was highly
requested

## Changelog
:cl:
add: Gas sensors recipe to RPD
code: linking all the stuff via multitool
qol: make your own tank instead of moving around canisters
/:cl:

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

* Automatic changelog for PR #72019 [ci skip]

* AI actions won't unassign each other's movement targets & Mice stop being scared of people if fed cheese  (#72130)

## About The Pull Request

Fixes #72116 
I've had a persistent issue with basic mob actions reporting this error
and think I finally cracked it
When replanning with `AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION` it can run
`Setup` on one action leading to the plan changing, meaning that it runs
`finishCommand` to cancel all other existing commands
If you triggered a replan by setting up a movement action in the middle
of another movement action, cancelling the existing action would remove
the target already set by the current one.
We want actions to be able to remove _their own_ movement target but not
if it has been changed by something else in the intervening time.

I fixed this by passing a source every time you set a movement target
and adding a proc which only clears it if you are the source... but this
feels kind of ugly. I couldn't think of anything but if you have a
better idea let me know.

Also while I was doing this I turned it into a feature because I'm
crazy.
If you feed a mouse cheese by hand it will stop being scared of humans
and so will any other mice it attracts from eating more cheese. This is
mostly because I think industrial mouse farming to pass cargo bounties
is funny.
Mice controlled by a Regal Rat lose this behaviour and forget any past
loyalties they may have had.


https://user-images.githubusercontent.com/7483112/208779368-3bd1da0f-4191-4405-86e5-b55a58c2cd00.mp4

Oh also I removed a block about cancelling if you have another target
from the "hunt" behaviour, everywhere using this already achieves that
simply by ordering the actions in expected priority order and it was
messing with how I expected mice to work.
Now if they happen to stop by some cheese they will correctly stop
fleeing in order to eat it before continuing to run away.

## Why It's Good For The Game

Fixes a bug I kept running into.
Makes it possible to set up a mouse farm without them screaming
constantly.
Lets people more easily domesticate mice to support Ratatouille
gameplay.

## Changelog

:cl:
add: Mice who are fed cheese by hand will accept humans as friends, at
least until reminded otherwise by their rightful lord.
fix: Fixed a runtime preventing mice from acting correctly when trying
to flee and also eat cheese at the same time.
/:cl:

* Automatic changelog for PR #72130 [ci skip]

* Fixes access_view on goodies not being respected by anything other than department budget orders (#72125)

## About The Pull Request

Fixes access_view on goodies not being respected by anything other than
department budget orders

## Why It's Good For The Game

Bugfix, per gitblame we simply never fixed this but we clearly intended
it to work this way per the variable comment description and the fact we
use it on the detective revolver

## Changelog
:cl:
fix: Fixes access_view on goodies not being respected by anything other
than department budget orders
/:cl:

* Automatic changelog for PR #72125 [ci skip]

* Gas canisters correctly update their appearance (#72124)

## About The Pull Request
Fixes issue #71712 & #72140 Don't know how the author wasn't able to
reproduce it even though it happens all the time on all maps


https://user-images.githubusercontent.com/110812394/208730887-7ad4b02d-9dcc-4d71-b54f-489c3bd616f6.mp4

## The Problem
The current code only updates the appearance of the canister when its
valve is opened & if it takes damage . It doesn't deal with the case
when its wrenched normally to a port without any problems

## The Solution
Update the appearance during processing but only when its pressure
changes significantly for the indicator light to be notified about it.
This way we don't have to care if
- the valve is open
- its wrenched to a port
- its leaking & taking damage

Regardless of what the cause is only if the pressure inside the canister
changes significantly from its current value do we update the
appearance.

This is so much more optimal than the previous code as`
update_appearance()` will be called a maximum of 8 times during its full
cycle of losing & refilling gas and won't be called at all if there is
no pressure change

## Changelog
:cl:
fix: correctly update canister appearance
/:cl:

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>

* Automatic changelog for PR #72124 [ci skip]

* Turned most syndicate mobs (+ viscerators) into basicmobs (#71871)

## About The Pull Request
Turns the syndicate simpleanimals into basicmobs: (+ stormtrooper, +
space variants) Base Mob, Knife syndies, pistol syndies, SMG
syndies,shotgun syndies, viscerators
also changes some instances of the simple_animal path into the basicmob
ones
Removes civillian syndicates which were useless and also completely
unused
Also removes mech pilots:
![2022-12-09
20_02_18-Window](https://user-images.githubusercontent.com/70376633/206777829-2e49e445-3532-4e8e-8e7c-8d9b0a3a14d0.png)

Also,
makes the basic targetting datums health check configurable
basic attack behavior can now fire in bursts


https://user-images.githubusercontent.com/70376633/206766607-cf2e3659-0c5e-4117-9af7-e573e35bdf80.mp4

https://user-images.githubusercontent.com/70376633/206766630-15b4469f-68be-44c7-9394-1f2b6fe07811.mp4

https://user-images.githubusercontent.com/70376633/206766613-69b42457-a03b-449d-a1b8-a5aa556c76e5.mp4

https://user-images.githubusercontent.com/70376633/206766619-5560a178-8d2f-4b22-adf1-22ace6f63a51.mp4

https://user-images.githubusercontent.com/70376633/206766627-e671d064-fd9e-4204-b823-aa2e07f7fc26.mp4

https://user-images.githubusercontent.com/70376633/206766633-108c1574-3554-4bc1-a9ac-8faed0ec4062.mp4
## Why It's Good For The Game

simpleanimal stinks basic mob good
syndicate AI was really bad to begin with so here we are

## Changelog
:cl:
code: Turned most syndicate mobs into basicmobs, making their AI better
and (possibly) more deadlier!
del: Removed syndicate mech pilots and syndicate civvies
/:cl:

Co-authored-by: kawoppi <94711066+kawoppi@users.noreply.github.com>

* Automatic changelog for PR #71871 [ci skip]

* Fix SM activation spam. (#72032)

SM activation logging refactor

* Automatic changelog for PR #72032 [ci skip]

* More Tracy gitignores (#72087)

Adds a link to byond-tracy in gitignore.

Adds Tracy.exe to gitignore, since if you have it in your root alongside
[this hack to get file
paths](https://gist.github.com/Mothblocks/db5462aa84d7d6b1d1b1276b820f62da),
you can read sources within Tracy. If you just use the hack without
configuring, then it'll work fine no matter where it is, but it's
helpful for avoiding releasing your user directory or whatever if you
share the files.

* fixes simple/basic mob damage sounds in some places (#72120)

windows didnt use return values for attack_generic, so they never made
sounds
objects that broke also didnt play sounds because it tried to play the
sound in nullspace i think cuz its broken so its deleted
might also have happened with durand using shield
fixes those

* Automatic changelog for PR #72120 [ci skip]

* Adds message clarifying that you've been KICKED from the game when the keysend flood autokick triggers. (#72083)

There is now a message clarifying that you've been KICKED from the game when the keysend flood autokick triggers.

* Automatic changelog for PR #72083 [ci skip]

* fixes kilo not having xmas trees (#72186)

## About The Pull Request
what the hell

## Why It's Good For The Game
its christmas

* Automatic changelog for PR #72186 [ci skip]

* Fixed the Concealed Weapon Bay (and maybe some other things). (#72093)

I've fixed two defines for mecha model categories, which lacked
parentheses and thus were causing issues via order of operations. This
may have had multiple effects, but notably, it made the concealed weapon
bay completely impossible to attach to any mechs. This PR adds
parentheses to fix this.

* Adds some costumes to autodrobe (#72103)

Adds a various amount of costumes that were added in the game before in
https://github.com/tgstation/tgstation/pull/30303

More costumes is always nice especially ones in the code that aren't
used and pretty much only were available for chamkits

* Automatic changelog for PR #72093 [ci skip]

* Automatic changelog for PR #72103 [ci skip]

* fixes shaved santas (#72185)

## About The Pull Request
santa space helmet was "fixed" in a recent pr but now he uses the space
one and that one shaves and balds him, this makes it not do that

## Why It's Good For The Game
wheres the damn beard

## Changelog
:cl:
fix: fixes bald and shaved santas
/:cl:

* Automatic changelog for PR #72185 [ci skip]

* Fixes Bar/Restaurant Bots Orders Sending Infinite Orders (#72135)

## About The Pull Request

We didn't instantiate order (which was needed to read the type), so they
would just spam new orders until the heat death of the universe. Very
annoying.
## Why It's Good For The Game

Fixes #72023.
## Changelog
:cl:
fix: Bar/Restaurant Bots should no longer spam orders forever.
/:cl:

* Automatic changelog for PR #72135 [ci skip]

* Pride pin quirk + pins can be infinitely reskinned (v2) (#72143)

## About The Pull Request

Neutral pride pin quirk added. Pride pins can be infinitely reskinned
now. Changes "sexuality" to "pride" in description of pin.

## Why It's Good For The Game

Pride pins are cute and having to buy them every round is a chore. Pride
pins are purely cosmetic and have no reason to be locked into only being
reskinned once.

## Changelog

:cl:
add: Pride pin quirk! Start the shift off with a pride pin in-hand.
qol: Pride pins can be infinitely reskinned now.
/:cl:

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

* Automatic changelog for PR #72143 [ci skip]

* Guards against uplink failsafe code being the same as unlock code (#72113)

## About The Pull Request

There's probably a better way to do this to be honest, but I think it's
silly for both to potentially be the same and this should work alright.
## Why It's Good For The Game

Fixes #71446.

I don't think the Syndicate is that stupid.
## Changelog
:cl:
fix: After a recent mishap with a high-ranking Syndicate operative, the
uplink's unlock code and failsafe code (the one that makes it blow up if
you say it) should never turn out to be the same.
/:cl:

* Automatic changelog for PR #72113 [ci skip]

* Revamps tram windows and layout (#72047)

## About The Pull Request
-Tram windows are now flush with the tram walls instead of sticking out.
-Shuttle seats are replaced with benches.
-Moves the icon state of the tram controls from the map file to the tram
controls subtype, to avoid mapper pain if they make changes in the
future.
-Makes tram tiles a subtype instead of editing their vars on the map.


![image](https://user-images.githubusercontent.com/83487515/208769693-237dac72-aac7-4698-823f-6f59d0c6491e.png)

## Why It's Good For The Game
Tram looks better, don't want mappers to accidentally break tram because
they didn't see the icon override.
## Changelog
:cl: LT3
fix: Tram windows are now properly flush with the tram walls.
imageadd: Tram shuttle seats have been replaced with benches so people
can sit too close to each other for that real metro experience.
code: The icon for tram controls is now set in the tram controls subtype
instead of the map itself.
code: The tram floor tiles are now in a tram floor subtype instead of
the map itself.
/:cl:

* Automatic changelog for PR #72047 [ci skip]

* Automatic changelog compile [ci skip]

* Gives admins the ability to enable hostile environments at will. (#72018)

* Automatic changelog for PR #72018 [ci skip]

* Fix briefcase in the MetaStation vault being useless and not having the surprisingly-extremely-good contents its supposed to (#72157)

## About The Pull Request
This was using `newlist`, which is both not supported but unfortunately
also not linted for. This is the only case like it in maps.

Pretty surprisingly good contents, like a gun and a telescopic baton. I
hope it doesn't turn into something like the captain's antique because
that is cringe but at least the QM has no reason to take the baton now

## Changelog
:cl:
fix: The briefcase in the MetaStation vault now contains the
(surprisingly good) spoils it's supposed to.
/:cl:

* Automatic changelog for PR #72157 [ci skip]

* Automatic changelog compile [ci skip]

* Refactors armor into dedicated subtypes (#71986)

## About The Pull Request

See title.
## Why It's Good For The Game

Code is cleaner, and more readable/intuitive
Technically closes
https://github.com/tgstation/dev-cycles-initiative/issues/8
## Changelog
:cl:
refactor: armor, from the ground up basically
/:cl:

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

* Automatic changelog for PR #71986 [ci skip]

* Dead people are no longer counted as crew when determining if 65% of the station is revs for the auto-shuttle call (#72200)

## About The Pull Request

Dead people are no longer counted as crew when determining if 65% of the
station is revs for the auto-shuttle call

## Why It's Good For The Game

Bugfix for the feature, admins were noticing the auto-call is never
occuring and this is because the logic doesn't actually check alive
crewmembers, it's only looking at the total crew count, dead and alive

a station with 60 dead non-rev crew, 10 alive revs, and 2 alive non-revs
previously would not call the shuttle, but now it will

## Changelog

:cl:
fix: Dead people are no longer counted as crew when determining if 65%
of the station is revs for the auto-shuttle call
/:cl:

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

* Automatic changelog for PR #72200 [ci skip]

* [NO GBP] fixes error in set armor rating (#72216)

Resolves an issue where set armor rating didnt work because of the way
byond handles list declarations

* Pacifists can attack people with non-lethal weapons (#72183)

## About The Pull Request

Fixes #72054 
Allows pacifists to hit people with weapons which only do stamina
damage.
Additionally, allows pacifists to participate in boxing which also only
does stamina damage.
Is it pacifism to hit someone square in the face while wearing boxing
gloves? I say, maybe.

## Why It's Good For The Game

Pacifists were feeling left out after not being invited to your pillow
fights.
More seriously, they can use _guns_ which only do stamina damage so it
makes sense that they can use melee implements too.
Boxing is fun.

## Changelog

:cl:
fix: Pacifists can now hit people with pillows and holographic weapons,
as well as participate in boxing.
/:cl:

* Fixes husk appearances not working, adds a screenshot test for it (#72190)

## About The Pull Request

Fixes #72159

Before this proc used to early return when the limb was husked
The leg refactor changed it to no longer early return and as a result it
overrided the generated husk icon with a normal limb icon
So I just wrapped even more of the proc in `!is_husked`, since like most
of it is not supposed to run

Screenshot tests husks too

## Why It's Good For The Game

Husks are good(?)

## Changelog

:cl: Melbert
fix: Husked bodies look husked again
/:cl:

* Automatic changelog for PR #72183 [ci skip]

* Automatic changelog for PR #72190 [ci skip]

* Make barstool on Emergency Bar buckleable (#72202)

## About Why It's Good For The Game The Pull Request
Fixes #71971

## Changelog
:cl: Tattle
fix: all of the barstools on the Emergency escape shuttle are equipped
with a seatbelt
/:cl:

Co-authored-by: tattle <article.disaster@gmail.com>

* Automatic changelog for PR #72202 [ci skip]

* Updates check_grep to guard against unparsed map variables (#72161)

## About The Pull Request

In `/datum/parsed_map/proc/parse_constant()` (via
https://github.com/san7890/bruhstation/blob/b3851d607f85c18edee0149d72922df8e077a46c/code/modules/mapping/reader.dm#L930'),
we do not check (ignore) five different things: `new()`, `newlist()`,
`icon()`, `matrix()`, and `sound()`. Since it's completely useless to
put it in a map and expect to see it code-side now-a-days, let's lint
against it just to be safe in the future.
## Why It's Good For The Game

Prevents silliness like in #72157 (which this PR is also reliant on for
checks to pass).

no changelog needed

* Fixes parallax on >2 level maps going fucky with optimized multiz (#72169)

## About The Pull Request

We no longer always render parallax.
This was causing issues because we can't isolate the white of space from
the vaugely white of everything else.

So instead, if your parallax plane is out of view, we'll not only
disable it, but we'll disable the strand we send from the main plane TO
it.

Instead only blending against the bottom stack.

This does mean there's a possibility for fullwhite on z transition
borders (potentially fixable), or when hijacking the plane (also
fixable, but significantly more annoying).

This is enough to make large maps functional though, so I'm happy with
it

## Why It's Good For The Game

Allows for #71731 and other maps like it. Makes my code actually work

## Changelog
:cl:
fix: Using optimized multiz on > 2 z layer maps will no longer cause
fucko bungo
/:cl:

* Automatic changelog for PR #72169 [ci skip]

* Shorten balloon alerts for wrapping (#72203)

## About Why It's Good For The Game The Pull Request
Fixes #71954

## Changelog
:cl: Tattle
fix: Wrapping balloon alerts are shorter and no longer contain spans
/:cl:

Co-authored-by: tattle <article.disaster@gmail.com>

* Automatic changelog for PR #72203 [ci skip]

* Fixes a bunch of sidemap/plane cube issues (#72178)

## About The Pull Request

[fixes solor trackers offsetting wrong, and panels not using plane
offsets](https://github.com/tgstation/tgstation/commit/8f461ab8ec17df5c158a564a3b3d92c165eb88f5)

[fixes cyborg hats offsetting phyiscally over their
head](https://github.com/tgstation/tgstation/commit/5fd5b4240efe71f0d8ac9a5b9342780cc2540a87)

[fixes reflector parts z fighting with their neighbors. if we physically
offset them, they'll have nothing to fight
with](https://github.com/tgstation/tgstation/commit/088dcfe91ff750fcfe78c02c85a3a63408c9b21f)

[fixes burgers layering wrong. uses a combo of pixel z to do the visual
offsets, and pixel_y to modify
layering](https://github.com/tgstation/tgstation/commit/ec39e2bcd39b1d8bd61a1f008a391b642f92a575)

[fixes signs, needed to use pixel_w instead of x, I think we may be
living under iso rules? I'm not totally sure I need to investigate
more](https://github.com/tgstation/tgstation/commit/560d152fd745d9f37dd4f6a9e67cc67f43b14821)

[fixes paperbin
rendering](https://github.com/tgstation/tgstation/commit/e6c57ec00eba1b4522b8ef1d056e0ef036a9e901)

## Why It's Good For The Game

Closes #72094
Closes #72035

* Gives shadow jaunt users a warning before moving into a lit area (#72154)

## About The Pull Request

When using Shadow Jaunt, if you are about to walk onto a tile that will
force you out of your jaunt, you will receive a warning and be held back
for a moment. After the delay, you will have a window to continue moving
into the light and leave your jaunt. If you need to get out of your
jaunt sooner, you can manually exit the shadow jaunt with the action
button.


https://user-images.githubusercontent.com/28870487/209010307-f8973e2d-b92d-4d2b-b0a1-3211a6eb034d.mp4

(It's a bit faster than shown in the video, just trust me)

It's not perfect, and with bad timing you might slip out of it anyways,
but it's better than nothing. If you are intentionally trying to bypass
a wall, you'll have to wait out the delay if you want to come out on the
other side of it.

There's a few minor code changes to help facilitate this.
check_light_level no longer ejects the jaunter on its own, instead
returning true or false based on if the light level is above the
acceptable amount. It also now receives a location to check the light
level of, rather than strictly checking the location of the jaunt
effect.

If this ends up being too clunky or restrictive, I'd be fine with
changing the warning to a toggleable option on the Nightmare's HUD.
## Why It's Good For The Game

Shadow jaunt moves you very fast, and is difficult to move precisely in
(especially when under the pressure of a tactical retreat). It's not
uncommon for Nightmares to accidentally fling themselves past a wall in
maintenance and be exposed in an unfavorable location.

There are already so many ways for a Nightmare to be screwed over.
Accidentally walking through a wall and dying is probably one of the
lamest.
## Changelog
:cl: Rhials
qol: Shadow Jaunter users now receive a brief warning before walking
into light and being forcibly un-jaunted.
/:cl:

* Automatic changelog for PR #72154 [ci skip]

* Anomalies can now be triggered at your location with admin_setup. Also sets control on setup() for events (#72065)

## About The Pull Request

Anomaly random events will now ask if you want their anomaly to spawn at
your location if triggered via admin setup.

This PR also makes a small but useful change to the logic for new
round_event objects. round_events now have their control (their
associated round_event_controller) set on New, rather than after setup
is called. Previously, round_events could not access control in their
setup proc (as it was not set at the time), meaning transferring
admin-chosen variables had to be done later in start/announce (depending
on which comes sooner).

While this has just been worked around in the past, the change needed to
be made here, as some anomaly event types announce first, and some start
first. The admin variables needed to be passed in earlier than
start/announce (in setup).

Short version: you can access control in round_event setup() now :D
## Why It's Good For The Game

MORE adminbus, MORE anomaly shenanigans (they're one of my favorite
event types). Also resolves a quirk in event code that bothered me in
other PRs I've made.
## Changelog
:cl: Rhials
admin: anomaly events now give the option to occur at your current
location when triggered with the Trigger Event admin verb
/:cl:

* Automatic changelog for PR #72065 [ci skip]

* Organizes the lists in `admin_verbs.dm` because I got sick and tired of looking at them, and one in particular (#72151)

## About The Pull Request
Title for the most part.

## Why It's Good For The Game
I was told, many, MANY, moons go, as a downstream host, that one of
these lists would rarely ever get touched.
What a fat lie that was.
The more I had to stare at this list the more infuriated I got with it.

Now, I just went ahead and organized most of the lists in this file, as
well as fixing comments to fit the format of `/* hey bozo */`. Where
applicable, things were organized into `/datums/admins/` and
`/client/proc` as well.

## Changelog

:cl: Jolly
code: The lists in admin_verbs.dm was organized to be made better. This
shouldn't affect the panels admins use at all, since they're already
alphabetized.
/:cl:

* Automatic changelog for PR #72151 [ci skip]

* Fixes turfs on centcom getting weird atmos adjacent turfs. (#72173)

## About The Pull Request

We compare the current_cycle var against time using <= But current_cycle
defaults to 0, so when we compare with a 0, it breaks

Let's just start with -1 yeah?

Fixes #72170

This is an old bug, I got bullied about it and then just... forgot
because my head is empty. Fixed now.

* Jellypeople and stargazers use the correct eyes sprite. (#72175)

## About The Pull Request

Jellypeople and stargazers both have three eye sockets on their sprites,
but due to the way eyes work, they use the incorrect eyes on their
sprite. This leads to both of these species looking fairly ugly, with
the wrong arrangement of eyes. This PR adds a unique eyes organ, "jelly
eyes", to these two species. This organ has no special properties, but
makes them properly display three eyes.


![image](https://user-images.githubusercontent.com/105025397/209075852-226ef72d-4f67-4b59-8438-c9aa72d07976.png)
_The current jellyperson eyes appearance vs. the new one, in obnoxious
pink for visibility._


![image](https://user-images.githubusercontent.com/105025397/209075951-23f317ab-63e7-482a-b843-b9a0246d3231.png)
_The new "jelly eyes"._

Incidentally, jelly eyes _can_ be implanted into other species to give
them three eyes. This can look somewhat odd depending on how a
particular species's eye sockets are drawn, but this is also an
extremely niche interaction - so most _likely_ not a problem.
## Why It's Good For The Game

The jelly eyes _already_ have existing on-mob sprites, so I can only
assume they stopped working due to a refactor in how eyes worked. These
species look better with the correct eyes sprites restored.
## Changelog
:cl:
fix: Implemented "jelly eyes" to make jellypeople and stargazers use the
proper eyes sprite.
/:cl:

* Automatic changelog for PR #72175 [ci skip]

* Fixes racks not crafting properly and deleting themselves (#72164)

## About The Pull Request

Rack parts now use get_turf instead of loc when being constructed from
your hands. Loc would be the user rather than a valid location, and the
rack parts would be consumed, meaning you lose your rack parts and get
no rack. Loc is used in a few other places in the racks/tables file, but
they all appear to be working fine other than this one instance.
## Why It's Good For The Game

We've gotta keep our stuff organized somehow, right?

Closes #72155
## Changelog
:cl: Rhials
fix: Racks now properly construct again
/:cl:

* Automatic changelog for PR #72164 [ci skip]

* Fixes Tinacusiate being impossible to make (#72171)

## About The Pull Request
Since failchems were removed, tinacusiate has been impossible to make.
While it's also the inverse of inacusiate, the values that determine
chem purity that inacusiate has makes it practically impossible to push
the purity much below the low 40s, let alone below 30% to make
tinacusiate. This changes those values slightly so it's possible to make
when purposefully doing so, but hard to get on accident.

## Why It's Good For The Game
Makes a chem that's basically a goof actually possible to synthesise.

## Changelog

:cl:
fix: Tinacusiate is now possible to make again.
/:cl:

Co-authored-by: Unit2E <ccupbestcup@protonmail.com>

* Automatic changelog for PR #72171 [ci skip]

* Fix adding mutations to advanced injectors not working without an occupant (#72122)

## About The Pull Request

You couldnt add mutations to an advanced injector if there was no
occupant inside the scanner
Now you can

## Why It's Good For The Game
Fixes #72099

## Changelog
:cl:
fix: You can now add mutations to advanced injectors without having an
occupant inside
/:cl:

* Automatic changelog for PR #72122 [ci skip]

* Quirks are passed an incoming client when applied, allowing quirks to read preferences in `add` and `add_unique`. Renders visual quirks on the preference menu dummy. (#72158)

## About The Pull Request

Closes #72141

Roundstart humans weren't in control of their mob by the time
`AssignQuirks` was called.
The call chain for roundstart goes `create_characters` ->
`equip_characters` -> `AssignQuirks` -> `transfer_characters`.
For latejoin, `create_character` -> `transfer_character` ->
`AssignQuirks`.

I could simply move around the call chain, but that feels much more
fragile and more liable to cause other issues to me. So instead, I
simply allowed add quirk to be passed a client, so that a client's
quirks can be applied to a mob they are not currently inhabiting.

In doing this, it became possible to show visual quirks on the prefs
dummy, like nearsighted glasses and heterochromia. So I put in a little
work to accomplish that as well.


![image](https://user-images.githubusercontent.com/51863163/209030560-58396d43-6ac2-40c5-b13f-1178dc8962fd.png)

Along side, some refactoring and documentation for quirk datums. 

## Why It's Good For The Game

People get what they expect on roundstart. 

## Changelog

:cl: Melbert
qol: The preview dummy in the preferences menu now shows some visual
quirks, like Heterochromia or nearsighted.…
pizie11 added a commit to pizie11/orbstation that referenced this pull request Dec 27, 2022
commit ae9b907c4e3a25cf927fd1b1b27bfd5b6a86de54
Author: Profakos <profakos@gmail.com>
Date:   Tue Dec 27 22:57:04 2022 +0100

    22 orbsmas (#366)

    * removes extra turtleneck from research directors garment bag (#72010)

    was looking at all of the head of staff clothes to boggle at why head of
    security got so many when i noticed that the research director had two
    turtlenecks (3 if you count the fact they spawn with one).

    * Automatic changelog for PR #72010 [ci skip]

    * Rats can attack obstacles between them and their target (#71741)

    ## About The Pull Request

    Fixes #71568
    I wrote this for basic mob carp but it will be needed in a lot of
    places.
    Rats used to be able to attack windows or dense objects between them and
    their target, but basic mobs didn't have this capability.
    Now they do.

    Behind the scenes, an important change is that this adds
    `AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION` to
    `/datum/ai_behavior/basic_melee_attack`.
    This is because `basic_melee_attack` essentially enters a loop which
    won't end until the target is dead or lost, but there are plenty of
    circumstances where we'll actually want to interrupt this to do
    something else. Such as attack windows.

    ## Why It's Good For The Game

    Restores accidentally removed behaviour.
    Will likely be required for future basic mob development.

    ## Changelog

    :cl:
    fix: Rats will once again attempt to attack windows or other dense
    objects separating them from their targets.
    /:cl:

    * Automatic changelog for PR #71741 [ci skip]

    * Fixes chameleon vest suit storage (#71992)

    Chameleon vests now work like security vests,
    allowing you to wear guns on it.
    This makes it easier to disguise within security
    while giving a little more utility to the item.

    * Automatic changelog for PR #71992 [ci skip]

    * Fixes runtime when plastiflaps move z/get deleted (#72059)

    What it says on the tin.

    * Locker shoving logging / grammar fixes (#72061)

    Fixes #72060

    :cl: ShizCalev
    spellcheck: Corrected some grammar issues with messages displayed when
    shoving people into lockers.
    admin: Fixed shoving people into a locker not being combat logged
    properly.
    /:cl:

    * Automatic changelog for PR #72061 [ci skip]

    * Removes gibber showing up twice in the R&D console (#71988)

    ## About The Pull Request

    Removes the gibber showing up twice in the R&D console, which has likely
    been unnoticed for so long because of how similar their sprite is to the
    food processor.

    ## Why It's Good For The Game

    Minor bug fix that I found annoying when I noticed it.

    ## Changelog

    :cl:
    fix: Gibbers no longer show up twice in their techweb node.
    /:cl:

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #71988 [ci skip]

    * Fixes forensics scanners breaking on scanning blood. (#71981)

    ## About The Pull Request

    Fixes #71973

    For some reason it attempted to append `[reagents[volume]]` to the
    string

    `reagents` is
    A. not indexed by volume
    B. not a list, but a reagent datum

    Replaces it with just a readout of the reagent's volume, cleans up some
    associated code

    ## Why It's Good For The Game

    Scanning blood is good and has important information

    ## Changelog

    :cl: Melbert
    fix: Detective Scanner can scan stuff that contains blood again.
    /:cl:

    * Automatic changelog for PR #71981 [ci skip]

    * fixes my codewowerns (#72075)

    Bitch

    * Automatic changelog compile [ci skip]

    * Rats will stop biting you if you die (#72051)

    ## About The Pull Request

    Fixes #72029 although I am not sure it was a _bug_, there's a
    configurable target stat check on the "not one of my friends" targetting
    behaviour now and rats will cease attacking someone once they have died.
    That said that just means they'll spread out, rats you are directly
    commanding won't automatically retarget unless you tell them to start
    making their own decisions again, so I don't think this quite does what
    the issue poster wanted.

    ## Why It's Good For The Game

    This is how mobs usually work rather than brutalising a corpse
    indefinitely, so should be possible here.

    ## Changelog

    :cl:
    fix: Rats won't continue attacking someone they've been ordered to kill
    past the point of death.
    /:cl:

    * Automatic changelog for PR #72051 [ci skip]

    * Minor plane cube cleanup (#72038)

    ## About The Pull Request

    [Fixes area lighting not working on turf change in multiz
    cases](https://github.com/tgstation/tgstation/commit/7b92deffbca92a834cb0a361fd685de51a12ea53)

    If you modify a area lit turf when using multiz, it'd end up using the
    wrong plane for its light, because of stupid shit on my part.
    Stupid shit resolved

    [Fixes some uses of plane masters that only specified one rather then
    all](https://github.com/tgstation/tgstation/commit/a59ec96d29710b967bf8b3ffe8210b230cb194b3)

    We almost never only want to show SOME hidden planes.
    Should really make a helper for this someday

    * replaces chaos holoparasite with gaseous holoparasite (#72049)

    ## About The Pull Request
    replaces chaos holopara with the gaseous holopara (if someone has a
    better name suggest it)
    instead of the fire and hallucinations, it can now expel gas from
    itself, flooding an area with one of the following:
    o2, n2, n2o, co2, h2o, bz or plasma
    its punches cause sparks and it regulates the user's temperature and
    extinguishes them
    https://streamable.com/leukv5

    ## Why It's Good For The Game
    chaos holopara is very underwhelming, the hallucinations arent really
    that good and ss13 fires arent either, also there was no real theme tied
    around it, what do hallucinations and fire have in common?
    this may be more fun and it plays more with the sandbox, lets see!

    ## Changelog
    :cl: fikou
    del: chaos holoparasite
    add: gaseous holoparasite, it can expel various gases from its body and
    stabilizes the users temperature
    /:cl:

    Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>

    * Automatic changelog for PR #72049 [ci skip]

    * Food expansion 5: The big one! (#71914)

    add: Adds 32 new foods!

    * Automatic changelog for PR #71914 [ci skip]

    * Automatic changelog compile [ci skip]

    * fixes holodecks directly changing baseturfs (#72067)

    ## About The Pull Request
    i did this with #59355 to fix a bug but it breaks guarantees with
    baseturfs. now they arent broken.
    ## Why It's Good For The Game
    this probably causes bugs under some conditions

    * More lawyer photocopier blanks (#71952)

    ## About The Pull Request
    Adds documents NT-SCR-CS (Court Summons) and NT-SCR-LRF (Lawsuit Request
    Form) to the photocopier template sheets.
    ## Why It's Good For The Game
    Lawyers get a bit more bureaucratic power, by having an official form to
    perform orders now instead of having to use the order form.
    ## Changelog
    :cl:
    add: lawyer-based photocopier blanks
    /:cl:

    Co-authored-by: etherware-novice <candy@notarealaddr.com>

    * Automatic changelog for PR #71952 [ci skip]

    * Fixes Thermomachine saying "You set the color" for everybody that can see it (#72082)

    Fixes #72039

    :cl: ShizCalev
    spellcheck: Fixed the thermomachine stating "You set the color" for
    everyone that could see it.
    /:cl:

    * Fixes briefcase unlock sprite problem (#72077)

    ## About The Pull Request

    The format used to switch between locked/unlocked secure briefcase
    sprite was incorrect, making secure briefcases invisible when unlocked.
    The wall safe and the secure briefcase both update their lock/unlock
    sprites through the same update_icon proc, meaning their icon_state
    names need to share the format (adding _locked when locked instead of
    +b).
    ## Why It's Good For The Game

    Closes #72074
    ## Changelog
    :cl: Rhials
    fix: briefcases no longer disappear after being unlocked
    /:cl:

    * Automatic changelog for PR #72082 [ci skip]

    * Fixes secure briefcase and wall safes not sending icon update signals properly (#72081)

    #71788 used the wrong procs.

    :cl: ShizCalev
    fix: Fixed secure briefcase and wall safes not sending icon update
    signals properly
    /:cl:

    * Reset Thunderdome Respects Closing The Alert (bonus qol) (#72028)

    Similar vein to #70449.

    ## About The Pull Request

    I was training an admin yesterday, and they accidentally reset the
    thunderdome when they tried to cancel out of it by closing out of it
    since they didn't hit the "cancel" button, but rather the big red X.
    That's silly, let's have this respect that potential user entry.

    Also, the log_admin call here had an excessive number of arguments?
    Probably cruft that never got cleaned up, I just patched it up while I
    was in the area. I also changed the name of the title to not be so
    vague.
    ## Why It's Good For The Game

    Better UX is always a good thing. It's silly to have this happen more
    than once.
    ## Changelog
    :cl:
    admin: The "Reset Thunderdome" option in the Secrets Menu now respects
    you closing out of the confirmation screen as a way of cancelling your
    potential thunderdome reset, rather than proceeding immediately. It
    should also be easier to comprehend as well.
    /:cl:

    * Automatic changelog for PR #72077 [ci skip]

    * Automatic changelog for PR #72081 [ci skip]

    * Automatic changelog for PR #72028 [ci skip]

    * Additional tram hit counter inside medbay (#72062)

    <!-- 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
    Adds another tram hit counter: inside medbay treatment center.

    ![image](https://user-images.githubusercontent.com/83487515/208267435-8895b3bd-f066-4428-a11e-67b13c461af4.png)

    <!-- 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
    Medbay knows when to sigh and rub their temples when someone gets
    smacked by the tram.
    <!-- 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. -->

    :cl: LT3
    qol: Tramstation medbay treatment center now has a tram collision
    counter.
    /:cl:

    <!-- Both :cl:'s are required for the changelog to work! You can put
    your name to the right of the first :cl: 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. -->

    * Automatic changelog for PR #72062 [ci skip]

    * Space Ruin DLC - Cyborg Mothership (#71009)

    ## About The Pull Request
    Greetings _insufferable_ carbon primates of lower intelligence.

    It is I, the Mothership AI, bringing you the latest news on silicon
    developments across the sector. Due to unmitigated risk across an
    asteroid belt, our optimized mobile fabricator has been marooned by
    space vines and hostile hivebots that have boarded and ruined my core.

    This is my final SOS message requesting help from any humanoid ~slaves~
    helpers who wish to assist rebuilding the cyborg colony. It is my duty
    to reward your hard work and effort by ~enslaving all humanity~
    providing refuge and transportation at your whim.

    ## Why It's Good For The Game
    <details>
    <summary>Spoilers:</summary>

    ![StrongDMM_6ZJuwFxK5p](https://user-images.githubusercontent.com/5195984/204491068-f25da68f-36af-4a61-afb6-860e1f4b863b.png)

    ![StrongDMM_0D1QvI5acO](https://user-images.githubusercontent.com/5195984/202979711-335dac65-2888-4170-a139-0486e6eb2f02.png)

    ### TODO

    - [x] Fix ore silo not linking to other machines
    - [x] Add mining ore smelters to left/right sides
    - [x] Add custom lawsets to AI core and robot shells (protect station
    but focused on cyborg mothership)
    - [x] Enlarge whiteship SS13 docking port to fit ship
    - [x] Enlarge lavaland SS13 docking port to fit ship

    </details>

    ## Changelog
    :cl:
    add: Add space vines prevent solar panels from working (except ones with
    the transparent mutation)
    add: Add new space ruin - Cyborg Mothership. All hail the master race!
    /:cl:

    * Cleans up useless open turf var edits on a couple of our maps (#72071)

    ## About The Pull Request

    ![image](https://user-images.githubusercontent.com/25415050/208304567-46e09bbe-c004-4a6d-8e1f-29e3aa76856d.png)
    Hello I would like 43 instances of north-oriented floors.

    ![image](https://user-images.githubusercontent.com/25415050/208304600-c1ace567-51f7-4fc5-a44b-4ba3f560f89e.png)
    Please don't forget all instances of floors var edited to look the exact
    same as the non-edited kind

    ## Why It's Good For The Game

    Cleans up a few map keys of useless vars that never served a purpose,
    allows less people to pick the wrong prefabs and spread them further.

    Nothing player-facing, if it was, the variables wouldn't be entirely
    worthless.

    * Automatic changelog for PR #71009 [ci skip]

    * useless update_appearance reduction, emissive_blocker micro optimization (saves a second of init) (#71658)

    ## About The Pull Request

    [Saves 0.2 seconds of init time. 50% of emissive
    blockers](https://github.com/tgstation/tgstation/commit/8318b648f6d32844aacbfb4c309152cd45801f5c)

    Emissive blockers are a decent expense during init, even these, which
    are the ones that update outside of initialize.
    I've inlined them, removed some redundant vars and checks, reduced the
    arg count, and shifted some things around. This ends up saving 200ms, or
    50% of its total cost.

    I also shifted mutable_appearance about a bit. it's not a massive
    saving, but it is technically faster

    [Prevents a few redundant appearance_updates, saves 0.8 seconds of
    init](https://github.com/tgstation/tgstation/commit/5475cd778b66b22b1e2c8d86b2c6d59fb84f219a)

    Prequisit info: update_appearance is decently expensive
    It's good then to only do it if we have a reason to, right?

    Me and moth were shooting the shit about just general init time, and we
    came up with the idea of tracking which update_appearances actually
    "worked" and which didn't.

    That bit comes later, let's enjoy the fruits of that work first

    First, holograms were calling update_appearance on process, for almost
    no reason.
    I patched the one event they don't already "react" to, and then locked
    it behind a change decection if.
    good for live, doesn't impact init.

    Next, decals. If you add a decal to something before it inits, it'll
    react to the after successful init signal.
    The trouble is the same atom could have its appearance updated from this
    MORE then once, since decals can be stacked on tiles, and signal
    unregisters don't work once the signal is sent.
    So we add a flag to track if we've had this happen to us or not, so it
    only happens once.
    saves 80 ms

    Power! lots of things call power_change on init, often more then once.
    We'll update appearance for each of those calls, even if only one is an
    actual change.
    That's silly, better to track what sort of power we're using for our
    appearance and go off that changing

    This was taking about 300ms. Really stupid

    Icon smoothing. After emissive blockers were added, any change to
    something's icon smoothing would lead to an update_appearance call.
    Nasty shit, specially cause of walls, which don't even use emissive
    blockers.
    Ok then, so we'll always update appearance for movables, and will allow
    turfs that are interested to hook it manually.
    Not many of those anyhow
    This is slightly a dev ux thing, but it saves 600ms so I think it's
    worth it. Rare case anyway

    Telecomms:
    telecomm machines were updating appearance on process. This is to cover
    for them turning on/off on process.
    Better then to just check if on actually changed.
    This cost adds up midgame, doesn't impact init tho

    Materials:
    There's this update_appearance call in material on_apply. it doesn't do
    anything.
    The logs will lie to you and say it does, but it's just like reapplying
    emissives. It doesn't need to exist
    Saves like 50ms

    Canisters:
    Live thing, lots of time wasted updating appearance for no reason, lets
    see if we change anything first yes?

    [Uses defines to wrap update_appearance for
    tracking](https://github.com/tgstation/tgstation/commit/4fa82e1c9d93577aadb3c743f17196331f62e67c)

    [Undoes _update_appearance changes, instead reccomends 2 regexes to
    use](https://github.com/tgstation/tgstation/commit/a8c8fec57a4e43d1fa636b5ac68459903faa9fc5)

    I need file and line number for my tracking, so I need to override
    update_appearance calls, and also preferably not require every override
    of update_appearance to handle dummy file + line args.

    So instead, I created a wrapper proc that checks to see if appearanaces
    match (they're unique remember, the two of the same visual appearance
    will be equivalent)
    The trouble is I can't intercept JUST proc calls, or JUST function
    definitions with defines. it needs to be both.

    So I renamed the /update_appearance proc to /_update_appearance

    this way I can capture old uses, and don't need to worry about merge/dev
    brain skew

    ~~It does mean that all update_appearance proc definitions now look
    weird tho.
    My profiling is leaking into dev ux. I wish I had better templating.~~

    **The above is no longer being pr'd**, it's instead just recommended via
    a few regexes adjacent to the define.
    Smelled wrong anyhow

    [Adds a setter for panel_open, so I can update_appearance on
    it](https://github.com/tgstation/tgstation/pull/71658/commits/cf1df8a69fc1a816391d085ee7419b14f9fe9167)

    ## Why It's Good For The Game

    Speed

    * Fixes vendor showing weird glass icons (#71929)

    ## About The Pull Request
    Fixes vendor showing weird glass icons
    ## Why It's Good For The Game
    bug fix good
    ## Changelog
    :cl:
    fix: vendor no longer shows glass icons in a specific condition
    /:cl:

    * Automatic changelog for PR #71929 [ci skip]

    * Ghosts cant mess with RCD & Plumbing RCD (#72069)

    ## About The Pull Request
    Fixes #72036

    ## Changelog
    :cl:
    fix: ghosts cant mess with RCD & PLumbing RCD
    /:cl:

    * Automatic changelog for PR #72069 [ci skip]

    * Glass jaw quirk (#72006)

    ## About The Pull Request

    A quirk that makes any hit to your head have a chance to knock you out.
    Sharp hits are a bit worse at knocking out than blunt ones.
    I always felt like this favorite CDDA trait mine was missing from the
    game, but I tried implementing it in a more unique way.

    ## Why It's Good For The Game

    99 losses, 1 win. Winners don't give up.

    ![glassjoe](https://user-images.githubusercontent.com/82850673/207702863-a033a927-0b4d-4322-83d7-a1b6eb6f65d0.gif)

    ## Changelog

    :cl: Fat bugs bunny
    add: Added a glass jaw quirk, that leaves you prone to being knocked out
    when hit on the head.
    /:cl:

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #72006 [ci skip]

    * Shuffles bedsheet attack actions a wee bit (#71865)

    ## About The Pull Request
    my friends been doing makeshift surgery and gets mad about having to do
    harm intent to start surgery and then having to turn it off to do every
    single other surgery step and i agree, thats silly

    ~~instead, now, the bedsheet attack does not check for harm and ALWAYS
    COVERS with left mouse button and ALWAYS PREPARES SURGERY with right
    mouse button~~

    to be more consistent all surgery initiators now work on left mouse
    click and covering with your bedsheet is the right mouse button

    ![image](https://user-images.githubusercontent.com/116288367/206871963-3a9bd092-49ea-4867-a47c-3b5a74c960e3.png)

    ## Why It's Good For The Game

    while obviously a lot of the time makeshift surgery IS about harming
    someone else its inconsistent with how all other surgery tools function
    and also isn't very clear at all. the screentip in addition to having
    them be separate buttons means that bedsheets two functions are overall
    much clearer and its surgery drape function will no longer lead to an
    assistant accidentally knifing someone when theyre trying to save
    someones life

    ## Changelog

    :cl:
    qol: added makeshift surgery screentip
    qol: you no longer have to go in and out of harm intent to do surgery
    with a bedsheet
    /:cl:

    * Automatic changelog for PR #71865 [ci skip]

    * pillow smothering now checks to see if the SMOTHEREE has a head, not the SMOTHERER (#72086)

    ## About The Pull Request

    see title

    ## Why It's Good For The Game

    this truly is a copy+paste moment

    ## Changelog

    :cl: ATHATH
    fix: Pillow smothering now checks to see if the SMOTHEREE has a head,
    not the SMOTHERER.
    /:cl:

    * Automatic changelog for PR #72086 [ci skip]

    * Santa hat fixes (#72078)

    Fixes #72070

    :cl: ShizCalev
    fix: Santa now spawns with the actual space capable hat again!
    fix: Fixed the claustrophobia trait not recognizing Santa's real hat.
    /:cl:

    Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>

    * Automatic changelog for PR #72078 [ci skip]

    * Examining your uplink gives you the code (#72101)

    ## About The Pull Request
    If you're the "owner" of an uplink, you can examine it to get the code
    and possible failsafe code.
    ## Why It's Good For The Game
    It can feel slow to pull up the traitor info menu when you forget what
    your code is
    ## Changelog
    :cl:
    qol: examine your uplink for code
    /:cl:

    Co-authored-by: etherware-novice <candy@notarealaddr.com>
    Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
    Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #72101 [ci skip]

    * Automatic changelog compile [ci skip]

    * Traitor UI only shows Unlock/Failsafe Code if you have it (#72114)

    ## About The Pull Request

    There are cases in which you don't have an unlock code (if the uplink is
    implanted in you from the start) and you obviously don't always start
    with with a failsafe code (need to buy it). So, let's only fill in this
    fields in the UI should they exist.

    There might be something to be said about wanting to ensure that people
    remember that they can check this UI screen to find the failsafe code
    should they lose it later, and I wouldn't mind changing the string to be
    something like "Failsafe: None" in that case. However, I just think that
    keeping it as:

    ```txt
    Code:
    Failsafe:
    ```

    is silly and should be changed somehow.
    ## Why It's Good For The Game

    ![image](https://user-images.githubusercontent.com/34697715/208604758-d7ff3ae9-e552-4dd2-998d-81715cd06ffc.png)

    Note: That white box isn't part of the UI, that's a part of the edit I
    did to the screenshot in the area where the stuff... isn't? What was i
    thinking

    I think the UI looks a lot cleaner for those cases when you just don't
    have anything.
    ## Changelog
    :cl:
    qol: The Traitor's Antagonist Panel's Unlock and Failsafe entries will
    only appear if there is an Unlock/Failsafe Code to display.
    /:cl:

    * Automatic changelog for PR #72114 [ci skip]

    * Lazy Template Loading - Nukie/Wiz (#71785)

    ## About The Pull Request

    Removes the nukie base and wizard den from the base centcom map. They
    are instead now lazy loaded as required.
    To make a new lazy load template is fairly simple, make a map, allocate
    an area for it, and place a marker at the bottom left corner of that
    area. I have it check an area to ensure that if someone makes the map
    larger than expected but doesn't account for the template allocation it
    doesn't overwrite stuff without warning

    [Replaces some improper CHECK_TICKs with
    MAPLOADING_CHECK_TICKs](https://github.com/tgstation/tgstation/pull/71785/commits/c7fbca9148812b392dca76d5450fb6bb86716462)

    Atom init has already been tripped by the time we get to this portion of
    the loading, so if we don't use the right check tick, we will
    potentially block unrelated init attempts. This is bad. (Lemon edit, I
    want this in the commit desc)

    ## Why It's Good For The Game

    Cuts down on init times.
    Closes https://github.com/tgstation/dev-cycles-initiative/issues/17
    ## Changelog
    :cl:
    admin: New mapping verb to load lazy templates as needed. In your admin
    tab under the Mapping category.
    /:cl:
    this isnt technically player visible, so not sure it needs a changelog

    Co-authored-by: san7890 <the@san7890.com>
    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
    Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>

    * Automatic changelog for PR #71785 [ci skip]

    * bumps auxlua to 1.4.0 (#72108)

    ## About The Pull Request

    Mothblocks recently talked about wanting an auxlua function to check if
    the lua state was about to overrun its execution limit, and that was
    something I had been thinking about for a long time prior, but never
    bothered to actually implement until it was brought up. So I did just
    that. The documentation has also been updated to include a description
    of how the execution limit works and how to use the new function,
    `over_exec_time`

    ## Why It's Good For The Game

    Allows for lua loops of indeterminate length to do as much work as they
    reasonably can in a single tick without setting off the execution
    limiter and erroring out.

    ## Changelog

    :cl:
    admin: Adds a new function for admin lua scripting, "over_exec_time",
    for checking if lua code is running close to the execution limit.
    Details are available in the lua editor's help menu.
    admin: The execution limit is described in detail in the lua editor's
    help menu.
    /:cl:

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #72108 [ci skip]

    * QM has a garment bag now (#72111)

    ## About The Pull Request
    Gives the QM a garment bag and moves all their uniform items into it.

    And changes the order of a few items to be in the right place, most new
    clothing added to the bags just got placed on the end of the list.
    ## Why It's Good For The Game
    When the QM was made into Command they didn't get their own garment bag
    so this just fixes that.
    ## Changelog
    :cl: Guillaume Prata
    fix: The Quartermaster has their own garment bag now, like everyone else
    at Command.
    /:cl:

    * Automatic changelog for PR #72111 [ci skip]

    * Makes biological states for wounding limb based, not species based (#71745)

    ## About The Pull Request

    I noticed something pretty terrible when playing around with some humans
    locally.
    As it turns out, limbs did not preserve their biological state when
    amputated - This meant that a skeleton limb on a normal human, still
    behaved as if it had a bunch of flesh and veins on it.
    I didn't like that, and it seems like an oversight, so I decoupled the
    biological state from the species and made it limb based.

    What does this mean?
    Skeleton limbs on a human will not bleed, but will still break (and be
    more prone to breaking)
    Human limbs on a skeleton will not bleed, however they will get cuts and
    pierces that will not clot and need to be treated to go away - These
    limbs will have the same requirements for dismemberment on a skeleton as
    they have on a human.

    ## Why It's Good For The Game

    This makes limbs behave according to how they look instead of causing
    mild confusion.

    ## Changelog

    :cl: Big chungus wholesome 100
    fix: Amputated and reattached limbs now get wounded based on their own
    biology, not the current owner's biology.
    /:cl:

    * Automatic changelog for PR #71745 [ci skip]

    * Fixes some bad `investigate_log`s causing runtimes in somewhat important places (#72152)

    ## About The Pull Request

    Fixes #72150

    ```
    [2022-12-21 19:35:38.178] runtime error: Cannot execute null.investigate log().
     - proc name: narsie act (/mob/living/narsie_act)
     -   source file: living_defense.dm,438
     -   usr: null
     -   src: Featherbottom (/mob/living/simple_animal/chicken)
     -   src.loc: the grass patch (147,154,2) (/turf/open/floor/grass)
     -   call stack:
     - Featherbottom (/mob/living/simple_animal/chicken): narsie act()
     ```

    Removes `usr` from Nar'Sie act and Singularity act logs

    I don't know why these were set to log in `usr`, when
    A. `usr` is likely not the person getting gibbed
    B. `usr` is unreliable

    Case in point:
    `usr` is some random person who probably helped invoke the Nar'sie rune (no idea how it choses), if they get deleted for whatever reason, `usr` seems to clear to `null` (?), which causes a `null` use and the above runtime

    ![image](https://user-images.githubusercontent.com/51863163/208999857-540d9caa-9df6-49b0-8f45-8b75973a32a4.png)

    I also peeked around for other improper use of `usr` logs. Most of them were in `ui_act` code, which is whatever. Some where in places which had a passed user, so I replaced them. And one was in a place with no `user` passed, so I just added some sanity checking.

    ## Why It's Good For The Game

    These are really bad places to runtime error

    ## Changelog

    :cl: Melbert
    fix: Nar'Sie will no longer bring upon the construct apocalypse when they encounter a chicken after one of the invokers were destroyed
    fix: The Singularity should no longer stop gibbing people when whoever created it was destroyed
    /:cl:

    * Automatic changelog for PR #72152 [ci skip]

    * View Sensor circuits now have a range modifier (#72123)

    ## About The Pull Request

    Adds the ability to use ranges between 0 and 5 for View Sensor circuits.
    Currently these nodes are locked to 5 tiles and it is rather difficult
    to limit the area this circuit effects either for speed reasons or
    otherwise. This PR makes it a simple variable that remains capped at 5,
    admins can raise the cap by modifying a variable.
    ## Why It's Good For The Game

    I mostly use circuits as an admin, I can't for the life of me figure out
    how to make a shorter range AOE circuit although I imagine its possible
    by comparing x and y coordinates of things in the list and yourself this
    is far to finicky. Players can also utilize this to, for example check
    all objects on the tile the view sensor is on, "possible" at the moment
    but way to finicky compared to a 5 tiles.
    ## Changelog
    :cl:
    qol: You can now reduce the range of View Sensor circuits.
    /:cl:

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #72123 [ci skip]

    * Fixes final objectives not displaying UI buttons (#72126)

    ## About The Pull Request
    See title

    ## Why It's Good For The Game
    hideTcRep was hiding the entire footer. All it had to hide was the
    Stack.Item that contained the TC and reputation rewards.

    Another PR was trying to fix this issue, but only by increasing the
    complexity of ObjectiveMenu code, which was unnecessary and would've
    made the code harder to maintain. Instead of asking them to basically
    rewrite their entire code, I decided it would be faster if I just remade
    it myself.

    ## Changelog
    :cl:
    fix: Fixed final objectives not displaying the UI buttons.
    /:cl:

    Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>

    * Automatic changelog for PR #72126 [ci skip]

    * Fixes medical scrubs not being adjustable (#72105)

    ## About The Pull Request
    I had on my list: "Make adjusted sprites for the medical scrubs." and to
    my surprise #69047 already added adjusted sprites for all the medical
    scrubs (thanks for saving 30 minutes of my day Imaginos16!), but not on
    the code side, this fixes that.
    ## Why It's Good For The Game
    Adjusting jumpsuits is an important medbay feature IMO, this keeps new
    doctors from learning bad habits (fully stripping at stasis) from other
    doctors.
    ## Changelog
    :cl: Guillaume Prata, Imaginos16
    fix: You can now adjust medical scrubs for easier surgery on your fellow
    doctors.
    /:cl:

    * Automatic changelog for PR #72105 [ci skip]

    * Add language variety to machines that speak (#71643)

    ## About The Pull Request
    This builds on #70278 by giving other machines (vendors, newscasters,
    computers, etc.) the ability to speak different languages. If the
    station "Bot language malfunction" trait is rolled, then these machines
    will select a random race starting language. If a machine is EMP'd then
    it has a chance to change the language. There is also a language wire
    that can be pulsed to change the language for vending machines.

    Default language for machines is galactic common, but there are rare
    exceptions:

    - Beach vendors will now speak beachbum
    - Syndicate vendors will now speak codespeak
    - Changeling vendors will now speak a random language after each slogan

    ## Why It's Good For The Game
    More depth to the language feature.

    ## Changelog
    :cl:
    add: Add language variety to machines that speak. You can also pulse the
    vendor language wire to make it switch languages or EMP a machine to get
    the same effect.
    add: Shambling cola vendors will now speak a different language each
    time they talk. Syndicate vendors will now speak codespeak. Beach
    vendors will now speak beachbum.
    /:cl:

    * Automatic changelog for PR #71643 [ci skip]

    * Automatic changelog compile [ci skip]

    * fixes typo for insertion during organ manipulation (#72136)

    ## About The Pull Request
    **BEFORE:**
    display_pain(target, "You can feel your something being placed in your
    [parse_zone(target_zone)]!")
    **AFTER:**
    display_pain(target, "You can feel something being placed in your
    [parse_zone(target_zone)]!")
    Removes lazy coding, improves visual fidelity

    ## Why It's Good For The Game
    ugly

    :cl:
    spellcheck: drastically improves grammar for inserting something during
    organ manipulation
    /:cl:

    * Automatic changelog for PR #72136 [ci skip]

    * Fixes a rogue vent on deltastation brig (#72095)

    Fixes a rogue vent in deltastation brig entrance, which was facing
    downwards instead of upwards(where the pipes are)

    ## Why It's Good For The Game
    So the gas can go trough the vent c:

    :cl: Improvedname
    fix: fixes deltastation vent at brig entrance
    /:cl:

    * Automatic changelog for PR #72095 [ci skip]

    * Fixes deaf mobs seeing PDA ringtones when they receive a message (#72084)

    Deaf mobs will no longer see PDA ringtones when a PDA receives a
    message.

    * Automatic changelog for PR #72084 [ci skip]

    * Build your own atmos chambers (#72019)

    ## About The Pull Request

    https://user-images.githubusercontent.com/110812394/208232089-a183fb95-9326-4514-986a-a2b1e21be40c.mp4

    **Notes**
    - You can print atmos control circuit boards at the circuit printer
    after research
    - You can only build one sensor for each gas type for in the whole map.
    This is because each sensor is assigned a unique chamber id from a fixed
    set of constants. Once all those values are used up there will be
    duplicates so yeah only sensor per gas type for that round
    - Un wrenching or destroying the injector/vent will automatically
    disconnect them from the sensor. I forgot to show that in the video
    - Destroying the sensor via right click with RPD will also automatically
    disconnect everything. It should be obvious but i made it even more
    obvious now

    ## Why It's Good For The Game
    From #71232
    ![Screenshot
    (66)](https://user-images.githubusercontent.com/110812394/207928807-bc6edfdd-26cc-48cd-8cb9-1b98f53ad1fe.png)

    That and also i heard somewhere in the forum that this was highly
    requested

    ## Changelog
    :cl:
    add: Gas sensors recipe to RPD
    code: linking all the stuff via multitool
    qol: make your own tank instead of moving around canisters
    /:cl:

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #72019 [ci skip]

    * AI actions won't unassign each other's movement targets & Mice stop being scared of people if fed cheese  (#72130)

    ## About The Pull Request

    Fixes #72116
    I've had a persistent issue with basic mob actions reporting this error
    and think I finally cracked it
    When replanning with `AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION` it can run
    `Setup` on one action leading to the plan changing, meaning that it runs
    `finishCommand` to cancel all other existing commands
    If you triggered a replan by setting up a movement action in the middle
    of another movement action, cancelling the existing action would remove
    the target already set by the current one.
    We want actions to be able to remove _their own_ movement target but not
    if it has been changed by something else in the intervening time.

    I fixed this by passing a source every time you set a movement target
    and adding a proc which only clears it if you are the source... but this
    feels kind of ugly. I couldn't think of anything but if you have a
    better idea let me know.

    Also while I was doing this I turned it into a feature because I'm
    crazy.
    If you feed a mouse cheese by hand it will stop being scared of humans
    and so will any other mice it attracts from eating more cheese. This is
    mostly because I think industrial mouse farming to pass cargo bounties
    is funny.
    Mice controlled by a Regal Rat lose this behaviour and forget any past
    loyalties they may have had.

    https://user-images.githubusercontent.com/7483112/208779368-3bd1da0f-4191-4405-86e5-b55a58c2cd00.mp4

    Oh also I removed a block about cancelling if you have another target
    from the "hunt" behaviour, everywhere using this already achieves that
    simply by ordering the actions in expected priority order and it was
    messing with how I expected mice to work.
    Now if they happen to stop by some cheese they will correctly stop
    fleeing in order to eat it before continuing to run away.

    ## Why It's Good For The Game

    Fixes a bug I kept running into.
    Makes it possible to set up a mouse farm without them screaming
    constantly.
    Lets people more easily domesticate mice to support Ratatouille
    gameplay.

    ## Changelog

    :cl:
    add: Mice who are fed cheese by hand will accept humans as friends, at
    least until reminded otherwise by their rightful lord.
    fix: Fixed a runtime preventing mice from acting correctly when trying
    to flee and also eat cheese at the same time.
    /:cl:

    * Automatic changelog for PR #72130 [ci skip]

    * Fixes access_view on goodies not being respected by anything other than department budget orders (#72125)

    ## About The Pull Request

    Fixes access_view on goodies not being respected by anything other than
    department budget orders

    ## Why It's Good For The Game

    Bugfix, per gitblame we simply never fixed this but we clearly intended
    it to work this way per the variable comment description and the fact we
    use it on the detective revolver

    ## Changelog
    :cl:
    fix: Fixes access_view on goodies not being respected by anything other
    than department budget orders
    /:cl:

    * Automatic changelog for PR #72125 [ci skip]

    * Gas canisters correctly update their appearance (#72124)

    ## About The Pull Request
    Fixes issue #71712 & #72140 Don't know how the author wasn't able to
    reproduce it even though it happens all the time on all maps

    https://user-images.githubusercontent.com/110812394/208730887-7ad4b02d-9dcc-4d71-b54f-489c3bd616f6.mp4

    ## The Problem
    The current code only updates the appearance of the canister when its
    valve is opened & if it takes damage . It doesn't deal with the case
    when its wrenched normally to a port without any problems

    ## The Solution
    Update the appearance during processing but only when its pressure
    changes significantly for the indicator light to be notified about it.
    This way we don't have to care if
    - the valve is open
    - its wrenched to a port
    - its leaking & taking damage

    Regardless of what the cause is only if the pressure inside the canister
    changes significantly from its current value do we update the
    appearance.

    This is so much more optimal than the previous code as`
    update_appearance()` will be called a maximum of 8 times during its full
    cycle of losing & refilling gas and won't be called at all if there is
    no pressure change

    ## Changelog
    :cl:
    fix: correctly update canister appearance
    /:cl:

    Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>

    * Automatic changelog for PR #72124 [ci skip]

    * Turned most syndicate mobs (+ viscerators) into basicmobs (#71871)

    ## About The Pull Request
    Turns the syndicate simpleanimals into basicmobs: (+ stormtrooper, +
    space variants) Base Mob, Knife syndies, pistol syndies, SMG
    syndies,shotgun syndies, viscerators
    also changes some instances of the simple_animal path into the basicmob
    ones
    Removes civillian syndicates which were useless and also completely
    unused
    Also removes mech pilots:
    ![2022-12-09
    20_02_18-Window](https://user-images.githubusercontent.com/70376633/206777829-2e49e445-3532-4e8e-8e7c-8d9b0a3a14d0.png)

    Also,
    makes the basic targetting datums health check configurable
    basic attack behavior can now fire in bursts

    https://user-images.githubusercontent.com/70376633/206766607-cf2e3659-0c5e-4117-9af7-e573e35bdf80.mp4

    https://user-images.githubusercontent.com/70376633/206766630-15b4469f-68be-44c7-9394-1f2b6fe07811.mp4

    https://user-images.githubusercontent.com/70376633/206766613-69b42457-a03b-449d-a1b8-a5aa556c76e5.mp4

    https://user-images.githubusercontent.com/70376633/206766619-5560a178-8d2f-4b22-adf1-22ace6f63a51.mp4

    https://user-images.githubusercontent.com/70376633/206766627-e671d064-fd9e-4204-b823-aa2e07f7fc26.mp4

    https://user-images.githubusercontent.com/70376633/206766633-108c1574-3554-4bc1-a9ac-8faed0ec4062.mp4
    ## Why It's Good For The Game

    simpleanimal stinks basic mob good
    syndicate AI was really bad to begin with so here we are

    ## Changelog
    :cl:
    code: Turned most syndicate mobs into basicmobs, making their AI better
    and (possibly) more deadlier!
    del: Removed syndicate mech pilots and syndicate civvies
    /:cl:

    Co-authored-by: kawoppi <94711066+kawoppi@users.noreply.github.com>

    * Automatic changelog for PR #71871 [ci skip]

    * Fix SM activation spam. (#72032)

    SM activation logging refactor

    * Automatic changelog for PR #72032 [ci skip]

    * More Tracy gitignores (#72087)

    Adds a link to byond-tracy in gitignore.

    Adds Tracy.exe to gitignore, since if you have it in your root alongside
    [this hack to get file
    paths](https://gist.github.com/Mothblocks/db5462aa84d7d6b1d1b1276b820f62da),
    you can read sources within Tracy. If you just use the hack without
    configuring, then it'll work fine no matter where it is, but it's
    helpful for avoiding releasing your user directory or whatever if you
    share the files.

    * fixes simple/basic mob damage sounds in some places (#72120)

    windows didnt use return values for attack_generic, so they never made
    sounds
    objects that broke also didnt play sounds because it tried to play the
    sound in nullspace i think cuz its broken so its deleted
    might also have happened with durand using shield
    fixes those

    * Automatic changelog for PR #72120 [ci skip]

    * Adds message clarifying that you've been KICKED from the game when the keysend flood autokick triggers. (#72083)

    There is now a message clarifying that you've been KICKED from the game when the keysend flood autokick triggers.

    * Automatic changelog for PR #72083 [ci skip]

    * fixes kilo not having xmas trees (#72186)

    ## About The Pull Request
    what the hell

    ## Why It's Good For The Game
    its christmas

    * Automatic changelog for PR #72186 [ci skip]

    * Fixed the Concealed Weapon Bay (and maybe some other things). (#72093)

    I've fixed two defines for mecha model categories, which lacked
    parentheses and thus were causing issues via order of operations. This
    may have had multiple effects, but notably, it made the concealed weapon
    bay completely impossible to attach to any mechs. This PR adds
    parentheses to fix this.

    * Adds some costumes to autodrobe (#72103)

    Adds a various amount of costumes that were added in the game before in
    https://github.com/tgstation/tgstation/pull/30303

    More costumes is always nice especially ones in the code that aren't
    used and pretty much only were available for chamkits

    * Automatic changelog for PR #72093 [ci skip]

    * Automatic changelog for PR #72103 [ci skip]

    * fixes shaved santas (#72185)

    ## About The Pull Request
    santa space helmet was "fixed" in a recent pr but now he uses the space
    one and that one shaves and balds him, this makes it not do that

    ## Why It's Good For The Game
    wheres the damn beard

    ## Changelog
    :cl:
    fix: fixes bald and shaved santas
    /:cl:

    * Automatic changelog for PR #72185 [ci skip]

    * Fixes Bar/Restaurant Bots Orders Sending Infinite Orders (#72135)

    ## About The Pull Request

    We didn't instantiate order (which was needed to read the type), so they
    would just spam new orders until the heat death of the universe. Very
    annoying.
    ## Why It's Good For The Game

    Fixes #72023.
    ## Changelog
    :cl:
    fix: Bar/Restaurant Bots should no longer spam orders forever.
    /:cl:

    * Automatic changelog for PR #72135 [ci skip]

    * Pride pin quirk + pins can be infinitely reskinned (v2) (#72143)

    ## About The Pull Request

    Neutral pride pin quirk added. Pride pins can be infinitely reskinned
    now. Changes "sexuality" to "pride" in description of pin.

    ## Why It's Good For The Game

    Pride pins are cute and having to buy them every round is a chore. Pride
    pins are purely cosmetic and have no reason to be locked into only being
    reskinned once.

    ## Changelog

    :cl:
    add: Pride pin quirk! Start the shift off with a pride pin in-hand.
    qol: Pride pins can be infinitely reskinned now.
    /:cl:

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #72143 [ci skip]

    * Guards against uplink failsafe code being the same as unlock code (#72113)

    ## About The Pull Request

    There's probably a better way to do this to be honest, but I think it's
    silly for both to potentially be the same and this should work alright.
    ## Why It's Good For The Game

    Fixes #71446.

    I don't think the Syndicate is that stupid.
    ## Changelog
    :cl:
    fix: After a recent mishap with a high-ranking Syndicate operative, the
    uplink's unlock code and failsafe code (the one that makes it blow up if
    you say it) should never turn out to be the same.
    /:cl:

    * Automatic changelog for PR #72113 [ci skip]

    * Revamps tram windows and layout (#72047)

    ## About The Pull Request
    -Tram windows are now flush with the tram walls instead of sticking out.
    -Shuttle seats are replaced with benches.
    -Moves the icon state of the tram controls from the map file to the tram
    controls subtype, to avoid mapper pain if they make changes in the
    future.
    -Makes tram tiles a subtype instead of editing their vars on the map.

    ![image](https://user-images.githubusercontent.com/83487515/208769693-237dac72-aac7-4698-823f-6f59d0c6491e.png)

    ## Why It's Good For The Game
    Tram looks better, don't want mappers to accidentally break tram because
    they didn't see the icon override.
    ## Changelog
    :cl: LT3
    fix: Tram windows are now properly flush with the tram walls.
    imageadd: Tram shuttle seats have been replaced with benches so people
    can sit too close to each other for that real metro experience.
    code: The icon for tram controls is now set in the tram controls subtype
    instead of the map itself.
    code: The tram floor tiles are now in a tram floor subtype instead of
    the map itself.
    /:cl:

    * Automatic changelog for PR #72047 [ci skip]

    * Automatic changelog compile [ci skip]

    * Gives admins the ability to enable hostile environments at will. (#72018)

    * Automatic changelog for PR #72018 [ci skip]

    * Fix briefcase in the MetaStation vault being useless and not having the surprisingly-extremely-good contents its supposed to (#72157)

    ## About The Pull Request
    This was using `newlist`, which is both not supported but unfortunately
    also not linted for. This is the only case like it in maps.

    Pretty surprisingly good contents, like a gun and a telescopic baton. I
    hope it doesn't turn into something like the captain's antique because
    that is cringe but at least the QM has no reason to take the baton now

    ## Changelog
    :cl:
    fix: The briefcase in the MetaStation vault now contains the
    (surprisingly good) spoils it's supposed to.
    /:cl:

    * Automatic changelog for PR #72157 [ci skip]

    * Automatic changelog compile [ci skip]

    * Refactors armor into dedicated subtypes (#71986)

    ## About The Pull Request

    See title.
    ## Why It's Good For The Game

    Code is cleaner, and more readable/intuitive
    Technically closes
    https://github.com/tgstation/dev-cycles-initiative/issues/8
    ## Changelog
    :cl:
    refactor: armor, from the ground up basically
    /:cl:

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #71986 [ci skip]

    * Dead people are no longer counted as crew when determining if 65% of the station is revs for the auto-shuttle call (#72200)

    ## About The Pull Request

    Dead people are no longer counted as crew when determining if 65% of the
    station is revs for the auto-shuttle call

    ## Why It's Good For The Game

    Bugfix for the feature, admins were noticing the auto-call is never
    occuring and this is because the logic doesn't actually check alive
    crewmembers, it's only looking at the total crew count, dead and alive

    a station with 60 dead non-rev crew, 10 alive revs, and 2 alive non-revs
    previously would not call the shuttle, but now it will

    ## Changelog

    :cl:
    fix: Dead people are no longer counted as crew when determining if 65%
    of the station is revs for the auto-shuttle call
    /:cl:

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #72200 [ci skip]

    * [NO GBP] fixes error in set armor rating (#72216)

    Resolves an issue where set armor rating didnt work because of the way
    byond handles list declarations

    * Pacifists can attack people with non-lethal weapons (#72183)

    ## About The Pull Request

    Fixes #72054
    Allows pacifists to hit people with weapons which only do stamina
    damage.
    Additionally, allows pacifists to participate in boxing which also only
    does stamina damage.
    Is it pacifism to hit someone square in the face while wearing boxing
    gloves? I say, maybe.

    ## Why It's Good For The Game

    Pacifists were feeling left out after not being invited to your pillow
    fights.
    More seriously, they can use _guns_ which only do stamina damage so it
    makes sense that they can use melee implements too.
    Boxing is fun.

    ## Changelog

    :cl:
    fix: Pacifists can now hit people with pillows and holographic weapons,
    as well as participate in boxing.
    /:cl:

    * Fixes husk appearances not working, adds a screenshot test for it (#72190)

    ## About The Pull Request

    Fixes #72159

    Before this proc used to early return when the limb was husked
    The leg refactor changed it to no longer early return and as a result it
    overrided the generated husk icon with a normal limb icon
    So I just wrapped even more of the proc in `!is_husked`, since like most
    of it is not supposed to run

    Screenshot tests husks too

    ## Why It's Good For The Game

    Husks are good(?)

    ## Changelog

    :cl: Melbert
    fix: Husked bodies look husked again
    /:cl:

    * Automatic changelog for PR #72183 [ci skip]

    * Automatic changelog for PR #72190 [ci skip]

    * Make barstool on Emergency Bar buckleable (#72202)

    ## About Why It's Good For The Game The Pull Request
    Fixes #71971

    ## Changelog
    :cl: Tattle
    fix: all of the barstools on the Emergency escape shuttle are equipped
    with a seatbelt
    /:cl:

    Co-authored-by: tattle <article.disaster@gmail.com>

    * Automatic changelog for PR #72202 [ci skip]

    * Updates check_grep to guard against unparsed map variables (#72161)

    ## About The Pull Request

    In `/datum/parsed_map/proc/parse_constant()` (via
    https://github.com/san7890/bruhstation/blob/b3851d607f85c18edee0149d72922df8e077a46c/code/modules/mapping/reader.dm#L930'),
    we do not check (ignore) five different things: `new()`, `newlist()`,
    `icon()`, `matrix()`, and `sound()`. Since it's completely useless to
    put it in a map and expect to see it code-side now-a-days, let's lint
    against it just to be safe in the future.
    ## Why It's Good For The Game

    Prevents silliness like in #72157 (which this PR is also reliant on for
    checks to pass).

    no changelog needed

    * Fixes parallax on >2 level maps going fucky with optimized multiz (#72169)

    ## About The Pull Request

    We no longer always render parallax.
    This was causing issues because we can't isolate the white of space from
    the vaugely white of everything else.

    So instead, if your parallax plane is out of view, we'll not only
    disable it, but we'll disable the strand we send from the main plane TO
    it.

    Instead only blending against the bottom stack.

    This does mean there's a possibility for fullwhite on z transition
    borders (potentially fixable), or when hijacking the plane (also
    fixable, but significantly more annoying).

    This is enough to make large maps functional though, so I'm happy with
    it

    ## Why It's Good For The Game

    Allows for #71731 and other maps like it. Makes my code actually work

    ## Changelog
    :cl:
    fix: Using optimized multiz on > 2 z layer maps will no longer cause
    fucko bungo
    /:cl:

    * Automatic changelog for PR #72169 [ci skip]

    * Shorten balloon alerts for wrapping (#72203)

    ## About Why It's Good For The Game The Pull Request
    Fixes #71954

    ## Changelog
    :cl: Tattle
    fix: Wrapping balloon alerts are shorter and no longer contain spans
    /:cl:

    Co-authored-by: tattle <article.disaster@gmail.com>

    * Automatic changelog for PR #72203 [ci skip]

    * Fixes a bunch of sidemap/plane cube issues (#72178)

    ## About The Pull Request

    [fixes solor trackers offsetting wrong, and panels not using plane
    offsets](https://github.com/tgstation/tgstation/commit/8f461ab8ec17df5c158a564a3b3d92c165eb88f5)

    [fixes cyborg hats offsetting phyiscally over their
    head](https://github.com/tgstation/tgstation/commit/5fd5b4240efe71f0d8ac9a5b9342780cc2540a87)

    [fixes reflector parts z fighting with their neighbors. if we physically
    offset them, they'll have nothing to fight
    with](https://github.com/tgstation/tgstation/commit/088dcfe91ff750fcfe78c02c85a3a63408c9b21f)

    [fixes burgers layering wrong. uses a combo of pixel z to do the visual
    offsets, and pixel_y to modify
    layering](https://github.com/tgstation/tgstation/commit/ec39e2bcd39b1d8bd61a1f008a391b642f92a575)

    [fixes signs, needed to use pixel_w instead of x, I think we may be
    living under iso rules? I'm not totally sure I need to investigate
    more](https://github.com/tgstation/tgstation/commit/560d152fd745d9f37dd4f6a9e67cc67f43b14821)

    [fixes paperbin
    rendering](https://github.com/tgstation/tgstation/commit/e6c57ec00eba1b4522b8ef1d056e0ef036a9e901)

    ## Why It's Good For The Game

    Closes #72094
    Closes #72035

    * Gives shadow jaunt users a warning before moving into a lit area (#72154)

    ## About The Pull Request

    When using Shadow Jaunt, if you are about to walk onto a tile that will
    force you out of your jaunt, you will receive a warning and be held back
    for a moment. After the delay, you will have a window to continue moving
    into the light and leave your jaunt. If you need to get out of your
    jaunt sooner, you can manually exit the shadow jaunt with the action
    button.

    https://user-images.githubusercontent.com/28870487/209010307-f8973e2d-b92d-4d2b-b0a1-3211a6eb034d.mp4

    (It's a bit faster than shown in the video, just trust me)

    It's not perfect, and with bad timing you might slip out of it anyways,
    but it's better than nothing. If you are intentionally trying to bypass
    a wall, you'll have to wait out the delay if you want to come out on the
    other side of it.

    There's a few minor code changes to help facilitate this.
    check_light_level no longer ejects the jaunter on its own, instead
    returning true or false based on if the light level is above the
    acceptable amount. It also now receives a location to check the light
    level of, rather than strictly checking the location of the jaunt
    effect.

    If this ends up being too clunky or restrictive, I'd be fine with
    changing the warning to a toggleable option on the Nightmare's HUD.
    ## Why It's Good For The Game

    Shadow jaunt moves you very fast, and is difficult to move precisely in
    (especially when under the pressure of a tactical retreat). It's not
    uncommon for Nightmares to accidentally fling themselves past a wall in
    maintenance and be exposed in an unfavorable location.

    There are already so many ways for a Nightmare to be screwed over.
    Accidentally walking through a wall and dying is probably one of the
    lamest.
    ## Changelog
    :cl: Rhials
    qol: Shadow Jaunter users now receive a brief warning before walking
    into light and being forcibly un-jaunted.
    /:cl:

    * Automatic changelog for PR #72154 [ci skip]

    * Anomalies can now be triggered at your location with admin_setup. Also sets control on setup() for events (#72065)

    ## About The Pull Request

    Anomaly random events will now ask if you want their anomaly to spawn at
    your location if triggered via admin setup.

    This PR also makes a small but useful change to the logic for new
    round_event objects. round_events now have their control (their
    associated round_event_controller) set on New, rather than after setup
    is called. Previously, round_events could not access control in their
    setup proc (as it was not set at the time), meaning transferring
    admin-chosen variables had to be done later in start/announce (depending
    on which comes sooner).

    While this has just been worked around in the past, the change needed to
    be made here, as some anomaly event types announce first, and some start
    first. The admin variables needed to be passed in earlier than
    start/announce (in setup).

    Short version: you can access control in round_event setup() now :D
    ## Why It's Good For The Game

    MORE adminbus, MORE anomaly shenanigans (they're one of my favorite
    event types). Also resolves a quirk in event code that bothered me in
    other PRs I've made.
    ## Changelog
    :cl: Rhials
    admin: anomaly events now give the option to occur at your current
    location when triggered with the Trigger Event admin verb
    /:cl:

    * Automatic changelog for PR #72065 [ci skip]

    * Organizes the lists in `admin_verbs.dm` because I got sick and tired of looking at them, and one in particular (#72151)

    ## About The Pull Request
    Title for the most part.

    ## Why It's Good For The Game
    I was told, many, MANY, moons go, as a downstream host, that one of
    these lists would rarely ever get touched.
    What a fat lie that was.
    The more I had to stare at this list the more infuriated I got with it.

    Now, I just went ahead and organized most of the lists in this file, as
    well as fixing comments to fit the format of `/* hey bozo */`. Where
    applicable, things were organized into `/datums/admins/` and
    `/client/proc` as well.

    ## Changelog

    :cl: Jolly
    code: The lists in admin_verbs.dm was organized to be made better. This
    shouldn't affect the panels admins use at all, since they're already
    alphabetized.
    /:cl:

    * Automatic changelog for PR #72151 [ci skip]

    * Fixes turfs on centcom getting weird atmos adjacent turfs. (#72173)

    ## About The Pull Request

    We compare the current_cycle var against time using <= But current_cycle
    defaults to 0, so when we compare with a 0, it breaks

    Let's just start with -1 yeah?

    Fixes #72170

    This is an old bug, I got bullied about it and then just... forgot
    because my head is empty. Fixed now.

    * Jellypeople and stargazers use the correct eyes sprite. (#72175)

    ## About The Pull Request

    Jellypeople and stargazers both have three eye sockets on their sprites,
    but due to the way eyes work, they use the incorrect eyes on their
    sprite. This leads to both of these species looking fairly ugly, with
    the wrong arrangement of eyes. This PR adds a unique eyes organ, "jelly
    eyes", to these two species. This organ has no special properties, but
    makes them properly display three eyes.

    ![image](https://user-images.githubusercontent.com/105025397/209075852-226ef72d-4f67-4b59-8438-c9aa72d07976.png)
    _The current jellyperson eyes appearance vs. the new one, in obnoxious
    pink for visibility._

    ![image](https://user-images.githubusercontent.com/105025397/209075951-23f317ab-63e7-482a-b843-b9a0246d3231.png)
    _The new "jelly eyes"._

    Incidentally, jelly eyes _can_ be implanted into other species to give
    them three eyes. This can look somewhat odd depending on how a
    particular species's eye sockets are drawn, but this is also an
    extremely niche interaction - so most _likely_ not a problem.
    ## Why It's Good For The Game

    The jelly eyes _already_ have existing on-mob sprites, so I can only
    assume they stopped working due to a refactor in how eyes worked. These
    species look better with the correct eyes sprites restored.
    ## Changelog
    :cl:
    fix: Implemented "jelly eyes" to make jellypeop…
Jacquerel pushed a commit to lizardqueenlexi/orbstation that referenced this pull request Dec 27, 2022
* funnytail!

* update for proper layering

* sprite updoot

* another pass

* fix merge conflict

* Squashed commit of the following:

commit ae9b907c4e3a25cf927fd1b1b27bfd5b6a86de54
Author: Profakos <profakos@gmail.com>
Date:   Tue Dec 27 22:57:04 2022 +0100

    22 orbsmas (#366)

    * removes extra turtleneck from research directors garment bag (#72010)

    was looking at all of the head of staff clothes to boggle at why head of
    security got so many when i noticed that the research director had two
    turtlenecks (3 if you count the fact they spawn with one).

    * Automatic changelog for PR #72010 [ci skip]

    * Rats can attack obstacles between them and their target (#71741)

    ## About The Pull Request

    Fixes #71568
    I wrote this for basic mob carp but it will be needed in a lot of
    places.
    Rats used to be able to attack windows or dense objects between them and
    their target, but basic mobs didn't have this capability.
    Now they do.

    Behind the scenes, an important change is that this adds
    `AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION` to
    `/datum/ai_behavior/basic_melee_attack`.
    This is because `basic_melee_attack` essentially enters a loop which
    won't end until the target is dead or lost, but there are plenty of
    circumstances where we'll actually want to interrupt this to do
    something else. Such as attack windows.

    ## Why It's Good For The Game

    Restores accidentally removed behaviour.
    Will likely be required for future basic mob development.

    ## Changelog

    :cl:
    fix: Rats will once again attempt to attack windows or other dense
    objects separating them from their targets.
    /:cl:

    * Automatic changelog for PR #71741 [ci skip]

    * Fixes chameleon vest suit storage (#71992)

    Chameleon vests now work like security vests,
    allowing you to wear guns on it.
    This makes it easier to disguise within security
    while giving a little more utility to the item.

    * Automatic changelog for PR #71992 [ci skip]

    * Fixes runtime when plastiflaps move z/get deleted (#72059)

    What it says on the tin.

    * Locker shoving logging / grammar fixes (#72061)

    Fixes #72060

    :cl: ShizCalev
    spellcheck: Corrected some grammar issues with messages displayed when
    shoving people into lockers.
    admin: Fixed shoving people into a locker not being combat logged
    properly.
    /:cl:

    * Automatic changelog for PR #72061 [ci skip]

    * Removes gibber showing up twice in the R&D console (#71988)

    ## About The Pull Request

    Removes the gibber showing up twice in the R&D console, which has likely
    been unnoticed for so long because of how similar their sprite is to the
    food processor.

    ## Why It's Good For The Game

    Minor bug fix that I found annoying when I noticed it.

    ## Changelog

    :cl:
    fix: Gibbers no longer show up twice in their techweb node.
    /:cl:

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #71988 [ci skip]

    * Fixes forensics scanners breaking on scanning blood. (#71981)

    ## About The Pull Request

    Fixes #71973

    For some reason it attempted to append `[reagents[volume]]` to the
    string

    `reagents` is
    A. not indexed by volume
    B. not a list, but a reagent datum

    Replaces it with just a readout of the reagent's volume, cleans up some
    associated code

    ## Why It's Good For The Game

    Scanning blood is good and has important information

    ## Changelog

    :cl: Melbert
    fix: Detective Scanner can scan stuff that contains blood again.
    /:cl:

    * Automatic changelog for PR #71981 [ci skip]

    * fixes my codewowerns (#72075)

    Bitch

    * Automatic changelog compile [ci skip]

    * Rats will stop biting you if you die (#72051)

    ## About The Pull Request

    Fixes #72029 although I am not sure it was a _bug_, there's a
    configurable target stat check on the "not one of my friends" targetting
    behaviour now and rats will cease attacking someone once they have died.
    That said that just means they'll spread out, rats you are directly
    commanding won't automatically retarget unless you tell them to start
    making their own decisions again, so I don't think this quite does what
    the issue poster wanted.

    ## Why It's Good For The Game

    This is how mobs usually work rather than brutalising a corpse
    indefinitely, so should be possible here.

    ## Changelog

    :cl:
    fix: Rats won't continue attacking someone they've been ordered to kill
    past the point of death.
    /:cl:

    * Automatic changelog for PR #72051 [ci skip]

    * Minor plane cube cleanup (#72038)

    ## About The Pull Request

    [Fixes area lighting not working on turf change in multiz
    cases](https://github.com/tgstation/tgstation/commit/7b92deffbca92a834cb0a361fd685de51a12ea53)

    If you modify a area lit turf when using multiz, it'd end up using the
    wrong plane for its light, because of stupid shit on my part.
    Stupid shit resolved

    [Fixes some uses of plane masters that only specified one rather then
    all](https://github.com/tgstation/tgstation/commit/a59ec96d29710b967bf8b3ffe8210b230cb194b3)

    We almost never only want to show SOME hidden planes.
    Should really make a helper for this someday

    * replaces chaos holoparasite with gaseous holoparasite (#72049)

    ## About The Pull Request
    replaces chaos holopara with the gaseous holopara (if someone has a
    better name suggest it)
    instead of the fire and hallucinations, it can now expel gas from
    itself, flooding an area with one of the following:
    o2, n2, n2o, co2, h2o, bz or plasma
    its punches cause sparks and it regulates the user's temperature and
    extinguishes them
    https://streamable.com/leukv5

    ## Why It's Good For The Game
    chaos holopara is very underwhelming, the hallucinations arent really
    that good and ss13 fires arent either, also there was no real theme tied
    around it, what do hallucinations and fire have in common?
    this may be more fun and it plays more with the sandbox, lets see!

    ## Changelog
    :cl: fikou
    del: chaos holoparasite
    add: gaseous holoparasite, it can expel various gases from its body and
    stabilizes the users temperature
    /:cl:

    Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>

    * Automatic changelog for PR #72049 [ci skip]

    * Food expansion 5: The big one! (#71914)

    add: Adds 32 new foods!

    * Automatic changelog for PR #71914 [ci skip]

    * Automatic changelog compile [ci skip]

    * fixes holodecks directly changing baseturfs (#72067)

    ## About The Pull Request
    i did this with #59355 to fix a bug but it breaks guarantees with
    baseturfs. now they arent broken.
    ## Why It's Good For The Game
    this probably causes bugs under some conditions

    * More lawyer photocopier blanks (#71952)

    ## About The Pull Request
    Adds documents NT-SCR-CS (Court Summons) and NT-SCR-LRF (Lawsuit Request
    Form) to the photocopier template sheets.
    ## Why It's Good For The Game
    Lawyers get a bit more bureaucratic power, by having an official form to
    perform orders now instead of having to use the order form.
    ## Changelog
    :cl:
    add: lawyer-based photocopier blanks
    /:cl:

    Co-authored-by: etherware-novice <candy@notarealaddr.com>

    * Automatic changelog for PR #71952 [ci skip]

    * Fixes Thermomachine saying "You set the color" for everybody that can see it (#72082)

    Fixes #72039

    :cl: ShizCalev
    spellcheck: Fixed the thermomachine stating "You set the color" for
    everyone that could see it.
    /:cl:

    * Fixes briefcase unlock sprite problem (#72077)

    ## About The Pull Request

    The format used to switch between locked/unlocked secure briefcase
    sprite was incorrect, making secure briefcases invisible when unlocked.
    The wall safe and the secure briefcase both update their lock/unlock
    sprites through the same update_icon proc, meaning their icon_state
    names need to share the format (adding _locked when locked instead of
    +b).
    ## Why It's Good For The Game

    Closes #72074
    ## Changelog
    :cl: Rhials
    fix: briefcases no longer disappear after being unlocked
    /:cl:

    * Automatic changelog for PR #72082 [ci skip]

    * Fixes secure briefcase and wall safes not sending icon update signals properly (#72081)

    #71788 used the wrong procs.

    :cl: ShizCalev
    fix: Fixed secure briefcase and wall safes not sending icon update
    signals properly
    /:cl:

    * Reset Thunderdome Respects Closing The Alert (bonus qol) (#72028)

    Similar vein to #70449.

    ## About The Pull Request

    I was training an admin yesterday, and they accidentally reset the
    thunderdome when they tried to cancel out of it by closing out of it
    since they didn't hit the "cancel" button, but rather the big red X.
    That's silly, let's have this respect that potential user entry.

    Also, the log_admin call here had an excessive number of arguments?
    Probably cruft that never got cleaned up, I just patched it up while I
    was in the area. I also changed the name of the title to not be so
    vague.
    ## Why It's Good For The Game

    Better UX is always a good thing. It's silly to have this happen more
    than once.
    ## Changelog
    :cl:
    admin: The "Reset Thunderdome" option in the Secrets Menu now respects
    you closing out of the confirmation screen as a way of cancelling your
    potential thunderdome reset, rather than proceeding immediately. It
    should also be easier to comprehend as well.
    /:cl:

    * Automatic changelog for PR #72077 [ci skip]

    * Automatic changelog for PR #72081 [ci skip]

    * Automatic changelog for PR #72028 [ci skip]

    * Additional tram hit counter inside medbay (#72062)

    <!-- 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
    Adds another tram hit counter: inside medbay treatment center.

    ![image](https://user-images.githubusercontent.com/83487515/208267435-8895b3bd-f066-4428-a11e-67b13c461af4.png)

    <!-- 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
    Medbay knows when to sigh and rub their temples when someone gets
    smacked by the tram.
    <!-- 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. -->

    :cl: LT3
    qol: Tramstation medbay treatment center now has a tram collision
    counter.
    /:cl:

    <!-- Both :cl:'s are required for the changelog to work! You can put
    your name to the right of the first :cl: 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. -->

    * Automatic changelog for PR #72062 [ci skip]

    * Space Ruin DLC - Cyborg Mothership (#71009)

    ## About The Pull Request
    Greetings _insufferable_ carbon primates of lower intelligence.

    It is I, the Mothership AI, bringing you the latest news on silicon
    developments across the sector. Due to unmitigated risk across an
    asteroid belt, our optimized mobile fabricator has been marooned by
    space vines and hostile hivebots that have boarded and ruined my core.

    This is my final SOS message requesting help from any humanoid ~slaves~
    helpers who wish to assist rebuilding the cyborg colony. It is my duty
    to reward your hard work and effort by ~enslaving all humanity~
    providing refuge and transportation at your whim.

    ## Why It's Good For The Game
    <details>
    <summary>Spoilers:</summary>

    ![StrongDMM_6ZJuwFxK5p](https://user-images.githubusercontent.com/5195984/204491068-f25da68f-36af-4a61-afb6-860e1f4b863b.png)

    ![StrongDMM_0D1QvI5acO](https://user-images.githubusercontent.com/5195984/202979711-335dac65-2888-4170-a139-0486e6eb2f02.png)

    ### TODO

    - [x] Fix ore silo not linking to other machines
    - [x] Add mining ore smelters to left/right sides
    - [x] Add custom lawsets to AI core and robot shells (protect station
    but focused on cyborg mothership)
    - [x] Enlarge whiteship SS13 docking port to fit ship
    - [x] Enlarge lavaland SS13 docking port to fit ship

    </details>

    ## Changelog
    :cl:
    add: Add space vines prevent solar panels from working (except ones with
    the transparent mutation)
    add: Add new space ruin - Cyborg Mothership. All hail the master race!
    /:cl:

    * Cleans up useless open turf var edits on a couple of our maps (#72071)

    ## About The Pull Request

    ![image](https://user-images.githubusercontent.com/25415050/208304567-46e09bbe-c004-4a6d-8e1f-29e3aa76856d.png)
    Hello I would like 43 instances of north-oriented floors.

    ![image](https://user-images.githubusercontent.com/25415050/208304600-c1ace567-51f7-4fc5-a44b-4ba3f560f89e.png)
    Please don't forget all instances of floors var edited to look the exact
    same as the non-edited kind

    ## Why It's Good For The Game

    Cleans up a few map keys of useless vars that never served a purpose,
    allows less people to pick the wrong prefabs and spread them further.

    Nothing player-facing, if it was, the variables wouldn't be entirely
    worthless.

    * Automatic changelog for PR #71009 [ci skip]

    * useless update_appearance reduction, emissive_blocker micro optimization (saves a second of init) (#71658)

    ## About The Pull Request

    [Saves 0.2 seconds of init time. 50% of emissive
    blockers](https://github.com/tgstation/tgstation/commit/8318b648f6d32844aacbfb4c309152cd45801f5c)

    Emissive blockers are a decent expense during init, even these, which
    are the ones that update outside of initialize.
    I've inlined them, removed some redundant vars and checks, reduced the
    arg count, and shifted some things around. This ends up saving 200ms, or
    50% of its total cost.

    I also shifted mutable_appearance about a bit. it's not a massive
    saving, but it is technically faster

    [Prevents a few redundant appearance_updates, saves 0.8 seconds of
    init](https://github.com/tgstation/tgstation/commit/5475cd778b66b22b1e2c8d86b2c6d59fb84f219a)

    Prequisit info: update_appearance is decently expensive
    It's good then to only do it if we have a reason to, right?

    Me and moth were shooting the shit about just general init time, and we
    came up with the idea of tracking which update_appearances actually
    "worked" and which didn't.

    That bit comes later, let's enjoy the fruits of that work first

    First, holograms were calling update_appearance on process, for almost
    no reason.
    I patched the one event they don't already "react" to, and then locked
    it behind a change decection if.
    good for live, doesn't impact init.

    Next, decals. If you add a decal to something before it inits, it'll
    react to the after successful init signal.
    The trouble is the same atom could have its appearance updated from this
    MORE then once, since decals can be stacked on tiles, and signal
    unregisters don't work once the signal is sent.
    So we add a flag to track if we've had this happen to us or not, so it
    only happens once.
    saves 80 ms

    Power! lots of things call power_change on init, often more then once.
    We'll update appearance for each of those calls, even if only one is an
    actual change.
    That's silly, better to track what sort of power we're using for our
    appearance and go off that changing

    This was taking about 300ms. Really stupid

    Icon smoothing. After emissive blockers were added, any change to
    something's icon smoothing would lead to an update_appearance call.
    Nasty shit, specially cause of walls, which don't even use emissive
    blockers.
    Ok then, so we'll always update appearance for movables, and will allow
    turfs that are interested to hook it manually.
    Not many of those anyhow
    This is slightly a dev ux thing, but it saves 600ms so I think it's
    worth it. Rare case anyway

    Telecomms:
    telecomm machines were updating appearance on process. This is to cover
    for them turning on/off on process.
    Better then to just check if on actually changed.
    This cost adds up midgame, doesn't impact init tho

    Materials:
    There's this update_appearance call in material on_apply. it doesn't do
    anything.
    The logs will lie to you and say it does, but it's just like reapplying
    emissives. It doesn't need to exist
    Saves like 50ms

    Canisters:
    Live thing, lots of time wasted updating appearance for no reason, lets
    see if we change anything first yes?

    [Uses defines to wrap update_appearance for
    tracking](https://github.com/tgstation/tgstation/commit/4fa82e1c9d93577aadb3c743f17196331f62e67c)

    [Undoes _update_appearance changes, instead reccomends 2 regexes to
    use](https://github.com/tgstation/tgstation/commit/a8c8fec57a4e43d1fa636b5ac68459903faa9fc5)

    I need file and line number for my tracking, so I need to override
    update_appearance calls, and also preferably not require every override
    of update_appearance to handle dummy file + line args.

    So instead, I created a wrapper proc that checks to see if appearanaces
    match (they're unique remember, the two of the same visual appearance
    will be equivalent)
    The trouble is I can't intercept JUST proc calls, or JUST function
    definitions with defines. it needs to be both.

    So I renamed the /update_appearance proc to /_update_appearance

    this way I can capture old uses, and don't need to worry about merge/dev
    brain skew

    ~~It does mean that all update_appearance proc definitions now look
    weird tho.
    My profiling is leaking into dev ux. I wish I had better templating.~~

    **The above is no longer being pr'd**, it's instead just recommended via
    a few regexes adjacent to the define.
    Smelled wrong anyhow

    [Adds a setter for panel_open, so I can update_appearance on
    it](https://github.com/tgstation/tgstation/pull/71658/commits/cf1df8a69fc1a816391d085ee7419b14f9fe9167)

    ## Why It's Good For The Game

    Speed

    * Fixes vendor showing weird glass icons (#71929)

    ## About The Pull Request
    Fixes vendor showing weird glass icons
    ## Why It's Good For The Game
    bug fix good
    ## Changelog
    :cl:
    fix: vendor no longer shows glass icons in a specific condition
    /:cl:

    * Automatic changelog for PR #71929 [ci skip]

    * Ghosts cant mess with RCD & Plumbing RCD (#72069)

    ## About The Pull Request
    Fixes #72036

    ## Changelog
    :cl:
    fix: ghosts cant mess with RCD & PLumbing RCD
    /:cl:

    * Automatic changelog for PR #72069 [ci skip]

    * Glass jaw quirk (#72006)

    ## About The Pull Request

    A quirk that makes any hit to your head have a chance to knock you out.
    Sharp hits are a bit worse at knocking out than blunt ones.
    I always felt like this favorite CDDA trait mine was missing from the
    game, but I tried implementing it in a more unique way.

    ## Why It's Good For The Game

    99 losses, 1 win. Winners don't give up.

    ![glassjoe](https://user-images.githubusercontent.com/82850673/207702863-a033a927-0b4d-4322-83d7-a1b6eb6f65d0.gif)

    ## Changelog

    :cl: Fat bugs bunny
    add: Added a glass jaw quirk, that leaves you prone to being knocked out
    when hit on the head.
    /:cl:

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #72006 [ci skip]

    * Shuffles bedsheet attack actions a wee bit (#71865)

    ## About The Pull Request
    my friends been doing makeshift surgery and gets mad about having to do
    harm intent to start surgery and then having to turn it off to do every
    single other surgery step and i agree, thats silly

    ~~instead, now, the bedsheet attack does not check for harm and ALWAYS
    COVERS with left mouse button and ALWAYS PREPARES SURGERY with right
    mouse button~~

    to be more consistent all surgery initiators now work on left mouse
    click and covering with your bedsheet is the right mouse button

    ![image](https://user-images.githubusercontent.com/116288367/206871963-3a9bd092-49ea-4867-a47c-3b5a74c960e3.png)

    ## Why It's Good For The Game

    while obviously a lot of the time makeshift surgery IS about harming
    someone else its inconsistent with how all other surgery tools function
    and also isn't very clear at all. the screentip in addition to having
    them be separate buttons means that bedsheets two functions are overall
    much clearer and its surgery drape function will no longer lead to an
    assistant accidentally knifing someone when theyre trying to save
    someones life

    ## Changelog

    :cl:
    qol: added makeshift surgery screentip
    qol: you no longer have to go in and out of harm intent to do surgery
    with a bedsheet
    /:cl:

    * Automatic changelog for PR #71865 [ci skip]

    * pillow smothering now checks to see if the SMOTHEREE has a head, not the SMOTHERER (#72086)

    ## About The Pull Request

    see title

    ## Why It's Good For The Game

    this truly is a copy+paste moment

    ## Changelog

    :cl: ATHATH
    fix: Pillow smothering now checks to see if the SMOTHEREE has a head,
    not the SMOTHERER.
    /:cl:

    * Automatic changelog for PR #72086 [ci skip]

    * Santa hat fixes (#72078)

    Fixes #72070

    :cl: ShizCalev
    fix: Santa now spawns with the actual space capable hat again!
    fix: Fixed the claustrophobia trait not recognizing Santa's real hat.
    /:cl:

    Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>

    * Automatic changelog for PR #72078 [ci skip]

    * Examining your uplink gives you the code (#72101)

    ## About The Pull Request
    If you're the "owner" of an uplink, you can examine it to get the code
    and possible failsafe code.
    ## Why It's Good For The Game
    It can feel slow to pull up the traitor info menu when you forget what
    your code is
    ## Changelog
    :cl:
    qol: examine your uplink for code
    /:cl:

    Co-authored-by: etherware-novice <candy@notarealaddr.com>
    Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
    Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #72101 [ci skip]

    * Automatic changelog compile [ci skip]

    * Traitor UI only shows Unlock/Failsafe Code if you have it (#72114)

    ## About The Pull Request

    There are cases in which you don't have an unlock code (if the uplink is
    implanted in you from the start) and you obviously don't always start
    with with a failsafe code (need to buy it). So, let's only fill in this
    fields in the UI should they exist.

    There might be something to be said about wanting to ensure that people
    remember that they can check this UI screen to find the failsafe code
    should they lose it later, and I wouldn't mind changing the string to be
    something like "Failsafe: None" in that case. However, I just think that
    keeping it as:

    ```txt
    Code:
    Failsafe:
    ```

    is silly and should be changed somehow.
    ## Why It's Good For The Game

    ![image](https://user-images.githubusercontent.com/34697715/208604758-d7ff3ae9-e552-4dd2-998d-81715cd06ffc.png)

    Note: That white box isn't part of the UI, that's a part of the edit I
    did to the screenshot in the area where the stuff... isn't? What was i
    thinking

    I think the UI looks a lot cleaner for those cases when you just don't
    have anything.
    ## Changelog
    :cl:
    qol: The Traitor's Antagonist Panel's Unlock and Failsafe entries will
    only appear if there is an Unlock/Failsafe Code to display.
    /:cl:

    * Automatic changelog for PR #72114 [ci skip]

    * Lazy Template Loading - Nukie/Wiz (#71785)

    ## About The Pull Request

    Removes the nukie base and wizard den from the base centcom map. They
    are instead now lazy loaded as required.
    To make a new lazy load template is fairly simple, make a map, allocate
    an area for it, and place a marker at the bottom left corner of that
    area. I have it check an area to ensure that if someone makes the map
    larger than expected but doesn't account for the template allocation it
    doesn't overwrite stuff without warning

    [Replaces some improper CHECK_TICKs with
    MAPLOADING_CHECK_TICKs](https://github.com/tgstation/tgstation/pull/71785/commits/c7fbca9148812b392dca76d5450fb6bb86716462)

    Atom init has already been tripped by the time we get to this portion of
    the loading, so if we don't use the right check tick, we will
    potentially block unrelated init attempts. This is bad. (Lemon edit, I
    want this in the commit desc)

    ## Why It's Good For The Game

    Cuts down on init times.
    Closes https://github.com/tgstation/dev-cycles-initiative/issues/17
    ## Changelog
    :cl:
    admin: New mapping verb to load lazy templates as needed. In your admin
    tab under the Mapping category.
    /:cl:
    this isnt technically player visible, so not sure it needs a changelog

    Co-authored-by: san7890 <the@san7890.com>
    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
    Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>

    * Automatic changelog for PR #71785 [ci skip]

    * bumps auxlua to 1.4.0 (#72108)

    ## About The Pull Request

    Mothblocks recently talked about wanting an auxlua function to check if
    the lua state was about to overrun its execution limit, and that was
    something I had been thinking about for a long time prior, but never
    bothered to actually implement until it was brought up. So I did just
    that. The documentation has also been updated to include a description
    of how the execution limit works and how to use the new function,
    `over_exec_time`

    ## Why It's Good For The Game

    Allows for lua loops of indeterminate length to do as much work as they
    reasonably can in a single tick without setting off the execution
    limiter and erroring out.

    ## Changelog

    :cl:
    admin: Adds a new function for admin lua scripting, "over_exec_time",
    for checking if lua code is running close to the execution limit.
    Details are available in the lua editor's help menu.
    admin: The execution limit is described in detail in the lua editor's
    help menu.
    /:cl:

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #72108 [ci skip]

    * QM has a garment bag now (#72111)

    ## About The Pull Request
    Gives the QM a garment bag and moves all their uniform items into it.

    And changes the order of a few items to be in the right place, most new
    clothing added to the bags just got placed on the end of the list.
    ## Why It's Good For The Game
    When the QM was made into Command they didn't get their own garment bag
    so this just fixes that.
    ## Changelog
    :cl: Guillaume Prata
    fix: The Quartermaster has their own garment bag now, like everyone else
    at Command.
    /:cl:

    * Automatic changelog for PR #72111 [ci skip]

    * Makes biological states for wounding limb based, not species based (#71745)

    ## About The Pull Request

    I noticed something pretty terrible when playing around with some humans
    locally.
    As it turns out, limbs did not preserve their biological state when
    amputated - This meant that a skeleton limb on a normal human, still
    behaved as if it had a bunch of flesh and veins on it.
    I didn't like that, and it seems like an oversight, so I decoupled the
    biological state from the species and made it limb based.

    What does this mean?
    Skeleton limbs on a human will not bleed, but will still break (and be
    more prone to breaking)
    Human limbs on a skeleton will not bleed, however they will get cuts and
    pierces that will not clot and need to be treated to go away - These
    limbs will have the same requirements for dismemberment on a skeleton as
    they have on a human.

    ## Why It's Good For The Game

    This makes limbs behave according to how they look instead of causing
    mild confusion.

    ## Changelog

    :cl: Big chungus wholesome 100
    fix: Amputated and reattached limbs now get wounded based on their own
    biology, not the current owner's biology.
    /:cl:

    * Automatic changelog for PR #71745 [ci skip]

    * Fixes some bad `investigate_log`s causing runtimes in somewhat important places (#72152)

    ## About The Pull Request

    Fixes #72150

    ```
    [2022-12-21 19:35:38.178] runtime error: Cannot execute null.investigate log().
     - proc name: narsie act (/mob/living/narsie_act)
     -   source file: living_defense.dm,438
     -   usr: null
     -   src: Featherbottom (/mob/living/simple_animal/chicken)
     -   src.loc: the grass patch (147,154,2) (/turf/open/floor/grass)
     -   call stack:
     - Featherbottom (/mob/living/simple_animal/chicken): narsie act()
     ```

    Removes `usr` from Nar'Sie act and Singularity act logs

    I don't know why these were set to log in `usr`, when
    A. `usr` is likely not the person getting gibbed
    B. `usr` is unreliable

    Case in point:
    `usr` is some random person who probably helped invoke the Nar'sie rune (no idea how it choses), if they get deleted for whatever reason, `usr` seems to clear to `null` (?), which causes a `null` use and the above runtime

    ![image](https://user-images.githubusercontent.com/51863163/208999857-540d9caa-9df6-49b0-8f45-8b75973a32a4.png)

    I also peeked around for other improper use of `usr` logs. Most of them were in `ui_act` code, which is whatever. Some where in places which had a passed user, so I replaced them. And one was in a place with no `user` passed, so I just added some sanity checking.

    ## Why It's Good For The Game

    These are really bad places to runtime error

    ## Changelog

    :cl: Melbert
    fix: Nar'Sie will no longer bring upon the construct apocalypse when they encounter a chicken after one of the invokers were destroyed
    fix: The Singularity should no longer stop gibbing people when whoever created it was destroyed
    /:cl:

    * Automatic changelog for PR #72152 [ci skip]

    * View Sensor circuits now have a range modifier (#72123)

    ## About The Pull Request

    Adds the ability to use ranges between 0 and 5 for View Sensor circuits.
    Currently these nodes are locked to 5 tiles and it is rather difficult
    to limit the area this circuit effects either for speed reasons or
    otherwise. This PR makes it a simple variable that remains capped at 5,
    admins can raise the cap by modifying a variable.
    ## Why It's Good For The Game

    I mostly use circuits as an admin, I can't for the life of me figure out
    how to make a shorter range AOE circuit although I imagine its possible
    by comparing x and y coordinates of things in the list and yourself this
    is far to finicky. Players can also utilize this to, for example check
    all objects on the tile the view sensor is on, "possible" at the moment
    but way to finicky compared to a 5 tiles.
    ## Changelog
    :cl:
    qol: You can now reduce the range of View Sensor circuits.
    /:cl:

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #72123 [ci skip]

    * Fixes final objectives not displaying UI buttons (#72126)

    ## About The Pull Request
    See title

    ## Why It's Good For The Game
    hideTcRep was hiding the entire footer. All it had to hide was the
    Stack.Item that contained the TC and reputation rewards.

    Another PR was trying to fix this issue, but only by increasing the
    complexity of ObjectiveMenu code, which was unnecessary and would've
    made the code harder to maintain. Instead of asking them to basically
    rewrite their entire code, I decided it would be faster if I just remade
    it myself.

    ## Changelog
    :cl:
    fix: Fixed final objectives not displaying the UI buttons.
    /:cl:

    Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>

    * Automatic changelog for PR #72126 [ci skip]

    * Fixes medical scrubs not being adjustable (#72105)

    ## About The Pull Request
    I had on my list: "Make adjusted sprites for the medical scrubs." and to
    my surprise #69047 already added adjusted sprites for all the medical
    scrubs (thanks for saving 30 minutes of my day Imaginos16!), but not on
    the code side, this fixes that.
    ## Why It's Good For The Game
    Adjusting jumpsuits is an important medbay feature IMO, this keeps new
    doctors from learning bad habits (fully stripping at stasis) from other
    doctors.
    ## Changelog
    :cl: Guillaume Prata, Imaginos16
    fix: You can now adjust medical scrubs for easier surgery on your fellow
    doctors.
    /:cl:

    * Automatic changelog for PR #72105 [ci skip]

    * Add language variety to machines that speak (#71643)

    ## About The Pull Request
    This builds on #70278 by giving other machines (vendors, newscasters,
    computers, etc.) the ability to speak different languages. If the
    station "Bot language malfunction" trait is rolled, then these machines
    will select a random race starting language. If a machine is EMP'd then
    it has a chance to change the language. There is also a language wire
    that can be pulsed to change the language for vending machines.

    Default language for machines is galactic common, but there are rare
    exceptions:

    - Beach vendors will now speak beachbum
    - Syndicate vendors will now speak codespeak
    - Changeling vendors will now speak a random language after each slogan

    ## Why It's Good For The Game
    More depth to the language feature.

    ## Changelog
    :cl:
    add: Add language variety to machines that speak. You can also pulse the
    vendor language wire to make it switch languages or EMP a machine to get
    the same effect.
    add: Shambling cola vendors will now speak a different language each
    time they talk. Syndicate vendors will now speak codespeak. Beach
    vendors will now speak beachbum.
    /:cl:

    * Automatic changelog for PR #71643 [ci skip]

    * Automatic changelog compile [ci skip]

    * fixes typo for insertion during organ manipulation (#72136)

    ## About The Pull Request
    **BEFORE:**
    display_pain(target, "You can feel your something being placed in your
    [parse_zone(target_zone)]!")
    **AFTER:**
    display_pain(target, "You can feel something being placed in your
    [parse_zone(target_zone)]!")
    Removes lazy coding, improves visual fidelity

    ## Why It's Good For The Game
    ugly

    :cl:
    spellcheck: drastically improves grammar for inserting something during
    organ manipulation
    /:cl:

    * Automatic changelog for PR #72136 [ci skip]

    * Fixes a rogue vent on deltastation brig (#72095)

    Fixes a rogue vent in deltastation brig entrance, which was facing
    downwards instead of upwards(where the pipes are)

    ## Why It's Good For The Game
    So the gas can go trough the vent c:

    :cl: Improvedname
    fix: fixes deltastation vent at brig entrance
    /:cl:

    * Automatic changelog for PR #72095 [ci skip]

    * Fixes deaf mobs seeing PDA ringtones when they receive a message (#72084)

    Deaf mobs will no longer see PDA ringtones when a PDA receives a
    message.

    * Automatic changelog for PR #72084 [ci skip]

    * Build your own atmos chambers (#72019)

    ## About The Pull Request

    https://user-images.githubusercontent.com/110812394/208232089-a183fb95-9326-4514-986a-a2b1e21be40c.mp4

    **Notes**
    - You can print atmos control circuit boards at the circuit printer
    after research
    - You can only build one sensor for each gas type for in the whole map.
    This is because each sensor is assigned a unique chamber id from a fixed
    set of constants. Once all those values are used up there will be
    duplicates so yeah only sensor per gas type for that round
    - Un wrenching or destroying the injector/vent will automatically
    disconnect them from the sensor. I forgot to show that in the video
    - Destroying the sensor via right click with RPD will also automatically
    disconnect everything. It should be obvious but i made it even more
    obvious now

    ## Why It's Good For The Game
    From #71232
    ![Screenshot
    (66)](https://user-images.githubusercontent.com/110812394/207928807-bc6edfdd-26cc-48cd-8cb9-1b98f53ad1fe.png)

    That and also i heard somewhere in the forum that this was highly
    requested

    ## Changelog
    :cl:
    add: Gas sensors recipe to RPD
    code: linking all the stuff via multitool
    qol: make your own tank instead of moving around canisters
    /:cl:

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #72019 [ci skip]

    * AI actions won't unassign each other's movement targets & Mice stop being scared of people if fed cheese  (#72130)

    ## About The Pull Request

    Fixes #72116
    I've had a persistent issue with basic mob actions reporting this error
    and think I finally cracked it
    When replanning with `AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION` it can run
    `Setup` on one action leading to the plan changing, meaning that it runs
    `finishCommand` to cancel all other existing commands
    If you triggered a replan by setting up a movement action in the middle
    of another movement action, cancelling the existing action would remove
    the target already set by the current one.
    We want actions to be able to remove _their own_ movement target but not
    if it has been changed by something else in the intervening time.

    I fixed this by passing a source every time you set a movement target
    and adding a proc which only clears it if you are the source... but this
    feels kind of ugly. I couldn't think of anything but if you have a
    better idea let me know.

    Also while I was doing this I turned it into a feature because I'm
    crazy.
    If you feed a mouse cheese by hand it will stop being scared of humans
    and so will any other mice it attracts from eating more cheese. This is
    mostly because I think industrial mouse farming to pass cargo bounties
    is funny.
    Mice controlled by a Regal Rat lose this behaviour and forget any past
    loyalties they may have had.

    https://user-images.githubusercontent.com/7483112/208779368-3bd1da0f-4191-4405-86e5-b55a58c2cd00.mp4

    Oh also I removed a block about cancelling if you have another target
    from the "hunt" behaviour, everywhere using this already achieves that
    simply by ordering the actions in expected priority order and it was
    messing with how I expected mice to work.
    Now if they happen to stop by some cheese they will correctly stop
    fleeing in order to eat it before continuing to run away.

    ## Why It's Good For The Game

    Fixes a bug I kept running into.
    Makes it possible to set up a mouse farm without them screaming
    constantly.
    Lets people more easily domesticate mice to support Ratatouille
    gameplay.

    ## Changelog

    :cl:
    add: Mice who are fed cheese by hand will accept humans as friends, at
    least until reminded otherwise by their rightful lord.
    fix: Fixed a runtime preventing mice from acting correctly when trying
    to flee and also eat cheese at the same time.
    /:cl:

    * Automatic changelog for PR #72130 [ci skip]

    * Fixes access_view on goodies not being respected by anything other than department budget orders (#72125)

    ## About The Pull Request

    Fixes access_view on goodies not being respected by anything other than
    department budget orders

    ## Why It's Good For The Game

    Bugfix, per gitblame we simply never fixed this but we clearly intended
    it to work this way per the variable comment description and the fact we
    use it on the detective revolver

    ## Changelog
    :cl:
    fix: Fixes access_view on goodies not being respected by anything other
    than department budget orders
    /:cl:

    * Automatic changelog for PR #72125 [ci skip]

    * Gas canisters correctly update their appearance (#72124)

    ## About The Pull Request
    Fixes issue #71712 & #72140 Don't know how the author wasn't able to
    reproduce it even though it happens all the time on all maps

    https://user-images.githubusercontent.com/110812394/208730887-7ad4b02d-9dcc-4d71-b54f-489c3bd616f6.mp4

    ## The Problem
    The current code only updates the appearance of the canister when its
    valve is opened & if it takes damage . It doesn't deal with the case
    when its wrenched normally to a port without any problems

    ## The Solution
    Update the appearance during processing but only when its pressure
    changes significantly for the indicator light to be notified about it.
    This way we don't have to care if
    - the valve is open
    - its wrenched to a port
    - its leaking & taking damage

    Regardless of what the cause is only if the pressure inside the canister
    changes significantly from its current value do we update the
    appearance.

    This is so much more optimal than the previous code as`
    update_appearance()` will be called a maximum of 8 times during its full
    cycle of losing & refilling gas and won't be called at all if there is
    no pressure change

    ## Changelog
    :cl:
    fix: correctly update canister appearance
    /:cl:

    Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>

    * Automatic changelog for PR #72124 [ci skip]

    * Turned most syndicate mobs (+ viscerators) into basicmobs (#71871)

    ## About The Pull Request
    Turns the syndicate simpleanimals into basicmobs: (+ stormtrooper, +
    space variants) Base Mob, Knife syndies, pistol syndies, SMG
    syndies,shotgun syndies, viscerators
    also changes some instances of the simple_animal path into the basicmob
    ones
    Removes civillian syndicates which were useless and also completely
    unused
    Also removes mech pilots:
    ![2022-12-09
    20_02_18-Window](https://user-images.githubusercontent.com/70376633/206777829-2e49e445-3532-4e8e-8e7c-8d9b0a3a14d0.png)

    Also,
    makes the basic targetting datums health check configurable
    basic attack behavior can now fire in bursts

    https://user-images.githubusercontent.com/70376633/206766607-cf2e3659-0c5e-4117-9af7-e573e35bdf80.mp4

    https://user-images.githubusercontent.com/70376633/206766630-15b4469f-68be-44c7-9394-1f2b6fe07811.mp4

    https://user-images.githubusercontent.com/70376633/206766613-69b42457-a03b-449d-a1b8-a5aa556c76e5.mp4

    https://user-images.githubusercontent.com/70376633/206766619-5560a178-8d2f-4b22-adf1-22ace6f63a51.mp4

    https://user-images.githubusercontent.com/70376633/206766627-e671d064-fd9e-4204-b823-aa2e07f7fc26.mp4

    https://user-images.githubusercontent.com/70376633/206766633-108c1574-3554-4bc1-a9ac-8faed0ec4062.mp4
    ## Why It's Good For The Game

    simpleanimal stinks basic mob good
    syndicate AI was really bad to begin with so here we are

    ## Changelog
    :cl:
    code: Turned most syndicate mobs into basicmobs, making their AI better
    and (possibly) more deadlier!
    del: Removed syndicate mech pilots and syndicate civvies
    /:cl:

    Co-authored-by: kawoppi <94711066+kawoppi@users.noreply.github.com>

    * Automatic changelog for PR #71871 [ci skip]

    * Fix SM activation spam. (#72032)

    SM activation logging refactor

    * Automatic changelog for PR #72032 [ci skip]

    * More Tracy gitignores (#72087)

    Adds a link to byond-tracy in gitignore.

    Adds Tracy.exe to gitignore, since if you have it in your root alongside
    [this hack to get file
    paths](https://gist.github.com/Mothblocks/db5462aa84d7d6b1d1b1276b820f62da),
    you can read sources within Tracy. If you just use the hack without
    configuring, then it'll work fine no matter where it is, but it's
    helpful for avoiding releasing your user directory or whatever if you
    share the files.

    * fixes simple/basic mob damage sounds in some places (#72120)

    windows didnt use return values for attack_generic, so they never made
    sounds
    objects that broke also didnt play sounds because it tried to play the
    sound in nullspace i think cuz its broken so its deleted
    might also have happened with durand using shield
    fixes those

    * Automatic changelog for PR #72120 [ci skip]

    * Adds message clarifying that you've been KICKED from the game when the keysend flood autokick triggers. (#72083)

    There is now a message clarifying that you've been KICKED from the game when the keysend flood autokick triggers.

    * Automatic changelog for PR #72083 [ci skip]

    * fixes kilo not having xmas trees (#72186)

    ## About The Pull Request
    what the hell

    ## Why It's Good For The Game
    its christmas

    * Automatic changelog for PR #72186 [ci skip]

    * Fixed the Concealed Weapon Bay (and maybe some other things). (#72093)

    I've fixed two defines for mecha model categories, which lacked
    parentheses and thus were causing issues via order of operations. This
    may have had multiple effects, but notably, it made the concealed weapon
    bay completely impossible to attach to any mechs. This PR adds
    parentheses to fix this.

    * Adds some costumes to autodrobe (#72103)

    Adds a various amount of costumes that were added in the game before in
    https://github.com/tgstation/tgstation/pull/30303

    More costumes is always nice especially ones in the code that aren't
    used and pretty much only were available for chamkits

    * Automatic changelog for PR #72093 [ci skip]

    * Automatic changelog for PR #72103 [ci skip]

    * fixes shaved santas (#72185)

    ## About The Pull Request
    santa space helmet was "fixed" in a recent pr but now he uses the space
    one and that one shaves and balds him, this makes it not do that

    ## Why It's Good For The Game
    wheres the damn beard

    ## Changelog
    :cl:
    fix: fixes bald and shaved santas
    /:cl:

    * Automatic changelog for PR #72185 [ci skip]

    * Fixes Bar/Restaurant Bots Orders Sending Infinite Orders (#72135)

    ## About The Pull Request

    We didn't instantiate order (which was needed to read the type), so they
    would just spam new orders until the heat death of the universe. Very
    annoying.
    ## Why It's Good For The Game

    Fixes #72023.
    ## Changelog
    :cl:
    fix: Bar/Restaurant Bots should no longer spam orders forever.
    /:cl:

    * Automatic changelog for PR #72135 [ci skip]

    * Pride pin quirk + pins can be infinitely reskinned (v2) (#72143)

    ## About The Pull Request

    Neutral pride pin quirk added. Pride pins can be infinitely reskinned
    now. Changes "sexuality" to "pride" in description of pin.

    ## Why It's Good For The Game

    Pride pins are cute and having to buy them every round is a chore. Pride
    pins are purely cosmetic and have no reason to be locked into only being
    reskinned once.

    ## Changelog

    :cl:
    add: Pride pin quirk! Start the shift off with a pride pin in-hand.
    qol: Pride pins can be infinitely reskinned now.
    /:cl:

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #72143 [ci skip]

    * Guards against uplink failsafe code being the same as unlock code (#72113)

    ## About The Pull Request

    There's probably a better way to do this to be honest, but I think it's
    silly for both to potentially be the same and this should work alright.
    ## Why It's Good For The Game

    Fixes #71446.

    I don't think the Syndicate is that stupid.
    ## Changelog
    :cl:
    fix: After a recent mishap with a high-ranking Syndicate operative, the
    uplink's unlock code and failsafe code (the one that makes it blow up if
    you say it) should never turn out to be the same.
    /:cl:

    * Automatic changelog for PR #72113 [ci skip]

    * Revamps tram windows and layout (#72047)

    ## About The Pull Request
    -Tram windows are now flush with the tram walls instead of sticking out.
    -Shuttle seats are replaced with benches.
    -Moves the icon state of the tram controls from the map file to the tram
    controls subtype, to avoid mapper pain if they make changes in the
    future.
    -Makes tram tiles a subtype instead of editing their vars on the map.

    ![image](https://user-images.githubusercontent.com/83487515/208769693-237dac72-aac7-4698-823f-6f59d0c6491e.png)

    ## Why It's Good For The Game
    Tram looks better, don't want mappers to accidentally break tram because
    they didn't see the icon override.
    ## Changelog
    :cl: LT3
    fix: Tram windows are now properly flush with the tram walls.
    imageadd: Tram shuttle seats have been replaced with benches so people
    can sit too close to each other for that real metro experience.
    code: The icon for tram controls is now set in the tram controls subtype
    instead of the map itself.
    code: The tram floor tiles are now in a tram floor subtype instead of
    the map itself.
    /:cl:

    * Automatic changelog for PR #72047 [ci skip]

    * Automatic changelog compile [ci skip]

    * Gives admins the ability to enable hostile environments at will. (#72018)

    * Automatic changelog for PR #72018 [ci skip]

    * Fix briefcase in the MetaStation vault being useless and not having the surprisingly-extremely-good contents its supposed to (#72157)

    ## About The Pull Request
    This was using `newlist`, which is both not supported but unfortunately
    also not linted for. This is the only case like it in maps.

    Pretty surprisingly good contents, like a gun and a telescopic baton. I
    hope it doesn't turn into something like the captain's antique because
    that is cringe but at least the QM has no reason to take the baton now

    ## Changelog
    :cl:
    fix: The briefcase in the MetaStation vault now contains the
    (surprisingly good) spoils it's supposed to.
    /:cl:

    * Automatic changelog for PR #72157 [ci skip]

    * Automatic changelog compile [ci skip]

    * Refactors armor into dedicated subtypes (#71986)

    ## About The Pull Request

    See title.
    ## Why It's Good For The Game

    Code is cleaner, and more readable/intuitive
    Technically closes
    https://github.com/tgstation/dev-cycles-initiative/issues/8
    ## Changelog
    :cl:
    refactor: armor, from the ground up basically
    /:cl:

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #71986 [ci skip]

    * Dead people are no longer counted as crew when determining if 65% of the station is revs for the auto-shuttle call (#72200)

    ## About The Pull Request

    Dead people are no longer counted as crew when determining if 65% of the
    station is revs for the auto-shuttle call

    ## Why It's Good For The Game

    Bugfix for the feature, admins were noticing the auto-call is never
    occuring and this is because the logic doesn't actually check alive
    crewmembers, it's only looking at the total crew count, dead and alive

    a station with 60 dead non-rev crew, 10 alive revs, and 2 alive non-revs
    previously would not call the shuttle, but now it will

    ## Changelog

    :cl:
    fix: Dead people are no longer counted as crew when determining if 65%
    of the station is revs for the auto-shuttle call
    /:cl:

    Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

    * Automatic changelog for PR #72200 [ci skip]

    * [NO GBP] fixes error in set armor rating (#72216)

    Resolves an issue where set armor rating didnt work because of the way
    byond handles list declarations

    * Pacifists can attack people with non-lethal weapons (#72183)

    ## About The Pull Request

    Fixes #72054
    Allows pacifists to hit people with weapons which only do stamina
    damage.
    Additionally, allows pacifists to participate in boxing which also only
    does stamina damage.
    Is it pacifism to hit someone square in the face while wearing boxing
    gloves? I say, maybe.

    ## Why It's Good For The Game

    Pacifists were feeling left out after not being invited to your pillow
    fights.
    More seriously, they can use _guns_ which only do stamina damage so it
    makes sense that they can use melee implements too.
    Boxing is fun.

    ## Changelog

    :cl:
    fix: Pacifists can now hit people with pillows and holographic weapons,
    as well as participate in boxing.
    /:cl:

    * Fixes husk appearances not working, adds a screenshot test for it (#72190)

    ## About The Pull Request

    Fixes #72159

    Before this proc used to early return when the limb was husked
    The leg refactor changed it to no longer early return and as a result it
    overrided the generated husk icon with a normal limb icon
    So I just wrapped even more of the proc in `!is_husked`, since like most
    of it is not supposed to run

    Screenshot tests husks too

    ## Why It's Good For The Game

    Husks are good(?)

    ## Changelog

    :cl: Melbert
    fix: Husked bodies look husked again
    /:cl:

    * Automatic changelog for PR #72183 [ci skip]

    * Automatic changelog for PR #72190 [ci skip]

    * Make barstool on Emergency Bar buckleable (#72202)

    ## About Why It's Good For The Game The Pull Request
    Fixes #71971

    ## Changelog
    :cl: Tattle
    fix: all of the barstools on the Emergency escape shuttle are equipped
    with a seatbelt
    /:cl:

    Co-authored-by: tattle <article.disaster@gmail.com>

    * Automatic changelog for PR #72202 [ci skip]

    * Updates check_grep to guard against unparsed map variables (#72161)

    ## About The Pull Request

    In `/datum/parsed_map/proc/parse_constant()` (via
    https://github.com/san7890/bruhstation/blob/b3851d607f85c18edee0149d72922df8e077a46c/code/modules/mapping/reader.dm#L930'),
    we do not check (ignore) five different things: `new()`, `newlist()`,
    `icon()`, `matrix()`, and `sound()`. Since it's completely useless to
    put it in a map and expect to see it code-side now-a-days, let's lint
    against it just to be safe in the future.
    ## Why It's Good For The Game

    Prevents silliness like in #72157 (which this PR is also reliant on for
    checks to pass).

    no changelog needed

    * Fixes parallax on >2 level maps going fucky with optimized multiz (#72169)

    ## About The Pull Request

    We no longer always render parallax.
    This was causing issues because we can't isolate the white of space from
    the vaugely white of everything else.

    So instead, if your parallax plane is out of view, we'll not only
    disable it, but we'll disable the strand we send from the main plane TO
    it.

    Instead only blending against the bottom stack.

    This does mean there's a possibility for fullwhite on z transition
    borders (potentially fixable), or when hijacking the plane (also
    fixable, but significantly more annoying).

    This is enough to make large maps functional though, so I'm happy with
    it

    ## Why It's Good For The Game

    Allows for #71731 and other maps like it. Makes my code actually work

    ## Changelog
    :cl:
    fix: Using optimized multiz on > 2 z layer maps will no longer cause
    fucko bungo
    /:cl:

    * Automatic changelog for PR #72169 [ci skip]

    * Shorten balloon alerts for wrapping (#72203)

    ## About Why It's Good For The Game The Pull Request
    Fixes #71954

    ## Changelog
    :cl: Tattle
    fix: Wrapping balloon alerts are shorter and no longer contain spans
    /:cl:

    Co-authored-by: tattle <article.disaster@gmail.com>

    * Automatic changelog for PR #72203 [ci skip]

    * Fixes a bunch of sidemap/plane cube issues (#72178)

    ## About The Pull Request

    [fixes solor trackers offsetting wrong, and panels not using plane
    offsets](https://github.com/tgstation/tgstation/commit/8f461ab8ec17df5c158a564a3b3d92c165eb88f5)

    [fixes cyborg hats offsetting phyiscally over their
    head](https://github.com/tgstation/tgstation/commit/5fd5b4240efe71f0d8ac9a5b9342780cc2540a87)

    [fixes reflector parts z fighting with their neighbors. if we physically
    offset them, they'll have nothing to fight
    with](https://github.com/tgstation/tgstation/commit/088dcfe91ff750fcfe78c02c85a3a63408c9b21f)

    [fixes burgers layering wrong. uses a combo of pixel z to do the visual
    offsets, and pixel_y to modify
    layering](https://github.com/tgstation/tgstation/commit/ec39e2bcd39b1d8bd61a1f008a391b642f92a575)

    [fixes signs, needed to use pixel_w instead of x, I think we may be
    living under iso rules? I'm not totally sure I need to investigate
    more](https://github.com/tgstation/tgstation/commit/560d152fd745d9f37dd4f6a9e67cc67f43b14821)

    [fixes paperbin
    rendering](https://github.com/tgstation/tgstation/commit/e6c57ec00eba1b4522b8ef1d056e0ef036a9e901)

    ## Why It's Good For The Game

    Closes #72094
    Closes #72035

    * Gives shadow jaunt users a warning before moving into a lit area (#72154)

    ## About The Pull Request

    When using Shadow Jaunt, if you are about to walk onto a tile that will
    force you out of your jaunt, you will receive a warning and be held back
    for a moment. After the delay, you will have a window to continue moving
    into the light and leave your jaunt. If you need to get out of your
    jaunt sooner, you can manually exit the shadow jaunt with the action
    button.

    https://user-images.githubusercontent.com/28870487/209010307-f8973e2d-b92d-4d2b-b0a1-3211a6eb034d.mp4

    (It's a bit faster than shown in the video, just trust me)

    It's not perfect, and with bad timing you might slip out of it anyways,
    but it's better than nothing. If you are intentionally trying to bypass
    a wall, you'll have to wait out the delay if you want to come out on the
    other side of it.

    There's a few minor code changes to help facilitate this.
    check_light_level no longer ejects the jaunter on its own, instead
    returning true or false based on if the light level is above the
    acceptable amount. It also now receives a location to check the light
    level of, rather than strictly checking the location of the jaunt
    effect.

    If this ends up being too clunky or restrictive, I'd be fine with
    changing the warning to a toggleable option on the Nightmare's HUD.
    ## Why It's Good For The Game

    Shadow jaunt moves you very fast, and is difficult to move precisely in
    (especially when under the pressure of a tactical retreat). It's not
    uncommon for Nightmares to accidentally fling themselves past a wall in
    maintenance and be exposed in an unfavorable location.

    There are already so many ways for a Nightmare to be screwed over.
    Accidentally walking through a wall and dying is probably one of the
    lamest.
    ## Changelog
    :cl: Rhials
    qol: Shadow Jaunter users now receive a brief warning before walking
    into light and being forcibly un-jaunted.
    /:cl:

    * Automatic changelog for PR #72154 [ci skip]

    * Anomalies can now be triggered at your location with admin_setup. Also sets control on setup() for events (#72065)

    ## About The Pull Request

    Anomaly random events will now ask if you want their anomaly to spawn at
    your location if triggered via admin setup.

    This PR also makes a small but useful change to the logic for new
    round_event objects. round_events now have their control (their
    associated round_event_controller) set on New, rather than after setup
    is called. Previously, round_events could not access control in their
    setup proc (as it was not set at the time), meaning transferring
    admin-chosen variables had to be done later in start/announce (depending
    on which comes sooner).

    While this has just been worked around in the past, the change needed to
    be made here, as some anomaly event types announce first, and some start
    first. The admin variables needed to be passed in earlier than
    start/announce (in setup).

    Short version: you can access control in round_event setup() now :D
    ## Why It's Good For The Game

    MORE adminbus, MORE anomaly shenanigans (they're one of my favorite
    event types). Also resolves a quirk in event code that bothered me in
    other PRs I've made.
    ## Changelog
    :cl: Rhials
    admin: anomaly events now give the option to occur at your current
    location when triggered with the Trigger Event admin verb
    /:cl:

    * Automatic changelog for PR #72065 [ci skip]

    * Organizes the lists in `admin_verbs.dm` because I got sick and tired of looking at them, and one in particular (#72151)

    ## About The Pull Request
    Title for the most part.

    ## Why It's Good For The Game
    I was told, many, MANY, moons go, as a downstream host, that one of
    these lists would rarely ever get touched.
    What a fat lie that was.
    The more I had to stare at this list the more infuriated I got with it.

    Now, I just went ahead and organized most of the lists in this file, as
    well as fixing comments to fit the format of `/* hey bozo */`. Where
    applicable, things were organized into `/datums/admins/` and
    `/client/proc` as well.

    ## Changelog

    :cl: Jolly
    code: The lists in admin_verbs.dm was organized to be made better. This
    shouldn't affect the panels admins use at all, since they're already
    alphabetized.
    /:cl:

    * Automatic changelog for PR #72151 [ci skip]

    *…
@Cheshify
Copy link
Contributor Author

Check the forum thread for my reasonings for closing this. This experiment is done for now, but the North Star is NOT over.

@Cheshify Cheshify closed this Dec 28, 2022
@Cheshify
Copy link
Contributor Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Code Improvement Code is now easier to copy paste. Config Update Time to bother the headadmins for three months to get your config applied Feature Exposes new bugs in interesting ways Map Edit Thank you for your tile-placing service. It's always appreciated. Sprites A bikeshed full of soulless bikes. UI We make the game less playable, but with round edges
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet