## About The Pull Request
Hey there,
This was broken in an update from #74573
(3902973978), the RegEx was only catching
a fraction of the cases it was meant to be.
This is what we were finding on 74573 version of the RegEx:

This is what we should be finding for all of the cases that
`define_sanity` will need to check for:

This is what was broken as a consequence:

As stated in the introductory PR #74333
(ccef887efe), it's not the end of the
world if we miss unmanaged local defines, but it's still useful to have
this as a maintainability tool to ensure that everything remains as
clean as it possibly can. I wish we could do the whole matching method
like the aforementioned PR supposed could happen, but it simply doesn't
appear to work the way we want it to.
## Changelog
Nothing player facing.
I tried to experiment with `UNLINT()` but I got absolutely ganked by
getting the regex to work, so the fix for the FA Icon file may not be
super duper great unfortunately. Let me know if you have a showstopper
idea, this is just a stopguard so this PR can get merged and I don't
have to keep talking about unmanaged local defines while reviewing PRs.
## About The Pull Request
Adjusts the placement of basic and upgraded cybernetic ears in the
research tree and adds two new variants: Whisper-sensitive Cybernetic
Ears, which make it slightly easier to hear whispers from a tile away,
at the cost of higher vulnerability to flashbangs and other loud noises;
and Wall-penetrating Cybernetic Ears, which allow you to 'hear through
walls' so to speak, also at the cost of higher vulnerability to loud
noises.
Basic cybernetic ears are now in basic medical tech node, meaning that
medbay can print them roundstart the same as other basic cybernetics.
The upgraded cybernetic ears are now unlocked with the other tier 2
cybernetics. The two new ear variants are unlocked with the other tier 3
cybernetic organs, and the luminiscent and welding shield eyes have also
been moved there from the cybernetic implants node for consistency
reasons.
The whisper ears allow you to clearly hear whispers from up to seven
tiles away, the same range where you can hear normal speech. The
wall-penetrating ears allow you to hear normal speech within seven tiles
even through walls. Due to technical limitations, runechat popups do not
show up for people you can't see, but the messages will still show up in
chat.
## Why It's Good For The Game
Currently, upgraded cybernetic ears are very underwhelming compared to
other high-tier cybernetic organs. All other high tier organs provide
some sort of benefit; even if the benefit is minor like a built-in
flashlight, a slightly higher tolerance to alcohol and toxins, or higher
tolerance to disgusting food. This change is intended to grant similarly
minor but useful benefits to the cybernetic ears.
## Changelog
🆑
add: Added whisper-sensitive cybernetic ears, which make it much easier
for the user to hear whispers at the cost of being more vulnerable to
loud noises
add: Added wall-penetrating cybernetic ears, which allow you to hear
speech through walls
balance: Basic cybernetic ears and upgraded cybernetic ears are now
unlocked with the other basic/normal cybernetics
balance: The welding shield and luminiscent cybernetic eyes are now
unlocked with the other upgraded cybernetics
/🆑
## About The Pull Request
what the title says, the implant is a bone tongue
## Why It's Good For The Game
bone tongue kinda fits as a unique implant. we should have more implants
though cause we kinda ran outta them
## Changelog
🆑
fix: coroner has an implant during cybernetic revolution
/🆑
Adds two new station traits for Icebox:
**Forever Storm**
The storm on icebox never stops and is more intense. You can wear a coat
and drink coffee and be fine
**Forested**
Icebox top exterior has a different terrain generator, including way
more grass and trees. AND DEER. Natural chasms are replaced with plasma
rivers
<details>
<summary>Outside</summary>



