Skip to content

Commit

Permalink
TG Merge 06/04/2024 (#5)
Browse files Browse the repository at this point in the history
* Adds dynamic blob/obsession to ghost popups, removes third rail popup, tweaks supply pod popup (#82234)

## About The Pull Request

Three changes to ghost orbit popups. Let's check them one-by-one.

First off -- The obsession awakening and blob host midrounds now have a
ghost popup when summoned via Dynamic. They already have them when
summoned by a random event roll, so this is mostly just bringing the two
different spawn methods in line with each other. None of the other
midround dynamic picks (autotraitor, revs, etc) have had this added,
because they're less focused on spectacle and require more mystery to
function properly.

Second -- The electrified railings on the tram no longer notify ghosts
every time someone gets shocked. Electrocute_act is called on anything
that passes by it, and the popup would be thrown regardless of whether
or not they've "fallen in the path of an oncoming tram" or not. Making
it check if the electrocute_act actually successfully stunned a player,
and that they're about to be hit, would probably require an unwieldy
rewrite to the behavior that I'd rather not resort to. I brought this
helper call into this world, and now I'm taking it out.

Lastly -- The supply pod random event can now be properly jumped to.
Originally, it would track the landing indicator, which would delete
almost immediately and leave an un-orbitable popup on your screen. Now
you jump to the landing zone, regardless of when you click the toast
popup.

This is really long PR body for such tiny changes please don't think
this is anything more than it actually is.
## Why It's Good For The Game

Minor improvements to some ghost orbit popups, because Observers are
players too!
## Changelog
:cl:
qol: Dynamic midrounds "Obsession Awakening" and "Blob Host" now have
ghost orbit popups, so you can see them happening in real time.
qol: There is no longer a ghost orbit popup for players being shocked by
an electrified tram rail.
qol: The Stray Cargo orbit popup no longer has a half-second window to
orbit before it becomes useless.
/:cl:

* Fixes starting self surgery (#82255)

## About The Pull Request

Fixes being unable to start self-surgery while laying down.

Closes https://github.com/tgstation/tgstation/issues/82034

## Changelog

:cl: LT3
fix: Fixed being unable to start self surgery
/:cl:

* Automatic changelog for PR #82216 [ci skip]

* Automatic changelog for PR #82234 [ci skip]

* Automatic changelog for PR #82255 [ci skip]

* Adds a photobooth (#82105)

## About The Pull Request

Adds a photobooth machine to the HoP line which can be used to update
your security records photo.
It updates the records of the person's name, which means hiding your
identity and wearing an ID will let you change other people's photos. If
you aren't hiding your identity and are wearing someone else's ID, it
won't update at all because it will be unable to find your record.
There's 2 variants of this machine, one at the HoP line that's tied
behind Law Office access (so Lawyers have an extra thing they can help
out with if no one's available, but maybe it would be better behind
Library access since Curators are our "photographer" role?), and the
Security one that requires Security access.
The Security one has a special feature that it adds a height chart
behind the player.

![image](https://github.com/tgstation/tgstation/assets/53777086/c4eb0661-d752-4052-8006-2898af78c528)

This machine is used by either right-clicking on it or by pressing a
button, so the HoP can do it remotely from their line (except on Tram
where it's in the library), and after a few delays it'll update your
records automatically to how you look like.

Emagging the machine will remove its access restrictions but every time
it updates your photos it will spam camera flashing and blind you.

Sprites

Open

![image](https://github.com/tgstation/tgstation/assets/53777086/d5e97d84-46d8-40b5-995f-c0ef5c7f18ac)
Closed

![image](https://github.com/tgstation/tgstation/assets/53777086/520e88ed-4630-40d8-9039-4c6dd85a9872)
Security version on the left, has a red tint on it

![image](https://github.com/tgstation/tgstation/assets/53777086/ef71a092-8d1b-4776-bdb4-6718308967c7)

Video demonstration (old sprites):


https://github.com/tgstation/tgstation/assets/53777086/a2e59f08-2d58-4f5b-b081-e137c7606d35

## Why It's Good For The Game

Current security records has no way to change your photo ID, something
that was a feature before it was moved to TGUI. The only alternative is
to fully delete your record and make a new one with a photo and the same
name, but this shares a major issue with the HTML UI: You're immediately
sold out by the fact you have a background. No matter how well you try
to cover your tracks, any security officer looking at records will see
you are the only photo on the manifest that has a background and even a
camera in your hand, which makes it impossible to get away with it
unless security essentially takes pity on you.
This opens up the ability to fully mask yourself in records, finally.

This is also better even for non antagonists because you can now
properly update your photos to match what you look like in the event of
an appearance change or even just a job change, which makes it a benefit
for HoPs who likes to keep records as up-to-date as possible.

## Changelog

:cl: JohnFulpWillard, Twox
add: Added a new photobooth machine to the HoP's line.
fix: Things checking for access now checks your off hand, too.
/:cl:

---------

Co-authored-by: Ghom <[email protected]>

* Automatic changelog for PR #82105 [ci skip]

* Removes camera assembly structures (#81656)

## About The Pull Request

Removes the camera assembly structure middleman between the camera
wallframe and camera machine. All its behavior has been instead moved to
the camera, and I've tried to keep as much of the behavior the same as
before.
This also fixes the issue that camera assemblies had where, upon the
construction being finished, it would move itself into the newly
finished camera machine, therefore taking itself off a wall, therefore
deconstructing itself. This resulted in 2 piece of iron being in each
camera machine (except roundstart ones), and because camera machines
rely on the assembly inside of them for upgrades and such, upgrading
didn't work at all.

I've also made camera nets use defines (not in map) so it's easier to
find a list of them all, and tried to add autodoc comments to nearly
every var in camera code.

## Why It's Good For The Game

Removes copy paste and spaghetti code between structure and machine
camera, thus making it easier to work around with.
Closes https://github.com/tgstation/tgstation/issues/79019

## Changelog

:cl:
fix: Cameras built in-round can be upgraded again.
fix: Deconstructing cameras now more consistently return to you the
upgrades inside of the camera.
fix: RD's telescreen can now properly see Ordnance cameras again.
fix: [Deltastation] Library art gallery no longer has an invisible
camera.
/:cl:

---------

Co-authored-by: san7890 <[email protected]>

* Automatic changelog for PR #81656 [ci skip]

* [MDB Ignore] Combines Cargobus consoles with Dept. Order Consoles, freeing all departments of 1 whole tile of space (#82210)

## About The Pull Request

- Departmental orders are now an NTOS app
   - To download, they require `ACCESS_COMMAND`.
   - To use, they require one access from the department.
- This means you cannot order things from not-your-department unless you
have an ID.
- When newly downloading the app, it will prompt a head of staff to
insert an ID, to determine which department to be linked to.

- Changes chat room overlay from the kind that AI uploads use to a new
icon.

- Minor refactors to department order in general. 


![image](https://github.com/tgstation/tgstation/assets/51863163/605c2499-e5e9-4f91-aa2a-aa8af8b05a9f)


![image-1](https://github.com/tgstation/tgstation/assets/51863163/089d3fe1-787c-4f5a-bc3d-edb9611dfbb2)

## Why It's Good For The Game

These two computers are surprising waste spacers for two things which
are tied together.
So why not combine them?

The lesser used cargobus chat is still there, and departmental orders
are front and center.

This gives mappers a ton more leeway when mapping departments out and is
overall less clutter.

## Changelog

:cl: Melbert
qol: Cargobus chat console and Departmental Order console are now
combined into one.
qol: Mod PCs active on the "chat client" apps no longer look like AI
uploads (and now have their own sprite)
refactor: Departmental order consoles were refactored a bit, report any
oddities.
/:cl:

* Automatic changelog for PR #82210 [ci skip]

* Adds Rake and Cultivator so players can be self sufficient in hermits (#82219)

<!-- 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
Added both a rake and a cultivator to the icemoon underground hermit
ruin structure. This is to allow complete ability to operate without
extra tools from external sources.
<!-- 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
It means ghosts(or visitors) can fully utilise this area and aren't
hindered by being unable to remove any weeds etc.
<!-- 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. -->

Closes #81743 

:cl: icequibe
qol: Allowed players to fully use the underground hermits without
assistance outside of ruin
/:cl:
<!-- 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 #82219 [ci skip]

* Fixes modular computer boot-up (#82254)

## About The Pull Request

Fixes a bug where modular computers (specifically PDAs) will fail to
start up if there is zero required application power draw.

PDA will now consume base active power usage during startup.

Related https://github.com/tgstation/tgstation/issues/82196
Fixes https://github.com/tgstation/tgstation/issues/82245
Fixes https://github.com/tgstation/tgstation/issues/82229

## Changelog

:cl: LT3
fix: Fixed modular computers failing to boot up using cell power (eg:
contractor tablet)
/:cl:

* Automatic changelog for PR #82254 [ci skip]

* Fixing cell power usage (Part 4) (#82227)

## About The Pull Request
Continuation of #82204

Fixes these issues in #82196
- Cyborg Electroadaptive Pseudocircuit
- Defib EMP
- Cell EMP
- `/datum/action/cooldown/mob_cooldown/charge_apc` stuff
- Mecha movement, melee, light ,weapon & tool energy drains
- Ninja drain

## Changelog
:cl:
fix: Fixed more energy usages for cells(Part 4). See PR 82227 for
details
/:cl:

---------

Co-authored-by: Pickle-Coding <[email protected]>

* Automatic changelog for PR #82227 [ci skip]

* Prevents Debug ID Card from Polluting Cargo Budget By Doing It Right (#82214)

## About The Pull Request

Fixes #81755

Alright instead of piggybacking off the departmental/non-departmental
distinction and prevent ourselves from constantly abusing the cargo
budget in order to achieve the very-specific effect of not wanting
players to abuse this card in certain contexts let's just leverage the
framework and expand it so that we can snowflake for admin/`holder` use
cases in stuff like debugging code on a local server while preventing
some player from stealing it off a newbie admin and immediately wrecking
the economy (although it is funny).
## Why It's Good For The Game

Probably a bad idea to continue to abuse the cargo budget like this
since the only reason why it's structured that way is just for specific
use-case exemptions in certain contexts - let's just do our own thing
now :3
## Changelog
:cl:
admin: Advanced Debug Cards will still provide a whole lot of access,
but the way the money on those cards work is now a bit different.
Players shouldn't be able to use the money on those cards in any context
though, don't fret about that. Just know that the money printer goes
wrrrr
/:cl:

---------

Co-authored-by: Zephyr <[email protected]>

* Automatic changelog for PR #82214 [ci skip]

* Add a unit test to check that maploaded simple/basic mobs are in an environment they can survive in. (#82180)

## About The Pull Request
I've recently noticed that the maploaded penguins from the snowdin away
mission were dying from unsafe atmos/temperature. This sparked the idea
of making a (focus only) unit test that would prevent this sort of
issues from happening.

This PR also implements the usage of the `atmos_requirements` and
`body_temp_sensitive` elements for simple animals too, cutting down the
copypaste.

## Why It's Good For The Game
More unit tests to make sure things are done correctly.

## Changelog

:cl:
fix: Made sure that mapped critters (i.e. penguins on the snow cabin
away mission) can survive in the environment they're spawned in.
/:cl:

* Automatic changelog for PR #82180 [ci skip]

* Fixes stabilized red bypassing immutable slowdowns / Fixes being unable to construct fulltile objects on immutably slow things (#82250)

## About The Pull Request

- Fixes Stabilized Red extract's equipment slowdown immunity bypassing
item Immutable Slowdown

- Fixes(?) Settler equipment slowdown modifier applying to immutable
slows

- Fixes Immutable Slow being considered an object flag when it was an
item flag, causing objects to consider objects with it to be
`BLOCKS_CONSTRUCTION_DIR`

## Why It's Good For The Game

The description of Immutable Slows: 

`When players should not be able to change the slowdown of the item
(Speed potions, etc)`

Stabilized Red extracts were changing the slowdown of the item, which is
unintended.
Likewise Settler was doing the same, but that one I'm a bit more iffy
on.

Either way I suppose if things should immutably be slow, they should
immutably be slow.

## Changelog

:cl: Melbert
fix: Stabilized Red extracts no longer bypass Immutably Slow items
fix: Settler equipment speed modifier no longer applied to Immutably
Slow items
fix: Immutably Slow items no longer block construction of certain items 
/:cl:

* Automatic changelog for PR #82250 [ci skip]

* Converts slimes to basic mobs (#82176)

## About The Pull Request

After months of preparation, and further months of work, I am finally
done. Please bear with me, as this is a massive refactor, but I have
already atomized everything I could. This is now ready for review.

General

- 	The hilbert hotel slimes are now a subtype instead of a varedit.
- The `use_mob_ability` subtree now also accepts non cooldown abilities.
If set_behaviours is set up properly, mobs won't keep continously
triggering it as if it were a 0 second cooldown action. The alternative
would have been turning the slime abilities into cooldown abilities.
- Wrestling off a slime now signs up to the `COMSIG_ATOM_ATTACK_HAND`
signal, instead of being part of attack_hand.
- Adds datum/ai_controller/controller as a fourth, optional argument to
`/datum/ai_behavior/find_hunt_target/valid_dinner()` to make it possible
to access blackboard keys.
- Slimes no longer attack windows if they would accidentally move into
them (when the conditions are met), since random walk behaviour ignores
tiles they can't go in. It was also not worth to keep. Did you know this
was the sole override of `ObjBump()`?
- Examine was made less snowflaky/bespoke. Also added a new element:
`/datum/element/basic_health_examine`, which is a simple bespoke element
that prints out a custom message based on how damaged the basic mob it
is attached to is.
- Slimes only perform knockdown instead of paralysis, as they can attack
more often now, and paralysis is not that fun.
- LAssailant has been removed due being archaic code. To befriend a
slime, you have to spawn a monkey with the slime console, or feed them a
sheet of plasma. Simple grabbing the monkey or stuffing them in
disposals do not work anymore. Slime console spawned monkeys will have a
visible status effect, with pheromones coming off them to make this
clearer.

Actions
- 	Feeding, reproduction and evolution is no longer a verb.
- Slime feeding is no longer an action button. You have to use right
click, or as previously, mousedrop. Slimes can always unbuckle from mobs
they are attached to.

Hunger 

- Instead randomly changing the starvation and max nutrition values
while growing up, evolution costs 200 nutrion. This makes the code more
readable, and behaviour more predictable, while still giving the
intended time between evolving and splitting. As a result, I could also
turn these into defines.
- Added a component that handles doing an effect over time while buckled
to a mob, until the mob dies or you get unbuckled.
- Slimes gained nutrition is no longer randomly multiplied by the damage
config value, but rather gain nutrition equal to twice the damage dealt.
You'll have to eat one monkey to evolve, just as before.
- Slimes do not heal passively. They only heal from eating. It was a
rather miniscule value that did not have much effect.
- Slimes generate electricity from hunger threshold, instead of the
random amount of hunger threshold + 100.

Environment

- Slimes take 15 damage from cold every second, instead of using a
complex formula (that also decreased the damage up to a point?).
- Slimes still heal from burn damage, but this is now set on the damage
coefficient list.
- Slimes instead of getting stunned by the cold, freeze in an ice cube.
BZ instead of setting them unconscious, calls the stasis status effect,
allowing you to safely stash your hungry slimes for later. They also no
longer slow down from the cold, as they are already slowed down by the
damage they get. Conversely they no longer get a speed up from a random
amount of temperature. I could be convinced to readd this either as part
of the basic sensitive component, or a similar one.

AI
- Removed the attacked_stacks system. Slimes will just perform regular
retaliation if you hit them in a harmful manner.
- Slimes now use the pet orders component. They will interrupt their
feeding when given a command by their master.
- Slimes have their own subtrees. I tried to replicate as much as I
could from the old code, dividing ancient code artifacts and intentional
stuff, so there might be some weirdness.
- Slime speech has been almost fully reduced to basic blorbing, as you
can not even understand them anymore, and most of them require the slime
to loop through all of their surroundings.
- Discipline does not have stacks either. Disciplined baby slimes have a
chance to clear their attack and hunt blackboard keys. All slimes will
stop feeding on the target otherwise.
- Since discipline is not a stack, rabidity instead gets removed at a
10% chance per disciplining.
- 	Slimes faces are a bit more randomly picked now.

## Why It's Good For The Game

- We want to convert all simple animals to basic mobs. Old slime code
was also very strange, and had some systems that have been replicated by
components.
- Slimes fully paralyzing you is not fun at all. Knockdown should give
you a fighting chance when a slime would like to eat you.
- Slimes slow down from the heavy damage they get from the cold, so I
don't think they need extra slowdown, nor do they need to speed up from
warmth, as they are already fast.
- Slimes turning into an icecube instead of becoming paralyzed from the
cold is more fun for the slimes, as they can break out for a few
moments. It is also funny.
- Slimes entering proper stasis from BZ is not just a visual indicator
of a slime that is safe to approach, but also keeps the slimes's hunger
value in check, allowing it to not starve while stopped. They can also
look around and blorble, instead of staring at a black screen, if player
controlled.
- The attack_stack and discipline_stack behaviours were rather
overcomplicated, and the xenobio mains I talked with didn't even know it
was a thing, so I argue it needed simplification.
- The bespoke friendship system of slimes was also too complicated.
Slimes slowly gained levels of trust, and at certain levels commands
costed friendship, and other levels, they did not. The binary friend/not
friend system that everything else in the game uses is much more
sensible.
- Using right click for feeding is much more sensible than using an
action, and then picking someone from a dropdown.
- Slime speech was very soulful but not only did it loop through
everything in sight, you couldn't even understand it unless you spoke
slime. Maybe it can be readded later in a different form.
- Slime's passive healing was miniscule, and having them rely on feeding
is more interesting.

also
fixes #81463

## Changelog

:cl:
refactor: Slimes are now basic mobs. Please report any strange
behaviours!
balance: Slimes only stun you for two seconds when they shock you, the
rest of the duration is a knockdown.
balance: Slimes are not stunned from the cold, but rather, get frozen in
a freon icecube. BZ also puts them in complete stasis, instead of making
them unconscious. Their speed is likewise unchanged by temperatures.
balance: Slimes do not passively heal, they instead rely on feeding.
fix: Slimes can use the buckling screen alert to unbuckle and stop
feeding, along with clicking on the mob they are riding
/:cl:

* Automatic changelog for PR #82176 [ci skip]

* Suit Storage Units / Inducers can charge MODsuits without necessitating them be screwdrivered opened  (#82194)

## About The Pull Request

So MODsuits do this thing here with `get_cell` in that they don't return
anything when they're closed


![image](https://github.com/tgstation/tgstation/assets/51863163/416f8ef5-3bfc-4d2c-a12f-029f051d6692)

And I... can't tell why they do this. 

I looked through every use of `get_cell` and the only things affected by
this are
A. Suit Storage Units, which I believe have always been intended to
charge MODsuits?
and
B. Inducers

So I removed the `open` check. Allowing both Inducers and Suit Storage
Units to charge mods without needing you screwdriver their panel open
first.

I also took the opportunity to allow SSUs to charge multiple items at
once (divvying charge accross all items)

## Why It's Good For The Game

I asked Fikou and they said it was "probably not" intended that you need
to screwdriver them open so yeah.

I think I remember charging my MODs during the original test merges
years back but I can't remember if I opened the suit first when I did or
not.

Either way, it's not super intuitive. Though it's already not very
intuitive that SSUs charge things.

## Changelog

:cl: Melbert
qol: Suit Storage Units charge MODsuits while their cell panel is closed
or open, rather than only when screwed open
qol: Inducers can charge MODsuits while their cell panel is closed or
open, rather than only when screwed open
qol: Suit Storage Units will charge all items within simultaneously (if
possible)
/:cl:

---------

Co-authored-by: san7890 <[email protected]>

* Automatic changelog for PR #82194 [ci skip]

* turret id panel thingamajig access works properly (#82247)

## About The Pull Request

it now checks access of the attacking item instead of you
also removes the ass range check anyway it messes up TK and its
inconvenient and attackby should handle it anyway and if the ID card
somehow has a greater reach variable it still works

## Why It's Good For The Game

fixes #81978

## Changelog
:cl:
fix: turret id panel checks the access of the attacking item instead
/:cl:

* Automatic changelog for PR #82247 [ci skip]

* Strip Menu Suit Sensors (#82253)

## About The Pull Request

Allows players to modify the suit sensors of someone else's jumpsuit
without first requiring them to disrobe them.

![image](https://github.com/tgstation/tgstation/assets/12817816/9b6ca2a3-ed23-4b46-a18b-9c5283fe8957)

## Why It's Good For The Game
It's annoying for players, usually antags, who are attempting to kidnap
someone and then disable their suit sensors they must first entirely
disrobe them, change the sensors, and then put everything back onto
them.

## Changelog

:cl:
balance: You can now adjust the suit sensors of another player in the
strip menu. No longer must you first take it off.
/:cl:

---------

Co-authored-by: Mothblocks <[email protected]>

* Automatic changelog for PR #82253 [ci skip]

* Automatic changelog compile [ci skip]

* Removes the ability for the AI to track mobs in objects, as well as very transparent mobs. (#82252)

## About The Pull Request

You can no longer visually track something (See: AI tracking) if that
object is inside something.
You are considered invisible by the tracking system if your alpha is
less than 50, instead of just having 0 alpha.
Rearranges some tracking code so the less expensive stuff is called
before the more expensive stuff.

## Why It's Good For The Game

I don't know if this is a bug or an intended feature, but as it stands
the AI can track and find people inside lockers, disposals, vehicles,
and other objects despite in most cases not being able to have a visual
lock-on to the target. As an AI player, it feels game breaking to be
able to track people in these states. This PR makes it so that you
cannot be tracked while you are inside an object.

I also made it so that you are considered "invisible" by the tracking
system if your alpha level is less than 50, instead of it just being 0.
To get an idea how invisible 50 alpha is, here is a picture of a clown
set to 50 alpha. Horrifying.


![image](https://github.com/tgstation/tgstation/assets/8602857/ce794bcb-ee95-4b84-84cb-afc171e88e81)

## Changelog

:cl: BurgerBB
balance: You can no longer visually track something (See: AI tracking)
if that object is inside something. You are also considered invisible by
tracking if your alpha level is less than 50.
/:cl:

* Automatic changelog for PR #82252 [ci skip]

* Fixes Circuit Multi-Tools to work on Carbons holding / wearing anything at all (#82262)

## About The Pull Request
Ever since https://github.com/tgstation/tgstation/pull/81215 I havent
been able to scan anyone that was wearing or holding anything with a
circuit multi tool because the options never popped up, the click was
just unresponsive and nothing would happen.

Then I remembered that Ghommie posted a picture of it working when the
pr was first made and went to look at any changes made in the commits
afterwards

For some reason uniqueid set to true was what made the list not appear,
and I cant find any side effects from removing that bit of code.
## Why It's Good For The Game

This works as intended.



https://github.com/tgstation/tgstation/assets/62126254/61a5435c-9d51-462b-927a-9b1fc1cffb0e
## Changelog
:cl:

fix: Circuit multitools can now correctly scan carbons who are wearing
clothes or holding objects again.

/:cl:

* Automatic changelog for PR #82262 [ci skip]

* fixes gas analyzers (#82278)

## About The Pull Request

#82180 accidentally messed up air analyzers being able to read or send
readouts to the chat.

## Why It's Good For The Game

air analyzer good

## Changelog

:cl:
fix: air analyzers work again
/:cl:

* Fixes grammatical error with splashing (#82268)

## About The Pull Request

Changes `Joe Assistant splash the contents of the beaker onto you!` to
instead read `Joe Assistant splashes the contents of the beaker onto
you!`

## Changelog

:cl:
spellcheck: fixed grammatical error in chemical splashing
/:cl:

* however, he burn`s` his finger in the process. (#82267)

## About The Pull Request

how's this grammar mistake gone unnoticed for actual years
## Why It's Good For The Game

yes
## Changelog
:cl:
spellcheck: however, he burn`s` his finger in the process.
/:cl:

---------

Co-authored-by: Kapu1178 <[email protected]>

* Automatic changelog for PR #82278 [ci skip]

* Automatic changelog for PR #82268 [ci skip]

* makes an unused weather variable used and snow storms no longer glow (#82248)

## About The Pull Request

use_glow variable is now actually checked (i think this is a fix?)
sets it to FALSE for snow storms cuz it looks cool

## Why It's Good For The Game

i think its more visually appealing for the no glow part
and also bug fix

i mean check this swag

![image](https://github.com/tgstation/tgstation/assets/70376633/3ae7cbf7-9664-4cc0-9920-37ae5b6cf8b7)


## Changelog
:cl:
fix: Certain weather types that arent supposed to be glowing no longer
glow
image: Snow storms no longer glow
/:cl:

* Fix Mind Gate not causing self brain damage (#82270)

## About The Pull Request

Plain an simple, `owner` is not passed in cast

## Changelog

:cl: Melbert
fix: "Mind Gate" does self brain damage as intended
/:cl:

* Automatic changelog for PR #82267 [ci skip]

* Minor AI control airlock runtime fix (#82271)

## About The Pull Request

`canAIControl` accepts 1 argument, `user` / "the AI who is controlling
us". It doesn't accept `src`. (Why would it use `src`?)

## Changelog

Technically no player visible change, as the proc would runtime / return
`null`, which is the same end result

* Automatic changelog for PR #82248 [ci skip]

* Automatic changelog for PR #82270 [ci skip]

* fixes 3 year old code that never even worked (#82274)

## Changelog
:cl:
fix: Botanists will be given dank pizza when consuming the infinite
pizza
/:cl:

* Wisdom Cows contain unusual milk (#82269)

## About The Pull Request

Wisdom Cows can now be milked for a random reagent (excepting the
randomly generated reagent blacklist).
Also I changed it to say `you milk the cow` instead of `you milk the
udder` because the latter is stupid.

## Why It's Good For The Game

My experience is that people totally ignore this event when it occurs,
which is _fine_ when we have so many events and they don't all need to
be high impact but I think someone discovering that you can milk the cow
for cognac or meth or something could add something to a round.
I want people to bicker over ownership of the cow, basically.

If the reagent is annoying you can simply speak to the cow to receive
its wisdom and it will disappear.

## Changelog

:cl:
add: Wise cows produce surprising milk.
spellcheck: You now milk the owner of an udder, not the udder.
/:cl:

* Automatic changelog for PR #82274 [ci skip]

* Automatic changelog for PR #82269 [ci skip]

* [NO GBP]Grind & juice fixes (#82272)

## About The Pull Request
- Fixes #82266. Anything that has reagents can be either grinded or
juiced
- If something doesn't have reagents but has grind results it can still
be grinded but not juiced

## Changelog
:cl:
fix: anything that has reagents can be either grinded or juiced
fix: stuff that does not have reagents but has grind results can still
be grinded but not juiced
/:cl:

* Automatic changelog for PR #82272 [ci skip]

* Secbots/Beepsky no longer can be buckled (#81744)

beepsky has been bullied for generations, greytides will no longer fuck
with him, this is a quick buff so they dont mess with him while i
rebalance him later.
beepsky/secbots cant be buckled to chair anymore (sorry greytides).

:cl:
balance: secbots no longer can be buckled
/:cl:

* Automatic changelog for PR #81744 [ci skip]

* Fixes unfathomable curios not blocking when equipped. Fixes the shielded component still blocking despite not having a 'wearer'. (#82073)

<!-- 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

The unfathomable curio now only blocks when equipped to the belt slot,
and not when equipped in the hand.

The shielded component now no longer blocks despite not having a wearer,
and does not block if the wearer is not the same as the owner in the
``hit_reaction()`` proc.

Fixes https://github.com/tgstation/tgstation/issues/82068

## Why It's Good For The Game

The curio was only blocking while in-hand, rather than how it should be;
in the belt slot. Now it does what it is supposed to.

On top of that, this fixes what I think has been a bug for quite some
time with shield_inhand just not being respected whatsoever with regards
to whether or not the component worked. It only really determined
whether or not you got the sprites added/removed, but didn't factor into
the blocking ability whatsoever.

## 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:
fix: Unfathomable Curios now properly block as expected.
fix: The shielded component actually respects the shield_inhand when
determining blocking potential.
fix: Ensures that the shielded component has a wearer before attempting
to block, and that this wearer is the same as the owner of the item.
/: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. -->

---------

Co-authored-by: san7890 <[email protected]>

* Automatic changelog for PR #82073 [ci skip]

* Automatic changelog compile [ci skip]

* [NO GBP]Fixes some mapped SMES starting with low energy. (#82203)

## About The Pull Request
Scales them all by up to 20 to account for removing the dumb SMESRATE
define. This isn't a 100% conversion for every SMES because it would go
beyond their capacity (old SMES use to duplicate cell energy, so they
had a higher capacity than their cell parts imply). Also removes
instances of varediting their capacity to fucking 1e+600 and replaces
them with magical SMES.
## Why It's Good For The Game
So lavaland and crap don't instantly run out of power. Also I don't
think we should be varediting anything to 1e+600.
## Changelog
:cl:
fix: Fixes lavaland SMES and other crap from not starting with enough
energy.
fix: The pirate SMES are now magical instead of secretly infinite.
/:cl:

* Automatic changelog for PR #82203 [ci skip]

* [NO GBP] Fix letting you actually beat up racks with objects. (oops) (#82277)

## About The Pull Request

I misjudged `item_interaction` as being a non-combat mode only proc.

https://github.com/tgstation/tgstation/blob/593f1eaee33d0016b473bd799e2b3beddd977304/code/game/atom/atom_tool_acts.dm#L2-L12
Which today I realized, well, it clearly isn't. With my changes, racks
don't let you beat them with an object even though you're in combat
mode.

Anyhow, this pr just makes it so it doesn't continue to the item placing
part when in combat mode.
## Why It's Good For The Game

Fixes an issue I caused, not letting you attack racks with objects.
## Changelog
:cl:
fix: You can actually hit racks with objects when in combat mode again.
Importantly, painting them with spraycans like that works again.
/:cl:

---------

Co-authored-by: Ghom <[email protected]>
Co-authored-by: MrMelbert <[email protected]>

* Automatic changelog for PR #82277 [ci skip]

* [NO GBP] Fixes the "Random" deathmatch modifier and turns "Heightened Hearing" into a modifier as well. (#82223)

## About The Pull Request
See the title.

## Why It's Good For The Game
This will fix #82149 

## Changelog

:cl:
fix: Fixed the "Random" deathmatch modifier. Also turned the "Heightened
Hearing" option into a modifier as well.
/:cl:

* Automatic changelog for PR #82223 [ci skip]

* adds extra airless (and some tcomms air) variants for turfs (#82281)

## About The Pull Request

adds extra airless variant for some catwalks, telecomms air openspace,
and some other stuff forgor

## Why It's Good For The Game

im trying to split up my station map pr

## Changelog

not playerfacing these arent used anywhere (yet)

* Allows borgs to use ranged rightclicks (#82265)

## About The Pull Request

No idea why this is all copypaste snowflake code but here we are. Borgs
can now use ranged rightlicks just like anyone else.

I honestly have barely any idea as to what I am doing, does anyone have
a diagram of the attack chain? But I can assure you, it does work.

## Why It's Good For The Game

Future borg parity with EVERYTHING ELSE. Will make crushers and other
weapons with rightclick functionality work if one decides to add them to
borgos. Even if not, it's good to keep the parity.

## Changelog
:cl:
code: Borgo rightclick ranged code
/:cl:

---------

Co-authored-by: MrMelbert <[email protected]>

* Automatic changelog for PR #82265 [ci skip]

* [No GBP] Fixes slow slime feed (#82284)

## About The Pull Request

Slimes were supposed to gain the same amount of nutrition as the damage
they dealt while feeding. However, I have accidentally multiplied this
again by `seconds_between_ticks` a second time. This meant that locally
slimes fed normally, but on the server they got about the third
nutrition they were supposed to, probably due to having more ticks per
second then my machine. This PR fixes that.

Also raised the nutrition gained by slimes by 20%, after careful
testing, one monkey wasn't always enough.

## Why It's Good For The Game

 Fixes #82283

## Changelog

:cl:
fix: Slimes now feed faster, and should only need one monkey to reach
their next lifestage.
/:cl:

* Automatic changelog for PR #82284 [ci skip]

* Converts some TGUI to typescript (#82273)

## About The Pull Request
Just did a few easy conversions. There shouldn't be a gameplay effect
but there were, of course, people misusing props. I will test each to
ensure the UI still looks the same.

- layout and pane should now easily import when typed
- moved colspan prop from box to table cells 
- wrote more documentation for these props
- removed erroneous props "cellpadding" and "collapsible"
- fixed some map keys
- some tlc for uis using deprecated props/syntax

## Why It's Good For The Game
Typescript good. Easier to use the components

## Changelog
N.A nothing player facing

* Makes the easter event spawning logic use a more curated list (#82275)

## About The Pull Request

The easter rabbit event looped through every single landmark in the
game, not checking for zlevel or purpose, just that they would not be
called "blobspawn". This PR makes the logic more curated, using generic
and maintenance event landmarks for normal bunnies, and carpspawn for
space rabbits.

Also added check_tick  checks for a good measure.

There is a still a lot of them! I counted around 50 bunnies on average
per test.

## Why It's Good For The Game

A more curated list is better than a list that checks for name strings.
Ensures the rabbits spawn only on the station Z levels.

## Changelog

:cl:
code: Made the easter rabbits spawn on a more curated list.
/:cl:

* Automatic changelog for PR #82275 [ci skip]

* Birdshot Engineering Retrofitting (#81840)

Warning: Nanotrasen Confidential Proprietary Information (NCPI) must
only be accessed and viewed within a Nanotrasen Virtual Environment
(NVE, vNTOS-3). Employees in violation of this information ordnance will
have their wages A) garnished, and B) sent to a labour camp up to a
maximum of ten (10y) years. Questions regarding policies related to NCPI
should be directed towards departmental heads or your sector Central
Command Information Authority (CCIA) personnel.

## About The Pull Request

Credentials Confirmed
The Birdshot Engineering Revitalization Plan (formerly proposal
Blindfold, now BERP) is a procurement effort to address growing
maintenance liabilities and costs on the Skitter-MDR Class Orbital
Station located in the Spinward Stellar Cluster (SSC, Sector 28-7b).
Over the course of the previous year, ongoing analysis data has provided
vital feedback since the station was once again brought into operation
after 17 years of abandonment; and using this data, 4 options were
outlined for the Blindfold Proposal.
1) Abandonment - No Cost. Operations on Birdshot will cease. 28-7b
operations will be moderately impacted.
2) Procurement - Medium Cost. Replace offending station sections
completely with low-cost, working alternatives. Operational gains in
28-7b expected.
3) Do Nothing - No Cost. Moderate long-term impacts to operations in
28-7b.
4) >>>_Was removed_

Option 2 was selected for BERP. Procurement efforts identified 3
solutions and later narrowed it down to 1. Following the selection
process architects were brought in to draft up low-impact refits to the
designated hulk. 5 selections made it past initial drafting, with 3
ultimately being selected for engineering board review. Penultimately
draft proposal 3 was selected for the project and now awaits engineering
certification. The draft plan is provided on the next page:


![Birdshot Eng
Final](https://github.com/tgstation/tgstation/assets/33048583/441a6ca8-d7e1-4962-82b9-c412393ad73b)

Following board certification, implementation of the plan will be
commenced by 28-7b Nanotrasen Enigneering Corps. (NECs). Construction
time-frame pending Project Foremans review.

## Why It's Good For The Game

Birdshot Engineering is where this whole station began. Back then,
things were going to look closer to Birdboat Station, but that became
looser and more ill-defined as progress was made on the overall station.
While I was satisfied of the decrepit feel of Birdshot Enigneering
initially, I knew that at some point, it would require modification to
better play into Birdshots strengths.

I've had a long laundry list of a roadmap that I've wanted to implement
since the station was added, and this was the top item. Tier Zero.
Problema Numero Uno. You get the idea. This has been a year of drafting,
redrafting, and redrafting everything until it fit Birdshot right. With
this, we're nearly there. I see this being the definitive Engineering
Department for this station for quite some time to come. However, this
is still a draft and some elements are subject to change as I begin to
work out some of the more minor kinks in the draft such as pipe
locations and transit tubes.

Presently Atmospherics is completely rebuilt from the bottom up. There
is more space, enough to do projects, but you'll have to tear down some
windows and walls to gain it. Nothing ventured, nothing gained. You also
have most of the gas distro line outside. I'm a firm believer in
enabling whatever antics ANY lunatic may have. Atmos techs can rest
assured that outside lines are completely reconfigurable (and powered)
enabling some... unique project prospects. You also gained an inside HFR
and Spare burn chamber. Enjoy.

The Engineering Common Areas are now inside the department proper
instead of the satellite treatment in the original implementation.
Security gets an actual outpost and engineers now have a proper office
to file engineering documentation. They say that office colleagues can
form tight bonds so let's see whose is stronger: Purples or Yellows?

The Supermatter Engine is more of an upgrade over the previous model
(Leaky SM is here to stay so deal with it). The room is larger with less
rock, allowing some manner of greater customization, but I believe
engineers will be more than happy to find that they now have a Burn
Chamber of their own. I have zero clue of what they'll do with it, but I
think any enterprising CE will be able to create something that even god
should fear.

Finally we have maint improvements. Nothing really to see here though
maybe there's the beginning of something for the future if you care to
speculate. I couldn't really keep the meandering maint of the previous
rock, so instead we now have some pseudo dead-ends. It's all connected
by transit tubes to the north (not shown) so you can slowly get around
if you will it. Of course there's plenty of cut-throughs,
not-so-finished sections, and opportunity for those who need it. Caution
to the blind, this whole rock is spicy.

Overall I'm happy with this and want to open it up in Draft Mode for
initial thoughts. I have a rough timeline on finishing this that
stretches out to the weekend, so the earlier comments are, the more
likely I'll be able to MAYBE do something about it. Thanks for the
patience and hopefully this is a doozy of an update for all our players.

Previous Engineering Provided for Point of Reference:

![Screenshot 2024-03-04
190827](https://github.com/tgstation/tgstation/assets/33048583/55355582-2129-4744-a75b-0cd97f2b5008)

closes  #75590

## Changelog
:cl:
qol: Wholesale Revamp of Birdshots Engineering Department
fix: Some Birdshot Amtospherics Concerns
fix: Some Birdshot Engine Concerns
/:cl:

* Automatic changelog for PR #81840 [ci skip]

* Bumping into a door in a stealth implant opens the door (if you have access) (#82224)

## About The Pull Request
Bumping into a door in a stealth implant opens the door (if you have
access)
## Why It's Good For The Game

![image](https://github.com/tgstation/tgstation/assets/66163761/d00bf8b6-5a60-4c64-8035-27c400b1960d)
Reduces jank by allowing stealth boxes to open doors.
## Changelog
:cl:
qol: You can now open airlocks (That you have access to) while inside a
stealth implant box
/:cl:

---------

Co-authored-by: san7890 <[email protected]>

* Automatic changelog for PR #82224 [ci skip]

* Automatic changelog compile [ci skip]

* prevent linear transports from picking up underfloor objects during movement (#82282)

## About The Pull Request

prevent linear transports from picking up underfloor objects during
movement

as this checks the trait, this doesnt work during map load because
underfloor objects tend to not have the trait before theyre picked up
during init by transports but idk how to fix that

## Why It's Good For The Game

its a bug and bugs are bad

## Changelog
:cl:
fix: elevators may no longer pick up things from under the floor during
movement
/:cl:

* Automatic changelog for PR #82282 [ci skip]

* Chem dispenser UI minor patches (#82123)

## About The Pull Request
- Fixes #82119. ph is not computed & shown when recording recipes is
enabled. The ph value was inaccurate anyway because it was not computed
from the recorded recipe but from the beaker.
- Removed deprecated `content` tag from buttons in the UI

## Changelog
:cl:
fix: chem dispenser UI doesn't brick when beaker is ejected while
recording recipes
code: removed deprecated `content` tag from buttons in chem dispenser
/:cl:

* Automatic changelog for PR #82123 [ci skip]

* Fix double-encode with AI holocall messages (#82290)

## About The Pull Request

Fixed yet another double-encode, the bane of my existence

fixes https://github.com/tgstation/tgstation/issues/68274

## Why It's Good For The Game

Because\&​\#​44\;​ it\&​\#​39\;​s like\&​\#​44\;​ whenever your talking
about how something\&​\#​39\;​s blowing up or how\&​\#​39\;​s the
weather on shitbox\&​\#​44\;​ or quoting \&​\#​34\;​Hey\&​\#​44\;​ John
McTide slept with your mom\&​\#​34\;​\&​\#​44\;​ it makes it SO much
harder to read\&​\#​46\;​

## Changelog
:cl:
fix: Fixed double-encoded messages with AI holocalls.
/:cl:

* Automatic changelog for PR #82290 [ci skip]

* minebot buff (#82001)

## About The Pull Request
this pr buffs non-sentient minebots a bit to make them more helpful with
the new arcmining changes.
Minebots now have a better overall AI, they will maintain distance from
enemies and shoot while running. they will also plant landmines while
theyre running away from enemies. these landmines are carefully
programmed by the bot not to trigger when any of its miner friends step
on it. u no longer need to feed minebots an ore to get them to listen to
you, as they now automatically listen to any miners around.
minebots can now repair damaged node drones 

![image](https://github.com/tgstation/tgstation/assets/138636438/12e67eb2-3711-465c-a3ac-54fdadbed5e4)
they also have a new autodefend feature, which makes them automatically
attack any mob that attacks its miner friends or the drone. They also
have some new upgrades!
First is the regenerative shield, this shield allows minebots to tank a
limited amount of hits before breaking. minebots will then need to wait
sometime before the shield re-activates.
Second is the rocket launcher remote control, this allows players to
direct minebots to fire anti-fauna missiles at their target

https://github.com/tgstation/tgstation/assets/138636438/3ec3605e-8e11-4a31-acaa-1382bed98294

Also minebots are now highly customizable, you can rename them, change
their colors, or program their AI through their new user interface

![image](https://github.com/tgstation/tgstation/assets/138636438/d2e1c39d-f9d2-4da7-a5fa-5a41cea31d6e)


## Why It's Good For The Game
Improves minebot AI a bit, and makes it a more viable option for mining
solo players

## Changelog
:cl:
balance: minebots have been buffed and have recieved new upgrades
/:cl:

* Automatic changelog for PR #82001 [ci skip]

* Bumps `dependencies.sh` to 515.1633 Stable (#82138)

## About The Pull Request

Two reasons for this.

1. It's the stable branch, so let's move it up. This PR will detect any
issues that we might have with the latest 515.1633 as far as the
codebase is concerned (the servers have been running 1633 for at least a
week now).
2. ~~I'm fucking sick of seeing the Lua Scripting Notice in CI even
though it was fixed a few days ago in #82074
(5624d9452413641b4c6d4b886cb116481186b8ac)

`![image](https://github.com/tgstation/tgstation/assets/34697715/0cc889c9-25d0-48cb-a0d1-304738acd8cc)`~~

* Fixing cell power usage (Part 5) (#82296)

## About The Pull Request
Continuation of #82227

Fixes these issues in
https://github.com/tgstation/tgstation/issues/82196 and others that
weren't noticed.
- Batton emp protection
- Cyborg stun arm
- Cyborg energy sword
- Cyborg hug attack
- Mechanical god religious sect charge check
- Mecha fixes
  - Phasing energy drain
  - Short circuit energy drain
  - Durand shield damage energy drain
  - Plasma engine recharge rate
- Mechbay recharge power rate
- Recharge station charge rate

Stuff that was already working & didn't require fixing.
- Plasma cutter energy shots
- Botany cell charging

## Changelog
:cl:
fix: Fixed cell energy usage for a bunch of stuff(Part 5). See PR 82296
for details
/:cl:

---------

Co-authored-by: Pickle-Coding <[email protected]>

* Automatic changelog for PR #82296 [ci skip]

* Your heart stops beating when you die now. (#82305)

## About The Pull Request

Your heart stops beating when you die now.

## Why It's Good For The Game

Did you know spacemen hearts kept beating for like 8 minutes despite
being dead until the organ failure finally stopped it? This is stupid
from a consistency and realism standpoint.

## Changelog
:cl:
balance: Your heart stops beating when you die now.
/:cl:

* Automatic changelog for PR #82305 [ci skip]

* Resprites Pinpointers (#82303)

* Automatic changelog for PR #82303 [ci skip]

* Makes simple bodycam component `COMPONENT_DUPE_SELECTIVE` (#82310)

## About The Pull Request

The thought only just occurred to me people may want to throw multiple
bodycams with different networks on them onto one mob, and it would be
trivially easy to support, so here.

I used `COMPONENT_DUPE_SELECTIVE` rather than `COMPONENT_DUPE_ALLOWED`
so people can avoid adding two of the same camera (network) to one mob.

* [No GBP] Slime stasis fixes (#82304)

## About The Pull Request

`handle_environment` is never called when the target was in stasis, so
slimes stayed in stasis forever. This PR fixes that, albeit in an ugly
way.
It also makes slimes actually not get hungry while in stasis.

## Why It's Good For The Game

Fixes #82300
I also claimed slimes can be safely kept in stasis, but I didn't
actually put a stasis check before handle_nutrition. This is fixed now.

## Changelog


:cl:
fix: Slimes stop being in stasis when taken out of a BZ filled
environment
fix: Slimes no longer become hungry while in stasis
/:cl:

* Automatic changelog for PR #82304 [ci skip]

* [THE QUIRKENING] Adds customization options to Organ Prosthetic, Junkie, Smoker, and Alcoholic! (#82051)

## About The Pull Request

Lets people pick:
- The shitty organ they spawn with (still has the restrictions of not
being possible to get heart when you are a plasmamen, for example)
- Their favorite alcohol to blackout with
- Their favorite brand of cigs
- Their favorite brand of drugs!
A lot of the code was taken from a downstream, made by @Floofies, i
already had my own implementation but it was buggy and not nearly as
clean, then i was made aware of theirs.
## Why It's Good For The Game

Character Customization is good and fun and lets people have more choice
in their roleplay.
## Changelog
:cl:
add: Prosthetic organ users are now allowed to pick what they want to
start with.
add: Junkie of all kinds, including smokers and alcoholics, are also
able to pick their favorite type.
/:cl:

---------

Co-authored-by: Jacquerel <[email protected]>

* Automatic changelog for PR #82051 [ci skip]

* Automatic changelog compile [ci skip]

* Ties power limit of anchored circuits to 20 * standard cell charge to make it consistent with power changes. (#82287)

## About The Pull Request
It just makes the power requirement 20 * standard cell charge instead of
20000
## Why It's Good For The Game
This is too restrictive to make anything with.



https://github.com/tgstation/tgstation/assets/62126254/e39dcf27-8793-42b0-84a0-7f747e95efcc
## Changelog
:cl:
fix: anchored circuits no longer blow up after 2 components are used.
/:cl:

---------

Co-authored-by: Pickle-Coding <[email protected]>

* Automatic changelog for PR #82287 [ci skip]

* random spawners now check if the destination turf is unblocked in a straight line (#82323)

## About The Pull Request
random spawners now check if the destination turf is unblocked in a
straight line


![image](https://github.com/tgstation/tgstation/assets/70376633/15fb4e23-95d1-473c-8bba-00b9497f0ca8)

(spammed grime spawner, nothing spawned behind glass)

## Why It's Good For The Game

bug

## Changelog
not player facing

* Let ethereals starve again (#82308)

## About The Pull Request

Ethereals use energy as 'food', so of course #81579 had to touch them.
To bring them in line with the new standard, the Ethereal charge levels
were updated to be in megajoules.

https://github.com/tgstation/tgstation/blob/466b3df0483162c3900e411c25dfe15c2320786e/code/__DEFINES/mobs.dm#L292-L299

https://github.com/tgstation/tgstation/blob/7fa8daad63f49a11e22ab64a984d29b35619852c/code/__DEFINES/mobs.dm#L285-L292
However! This forgot to update the rate at which Ethereals passively
discharge.

https://github.com/tgstation/tgstation/blob/7fa8daad63f49a11e22ab64a984d29b35619852c/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm#L11-L14

https://github.com/tgstation/tgstation/blob/7fa8daad63f49a11e22ab64a984d29b35619852c/code/__DEFINES/mobs.dm#L437
Meaning it's effectively a thousand times less with the new charge
levels.

So we simply update this define to be in kilowatts.
```dm
#define ETHEREAL_CHARGE_FACTOR (0.8 KILO WATTS) //factor at which ethereal's charge decreases per second
```
## Why It's Good For The Game

Fixes issue with ethereal hunger caused by #81579.
## Changelog
:cl:
fix: Ethereal starvation has been updated to the new joules/watts
standard. Congratulations Ethereals! You can starve again!
/:cl:

* Automatic changelog for PR #82308 [ci skip]

* Add missing stimulants to All Nighter, make this handled by the reagents and not the quirk (#82306)

## About The Pull Request

So while playing with All Nighter, I noticed lattes don't actually count
for fueling my character's crippling coffee addiction.
Looking into it, this is true, the list for which reagents count as
stimulants for All Nighter is quite small:

https://github.com/tgstation/tgstation/blob/fa0ef6b4b6f58b62bad5a105fb3b66d239859c1b/code/datums/quirks/negative_quirks/all_nighter.dm#L25-L37
And importantly, includes _none_ of the coffee or tea derivatives.
But, in the process of adding everything I thought would have a high
enough caffeine content, this list ended up quite big.
More than doubled in size big.

Which is _bad_, because when you haven't slept the quirk loops over
every single reagent in that list to check if you have it, _every single
process call_.

https://github.com/tgstation/tgstation/blob/fa0ef6b4b6f58b62bad5a105fb3b66d239859c1b/code/datums/quirks/negative_quirks/all_nighter.dm#L84-L101
Soooo, ideally, we probably don't want that.

But hey, upshot, we have this whole system for reagents to just give you
a trait while metabolized and remove it when you're done.

https://github.com/tgstation/tgstation/blob/fa0ef6b4b6f58b62bad5a105fb3b66d239859c1b/code/modules/reagents/chemistry/reagents.dm#L77-L78
So we make a trait called `TRAIT_STIMULATED`, check for that, and have
each reagent on the list apply it while metabolized.
Now, if we ever feel like it, we can also have other non-reagent stuff
add that trait and have it Just Work.

For ease of reading, the full list of reagents this makes All Nighter
work with is as follows, where `+` denotes it's newly added:

<details>
  <summary>All Nighter Reagents, Complete List</summary>
  
### Coffee &derivatives:
- coffee
- +cafe latte
- +soy latte
- +ice coffee
- +hot ice coffee
- +pumpkin latte
### Alcoholic coffee derivatives:
- +kahlua
- +konococo rumtini
- +irish coffee
- +thirteen loko
### Tea &derivatives:
- tea
- +iced tea
- +letter t
- +arnold palmer
### Energy drinks &derivatives:
- monkey energy
- volt energy
- +space mountain wind
- +demons blood
### Stimulants (drug subtype)
- aranesp
- bath salts
- blastoff
- methamphetamine
- pumpup
- +kronkaine
### Stimulants (medicine subtype)
- stimulants
- +ephedrine
### Powders (if you're insane)
- +coffee powder
- +tea powder

</details>

Note, kahlua is added as it's a coffee liqueur and does contain a not
insignificant amount of caffeine, but due to its lower caffeine levels I
decided its derivatives would be too diluted to matter for the sake of
our poor hasn't-slept-all-night spaceman.
## Why It's Good For The Game

In play it's annoying and unexpected that it works to drink tea but not
iced tea and coffee but not latte, not the third arguably energy drink,
and neither do some of the stimulants work. These inconsistencies would
drive me mad if I actually played more than I coded.
Either way, this lets you fuel your sleep deprivation in _style_.

Code-wise, I imagine using a trait applied on start of metabolization is
much saner than looping over and checking for every reagent in the list
every process tick, especially with a bigger list.
## Changelog
:cl:
code: Whether something counts as a stimulant to All Nighter is now
handled by the reagent itself when metabolized, for everyone's sanity.
Side-effect, you need a liver to process stimulants for All Nighter.
balance: Fuel your sleep deprivation in style! Made more reagents work
with All Nighter. This includes all coffee/tea variants, a few other
drinks that would have a high enough caffeine level, kronkaine,
ephedrine, and in case you're insane you can straight up eat coffee or
tea grounds.
/:cl:

* Automatic changelog for PR #82306 [ci skip]

* Fixes DRAGnet net mode not dealing stamina damage (#82320)

## About The Pull Request

This was meant to be a thing. Looking at the gitblame it has been broken
for **9 fucking years** (Ever since it was added):


![image](https://github.com/tgstation/tgstation/assets/49160555/5c3d98fa-32f5-4fab-9b9d-301905c5c846)

How the hell did NOBODY notice for so fucking long

## Why It's Good For The Game

Actually makes something work as intended. Might make sec consider less
lethal options when dealing with threats.

## Changelog
:cl:
fix: after 9 years, adds a single dot to the dragnet code, making it
deal stamina damage as intended
/:cl:

* Automatic changelog for PR #82320 [ci skip]

* Eye of God Update: Loads of QoL, and makes it somewhat more useful to have permanently grafted to your face. (#82053)

## About The Pull Request

The eye of god now protects from the madness inducing effects of
supermatter crystals and singularities. This trait is shared by the
meson night vision goggles (which this is a better version of)

The Scan ability has been refactored into a pointed spell.

The Scan ability has a lower cooldown of 35 seconds.

Scan now gives an advanced health scan readout of the target.

Scanning someone alerts the target as to who is responsible, rather than
being completely silent as to the culprit (much to the annoyance of
anyone who is victimized by someone using this on them)

The status effect that was called Stagger (not Staggered, which is
separate) is now called Rebuked.

Rebuked applies a x2 action delay cooldown, rather than x1.5.

## Why It's Good For The Game

The eye of god is generally viewed as not particularly useful. Sure, it
is a night vision meson without the flash vulnerability, which is nice.
But it wasn't seen as a terribly exciting tendril drop. The scan power
is so underwhelming, most people do not actually know what the effects
of it are. It largely is only useful for fighting megafauna, since the
stagger effect typically matters more for their cooldowns than other
monster cooldowns. And even then, not by much. The action cooldown
effect on anything else isn't often understood or felt by both victim or
user.

So, the vast majority of the time, miners use it to troll people by, and
I am quoting one player who was witness to me doing so to a particularly
annoying Head of Security, 'pissing on them' by making them glow yellow.
Someone else described it as a 'miner's jarate'. You get the idea.

I changed the highlight color to red to avoid this crude comparison. And
also, I've made it more obviously an attack when someone uses it on you
AND you now know who used it to begin with. And on top of all this, I've
given the eye of god both useful utility and a bit of a power boost to
encourage miners to actually stick the fucking thing into their skull. I
think miners will appreciate health scanning bosses in particular,
something you normally can't do in the middle of a fight with one.

## Changelog
:cl:
qol: The eye of god now protects from the madness inducing effects of
supermatter crystals and singularities. This trait is shared by the
meson night vision goggles (which this is a better version of)
refactor: The Scan ability has been refactored into a pointed spell.
balance: The Scan ability has a lower cooldown of 35 seconds.
balance: The Scan ability now gives an advanced health scan readout of
the target.
balance: Scanning someone a…
  • Loading branch information
Show file tree
Hide file tree
Showing 8,528 changed files with 867,869 additions and 463,117 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
22 changes: 0 additions & 22 deletions .editorconfig

This file was deleted.

49 changes: 33 additions & 16 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@
/code/ze_genesis_call/ @Cyberboss
/tools/tgs_test/ @Cyberboss

# Cobby

/code/modules/reagents/ @ExcessiveUseOfCobblestone
/code/modules/research/designs/medical_designs.dm @ExcessiveUseOfCobblestone
/code/game/objects/items/storage/medkit.dm @ExcessiveUseOfCobblestone

# Fikou

Expand Down Expand Up @@ -58,6 +63,7 @@
/code/modules/client/preferences/ @Mothblocks
/code/modules/client/preferences_menu.dm @Mothblocks
/tgui/packages/tgui/interfaces/PreferencesMenu/ @Mothblocks
/tools/ezdb/ @Mothblocks
/tools/maplint/source/ @Mothblocks
/tools/pull_request_hooks/ @Mothblocks
/tools/screenshot-test-comparison/ @Mothblocks
Expand All @@ -69,12 +75,13 @@

# ninjanomnom

/code/__DEFINES/dcs/ @ninjanomnom
/code/controllers/subsystem/dcs.dm @ninjanomnom
/code/controllers/subsystem/shuttle.dm @ninjanomnom
/code/datums/components/ @ninjanomnom
/code/datums/elements/ @ninjanomnom
/code/modules/shuttle/ @ninjanomnom
/code/datums/signals.dm @ninjanomnom
/code/datums/components/_component.dm @ninjanomnom
/code/datums/elements/_element.dm @ninjanomnom
/code/datums/greyscale/_greyscale_config.dm @ninjanomnom
/code/datums/greyscale/json_reader.dm @ninjanomnom
/code/datums/greyscale/layer.dm @ninjanomnom

# Ryll-Ryll/Shaps

Expand Down Expand Up @@ -118,13 +125,14 @@

# tralezab
/code/__DEFINES/basic_mobs.dm @tralezab
/code/datums/ai @tralezab
/code/modules/mob/living/basic/ @tralezab
/code/datums/ai/ @tralezab
/code/modules/religion/ @tralezab

# Watermelon914

/code/modules/wiremod/ @Watermelon914
/code/modules/antagonists/traitor/ @Watermelon914
/code/controllers/subsystem/tts.dm @Watermelon914

# ZephyrTFA

Expand All @@ -134,19 +142,13 @@
/code/datums/armor/ @ZephyrTFA
/code/modules/admin/verbs/ @ZephyrTFA
/code/modules/logging/ @ZephyrTFA
/tools/ci/check_grep.sh @ZephyrTFA


# CONTRIBUTORS

# Cobby

/code/modules/reagents/ @ExcessiveUseOfCobblestone
/code/modules/research/designs/medical_designs.dm @ExcessiveUseOfCobblestone
/code/game/objects/items/storage/medkit.dm @ExcessiveUseOfCobblestone

# Jordie0608

/SQL/ @Jordie0608
/code/controllers/subsystem/dbcore.dm @Jordie0608
/tools/SQLAlertEmail/ @Jordie0608

Expand All @@ -159,7 +161,6 @@

# MrStonedOne

/SQL/database_changelog.txt @MrStonedOne
/code/__DEFINES/MC.dm @MrStonedOne
/code/controllers/admin.dm @MrStonedOne
/code/controllers/master.dm @MrStonedOne
Expand All @@ -183,25 +184,41 @@

# MULTIPLE OWNERS

/SQL/ @Jordie0608 @MrStonedOne

/_maps/ @EOBGames @Maurukas @MMMiracles @san7890 @ShizCalev
/icons/ @Imaginos16 @Krysonism @Twaticus

/icons/ @Imaginos16 @Krysonism @Twaticus @Wallemations
/icons/ass/ @Ghilker @tralezab

/code/__DEFINES/atmospherics/ @Ghilker @LemonInTheDark

/code/__HELPERS/logging/ @dragomagol @ZephyrTFA

/code/controllers/subsystem/air.dm @LemonInTheDark @MrStonedOne

/code/modules/atmospherics/ @Ghilker @LemonInTheDark

/code/modules/client/preferences.dm @Mothblocks @ZephyrTFA
/code/modules/client/preferences_savefile.dm @Mothblocks @ZephyrTFA

/code/modules/jobs/job_types/chief_medical_officer.dm @ExcessiveUseOfCobblestone @Ryll-Ryll
/code/modules/jobs/job_types/medical_doctor.dm @ExcessiveUseOfCobblestone @Ryll-Ryll
/code/modules/jobs/job_types/paramedic.dm @ExcessiveUseOfCobblestone @Ryll-Ryll

/code/modules/mob/living/basic/ @Jacquerel @san7890 @tralezab

/code/modules/surgery/ @ExcessiveUseOfCobblestone @Ryll-Ryll

/tools/build/ @MrStonedOne @stylemistake
/tools/tgs_scripts/ @Cyberboss @MrStonedOne

/tools/WebhookProcessor/ @BraveMole @TiviPlus

# Expensive files that touching basically always cause performance problems
## Init times
**/*_EXPENSIVE.dm @Mothblocks @LemonInTheDark

# SIC SEMPER TYRANNIS

/code/modules/hydroponics/grown/citrus.dm @optimumtact
13 changes: 9 additions & 4 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,6 @@ These are the few directives we have for project maintainers.

These are not steadfast rules as maintainers are expected to use their best judgement when operating.

Our team is entirely voluntary, as such we extend our thanks to maintainers, issue managers, and contributors alike for helping keep the project alive.

</details>

### Issue Managers
Expand All @@ -90,8 +88,14 @@ Things you **CAN'T** do:
* [Close PRs](https://imgur.com/w2RqpX8.png): Only maintainers are allowed to close PRs. Do not hit that button.
* Close issues purely for breaking a template if the same information is contained without it.

For more information reference the [Issue Manager Guide](.github/guides/ISSUE_MANAGER.md).

</details>

---

Our team is entirely voluntary, as such we extend our thanks to maintainers, issue managers, and contributors alike for helping keep the project alive.

## Development Guides

#### Writing readable code
Expand All @@ -105,13 +109,14 @@ Things you **CAN'T** do:

#### Misc

- [AI Datums](../code/datums/ai/making_your_ai.md)
- [AI Datums](../code/datums/ai/learn_ai.md)
- [Embedding TGUI Components in Chat](../tgui/docs/chat-embedded-components.md)
- [Hard Deletes](./guides/HARDDELETES.md)
- [MC Tab Guide](./guides/MC_tab.md)
- [Policy Configuration System](./guides/POLICYCONFIG.md)
- [Splitting up pull requests, aka atomization](./guides/ATOMIZATION.md)
- [Quickly setting up a development database with ezdb](./guides/EZDB.md)
- [Required Tests (Continuous Integration)](./guides/CI.md)
- [Splitting up pull requests, aka atomization](./guides/ATOMIZATION.md)
- [UI Development](../tgui/README.md)
- [Visual Effects and Systems](./guides/VISUALS.md)

Expand Down
5 changes: 5 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ name: Bug report
about: Create a report to help reproduce and fix the issue
---
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable -->

## Issue Summary

<!-- Briefly explain your issue in a few plain sentences, e.g. "X has Y issue" "When I do X, Y happens instead of Z" "X on Y map has Z issue". You may copy and paste the issue title here if it is suitable. -->

## Round ID:

<!--- **INCLUDE THE ROUND ID**
Expand Down
3 changes: 1 addition & 2 deletions .github/alternate_byond_versions.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,4 @@
# Format is version: map
# Example:
# 500.1337: runtimestation

515.1603: runtimestation
515.1627: runtimestation
1 change: 1 addition & 0 deletions .github/gbp.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ reset_label = "GBP: Reset"
"Code Improvement" = 2
"Documentation" = 1
"Feature" = -6
"Good First PR" = 6
"Feedback" = 2
"Fix" = 3
"Grammar and Formatting" = 1
Expand Down
12 changes: 12 additions & 0 deletions .github/guides/EZDB.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Quickly setting up a development database with ezdb
While you do not need a database to code for tgstation, it is a prerequisite to many important features, especially on the admin side. Thus, if you are working in any code that benefits from it, it can be helpful to have one handy.

**ezdb** is a tool for quickly setting up an isolated development database. It will manage downloading MariaDB, creating the database, setting it up, and updating it when the code evolves. It is not recommended for use in production servers, but is perfect for quick development.

To run ezdb, go to `tools/ezdb`, and double-click on ezdb.bat. This will set up the database on port 1338, but you can configure this with `--port`. When it is done, you should be able to launch tgstation as normal and have database access. This runs on the same Python bootstrapper as things like the map merge tool, which can sometimes be flaky.

If you wish to delete the ezdb database, delete the `db` folder as well as `config/ezdb.txt`.

To update ezdb, run the script again. This will both look for any updates in the database changelog, as well as update your schema revision.

Contact Mothblocks if you face any issues in this process.
91 changes: 91 additions & 0 deletions .github/guides/ISSUE_MANAGER.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
## What is an Issue Manager

Issue Managers proactively manage issues for the repo by providing feedback, performing triage, and troubleshooting problems. They search through the codebase to link relevant code, issues, and PRs that help contributors identify and solve an issue.

## Triage An Issue

New issues should be properly diagnosed by using several methods and tools below:

#### Emergency Issues

When examining new issues you should immediately notify a maintainer if you see the following:

- **Security Exploit** [[1]](https://github.com/tgstation/tgstation/issues/51654) [[2]](https://github.com/tgstation/tgstation/issues/38407) [[3]](https://github.com/tgstation/tgstation/issues/9900) - Something that can be used to bypass bans, give a player admin powers, cheats or hacks
- **Server Crashing** [[1]](https://github.com/tgstation/tgstation/issues/29342) [[2]](https://github.com/tgstation/tgstation/issues/25890) [[3]](https://github.com/tgstation/tgstation/issues/17475) - Something that is causing the server to _consistently_ crash
- **Server Lagging** [[1]](https://github.com/tgstation/tgstation/issues/60193) [[2]](https://github.com/tgstation/tgstation/issues/51927) [[3]](https://github.com/tgstation/tgstation/issues/32762) - Something that is causing a _severe_ amount of lag during the game

#### Runtime Issue Reports
If an issue reports a runtime, it must have the actual runtime call stack provided by round logging or in-game debug menu (https://github.com/tgstation/tgstation/issues/70329#issuecomment-1279853883).
<details>
<summary>Example runtime call stack</summary>

```
[2022-10-15 16:12:38.902] runtime error: Cannot execute null.add().
- proc name: visibility (/datum/cameranet/proc/visibility)
- source file: cameranet.dm,88
- usr: AI (/mob/living/silicon/ai)
- src: Camera Net (/datum/cameranet)
- usr.loc: the floor (150,25,4) (/turf/open/floor/circuit)
- call stack:
- Camera Net (/datum/cameranet): visibility(/list (/list), null, /list (/list), 1)
- AI (/mob/living/silicon/ai): camera visibility(Inactive AI Eye (/mob/camera/ai_eye))
- Inactive AI Eye (/mob/camera/ai_eye): setLoc(the floor (150,25,4) (/turf/open/floor/circuit), 0)
- AI (/mob/living/silicon/ai): create eye()
- AI (/mob/living/silicon/ai): Initialize(0, null, TagGamerGame2 (/mob/dead/new_player))
- Atoms (/datum/controller/subsystem/atoms): InitAtom(AI (/mob/living/silicon/ai), 0, /list (/list))
- AI (/mob/living/silicon/ai): New(0, null, TagGamerGame2 (/mob/dead/new_player))
- AI (/mob/living/silicon/ai): New(the floor (150,25,4) (/turf/open/floor/circuit), null, TagGamerGame2 (/mob/dead/new_player))
- /datum/job/ai (/datum/job/ai): get spawn mob(TagGamerGame2 (/client), AI (/obj/effect/landmark/start/ai))
- TagGamerGame2 (/mob/dead/new_player): create character(AI (/obj/effect/landmark/start/ai))
- Ticker (/datum/controller/subsystem/ticker): create characters()
- Ticker (/datum/controller/subsystem/ticker): setup()
- Ticker (/datum/controller/subsystem/ticker): fire(0)
- Ticker (/datum/controller/subsystem/ticker): ignite(0)
```

</details>

#### Downstream Issues Taken Upstream
If an issue reports a bug encountered at a branch of the codebase or on a downstream server, it __MUST__ have a link to the branch or downstream codebase repo or it is eligible for closing (https://github.com/tgstation/tgstation/issues/70875#issuecomment-1295767891). Reproducing the issue on the compiled master of our codebase is also encouraged.

<details>
<summary>Image macro for your issue marking pleasure</summary>

![image](https://user-images.githubusercontent.com/39163353/198381160-f0aa7fc4-4f2d-486f-8b33-44a1965e2ad1.svg)

`![image](https://user-images.githubusercontent.com/39163353/198381160-f0aa7fc4-4f2d-486f-8b33-44a1965e2ad1.svg)`
</details>

#### Link Code Snippets

To help triangulate bugs, search the GitHub repo to locate relevant code and attach it to an issue. Do this by creating a [link to the code](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/creating-a-permanent-link-to-a-code-snippet). This saves the contributors time from having to identify the problem and will be appreciated.

#### Use Gitblame

GitHub also has a tool called `gitblame` that is useful in [tracking code](https://docs.github.com/en/repositories/working-with-files/using-files/viewing-a-file#viewing-the-line-by-line-revision-history-for-a-file) to determine who and when someone made a change. This is ideally used to help solve old issues when there is uncertainty over which PR might have fixed it. It is also a good tool to use to link PRs that caused the issue.

#### Search For Keywords

When a new issue appears search for any keywords involved with the issue. This is important to prune for duplicates, match several issues to a test merge PR, or if you want to link multiple issues together since there is overlapping problems. (but not duplicate)

## Closing Issues

It is recommended to close issues in the following situations:

- **Feature Requests** [[1]](https://github.com/tgstation/tgstation/issues/55919) [[2]](https://github.com/tgstation/tgstation/issues/53342) [[3]](https://github.com/tgstation/tgstation/issues/45412) - The issue is a suggestion or request for a new feature to be added to the game.
- **Working as Intended** [[1]](https://github.com/tgstation/tgstation/issues/62619) [[2]](https://github.com/tgstation/tgstation/issues/61511) [[3]](https://github.com/tgstation/tgstation/issues/60942) - The issue is detailing a problem that is _specifically intended_ by the code and is not considered a bug.
- **Duplicates** [[1]](https://github.com/tgstation/tgstation/issues/62709) [[2]](https://github.com/tgstation/tgstation/issues/62364) [[3]](https://github.com/tgstation/tgstation/issues/61823) - The issue is detailing an identical problem from another issue. Do not automatically close the most recent issue. Instead compare both and close the one that provides the least information.
- **Removed Features** [[1]](https://github.com/tgstation/tgstation/issues/48255) [[2]](https://github.com/tgstation/tgstation/issues/47194) [[3]](https://github.com/tgstation/tgstation/issues/45653) - The issue is referring to something that was removed from the codebase and no longer exists.
- **Defective Issues** [[1]](https://github.com/tgstation/tgstation/issues/57366) [[2]](https://github.com/tgstation/tgstation/issues/48778) [[3]](https://github.com/tgstation/tgstation/issues/51520) - The issue is badly written and lacking information. Politely ask the person to add more information or rewrite the issue. If there is no response after a sufficient amount of time close the issue.
- **Irreproducible Issues** [[1]](https://github.com/tgstation/tgstation/issues/51493) [[2]](https://github.com/tgstation/tgstation/issues/22796) [[3]](https://github.com/tgstation/tgstation/issues/25610) - The issue is old, cannot be reproduced, and nobody has reported a duplicate issue recently. If you feel _confident_ that the issue has been fixed at some point, list your reasons or link possible PRs that could have fixed it.
- **Impossible to Fix Issues** [[1]](https://github.com/tgstation/tgstation/issues/524) [[2]](https://github.com/tgstation/tgstation/issues/2679) [[3]](https://github.com/tgstation/tgstation/issues/9637) - The issue is not possible to fix due to either vague details or a clearly defined problem.

## Reopening Issues

In special cases a closed issue should be reopened if:

- It has been updated with pertinent information (when before it was lacking info making it defective)
- The initial problem has reappeared (after it was presumably fixed in a PR)
- Someone feels that the issue was closed prematurely during discussion

If there is a dispute on whether an issue should remain closed, ask for a second opinion. Get clarification from another Issue Manager or Maintainer and respect their judgement as the final verdict.
7 changes: 4 additions & 3 deletions .github/guides/MAPS_AND_AWAY_MISSIONS.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
## MAPS

/tg/station currently has five station maps in rotation.
/tg/station currently has six station maps in rotation.
* [Birdshot](https://tgstation13.org/wiki/Birdshot)
* [DeltaStation](https://tgstation13.org/wiki/DeltaStation)
* [IceBoxStation](https://tgstation13.org/wiki/IceboxStation)
* [KiloStation](https://tgstation13.org/wiki/KiloStation)
* [MetaStation](https://tgstation13.org/wiki/MetaStation)
* [NorthStar](https://tgstation13.org/wiki/The_North_Star)
* [TramStation](https://tgstation13.org/wiki/Tramstation)

Debug station maps.
* [RuntimeStation](https://tgstation13.org/wiki/RuntimeStation)
* [MultiZ](https://tgstation13.org/wiki/MultiZ)

All maps have their own code file that is in the base of the `_maps` directory, or elsewhere in the codebase. For example, all of the station maps in rotation each have a corresponding JSON file and are loaded using `maps/_basemap.dm`. Maps are loaded dynamically when the game starts. Follow this guideline when adding your own map, to your fork, for easy compatibility.
All maps have their own code file that is in the base of the `_maps` directory, or elsewhere in the codebase. For example, all of the station maps in rotation each have a corresponding JSON file and are loaded using the server's [configuration](#configuration) passed onto the Mapping subsystem. Maps are loaded dynamically when the game starts. Follow this guideline when adding your own map, to your fork, for easy compatibility.

The map that will be loaded for the upcoming round is determined by reading `data/next_map.json`, which is a copy of the JSON files found in the `_maps` tree. If this file does not exist, the default map from `config/maps.txt` will be loaded. Failing that, MetaStation will be loaded. If you want to set a specific map to load next round you can use the Change Map verb in game before restarting the server or copy a JSON from `_maps` to `data/next_map.json` before starting the server. Also, for debugging purposes, ticking a corresponding map's code file in Dream Maker will force that map to load every round.

Expand Down
Loading

0 comments on commit bd6e2e9

Please sign in to comment.