* Adds IS_TRAITOR macro (#74293)
## About The Pull Request
i was making another PR and found that we have cultist, heretic, and
nuke op IS macros but not one for traitors
this adds one and then replaces it where applicable, mostly in checks
where a traitor device does something different if you are not a traitor
## Why It's Good For The Game
better for people making traitor only devices to have this macro, as it
is more clear and also cleaner in general i think
## Changelog
🆑
code: adds IS_TRAITOR macro
/🆑
* Adds IS_TRAITOR macro
---------
Co-authored-by: Sol N <116288367+flowercuco@users.noreply.github.com>
* Experisci now works if at least one RD server works on your z level (#74123)
## About The Pull Request
Experiment handlers now work if at least one RD server works on your
z-level, rather than only checking the first. It was originally done in
a lazy way, and I'm going back on that now to make it more responsive
for players.
## Why It's Good For The Game
This will allow things like off-station and Lavaland to be added to
experisci stuff, which I think would be nice as we can make
mining-related experiments for mining tech just as how there's medical
experiments for medical tech.
It also lets off-station ghost roles do experiments if they don't want
to be a jackass and just waste points, which I think is a positive until
off-station techwebs are added.
## Changelog
🆑
fix: Experimentors can connect to techwebs that have at least one RD
server on the level.
/🆑
* Experisci now works if at least one RD server works on your z level
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Curators now have D-notice newscaster access, Officers can issue warrants (#74269)
## About The Pull Request
Newscasters now have Library access for handing out D-Notices, and
Security access for Wanted issues, instead of both being tied to Armory
access.
Also allows Ntos Newscaster to work if ran by someone without Library
access, so Curator can download the app for others if they want.
## Why It's Good For The Game
- Newscasters have turned into one of the Curator's largest gameplay
aspects and it would be nice if they were able to moderate it as well,
instead of being the Warden who has absolutely no interest in
Newscasters.
- Allowing Officers to send out Wanted issues is more just in hopes it
will result in it being used more, though it seems like a very similar
feature to the wanted posters, maybe we can merge these two together one
day.
- The Ntos Newscaster access change is more of an oversight, I like it
when people can download apps for eachother as it gives a reason to seek
others and lend them your PDA for an application you want, blocking the
person from using the app after getting a Curator to download it for
them kinda sucks in-game.
## Changelog
🆑
balance: Curators/HoP can now manage Newscaster D-Notices (previously
was Warden/HoS).
balance: Security Officers/Detectives can now issue Wanted notices on
Newscasters.
balance: Ntos Newscaster now requires Library access only to download,
not to run.
/🆑
* Curators now have D-notice newscaster access, Officers can issue warrants
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Splits Pirates into Two Subgroups, One For Light Midrounds And Another For Heavy (#73881)
## About The Pull Request
This PR splits the Pirate midround antagonists into two separate groups,
normal and dangerous. Normal pirates are the human, silverscale, and
psycker groups, and they are all light antagonists now, meaning they can
show up early in the round, similar to when a revenant or nightmare can
spawn. Dangerous Space Pirates only consist of the Skeleton Crew, and
they will remain as heavy weight antagonists with the same spawning
restrictions as it is currently. I also fudged with the crew required
value some for both, not that it makes a huge difference.
Since pirates were split into two separate groups, both versions have a
reduced dynamic weight of 3, from 4.
Also added a sanity check to the pirate's dynamic ruleset to make sure
there are remaining pirates to be spawned for the ruleset to be allowed.
Also added a check to the pirate event itself to prevent runtimes when
no pirate team is available to be chosen, unless an admin specifies what
pirate team they want to use.
## Why It's Good For The Game
As it is right now, there is a massive difference between the skeleton
pirates and the rest of the pirate types. Skeleton Pirates have cannons,
innate space immunity and other small benefits which make them much more
threatening than the other pirate crews. In our current system,
something like Psycker pirates can spawn in lieu of something like blob
or xenomorphs when they aren't anywhere near the same level of
threatening, so moving the less dangerous pirates off to be light weight
midrounds seems like a good move, especially since we need more
lightweight midrounds to keep the variety up anyway.
Keep in mind these designations are not permanent and may change at the
request of maintainers or as the pirate teams get nerfed/buffed.
## Changelog
🆑
balance: The pirate gangs have been split into two subcategories, one
which can spawn earlier in a shift and one that spawns later as they
currently do. While skeleton pirates will still be only seen later into
the shift, expect to see the other pirate gangs earlier on.
fix: Prevented the pirate event from runtiming when no possible pirate
gangs were available.
fix: Pirates can no longer be selected by Dynamic if there are no more
pirates gangs that can be used.
/🆑
* Splits Pirates into Two Subgroups, One For Light Midrounds And Another For Heavy
---------
Co-authored-by: IndieanaJones <47086570+IndieanaJones@users.noreply.github.com>
* Remakes The Arena (you know, the place you go to enter the Arena shuttle) (#74204)
## About The Pull Request
As the PR name says, This PR remakes the_arena (these names get really
confusing)
it overhauls the map completely, splitting it into three "zones". the
old necropolis ruin, the large combat area, and the exit, all separated
by the main lava river.
the main goal of this PR is to modernize it, and make it more fun to
fight in, by making it more varied.
Old Version

New Version

### Mapping March
Ckey to receive rewards: spockye
## Why It's Good For The Game
the_arena is pretty old at this point, and could definitely use a
remake, i'd say. This PR does exactly that!
## Changelog
🆑
fix: Redesigns "the_arena" ( the bubblegum shuttle deathmatch area )
/🆑
* Remakes The Arena (you know, the place you go to enter the Arena shuttle)
---------
Co-authored-by: spockye <79304582+spockye@users.noreply.github.com>
* Removes Starlight Config (#74289)
## About The Pull Request
It was config'd off to save init time, but having it function in testing
and mapping is more valuble then the time spend on it.
On that topic, we spend roughly 1.7 seconds of init on this.
~1.3 is spent handling the light sources and their light object
modifications (this is potentailly inflated since other sources could
cause the same objects to need updates)
~0.3 is spent searching for space turfs around lighting_objects during
init.
This will impact change_turf slightly too, costing about ~0.07 in local
testing.
It does save time for live however, since we avoid these config checks.
## Why It's Good For The Game
I believe this time is worth spending.
I've had people try to "fix" artifacts of starlight not being enabled,
things that aren't bugs.
The test environment should as much as we can make it reflect the visual
reality of the game. This helps ensure that
## Changelog
🆑
server: The starlight config has been removed, as it is enabled by
default
/🆑
* Removes Starlight Config
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Adds preference for "Tagger" paint color. (#74281)
## About The Pull Request
Per the title, this PR allows you to pick your starting paint color from
the "Tagger" quirk on the character preferences menu.

This replaces the starting color being random; it does not prevent you
from changing the color later as normal.
## Why It's Good For The Game
It's a minor quality of life change. This will mostly be helpful to
players who have some "signature" color they like to use, to prevent
having to manually select it (and possibly input a color code) every
round. It will be of less relevance to those who tend to select new
colors every round anyway.
Possible downsides are mainly adding another pref to the menu, although
this shouldn't be too much of an annoyance since it only appears if you
already have the relevant quirk. It does also remove the _ability_ to
have a randomly-chosen paint color, though I'm not sure if that matters.
## Changelog
🆑
qol: you can choose your default paint color for the "Tagger" quirk from
prefs.
/🆑
* Adds preference for "Tagger" paint color.
---------
Co-authored-by: lizardqueenlexi <105025397+lizardqueenlexi@users.noreply.github.com>
* Minor Gravity Fixes (#74285)
## About The Pull Request
Fixes forced gravity not updating a mob (trait was added too early,
before hook signals are registered)
Fixes spawning a mob in space not causing floats (default grav was 0, so
== null was wrong)
Runs shake_everyone() (Our gravity gen reaction hook) AFTER gravity
changes, ensuring mobs hook into it
## Why It's Good For The Game
Closes#74271Closes#74272 (Caused by being in nograv but not floating)
Closes#74274
## Changelog
🆑
fix: Fixes a bunch of minor gravity bugs, report em if you see more
yeah?
/🆑
* Minor Gravity Fixes
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Cult Roundend Report No Longer Lists Post-Summon Cultists (#74255)
## About The Pull Request
Harvesters and any other post-summon cultists aren't shown in the
roundend report
## Why It's Good For The Game
Harvesters are a roundend thing, nobody cares who the harvesters were
since literally everyone becomes one even ghosts who observed since
roundstart
It just clogs up the roundend report
The cultists who contributed to summoning are the ones people are
interested in seeing
## Changelog
🆑
qol: Cult Roundend Report no longer lists post-summon cultists. No more
30 random Harvesters clogging up the roundend report
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
* Cult Roundend Report No Longer Lists Post-Summon Cultists
---------
Co-authored-by: 13spacemen <46101244+13spacemen@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
* Rebalances a vast oversight with one of the game's weapons (#74283)
## About The Pull Request
Makes sure the game is fairly balanced again.
## Why It's Good For The Game
Honestly I'm surprised this weapon went unchanged for so long with no
downsides.
## Changelog
🆑 Wallem
balance: Fixes a glaring oversight with the entrenching tool's
balancing.
/🆑
* Rebalances a vast oversight with one of the game's weapons
---------
Co-authored-by: Wallem <66052067+Wallemations@users.noreply.github.com>
* Kidnapping Alive Bonus TC price Increase: The Fair Kidnapping Wage Act of March 23th 2573 (#74258)
## About The Pull Request
Changes the Prices of TC for kidnapping objectives to more reasonable
prices that fit the challenge and switches some jobs into more fitting
positions for their cost of kidnapping
Common: Now gains +2 TC for alive targets
Uncommon: Now gains +3 TC for alive targets
Rare: Now gains +4 TC for alive targets
Captain: Now gains +5 TC for alive targets
Added a bonus for an assistant for being alive from 0 to 1 kidnapping
someone alive is always harder and so are assistants

Ckey to receive rewards: Hoolny
## Why It's Good For The Game
The current price of kidnapping is absolutely insane this feeling of
absolute unfairness of price has been exclaimed by various players that
understand the difficulty of kidnapping
Kidnapping is a much more difficult task than murdering someone for
various different reasons like having to move to a specific location an
announcement of where the location you send them is the fact that to get
the actual best price for it you need to keep them alive and such also
the main fact that you need to disguise or your identity will be leaked
its a monumental task which before hand contractor traitor had a better
price system for it so I'm not sure why the price was so low.
Another issue is NOBODY does this there aren't enough incentives and its
way to hard to do it for such a small reward this will make it so
kidnapping becomes a thing that happens more often it's a pretty cool
fun interaction and mission to have
## Changelog
🆑
balance: Increased Bonus Reward for kidnapping alive targets
balance: Changed Virologist and Scientist into Common objectives for
kidnapping
balance: Changed Paramedic into Uncommon objectives for kidnapping
/🆑
* Kidnapping Alive Bonus TC price Increase: The Fair Kidnapping Wage Act of March 23th 2573
---------
Co-authored-by: Hoolny <84478872+SethLafuente@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* Adds The Sturdy Shako (HoS Hat) (#74277)
## About The Pull Request
Adds a new craftable HoS shako, made from the standard peaked cap and
some plasteel and gold.

Moves the HoS cap into a subtype `/obj/item/clothing/head/hats/hos/cap`
to avoid catching the beret in the crafting recipe, the base type
`/obj/item/clothing/head/hats/hos` is now a generic subtype which should
never exist.
(Yes there's a TF2 reference included with the hat)
## Why It's Good For The Game
Adds an additional level of style for an HoS willing to put a little
effort into gathering the required materials. As it is crafted as a
one-to-one trade with another headgear there is no additional spare
headgear introduced.
## Changelog
🆑
add: The Nanotrasen Costuming Department has released specifications for
how to convert the Head of Security's cap into a shako.
/🆑
---------
Co-authored-by: Jacquerel <hnevard@ gmail.com>
Co-authored-by: Fikou <23585223+Fikou@ users.noreply.github.com>
* Adds The Sturdy Shako (HoS Hat)
---------
Co-authored-by: Thunder12345 <Thunder12345@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
Co-authored-by: Fikou <23585223+Fikou@ users.noreply.github.com>
* Remove janitor key UnregisterSignal [NO GBP] (#74280)
## About The Pull Request
Removes UnregisterSignal when the janitor access key ring is destroyed.
Signal will clean itself up. Mentions adding janitor keys to the
Custodial Locator, which I forgot on the last PR
https://github.com/tgstation/tgstation/pull/74181
## Changelog
🆑 LT3
qol: Janitor access keys now show up on the Custodial Locator tablet app
/🆑
* Remove janitor key UnregisterSignal [NO GBP]
---------
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* Traveller's rest and prey pod fixes (#74279)
## About The Pull Request
- Traveller's rest had two airlock cyclelinks that did not work, as one
of them was on a windoor, so I have removed them. Not playerfacing.
- The mob spawner spawned without clothes and runtiming, as instead of
an outfit, it had the roboticist's jumpsuit added. I have made a new
outfit and used that in a new spawner. Might be too specific of a
spawner though.
- I have also added a dedicated roboticist spawner, which uses a full
outfit. I originally wanted to use this one, but I realized, making this
spawn with robotics ID and gear is a pretty big balance change, so I
elected not to use that, but I have added it anyways, as it should be
useful in the future (and I have already made the sprite).
### Mapping March
Ckey to receive rewards: N/A
## Why It's Good For The Game
Less warnings during initialization.
## Changelog
🆑
fix: the roboticist in the prey pod now has clothes as intended
/🆑
* Traveller's rest and prey pod fixes
---------
Co-authored-by: Profakos <profakos@gmail.com>
* Mafia games can now be voted on to start early, forced to start early by admins (#74256)
## About The Pull Request
**DISCLAIMER:** Mafia, being a 12-player game, is very very difficult to
debug. I've tested everything here to the extent that I can as one
person, but this might need some really careful inspection.
This PR adds a new option to the mafia minigame menu, which lets
signed-up players vote to start the game early. If there are more than
three players signed up, and at least half of them are voting to start,
the round will start. Admins also have the option to force a mafia round
to start in the admin options panel.
When a round is forcibly started, a random non-standard role setup is
created. Unlike the normal setup parameters, which assume you have
twelve players and attempts to fill out certain role types as a result,
this one uses pools based on role alignment. If you start with eight
players, you just might end up with four wardens, two thoughtfeeders,
and double clowns.
Every 3rd player is chosen as a random mafia member. The 5th and 6th
roles are neutral disruptive and a random neutral role respectively.
Everyone else is a random townie.
I believe this formula is sufficient to create a playable experience
with 5+ players. It can't start at any less than three, as the game
would auto-resolve instantly. The setup won't be pretty, but it's better
than no mafia game at all.
## Why It's Good For The Game
Now you can play mafia without the strict 12-player requirement! Gives
some opportunity for players to get acquainted with roles, the gameplay,
and the mafia panel in a lower-seriousness environment than a standard
12-man game.
If the ratio of early start voters required to start needs adjusting,
that can be done.
## Changelog
🆑 Rhials
add: You can now vote to start a Mafia game early. If over half of the
current signups vote (And you have three or more players) you will
immediately start a game with a slightly adjusted set of roles.
admin: You can now force a mafia game to start in the admin options
panel.
/🆑
* Mafia games can now be voted on to start early, forced to start early by admins
---------
Co-authored-by: Rhials <Datguy33456@gmail.com>
* Tram signs malfunction during tram malfunction (#74210)
## About The Pull Request
Tram signs will now display incorrect information when malfunctioning.
## Why It's Good For The Game
For improved Frogger gameplay, no more being crafty and reading the
indicator board to know if the tram is coming.
## Changelog
🆑 LT3
add: Tram signs will now malfunction when the tram is malfunctioning
/🆑
---------
Co-authored-by: san7890 <the@ san7890.com>
* Tram signs malfunction during tram malfunction
---------
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
* Optimizes some gas_mixture procs, Optimizes pipeline processing significantly by 33% (#74233)
## About The Pull Request
It is faster to operate on a gas list, especially if cached, then it is
to operate on a datum.
Doing this cause I'm seeing cost in merge() post #74230
Hits on a few other important places too. self_breakdown and such. Worth
it IMO
Could in theory go further by caching the global list. I'm tempted I
admit but it needs profiling first and it's late
EDIT: I have not slept, and have gone tooo far
[Micros /gas_mixture/copy and copy_from, adds a new proc to handle
copying with a ratio,
copy_from_ratio](91da0003da)
[91da000](91da0003da)
The ADD_GAS sidestep saves us 0.1 seconds of init (used to at least.
Ensuring we don't break archive is gonna have a cost. I don't want to
profile this so I'll estimate maybe 0.05 seconds). The faster version of
copy_from is just well, better, and helps to avoid stupid
[Optimizes pipeline
processing](bf5a2d2d60)
[bf5a2d2](bf5a2d2d60)
I haven't slept in 36 hours. Have some atmos optimizations
Pipelines now keep track of components that require custom
reconciliation as a seperate list.
This avoids the overhead of filtering all connected atmos machinery.
Rather then relying on |= to avoid duplicate gas_mixtures, we instead
use a cycle var stored on the mix itself, which is compared with a
static unique id from reconcile_air()
This fully prevents double processing of gas, and should (hopefully)
prevent stupid dupe issues in future
Rather then summing volume on the gas mixture itself, we sum it in a
local var.
This avoids datum var accesses, and saves a slight bit of time
Instead of running THERMAL_ENERGY() (and thus heat_capacity(), which
iterates all gases in the mix AGAIN) when processing gas, we instead
just hook into the existing heat capacity calculation done inside the
giver gases loop
This saves a significant amount of time, somewhere around 30% of the
proc, I think?
This doesn't tackle the big headache here, which is the copy_from loop
at the base of the proc.
I think the solution is to convert pipelines to a sort of polling model.
Atmos components don't "own" their mix, they instead have to request a
copy of it from the pipeline datum.
This would work based off a mutually agreed upon volume amount for that
component in that process cycle.
We'd use an archived system to figure out what gases to give to
components, while removing from the real MOLES list.
We could then push gas consumption requests to the pipeline, which would
handle them, alongside volume changes, on the next process.
Not sure how I'd handle connected pipelines... Merging post reconcile
maybe?
This is a problem for tomorrow though, I need to go to bed.
Saves about 30% of pipeline costs.
Profiles taken on kilo, until each reconcile_air hits 5000 calls
[old.txt](https://github.com/tgstation/tgstation/files/11075118/Profile.results.total.time.txt)
[new.txt](https://github.com/tgstation/tgstation/files/11075133/profiler.txt)
* Optimizes some gas_mixture procs, Optimizes pipeline processing significantly by 33%
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Adds bacteria rich moldy food to random trash spawners. (#74276)
## About The Pull Request
So, as bacteria bread from perma vendor was nerfed, the only way to
obtain mold for cytology is from the mini-fridges. And they won't even
spawn when needed. Correct me if i'm wrong.
And so this adds moldy breadslices and pizzaslices to
`random/trash/garbage` spawner which appears in trashcarts and in
trashbagsfrom the trashcarts. Also added it to `grille_or_waste` spawner
so it can just randomly spawn on the floor.
About the damp rag. Just thought that there should be at least some
piece of cloth at pile of garbage, as there is none at the moment. And
it's quite usefull also, you can clean yourself or your fingerprints
with it. Can cut it out if needed, not a big deal.
## Why It's Good For The Game
More chances to find what you want to do cytology.
Cytology slightly more practical.
Damp rag is usefull.
## Changelog
🆑
add: Bacteria rich moldy food (like breadslices and pizzaslices) now
spawn in trashcarts, trashbags and randomly on the floor.
add: Damp rag now spawns in the trashcarts and etc.
/🆑
* Adds bacteria rich moldy food to random trash spawners.
---------
Co-authored-by: Helg2 <93882977+Helg2@users.noreply.github.com>
* Debug ID Cards Can Now Use Vending Machines (#74278)
## About The Pull Request

This always pissed me off, and has been pissing me off for the last year
or so. I decided to sit down and figure out how to stop this from
occurring, and got it.
## Why It's Good For The Game
When I'm debugging several types of stuff regarding payment in my
pre-fabbed debug suit, I really don't want to fucking have to spawn yet
another ID card with an actual job on it and transfer money to that just
so I can use a vending machine, I WANT TO JUST USE THE VENDING
MACHINE!!! TIME IS PRECIOUS!!!
It does still draw from the station budget, but that's fine because this
is a debug card that is meant to be dangerous to hand out. It's a
debugger's tool. If you're concerned on people somehow getting it from
an admin and beign able to buy smokes from vending machines, they were
still able to withdraw money by alt-clicking on it before this change.
## Changelog
Nothing that really concerns players.
* Debug ID Cards Can Now Use Vending Machines
---------
Co-authored-by: san7890 <the@san7890.com>
* Making the Tank Compressor usable (#74264)
Shifted around some things in the trams ordnance to make the tank
compressor properly connect and make it actually usable from round
start!
## About The Pull Request
Noticed a few rounds ago that the tank compressor in Tram was broken by
the latest research changes! so I went and fixed it


### Mapping March
Ckey to receive rewards: N/A
## Why It's Good For The Game
Not having to muck with pipes at round start for one more thing is
always good! also it seems like it was definitely unintentional in the
mapping process
## Changelog
🆑
fix: Moved the tank compressor and some tables and the anomaly refinery
so that the tank compressor could actually be usable again on
Tramstation.
/🆑
* Making the Tank Compressor usable
---------
Co-authored-by: Moth-lantern <122066083+Moth-lantern@users.noreply.github.com>
Adds a config-optional endgame chat message (#72860)
This basically does what we do for roundstart announcements, but for
round end.
With a delay between a round ending, the server rebooting, and a new
round starting, sometimes it feels like players would be more likely to
catch a roundstart when they know the previous game has just ended, and
not a few moments before the next one starts.
This idea was suggested to me several times by many people who don't
have good connections to servers and keep missing roundstart because
they just aren't given enough time to get on SS13.
I also included Round ID in this, so people who know what time they've
played a round can also now easily see which round it was, if they
wanted to go back to look at the logs for any reason they have.
🆑
config: There's now a config-optional announcer for a round ending.
/🆑
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>