(the emissives on the trees have been fixed)
</details>
## Why It's Good For The Game
There are no icebox specific station traits, so I added them! The
exterior is very static, samey and could honestly be a lot more
interesting. Having the outside area be varied is something that
freshens up icebox a little! (3x3 icebox is inevitable...)
Forever Storm: I think storms are pretty spooky and cool, and having a
permanent storm can change the ambience a bit and make everyone feel
more isolated. Exploration is not recommended, but you can totally still
go outside at increased risk. Pretty rare and can only happen on icebox
Forested: Forests are dope. It's pretty common for a station trait, but
factoring in that this only happens on icebox, I think it's fair
I've also had to split apart turf and object generation so stuff doesn't
spawn above rivers/chasms anymore. I tested it and I didn't seem to have
broken anything, so that's pretty cool
closes#75154🆑
add: Adds a Forested planetary station trait! Icebox exterior is now a
forest!
add: Adds a Forever Storm planetary station trait! Sometimes, the storm
never stops. Stay inside or get some coffee and warm clothes
fix: fixes stuff spawning in rivers and above chasms
fix: emissive blockers on random flora not updating
code: Splits terrain generation and terrain population in SSmapping
/🆑
## About The Pull Request
Adds in a mean station trait that randomly lowers the availability of
all vending products from vending machines on the station.
## Why It's Good For The Game
Kicking aside the simple concept of "The more the merrier (until it's a
feature creep)" for a moment, vending (re)supplies are scarcely needed
on a generic round basis. The addition of this new trait could lead to
situations where more vending supplies are wanted/ordered once in a
while.
Beside, this is a pretty evil negative trait notwithstanding its
simplicity, unlike many other relatively innocuous ones.
## Changelog
🆑
add: Added a 'Vending products shortage' station trait, that randomly
lowers the availability of all vending products from vending machines on
the station, with a 1/20 chance of the vending machine itself being
tilted.
/🆑
## About The Pull Request
Title.
Vendor tipping code is now on /atom/movable, and any movable can fall
over like a vendor does. Things like crits have been moved to
type-specific availability tables, their effects are now held in their
own proc, are now random per crushed item, have probability weights,
etc.
In the process of making this PR I also had to fix another issue, where
a bunch of take_damage() overrides had incorrect args, so that explains
the take_damage changes I made.
Tipping now also attacks any atoms on the target, given they use
integrity.
Adds 2 new malf modules.
1. REMOTE VENDOR TIPPING: A mid-cost and mid-supply module allows malf
AIs to remotely tip a vendor in any of the 8 directions. After 0.5
seconds of delay and a visual indicator (along with other warnings), the
vendor falls over.
1.1. In the process of making this I had to expand a arrow sprite to
have orthogonal directions, which is why you may see the testing dmi
being changed.
2. CORE ROLLING: A mid-cost but low-supply ability that allows the AI to
roll around and crush anything it falls on, including mobs. This has a
5% chance to have a critical hit so it isnt THAT terrible - plus it's
guaranteed to never stunlock. It's real utility lies in the fact the AI
now has limited movement without borgs. Also, the psychological factor.
As a bonus, vendor tipping now uses animate and transforms instead of
replacing matrices.
## Why It's Good For The Game
1. Generifying vendor tipping code is just good, period. It's a very
wacky and silly little piece of code that really doesn't need to be
isolated to vendors exclusively. ANY big and heavy object can fall over
and do a ton of damage.
1.1. Also, adding weights to critical hits is really good, because it
lets things like the headgib finally be a lot less terrifying, as
they're a lot less likely to happen.
2. Remote vendor tipping is a bit of a goofy ability that isn't really
THAT practical but has a chance of catching someone unaware and doing
some serious damage to that person alone.
2.1. Atop of this, vendor tipping isn't that loud of an action as say,
blowing things up, or doing a plasma flood. Even overrides aren't this
silent or a non-giveaway. A vendor falling on someone, though, is a
mundane thing that happens a lot. This is a decent way to assassinate
people before going loud (or at least, damage people) that isn't offered
yet.
4.
3.1. For real though, AIs rolling around is just fucking hilarious. The
ability to move isn't offered right now (which isn't that much of a bad
things), but with sufficiently limited charges (or limits to how many
times you can buy the ability), this can be a funny little t hing that
lets the AI potentially hide somewhere on the sat (or just relatively
close to the sat, such as engineering [it can't go through the
teleporter with this but it can go through transit tubes]) without the
need for borgs.
3.2. Also, it lets the AI sacrifically execute people by blowing up
their brains.
There was no in-game way for the viro to know the radioactive resonance
sympton couldn't be rolled (during rad nebula)
Now it sends a fax to the virologist, or if there's no fax it sends a
supplypod straight at the virologist with a fax machine and then sends
the fax
🆑
qol: The virologist is warned when radioactive resonance cannot be
obtained
/🆑
## About The Pull Request
Fixes a bunch of stuff broken by #76822, including APC control console,
malf blackout ability, shunted malf pinpointing, Admin APC recharge and
others.
## Why It's Good For The Game
Yes.
## Changelog
:cl:Thebleh
fix: Fixed several APC related issues.
/🆑
## About The Pull Request
Adds a new station trait: Radioactive Nebula!
The station is located inside a radioactive nebula. Space background and
lighting is different shades of green. Objects in space will also glow
green. (This is kinda lying, since the glowing stuff isn't radioactive,
you just get an element that slowly irradiates you, though people and
certain objects that get the 'IRRADIATED' status may still double-whammy
you)
Do not go into space without rad-protected gear, or you will get very
sick very fast. RAD-protection MODsuit modules spawn in robotics and are
also immediately researched.
The nebula does protect against external threats, like pirates, ninja's
and nukies. They can still get to the station pretty well, but they
can't stay in space for extended periods of time
To make it more livable, public rad protection gear will spawn in
lockers around the station. Everyone will also spawn with potassium
iodide pills in their emergency box. Dynamics threat is also reduced by
30, so there's a proclivity towards more lower threat rounds when the
radioactive nebula is present. Radioactive resonance virus cannot be
generated though, since it kinda obliterates any and all challenge and
threat

**Shielding**

In order to protect the station from radiation, nebula shielding units
need to be constructed. Five spawn ready-to-built in engineering, and
more can be bought pretty cheap from cargo. (Normal radstorms are
disabled)
The gravity generator has 20 minutes of innate shielding, where every
nebula shielding unit adds another 20 minutes. 5 are needed to
completely block all radiation even when the gravity gen is down, but
constructing more is recommended in-case of sabotage/destructions/power
outtages.
Active nebula shielding will passively generate tritium. You can either
vent/ignore this, or use it for something. I'm not an atmos tech but I'm
sure you can do something with it
_What happens when no shielding units are constructed/they all fail?_
The station will suffer a 5 minute long radiation storm, with only
shuttles being excempt. The storm is nerfed strongly, and you can tank
the 5 minutes, but you'll be pretty sick. After the 5 minutes are over,
central command will send an emergency shielding unit which will block
the radiation for 10 minutes and warn the station to set up nebula
shielding.
## Why It's Good For The Game
The station being inside a radioactive nebula shakes up a pretty major
aspect of the game (that being the 'space' in space station 13). Hallway
decals are colored green, display screens will display radiation
markings, carps blend with the nebula, etc. Putting the station inside a
radioactive nebula shakes up the rules of the game and what people can
expect. Suddenly, you can no longer just go outside without taking meds
or getting proper radiation protection, encouraging people to stay cozy
and inside.

Inside, the crew gets the goal to set-up radiation shielding to defend
themselves against the nebula, rewarding a creative engineering
department with passive resource income and protecting the station
against massive radiation storms. I think it's nice to give engineering
something to set up. Even if they don't care, they can just plop it down
somewhere in a closed room and be done with it.
The radiation storm is pretty aggressive, but very survivable if you use
your potassium iodide pills, the extra radiation suits or whatever
chemistry has whipped up.
Most importantly, it gives the entire station a common enemy: the
nebula. Everyone is encouraged to prepare against the mechanics.
Chemistry can make meds, viro can make protective virusses, robotics
gets encouraged to make radprotected MODsuits, engineering gets to
set-up radiation shielding, assistants can look at space or whatever
assistants do.
<details>
<summary>Cool images</summary>




</details>
## Changelog
🆑
add: Adds a new rare radioactive nebula station trait! Get ready and
PREPARE, before it gets in...
tweak: Nearstation space area lighting may look slightly different
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
## About The Pull Request
Yikes this stuff is messy to work with...
Fairly comprehensive changelist:
- Removed a LOT of redundant .json files, huzzah!
- Moves the Large Scarf into the normal Scarves .json since they're both
2 component states and can thus share a file
- Renamed almost every single config to have the same naming schemes
("Name (Type)")
- Subtyped a majority of the configs to related ones, inheriting where
possible
- Renamed some icons to account for now-inherited .jsons where needed
---
**A relevant question for coders/maintainers:**
As of now, the .json configs are structured with a few rules in place:
- a .json config's states MUST have the same amount of colored component
states
- a .json config can not have states that are not buildable via a linked
.dmi
The second one is proving troublesome; namely, for toggleable clothing.
The object sprites of a majority of these don't change, but the worn
sprites have _d added to the end. For a majority of the cases I've been
able to just share a .json for the object and worn GAGS configs, but for
every toggleable item (such as jumpsuits) they need to keep their own
separate .json just to add a new state.
I'm not knowledged in coding proper systems like this, so I was just
wanting to ask, is there a way that GAGS's .json configs can have
toggle-states without assembling one for the objects?
## Why It's Good For The Game
Code standardization and legibility yahoo
## Changelog
🆑
refactor: refactored some code relating to greyscale clothing - please
report relevant issues on github!
/🆑
## About The Pull Request
Removes all of the duplicate global lists for specific machine types
where the only thing they do is store all machines of that type.
Adds machine tracking to SSmachines in the form of a list for all
machines, and then an associative list for machines by their type.
Previously we have machines in multiple global lists, such as airlocks
being in GLOB.doors, GLOB.airlocks, GLOB.machines.
This makes that not a thing, and also means that iterating through
GLOB.machines looking for a specific type is no longer as expensive.
## About The Pull Request
Further continous organizing and cleaning the Icons folder. There are
still some minior nitpicks left to do, but I reached my daily sanity
expenses limit again, and the faster these get in the less issues for
both me and others later. Also cleans some mess I caused by my blindness
last PR.
## Why It's Good For The Game
Saner spriters = better sprites
## About The Pull Request
Post revs win now ends the shift.
Does some misc code cleanup of stuff that annoyed me while I was reading
code.
Implements revs win ending the shift via a new global used in
`/datum/game_mode/proc/check_finished(force_ending)` that is set to TRUE
when revs win.
The rev station charter has been removed (for lack of anywhere else good
to put it trivially).
The bedsheet has been incorporated into the Post-Revolutionary Fervor
station trait. It replaces Captain bedsheets when this station trait
rolls.

**This is all untested, and I'm not sure if I'm able to test this on
local. Please carefully review code changes or consider testmerging over
fullmerging.**
## Why It's Good For The Game
Quoting myself from
https://tgstation13.org/phpBB/viewtopic.php?f=85&t=33860
> I have no issues with post-revs loss. It's simple, everyone knows
where they stand and it works well. Please keep it.
>
> I have issues with post-revs win. Too complex; not intuitive; too many
factions; no way to identify which faction a player belongs to ICly;
difficult to administrate as a result.
>
>...
>
>Without a good code solution improving post-revs win, I would remove it
while retaining current post-revs lose if such an option was available
to me as headmin.
>
>If my quibbles with it were dealt with, I would happily vote in favour
of re-introducing post-revs win. It's not an ideologicial opposition,
just a practical one.
This can really be summarised as: Revs refuses to end even after the
revolution wins and the revolution is over.
There's exiled heads, the sec team, mindshielded non-revs, non-revs,
ex-revs and ex-headrevs. Generally exiled heads and the sec team buddy
up as a single faction. Ex-revs and ex-headrevs are the same.
But mindshielded crew and non-mindshielded crew sit in an awkward limbo,
where mindshielded crew aren't anti-revs, and the non-mindshielded
non-rev crew aren't rev-sided. Mindshields also do nothing about the
ex-antag status.
Since the simplest solution to this problem is ending on post-revs win,
that's the one I've gone for.
## Changelog
🆑
del: Revolution has been reverted back to old behaviour. The round once
again ends when the revolution is successful. The round continues as
normal if the revolution fails.
add: When the station is rolled in a state of Post-Revolutionary Fervor,
the Captain will find their bedsheets replaced with an anti-Nanotrasen
variant.
/🆑
## About The Pull Request
We were talking in the coder channel about what the role of a pAI is,
with a general conclusion that as the name would suggest they should be
_personal assistants_.
This means they should be sticking around their owner, not wandering
away as a holochassis or in the body of a bot.
The former is a matter for a future PR, the latter I am addressing here.
What we also discussed is that clearly some people _want_ to respawn as
a weird quasi-useless mob which wanders aimlessly around the station.
That seems like a fine thing to exist, but it shouldn't be a pAI.
Resultingly: pAI cards can no longer be placed inside bots.
However, you also no longer need to place pAI cards inside bots in order
for them to become sapient, it's a simple toggle on the bot control
menu. Enabling this option will poll ghosts
Toggling the "personality matrix" off while a bot is being controlled by
a ghost will ghost them again, so if they're annoying they're not that
hard to get rid of.

Mobs which couldn't have a pAI inserted don't have this option.
Specifically securitrons, ED-209, and Hygienebots (for some reason).
Perhaps most controversially, any bots which are present on the station
when the map loads will have this setting enabled by default. We will
see if players abuse this too much and need their toys taken away, I am
hoping they can be trusted.
Additionally, as part of this change, mobs you can possess now appear in
the spawners menu.

Here is an unusually populated example.
Oh also in the process of doing this I turned the regal rat "click this
to become it" behaviour into a component because it seems generally
useful.
## Why It's Good For The Game
Minor stuff for dead players to do if they want to interact with living
players instead of observe.
Shift pAI back into a more intended role as a personal assistant who
hangs around with their owner, rather than just a generic respawn role.
## Changelog
🆑
add: PAIs can no longer be inserted into Bots
add: Bots can now have their sapience toggled by anyone with access to
their settings panel
add: Bots which exist on the map at the start of the round automatically
have this setting enabled
qol: Bots, Regal Rats, and Cargorilla now appear in the Spawners menu if
you are dead
qol: Bots can be renamed from their maintenance panel
/🆑
## About The Pull Request
Gives duffelbags their proper slot count
They inherited this from backpacks, but I sorta just forgot about that
[Creates "levels" of locked objects, uses that to make locked duffels
work](c613c00f62)
[c613c00](c613c00f62)
Turns locked into something that holds defines, this makes life a lot
easier.
Requires a lot of boilerplate because of how many uses of these procs
there are and all the passthrough and shit.
Adds a few outfit subtypes to avoid this class of failure in future.
Renames the args in a few but not all touched procs, one thing at a time
Closes#76407Closes#76430 Had the lock check in the wrong place
Closes#76441 GOD I HATE TK SO MUCH
Wrote half the pr without glasses so if it's weird gimme some grace
yeah?
## Changelog
🆑
fix: Fixes some fuck with duffelbags, them not holding enough + issues
with spawning gear in them (job shit and all)
/🆑
## About The Pull Request
The _poseur tag_ graffiti option was not removed in the gang gamemode
removal back in #30056. Back then it would have chosen one of the gangs'
tags to mimic. Now, if selected, it will create an empty graffiti. This
will also apply to any mapped/generated graffiti. This sucks and this
derailed me from my other thing I was doing in the crayons.dm vicinity.
## Why It's Good For The Game
Removes a 6-year-old non-functioning graffiti option.
## Changelog
🆑
fix: exorcised a ghost of the gang gamemode from graffiti
/🆑
## About The Pull Request
This makes three changes regarding the Major Space Dust event.
The first reverts it back to a meteor_wave subtype (rather than a
space_dust subtype), a choice I made in #69866 that feels really stupid
in retrospect.
The second set of changes pertain to the event's numbers. It increases
the weight (8 -> 14) and reduces the earliest_start time (25 MINUTES ->
15 MINUTES). The announce_chance has been reduced (100 -> 85), and there
are a few more announcement messages in the pool.
Lastly, this adds a quick random_event_weight_modifier station trait
that makes the Major Space Dust more common. Let's hope it doesn't
scratch the hull!
This also removes an outdated comment from the revolutionary fervor
station trait, because I was near it.
## Why It's Good For The Game
It's way more sane to handle this event as a meteor_wave. It walks and
talks like a meteor wave, why shouldn't it be one?
Major Space Dust works as a nice fluff event. It's low-impact and might
give engineering something to fix every now and then. It's not
particularly special either, so I don't think it would hurt to make the
event bit more frequent.
New station trait for people (presumably engineering players) to work
around.
## Changelog
🆑 Rhials
add: New event weight station trait -- Dust Stormfront.
balance: Space Weather Forecast -- Expect more frequent Major Space Dust
storms in the foreseeable future.
code: The Major Space Dust event is once again returned to being a
meteor_wave event instead of a Space Dust subtype.
/🆑
This tracks the seconds per tick of a subsystem, however note that it is
not completely accurate, as subsystems can be delayed, however it's
useful to have this number as a multiplier or ratio, so that if in
future someone changes the subsystem wait time code correctly adjusts
how fast it applies effects
regexes used
git grep --files-with-matches --name-only 'DT_PROB' | xargs -l sed -i
's/DT_PROB/SPT_PROB/g'
git grep --files-with-matches --name-only 'delta_time' | xargs -l sed -i
's/delta_time/seconds_per_tick/g'
# MAINTAINER - USE THE BUTTON THAT SAYS "MERGE MASTER" THEN SET THE PR
TO AUTO-MERGE! IT'S MUCH EASIER FOR ME TO FIX THINGS BEFORE THEY SKEW
RATHER THAN AFTER THE FACT.
## About The Pull Request
Hey there,
This took a while to do, but here's the gist:
Python file now regexes every file in `/code` except for those that have
some valid reason to be tacking on more global defines. Some of those
reasons are simply just that I don't have the time right now (doing what
you see in this PR took a few hours) to refactor and parse what should
belong and what should be thrown out. For the time being though, this PR
will at least _halt_ people making the mistake of not `#undef`ing any
files they `#define` "locally", or within the scope of a file.
Most people forget to do this and this leads to a lot of mess later on
due to how many variables can be unmanaged on the global level. I've
made this mistake, you've made this mistake, it's a common thing. Let's
automatically check for it so it can be fixed no-stress.
Scenarios this PR corrects:
* Forgetting to undef a define but undeffing others.
* Not undeffing any defines in your file.
* Earmarking a define as a "file local" define, but not defining it.
* Having a define be a "file local" define, but having it be used
elsewhere.
* Having a "local" define not even be in the file that it only shows up
in.
* Having a completely unused define*
(* I kept some of these because they seemed important... Others were
junked.)
## Why It's Good For The Game
If you wanna use it across multiple files, no reason to not make it a
global define (maybe there's a few reasons but let's assume that this is
the 95% case).
Let me know if you don't like how I re-arranged some of the defines and
how you'd rather see it be implemented, and I'd be happy to do that.
This was mostly just "eh does it need it or not" sorta stuff.
I used a pretty cool way to detect if we should use the standardized
GitHub "error" output, you can see the results of that here
https://github.com/san7890/bruhstation/actions/runs/4549766579/jobs/8022186846#step:7:792
## Changelog
Nothing that really concerns players.
(I fixed up all this stuff using vscode, no regexes beyond what you see
in the python script. sorry downstreams)
## About The Pull Request
Upon revolution success, the chosen headrev will now also receive a
megaphone, and a "revolutionary bedsheet" repurposed from a stolen CC
bedsheet to commemorate their success. The post-revs confusion and lack
of command/security usually leads to an instantaneous, total breakdown
in cohesion. It's every man for himself -- that's no way to run a
commune! Just because the revolution has succeeded and nobody can see
your big blue "R" anymore doesn't mean you can't be a leader!

This also adds a new revolution-themed negative station trait --
Post-Revolutionary Fervor. When present, this trait trashes the command
areas at the start of the round. This means cracked windows, broken
consoles, vendors getting knocked over, and the occasional dead
greytider.

If you start cleaning at the start of the round, you might finish right
as the next batch of revs decides to crop up.
## Why It's Good For The Game
Giving one of the headrevs a bigger voice and a cool cape (or uncool,
depending on how you view the sprite) means that there's a chance for
them to step up and try to keep the wheels on. Just remember -- Nobody
is obligated to actually listen to this person, it's just a bedsheet.
Adds a neato station trait, which probably counts as command gameplay
content.
## Changelog
🆑 Rhials
add: The headrev who receives the revolutionary banner after a win will
also receive a commemorative bedsheet and megaphone.
add: Post-Revolutionary Fervor station trait. I hope you enjoy fixing
broken computer screens.
spriteadd: A revolutionary bedsheet.
/🆑
## About The Pull Request
Hate having your cables eaten by mice? Nanotrasen have heard your
complaints and settled on a natural, _organic_, and eco-friendly
solution.
When this station trait is active, roundstart and event mouse spawns
have a chance to instead be replaced with duct spiders (both will exist,
it doesn't remove mice).
Duct spiders are largely harmless to humans, actively hunt other
maintenance creatures (such as mice), and have only one _tiny_ downside.

These mobs can also sometimes be spawned by a minor scrubber clog event.
As a side note, all spider basic mobs with AI (except Araneus) will now
try to automatically fill a small area around them with webs.
Also I made it so that mobs will ignore their random_walking behaviour
if they're engaged in a `do_after`, just in case.
## Why It's Good For The Game
Adds a little bit of variety to things which can slightly annoy you in
maintenance.
Spiders will automatically make places they live in look like spiders
live there.
## Changelog
🆑
add: A station trait which sometimes populates maintenance with small
spiders. You can wear them as a hat if you wanted to have a spider on
your head for some reason.
add: Spider mobs will automatically start webbing up their environment.
/🆑
## About The Pull Request
I've identified several issues, this PR fixes the 2 major ones so the
event actually functions, I'll have fixes up for the others up soon.
The birthday trait now works if a crew has more than 1 person on it.
Birthday invitations are no longer omnipotent and cannot be used to
identify lings who've changed identities.
Minor Issues also fixed:
A reference to the birthday person is no longer held longer than needed.
The party popper cannot have its spray amount changed anymore.
Balloons spawn in hands instead of backpacks since they don't fit into
backpacks.
Jobs that have both hands full still get an invite (Only really matters
for MDs who either get a balloon or are dullahans)
## Why It's Good For The Game
Peoples birthdays are being ruined.
## Changelog
🆑
fix: The birthday station trait now actually works.
/🆑
<!-- 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 a new neutral station trait the announces to the crew its a member
of staff's birthday, spreads some confetti/balloons around and gives out
some birthday themed items including hats, new toys and cake ingredients
for the chef.
The mechanical impact of the trait is quite minimal only giving out some
fluff items and giving the janitor some extra work. However the event
has a lot of potential roleplay impact by singling out a crewmember and
informing everyone about their birthday, I can foresee players using
this as an opportunity to run birthday themed gimmicks or give one
specific player preferential treatment for the shift which should allow
for some interesting stories to be produced.
<!-- 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
Partially explained in my about section but in short I think a lot of
the station traits we have at the moment are very mechanically driven
and we could use a more open ended roleplay prompt themed one which this
one provides. The idea of one player getting put in the spotlight while
not being an antagonist is also something I can see potentially great
stories come from.
<!-- 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. -->
🆑
add: New Neutral Station Trait, "Employee Birthday", its someone on the
crews birthday, make sure to wish them a happy birthday and perhaps get
them a gift.
add: Two new party themed items have been added to the arcade prize
pool, the party horn and a box of party poppers.
/🆑
<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
## About The Pull Request
Damn that's a long title.
Admin Verbs can be used in the verb bar with hyphens instead of spaces
again.
## Why It's Good For The Game
Admin muscle memory
## Changelog
## About The Pull Request
It's the season of giving and so here at Nanotrasen we've partnered with
a new supplier in order to create a limited run of Luxury Escape Pods.
These larger, carpeted pods with extra windows and smoother, quieter
engines will be rolling out soon to stations who do particularly well on
their quarterly earnings reports!

<details>
<summary>Redact Before Sending</summary>
Of course, that funding had to come from somewhere. Stations with a
particularly poor performance may have to settle for the budget option
until results improve.

</details>
In order to facilitate station traits modifying escape pods, I made a
subtype of stationary shuttle dock specifically for escape pods.
There is a map update script which will replace existing pod docks with
the new one, it also cuts down on some map var edits.
I was worried that varying the pod size would cause problems but it
actually went surprisingly smoothly, only Kilo had a couple of plating
turfs in the way. This might cause problems for maps in development
though, if they are relying on escape pods being a _very_ specific size.
## Why It's Good For The Game
I just think it's neat.
But more station traits = more variance between rounds = more fun, I
guess?
Varying how large escape pods might be can create interesting dilemmas
between crew about how to fit into them, at least about how tall they
need to make the pile of prone people.
The escape pod dock subtype might help out newer mappers a little bit,
as it means fewer var edits to copy/paste from other maps.
## Changelog
🆑
add: New station traits can vary how large and comfortable the station
escape pods are.
/🆑
About The Pull Request
Made a basic version of the pet base called /mob/living/basic/pet. It's significantly more stripped down from the old simple_animal one, because its half collar stuff and...
Made the collar slot a component that you could theoretically remove from a pet to disable the behavior, or add to any other living mob as long as you set up the icon states for the collar (or not, the visuals are optional).
The corgi's collar strippable slot is now generally the pet collar slot, and in theory could be used for other pet stripping screens.
I also gutted the extra access card code from /mob/living/basic/pet as it's only being used by corgis. Having a physical ID is now just inherent to corgis, as they're the only ones that could equip it anyway.
Ported the make_babies() function from simple_animals to a new subtree and associated behavior, called /datum/ai_planning_subtree/make_babies that uses blackboards to know the animal-specific info.
Note that it's marginally improved, as the female walks to the male first instead of bluespace reproduction.
Tweaked and improved the dog AI to work as a basic mob, including making /datum/idle_behavior/idle_dog fully functional.
Made a /datum/ai_planning_subtree/random_speech/dog that pulls the dynamic speech and emotes to support dog fashion.
I've tested base collars across multiple pet types.
For dogs, I've tested general behavior, fetching, reproduction, dog fashion, and deadchat_plays, covering all the oddities I'm aware of.
image
Why It's Good For The Game
Very big mob converted to a basic mob.
Changelog
cl
fix: Lisa no longer uses bluespace when interacting with Ian.
refactor: A large portion of dog code was re-written; please report any strange bugs.
/cl
## About The Pull Request
premium internals boxes from the station trait now get 2 more slots and
have a slightly bigger sprite
also lowers the trait's weight a bit, making it equal to most other
traits.

## Why It's Good For The Game
the main reason im doing this is because this trait messes with anything
people wanna do to survival boxes, cause it takes up 2 slots, so you
have to account for that whenever youre making a subtype that you wanna
fill with more stuff, you cant really do that (currently an issue with
the nukie medical pr)
the other reason is station traits should affect the gameplay a bit more
than "wow i have 2 items i can normally get from an emergency toolbox",
a larger box doesnt change that much but its something.
## Changelog
🆑
balance: premium internals station trait now increases the slots of your
internals box
/🆑
Similar vein to #37116
This is supposed to be standard, yet here we are.
SHOULDN'T change anything, but there's likely something out there that's
bound to behave different because of it.
These were done manually, regex to find things that MIGHT need to be
corrected;
`^#define.+\+((?!\)).)*$`
`^#define.+-((?!\)).)*$`
`^#define.+\*((?!\)).)*$`
`^#define.+\/((?!\)).)*$` (yeah that's a lot of stuff.)
`^#define.+%((?!\)).)*$`
`^#define.+SECONDS((?!\)).)*$`
`^#define.+MINUTES((?!\)).)*$`
## About The Pull Request
Adds a new station trait, the Cybernetic Revolution
It causes every crewmember to spawn with a cybernetic implant/organ (it
depends on their job).
For example. the bartender has an upgraded cybernetic liver, security
officers have extendable flashes, prisoners have flash shielded eyes.
For AIs, they get the surveillance upgrade.
The trait also lowers research costs for the cybernetic designs, triples
the price of EMP kits and EMP flashlights, doubles price of EMP bombs,
and allows traitors to buy autosurgeons, so they can implant themselves
with whatever they ripped out of the crew.
If you do not wish to partake, you can also take the Body Purist quirk,
which prevents you from getting a cybernetic, but everytime you have a
mechanical limb/organ from some other source, you will take a severe
mood penalty.
## Why It's Good For The Game
This could be a cool modifier to rounds once in a while, slightly
modifying the gameplay of all the crew.
Also our implant system is very barely used, so why not?

## Changelog
🆑
add: New Station Trait: Cybernetic Revolution
add: Body Purist Quirk
/🆑
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Makes the code compatible with 515.1594+
Few simple changes and one very painful one.
Let's start with the easy:
* puts call behind `LIBCALL` define, so call_ext is properly used in 515
* Adds `NAMEOF_STATIC(_,X)` macro for nameof in static definitions since
src is now invalid there.
* Fixes tgui and devserver. From 515 onward the tmp3333{procid} cache
directory is not appened to base path in browser controls so we don't
check for it in base js and put the dev server dummy window file in
actual directory not the byond root.
* Renames the few things that had /final/ in typepath to ultimate since
final is a new keyword
And the very painful change:
`.proc/whatever` format is no longer valid, so we're replacing it with
new nameof() function. All this wrapped in three new macros.
`PROC_REF(X)`,`TYPE_PROC_REF(TYPE,X)`,`GLOBAL_PROC_REF(X)`. Global is
not actually necessary but if we get nameof that does not allow globals
it would be nice validation.
This is pretty unwieldy but there's no real alternative.
If you notice anything weird in the commits let me know because majority
was done with regex replace.
@tgstation/commit-access Since the .proc/stuff is pretty big change.
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Splits head dmi into separate files for both mob and obj icons. Kept similar to suit split categorization + some more. New files include beanie, bio, chaplain, costume, cowboy, default, hats(softcaps, fedoras, head caps, generic hats), helmet(helmets and other armored headgear/hoods), spacehelm, utility(hardhats, mostly work related hats), wizard.
Moves animal/pet head sitting icons to 1 folder, pets_head.dmi
Renames PAI head sitting icon file to pai_head.dmi
* base
* reasons
* GetToken proc, with a many remarks
* Add a way to change reason in transfer_money proc. Add a reasons.
* Reason to use the app. Commission. Standard application.
* Apply suggestions from code review - Tralezab
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* Tralezab & jlsnow301 advices. New format(everywhere)
* Nanotrasen
* Refactor TGUI(not me:( ). Fix useless capitalize
* Update code/modules/economy/account.dm
* Trans transforms in transaction
* coMmission. little autodoc mistalke. Translation != Transaction
* oops
* Merge Conflict
* ...
* back feats
* mistakes bye!
* ну да
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
refactor: A bunch of things that used to not do anything (or just fall back on the chest) when targeting a limb that someone was missing will now be far more likely to attack another limb!
* Makes condiments their own subtype, fixes geese, prepares for merging
* Fixes geese checking drink type instead of edible foodtype to eat gross food.
* Renames foodtype var on drinks to drink_types to prevent above from happening again because it KEEPS HAPPENING. DRINKS AREN'T FOOD!
* Makes Condiments their own subtype of reagent_containers because they don't make any use of being a subtype of food, at all.
* Starts moving things from food to /food/drink subtype in preparation for merging /food/drink with /drink
* fully removes Food subtype
* /reagent_containers/drinks are now /reagent_containers/cup - This is so it's no longer confused with eachother.
* /food/drinks is now /reagent_containers/cup/drinks, so we can keep their special abilities.
* Fixes a LOT of errors with food, which are STILL checking the reagent_containers, despite ACTUAL food being refactored away from it a long time ago.
This doesn't compile yet, but I do want to make sure my progress is well tracked.
* remove copypaste code, changes soda cans
* Removes most copy paste code between the two drinks, moving most stuff to parent whenever needed.
* Made soda cans their own subtype since they didn't share anything with glass bottles anyways.
* Fixes more problems with food/drinks, especially with geese. Geese really were just broken this whole time and no one said a word...
* Removes a snowflake signal, now that both drink types share a common one.
* Adds everything to the .dme
Currently my goal is to get this all compiling, then remove isGlass var by making glass be all glass ones only.
* Moves all icons into a single drinks dmi
I'm not that great at icon stuff, hopefully I didn't forget/break anything.
* Turns juices into their own subtype
This allows us to let them check for type in molotov, to both get rid of a use of isGlass, and so non-glass non-cartons don't show up as 'carton'.
* fixes compile issues, adds updatepaths
* a better updatepaths
* updates the damn maps now
* properly names the updatepath
* how did that get there
* i suck at handling merge conflicts
* how am i this bad
* code improvement and soda fix
* more fixes
* Don't be a timer
Ports from old food bottles to trans the reagents, rather than add a timer to.
* Merge conflicts and fixes bottle smashing
* Bottle smashing is now consistently functional regardless of how much liquid they have in them, when before it would spill first, then smash on the second hit.
* runs updatepaths again
About The Pull Request
Resprites various clothing items from the clothesmate with GAGs.
Organizes the clothesmate. Recolorable items on top, in the order of head, mask, neck, glasses, gloves, acc, belt, under, suit, shoes.
Adds a pair of jean shorts.
Tweaks some already GAG'd sprite colors.
Top: OG
Mid: Resprite in the style of the OG
Bottom: Random colors to showcase colorable channels
yoopp
sundress, tango, plaid, slacks(khakis), shorts, jeans, turtleneck skirt. scarf, large scarf, beanie. new jean shorts.
(excuse the inconsistent pantyhoes, hair, and ears i was already done screenshotting before i realized)
Why It's Good For The Game
Expands the amount of in-game customization while also cutting down on current and future sprites at the same time its like magic.
Changelog
cl
imageadd: Various clothing items have been converted using GAGs, making them recolorable. Check it out at your local clothesmate!
/cl
* Adds cargorilla
* working cargorilla
* Tweaks to control + jobs and stuff
* Sleep
* Probably don't leave in debug
* el sanity
* el change them to use globals, el refactor
* Does this fix it?
* Ah, okay
* el copypaste
* el mapload vars
* ready to ship
Fixes the overflow station trait not working
Station traits init before jobs, soooooo
We could fix this with GetJob or
if(!length(all_occupations))
SetupOccupations()
or something, but this is cleaner, since we're waiting for subsystem init anyway
About The Pull Request
Adds a new station trait to color the assistant jumpsuits semi-randomly.
There are several styles for it to choose from, including some especially colored ones, and some randomized ones. This includes the current alternative rainbow jumpsuits, but if GREY_ASSISTANTS is not enabled, then grey jumpsuits will be a valid random option.
I don't really want to hear too much more about the config, I got the OK on this from head admins.
Why It's Good For The Game
Adds more variety to look at on assistants, while still mostly preserving a consistent style if GREY_ASSISTANTS is enabled (as it is a station trait).
Changelog
cl
add: Added a station trait for varying colored assistant jumpsuits.
/cl
About The Pull Request
Makes the "Ian Adventure" station trait more interesting by giving him deadchat control (democracy mode, 3 seconds cooldown on inputs) and a couple extra lives* to survive early round tiding.
*Basically, a new component that respawns the critter when he dies. The component itself is simple enough, but it sends a signal each respawn to allow other datums to expand this behavior how they want. I've contemplated adding a signal that can stop death, dusting and gibbing instead of respawning the mob at first but because death(), dust() and gib() were made with the assertion that the mob is always going to die I've quickly realized it'd require a refactor that's way too big and out of scope.
The deadchat control of corgis only include commands to change and drop hats, "speak" (random lines from the speak list of the mob) and spin (other than cardinal movement) for now. I'd have loved to add more complex commands (like, argumented) that can potentially be relayed to the AI controller, but I guess that'll have to wait until the thing gets refactored a little.
Why It's Good For The Game
"Ian's Adventure" is a really bland station trait at the moment. All it does is move Ian somewhere else at the start of the round. Even by the station traits standard of being small things this is insignificant, and also pretty bad considering Ian is not actually going on an adventure since he lacks the initiative to do anything being an npc dog.
This PR aims to breath fresh air into this station trait and push it toward a slighty more engaging direction, though it relies on observers to work, while still being a small """"cute"""" station trait.
Changelog
cl
expansion: The "Ian's Adventure" station trait now makes Ian deadchat controllable and gives him a couple extra lives (to survive early round tiding)
/cl
This PR adds two station traits. Ionic Stormfront and Radioactive Stormfront.
Ionic Stormfront doubles the weight of the ion storm event.
Radioactive Stormfront slightly increases the weight of the radiation storm event (1.5x) and allows multiple radiation storms to occur during a round (+2 max occurrences).
Both are relatively uncommon traits to roll.
Given a lot of random events are occurrences of "nature", (storms, anomalies, meteor showers, etc), I think it makes sense and has decent flavor that occasionally your station may experience certain events more often.
Maybe the station is located in an anomalous region of space and anomalies are coming outta the walls. Maybe it's located in an asteroid belt and meteors pelt the exterior constantly. Who knows! For now, I went with two existing "weather" phenomenon that hit the station, rad and ion storms. Ion storms are usually funny and add variety to silicon players, and radiation storms are neat for antaggy potential but kinda uncommon.
Bring _HELPERS/_lists.dm to latest standards by:
-Adding proper documentation and fixing existing one
-Giving vars proper names
-Procs now use snake case as per standard (many files that use those procs will be affected)
First off, I am aware of the Feature Freeze for this month. This PR was initially started in #60401 about a month ago to break the changes into smaller PRs. The end result for this PR is a poor man's attempt at roguelike procedural generation. Enjoy!
Link to the README for how the new spawner system works.
Added the following new random mapping spawners:
pen, crayon, stamp, paper, pamphlet, briefcase, folder, wardrobe closet, wardrobe closet colored, backpack, narcotics, permabrig_weapon, permabrig_gear, prison, material, carpet, ornament, generic decoration, statue, showcase, paint, tool, tool_advanced, tool_rare, material_cheap, material, material_rare, toolbox, flashlight, canister, tank, vending_restock, atmospherics_portable, tracking_beacon, musical_instrument, gambling, coin, money_small, money, money_large, drugs, dice, cigarette_pack, cigarette, cigar, wallet_lighter, lighter, wallet_storage, deck, toy, toy_figure, booze, snack, condiment, cups, minor_healing, injector, surgery_tool, surgery_tool_advanced, surgery_tool_rare, firstaid_rare, firstaid, patient_stretcher, medical supplies, crate, crate_abandoned, girder, grille, lattice, spare_parts, table_or_rack, table, table_fancy, tank_holder, crate_empty, crate_loot, closet_private, closet_hallway, closet_empty, closet_maintencne, chair, chair_maintence, chair_flipped, chair_comfy, barricade, data_disk, graffiti, mopbucket, caution_sign, bucket, soap, box, bin, janitor_supplies, soup, salad, dinner
Removed deprecated wizard trap, vault, and armory spawners.
Admins can now revert (most) station traits before a round starts, as well as setup the station traits that will run next round.
Previously, admins had no control over this system, making it sometimes painful for running planned events.
It is not feasible to update the station traits of the current round, considering some apply pre-roundstart, but it is doable to edit the station traits of the next round.