## About The Pull Request
Fixes a runtime that was occurring with the mech sleeper module that
would prevent the patient information from being displayed in the
sleeper interface if the mech didn't also have a syringe gun attached.
## Why It's Good For The Game
Fixes#83938
## Changelog
🆑
fix: Fixed the patient information for the mech sleeper module not
displaying when the mech didn't also have a syringe gun.
/🆑
## About The Pull Request
Phazons now use ectoplasm anomaly cores instead of bluespace ones. Text
implying otherwise has been changed as well.
Allows ectoplasm cores to be bought via the science supply console.
## Why It's Good For The Game
Bluespace cores are some of the most overused ones in anomalock
technology, and often the most desirable ones. Ectoplasm cores, however,
have a single gimmicky and mediocre use.
This PR aims to make them more appealing to the crew while reducing
machines that rely on bluespace anomalies, so their available number can
be more freely tweaked.
## Changelog
🆑
balance: Phazon mechs use ectoplasm cores now
balance: You can now acquire ectoplasm cores from the science supply
interface
/🆑
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
## About The Pull Request
Mouse drag & drop has been refactored into its own attack chain. The
flowchart below summarizes it

Brief summary of each proc is as follows
**1. `atom/MouseDrop()`**
- It is now non overridable. No subtype should ever touch this proc
because it performs 2 basic checks
a) Measures the time between mouse down & mouse release. If its less
than `LENIENCY_TIME`(0.1 seconds) then the operation is not considered a
drag but a simple click
b) Measures the distance squared between the drag start & end point. If
its less than `LENIENCY_DISTANCE`(16 pixels screen space) then the drag
is considered too small and is discarded
- These 2 sanity checks for drag & drop are applied across all
operations without fail
**2. `atom/base_mouse_drop_handler()`**
- This is where atoms handle mouse drag & drop inside the world. Ideally
it is non overridable in most cases because it also performs 2 checks
- Is the dragged object & the drop target adjacent to the player?.
Screen elements always return true for this case
- Additional checks can be enforced by `can_perform_action()` done only
on the dragged object. It uses the combined flags of
`interaction_flags_mouse_drop` for both the dragged object & drop target
to determine if the operation is feasible.
We do this only on the dragged object because if both the dragged object
& drop target are adjacent to the player then `can_perform_action()`
will return the same results when done on either object so it makes no
difference.
Checks can be bypassed via the `IGNORE_MOUSE_DROP_CHECKS` which is used
by huds & screen elements or in case you want to implement your own
unique checks
**3. `atom/mouse_drop_dragged()`**
- Called on the object that is being dragged, drop target passed here as
well, subtypes do their stuff here
- `COMSIG_MOUSEDROP_ONTO` is sent afterwards. It does not require
subtypes to call their parent proc
**4. `atom/mouse_drop_receive()`**
- Called on the drop target that is receiving the dragged object,
subtypes do their stuff here
- `COMSIG_MOUSEDROPPED_ONTO` is sent afterwards. It does not require
subtypes to call their parent proc
## Why It's Good For The Game
Implements basic sanity checks across all drag & drop operations. Allows
us to reduce code like this
8c8311e624/code/game/machinery/dna_scanner.dm (L144-L145)
Into this
```
if(!iscarbon(target))
return
```
I'm tired of seeing this code pattern `!Adjacent(user) ||
!user.Adjacent(target)` copy pasted all over the place. Let's just write
that at the atom level & be done with it
## Changelog
🆑
refactor: Mouse drag & drop attack chain has been refactored. Report any
bugs on GitHub
fix: You cannot close the cryo tube on yourself with Alt click like
before
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
## About The Pull Request
QoL for antag mechs: no longer are you expected to sit around station
Robotics with a [materials] [inducer] [experiment scanner] to upgrade
your antag mechs, they are now appropriately armoured out of the box!
Unfortunately, this high end armour cannot accept third party upgrade
modules.
Also good because of incoming (hopefully) sprite upgrades, maulers
should become more attractive to buy.
Inspired by maplestation..
NOTE: WEB-EDITED! NOT TESTED!
## Why It's Good For The Game
Antags like Centcom or Syndicates don't have no time to sit around in
the station robotics bay trying to upgrade their mechs - and it's insane
to expect them to do so. This is especially poor for newer players who
aren't aware of mech mechanics - such as a basic chainsaw or fireaxe
dealing 15 or over damage to their mech when a upgraded Durand isn't
affected by this.
Makes antag/centcom mechs good 'against most threats' out of the box, so
better for newbies and less stressful for experienced players who won't
have to literally _do station jobs_ to get a good mech. Did you know:
mech mechanics aren't even explained at all in-game?
Balance wise, it's "good against everything" and loses the ability to be
super-specialized against a single thing, while retaining
higher-then-normal grades on everything else. Station mechs still have
the ability to specialize in one armor, say, melee, but have much worse
grades on bullet/laser/EMP, and often have less health. Previously, a
trip to Robotics could get a D-GYGAX up to 85% melee while still
retaining 40%/50% of bullet/laser which imo is a biit *too* good. The
difference between say - 70% and 85% is fairly significant - 9 damage /
13.5 damage for 70% melee vs 4.5 / 6.7 damage for 85%, so twice as good.
NOTE: Some of the mechs receive better bomb/energy armors, which weren't
affected by armor upgrades.
## Changelog
🆑
balance: Antag/Centcom mechs now have top notch un-upgradeable armor out
of the box. You can't add armor to centcom or nukie mechs anymore, but
their default armor rating is a lot higher.
/🆑
## About The Pull Request
Fixes#83292 by making mobs larger than Humans break out of the mech
jail cell 10x faster than humans.
Also I made the error output into balloon alerts.
## Why It's Good For The Game
This is a security mech designed for interacting with crew; it doesn't
_need_ the ability to arrest alien queens or space dragons and we didn't
really design any of these antagonists with the idea that you can stuff
them inside a mech that looks smaller than they are.
Resultingly; now they don't stay stuck in it for very long if you are
not paying attention.
## Changelog
🆑
balance: Mobs significantly larger than humans, such as Space Dragons
and Xenomorph Queens, breakout of being arrested by a mech significantly
faster.
/🆑
## About The Pull Request
What it says on the tin, this adds logging to nested_logging for
autolathes, protolathes, and the mech fabricator.
Also quickly renames a variable name within the mech fabricator because
this thing hasn't been updated in awhile and it was egregious to me.
## Why It's Good For The Game
I wanted to throw together a quick superset chart of what items are
printed most often and how often, and was shocked to learn that it
wasn't logged in this way.
It was recorded somewhat within the silo log, but this is MUCH easier to
use all thing considered, so it's an easy fix.
## Changelog
No front facing changes.
## About The Pull Request
In my effort to make the /icons/ folder cleaner and more intuitive
instead of having to rely on recalling names of stuff and looking them
up in code to find them for poor sods such as myself, plus in spurt of
complusion to organize stuff, here goes. I've tracked all changes in
commit descriptions. A lot still to be done, but I know these waves go
over dozens of files making things slow, so went lighter on it.
Destroyed useless impostor files taking up space and cleaned a stray
pixel on my way.
## Why It's Good For The Game
Cleaner /icons/ file means saner spriters, less time spent. Stray pixels
and impostor files (ones which are copies of actually used ones
elsewhere) are not good.
## Changelog
🆑
image: Cleaned a single stray pixel in a single frame of a bite
telegraphing accidentaly found while re-organizing the files.
/🆑
## About The Pull Request
These changes correctly place Reticence's default power module into a
`list()` object, preventing an NtOS error when using the "View Stats"
button inside the mech. This resolves a bug in the UI, which had
prevented players from viewing their Reticence mech's stats, and
modifying its loaded modules therein.
Closes#82374
Before:

After:

## Why It's Good For The Game
Syndicate Mimes can now scream (inaudibly) for joy, as they'll be able
to inspect and modify their mech as was intended.
## Changelog
🆑
fix: Viewing Reticence's stats no longer causes an NtOS UI error
/🆑
## About The Pull Request
Cargo ripley starts at 100% charge instead of 25% charge.
## Why It's Good For The Game
Because charging a cell actually requires a significant amount of energy
now, the roundstart ripley starting almost uncharged causes quite a
significant roundstart load since it's next to the recharger. This makes
it start fully charged so the roundstart power rush is less extreme.
## Changelog
🆑
balance: Cargo ripley's cell starts fully charged.
/🆑
## About The Pull Request
By fixes i mean the energy lost as heat is now directly proportional to
the amount of power these machines draw from the grid via
`charge_cell()` proc. The machines affected are as follows
- Cell charger
- Mechbay charger
- Recharge stations + cyborg charging fix(Fixes#82626)
The idea is simple. As the cell nears its charging completion it draws
less power from the grid to complete that last mile (for e.g. if the
cell is 0% charged the cell charger attempts to draw 100% of the cells
max charge from the grid but if the cell is already 99% charged it will
only attempt to draw 1% of the required power from the grid) and so it
only makes sense that the heat energy lost is also less & vice versa.
In other words the heat energy lost is directly proportional to the
amount of work done (via `charge_cell()` proc) so you get conservation
of energy & bug fixes which especially benifits borgs & mod suits at the
recharge station as it will attempt to first pump in whatever energy is
available from the grid and then compute energy lost as heat from it &
not the other way around.
For borgs we attempt to first charge its modules & then charge the cell
so you get an fully charged cell at the end
## Changelog
🆑
fix: cell chargers, mechbay port chargers & recharge stations heat lost
is directly proportional to energy drawn from the grid to charge their
respective cells
fix: cyborgs should charge more frequently & to their max capacity at
recharge stations
/🆑
## About The Pull Request
All mineral turfs can be auto-mined by just walking into them if
piloting a mech. This PR mostly just reorganizes the action() to
accommodate it and add a new proc for listening to a signal.
## Why It's Good For The Game
Less work on your mouse finger.
## Changelog
🆑
qol: Mech drills can auto-mine by walking into rock.
/🆑
## About The Pull Request
Lets you pick up wheelchairs while resting, and lets you place
wheelchairs on adjacent tiles, much like medical roller beds.
## Why It's Good For The Game
Makes life just a little bit easier. Barely being able to move is
already enough of a downside. I think allowing the little bit of extra
independence being able to pick up your own chair (without just finding
or making a basic chair first) offers is justifiable.
And being able to place the chair a tile away just saves needing to
pixel hunt or shuffle around to buckle yourself.
## Changelog
🆑 Fluffles
qol: you can pick up wheelchairs while on the ground
qol: you can place wheelchairs a tile away from you, like roller beds
/🆑
## About The Pull Request
I was trying to fix a bug with ejecting from mechs as malf AI and the
more I looked the worse it seemed to get? So I'm putting in this PR with
the intent to refactor AI code to not be a Byzantine nightmare of new
objects referencing each other incompletely or with buggy behavior.
Finished PR for #82579 because I didn't want to clutter the comments
with commits of me trying to fix shit with git restore and revert
## Why It's Good For The Game
Fixes#81877Fixes#82524
Mech dominating now just works off (and integrates with) similar code
for APC shunting
The cores left behind by AIs shunting or controlling mechs now properly
reference the AI instead of only the other way around
Some of these refactors slightly change how malf works; I think most of
it was unintended behavior in the first place, let me know in review if
not
## Changelog
The code for AIs remoting out of their shell has been refactored.
🆑
fix: Mech domination now properly integrates with shunting.
fix: Combat upgraded AIs no longer get two buggy malf ability pickers if
they also become malfunctioning
refactor: Refactored most of the functionality around malf AI shunting,
mech control
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
Subsystems currently come in two different flavors:
1. Systems that process at intervals with the master controller
2. Global data containers that do not fire
And I think they should be split up...
This moves 4 non firing, non init subsytems -> datasystem
## Why It's Good For The Game
Clarity in code
## About The Pull Request
Get in the gundam shinji!!!
Context: Mech users hold ALT to disable strafe, which would trigger the
lootpanel to come up while committing war crimes (annoying!)
This prevents the panel from appearing and fixes the previous behavior,
meaning you can alt click your own mech to disable strafing.

It also makes toggling strafe a balloon alert with sound. Parties for
all occupants!!
## Why It's Good For The Game
Fixes#82753
## Changelog
🆑
fix: Mecha pilots are no longer bothered by incessant loot panels while
holding ALT for strafe disable.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
This re writes most cell power usage cases with 2 defines
`STANDARD_CELL_CHARGE`(Joules) & `STANDARD_CELL_RATE`(Watts) so changing
cell capacity values in the future won't cause discrepancies.
## Changelog
🆑
code: most cell power usages are scaled with defined constants to help
adapt to future changes
/🆑
## About The Pull Request
Rewrites how alt click works.
Based heavily on #82625. What a cool concept, it flows nicely with
#82533.
Fixes#81242
(tm bugs fixed)
Fixes#82668
<details><summary>More info for devs</summary>
Handy regex used for alt click s&r:
`AltClick\((.*).*\)(\n\t.*\.\.\(\))?`
`click_alt($1)` (yes I am aware this only copies the first arg. there
are no other args!)
### Obj reskins
No reason for obj reskin to check on every single alt click for every
object. It applies to only a few items.
- Moved to obj/item
- Made into signal
- Added screentips
### Ventcrawling
Every single atmospherics machine checked for ventcrawling capability on
alt click despite only 3 objects needing that functionality. This has
been moved down to those individual items.
</details>
## Why It's Good For The Game
For players:
- Alt clicking should work more logically, not causing double actions
like eject disk and open item window
- Added context menus for reskinnable items
- Removed adjacency restriction on loot panel
For devs:
- Makes alt click interactions easier to work with, no more click chain
nonsense and redundant guard clauses.
- OOP hell reduced
- Pascal Case reduced
- Glorious snake case
## Changelog
🆑
add: The lootpanel now works at range.
add: Screentips for reskinnable items.
fix: Alt click interactions have been refactored, which may lead to
unintentional changes to gameplay. Report any issues, please.
/🆑
## About The Pull Request
I completely screwed up and told the original PR author of #82415
(9922d2f237) to use the `XOR` operator
instead of the `OR` operator (I wasn't thinking right for some reason
when I was reading the ref), anyways this PR just fixes that because I
misled the contributor into doing something that wasn't correct and
actually would BREAK functionality instead.
## About The Pull Request
If the occupant of a mech has their mob changed -- mutation, polymorph,
admin fuckery -- or if a mob somehow enters a mech without becoming an
occupant -- the above, or a chestburster in said mech pilot -- then they
don't get added to the occupants, only the contents. All contents are
hard-deleted if a mech is destroyed. This fixes that, and ejects any
mobs inside mechs who are technically inside the mech but not an
occupant.
## Why It's Good For The Game
Fixes#82395 and any similar case
## Changelog
Being inside a mech when it's destroyed should no longer delete you,
even if you ended up in that mech in an odd way.
🆑 Bisar
fix: Mechs will no longer delete their living non-occupant contents when
destroyed.
/🆑
## About The Pull Request
I've seen a few cases in the past where LateInitialize is done cause of
the init return value being set to do so for no real reason, I thought I
should try to avoid that by ensuring LateInitialize isn't ever called
without overriding.
This fixes a ton of machine's LateInitialize not calling parent
(mechpad, door buttons, message monitor, a lot of tram machines,
abductor console, holodeck computer & disposal bin), avoiding having to
set itself up to be connected to power. If they were intended to not
connect to power, they should be using ``NO_POWER_USE`` instead.
Also removes a ton of returns to LateInit when it's already getting it
from parent regardless (many cases of that in machine code).
## Why It's Good For The Game
I think this is better for coding standard reasons as well as just
making sure we're not calling this proc on things that does absolutely
nothing with them. A machine not using power can be seen evidently not
using power with ``NO_POWER_USE``, not so much if it's LateInitialize
not calling parent.
## Changelog
🆑
fix: Mech pads, door buttons, message monitors, tram machines, abductor
consoles & holodeck computers now use power.
/🆑
## About The Pull Request
Using these search regexes:
Ending in 0:
`addtimer\((.*),\s?(\d{1,3})0\b\)`
replacement:
`addtimer($1, $2 SECONDS)`
Two digit ending in odd:
`addtimer\((.*), (\d)([1-9])\)$`
replacement:
`addtimer($1, $2.$3 SECONDS)`
Single digit ending odd:
`addtimer\((.*), ([1-9])\)$`
replacement:
`addtimer($1, 0.$2 SECONDS)`
## Why It's Good For The Game
Code readability
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
Using these search regexes:
Number ending in 0:
`do_after\((\w+), (\d+)0,`
Replace:
`do_after($1, $2 SECONDS,`
Single digit number:
`do_after\((\w+), [1-9],`
replace:
`do_after($1, 0.$2 SECONDS,`
Double:
`do_after\((\w+), (\d)([1-9]),`
Replace:
`do_after($1, $2.$3 SECONDS,`
## Why It's Good For The Game
Code readability
## About The Pull Request
- Both mechbay & modsuit rechargers now waste a small amount of energy
as heat like it did before
- Fixes#82332. Mechbay recharger displays the energy of the mech in
joules & charges the cell with the exact energy required directly from
the grid thus not causing the room to blackout
## Changelog
🆑
fix: Mechbay & modsuit rechargers waste a small amount of energy as heat
fix: Mechbay recharger console displays mech charge as joules & charges
directly from the grid thus sparing the rooms apc cell from huge loads
/🆑
## 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
🆑
fix: Fixed cell energy usage for a bunch of stuff(Part 5). See PR 82296
for details
/🆑
---------
Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com>
## 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
🆑
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.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Yeah i am not about to create 30 different PR's to address 1 issue at a
time. The changes are small enough to be grouped together in bulk.
This fixes the following issues specified in #82196
- Borg & exosuit RCD (Fixes#82193)
- Motorized wheelchair
- Canister shielding
- Electrolyser
- Potato cell
- Space heater
- Microwave
## Changelog
🆑
fix: Fixed cell energy usage for a bunch of stuff(Part 1). See PR 82197
for details
/🆑
---------
Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com>
## About The Pull Request
Removes all arbitrary energy and power units in the codebase. Everything
is replaced with the joule and watt, with 1 = 1 joule, or 1 watt if you
are going to multiply by time. This is a visible change, where all
arbitrary energy units you see in the game will get proper prefixed
units of energy.
With power cells being converted to the joule, charging one joule of a
power cell will require one joule of energy.
The grid will now store energy, instead of power. When an energy usage
is described as using the watt, a power to energy conversion based on
the relevant subsystem's timing (usually multiplying by seconds_per_tick
or applying power_to_energy()) is needed before adding or removing from
the grid. Power usages that are described as the watt is really anything
you would scale by time before applying the load. If it's described as a
joule, no time conversion is needed. Players will still read the grid as
power, having no visible change.
Machines that dynamically use power with the use_power() proc will
directly drain from the grid (and apc cell if there isn't enough)
instead of just tallying it up on the dynamic power usages for the area.
This should be more robust at conserving energy as the surplus is
updated on the go, preventing charging cells from nothing.
APCs no longer consume power for the dynamic power usage channels. APCs
will consume power for static power usages. Because static power usages
are added up without checking surplus, static power consumption will be
applied before any machine processes. This will give a more truthful
surplus for dynamic power consumers.
APCs will display how much power it is using for charging the cell. APC
cell charging applies power in its own channel, which gets added up to
the total. This will prevent invisible power usage you see when looking
at the power monitoring console.
After testing in MetaStation, I found roundstart power consumption to be
around 406kW after all APCs get fully charged. During the roundstart APC
charge rush, the power consumption can get as high as over 2MW (up to
25kW per roundstart APC charging) as long as there's that much
available.
Because of the absurd potential power consumption of charging APCs near
roundstart, I have changed how APCs decide to charge. APCs will now
charge only after all other machines have processed in the machines
processing subsystem. This will make sure APC charging won't disrupt
machines taking from the grid, and should stop APCs getting their power
drained due to others demanding too much power while charging. I have
removed the delays for APC charging too, so they start charging
immediately whenever there's excess power. It also stops them turning
red when a small amount of cell gets drained (airlocks opening and shit
during APC charge rush), as they immediately become fully charged
(unless too much energy got drained somehow) before changing icon.
Engineering SMES now start at 100% charge instead of 75%. I noticed
cells were draining earlier than usual after these changes, so I am
making them start maxed to try and combat that.
These changes will fix all conservation of energy issues relating to
charging powercells.
## Why It's Good For The Game
Closes#73438Closes#75789Closes#80634Closes#82031
Makes it much easier to interface with the power system in the codebase.
It's more intuitive. Removes a bunch of conservation of energy issues,
making energy and power much more meaningful. It will help the
simulation remain immersive as players won't encounter energy
duplication so easily. Arbitrary energy units getting replaced with the
joule will also tell people more meaningful information when reading it.
APC charging will feel more snappy.
## Changelog
🆑
fix: Fixes conservation of energy issues relating to charging
powercells.
qol: APCs will display how much power they are using to charge their
cell. This is accounted for in the power monitoring console.
qol: All arbitrary power cell energy units you see are replaced with
prefixed joules.
balance: As a consequence of the conservation of energy issues getting
fixed, the power consumption for charging cells is now very significant.
balance: APCs only use surplus power from the grid after every machine
processes when charging, preventing APCs from causing others to
discharge while charging.
balance: Engineering SMES start at max charge to combat the increased
energy loss due to conservation of energy fixes.
/🆑
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
Fixes#82135
All occupants of vehicles (including mobs you can ride) will now die if
anyone drives that vehicle into the supermatter crystal.
## Why It's Good For The Game
It may not be canonically true that driving the clown car into the
supermatter dusts all occupants but by god, it should be.
This is the result that you expect to occur upon doing such a thing.
## Changelog
🆑
fix: Driving a vehicle into the supermatter will kill everyone riding
the vehicle
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
I've fucked up the logic, so it requires the user to be both the host
and an admin to open it, which was the case when I tested it locally.
This PR fixes that and other issues (and **un**dumbs some of the code).
The spinning screen modifier has also been scrapped for being downright
awful and breaking my screen.
## Why It's Good For The Game
Fixing stuff I've thankfully noticed early.
## Changelog
🆑
fix: The deathmatch modifiers modal menu can actually be opened now.
Also fixed a bunch of issues it had.
/🆑
## About The Pull Request
This PR adds the base to simple modifiers that the host can select to
make the minigame ~~worse~~ more entertaining for everyone.
Here's the screenshot of the UI (without a few modifiers I added later):

## Why It's Good For The Game
I've seen this minigame is frankly popular lately, so I thought I could
contribute to it.
## Changelog
🆑
add: Added 20+ modifiers to the deathmatch minigame, which can be
enabled by the host.
/🆑
## About The Pull Request
I have been dissatified with the situation of skateboards for a long
while now, especially with the 'pro' and 'hoverboard' versions that
provide negligeable bonuses for the high price they warrant.
On top of all things, this PR makes the aforementioned two subtypes
faster than the standard and improvised skateboards.
Second, the hoverboard now hovers and can be used in zero g (more info
in the CL). The thing costs about 2000, so this is pretty much deserved.
Third, skateboards respect move intents. While in walk intent, you will
ride it slowly, but you also won't crash against other things.
Fourth, improvised skateboards are a nick more unstable and not
mechanically on par with standard skateboards.
## Why It's Good For The Game
Skateboard were cooler back when you would go fast and die young by
crashing into an airlock/spessman/wall at stim speed imho, also see the
first paragrath of the above section.
## Changelog
🆑
balance: The pro skateboard and hoverboard are now faster.
balance: The improvised skateboard is a nick more unstable than the
standard, so the two aren't exactly the same.
add: Riding a skateboard on walk intent will prevent you from crashing
into things, at the cost of speed.
add: hoverboards now actually hovers and can be used even in zero g.
There are a caveat to it: It cannot be ridden on open space gaps deeper
than one level or actual space, unless there're objects that prevent
falls, like lattice or catwalks.
/🆑
## About The Pull Request
The saboteur gun will now silence pAIs, toggle off radio broadcasting
(won't auto-relay nearby speech), disable turrets, chill out secbots a
little, and turn off APCs like power outages do.
The disrupt duration has also been buffed from 10/20 to 15/25 for ranged
and point-blank respectively.
Removed a conspicious chat message from an otherwise inconspicious gun.
Brought the code up to date.
## Why It's Good For The Game
The concept is cool, alas it's also undermined by how much of a joke
it's right now, and the game has plenty already.
The amount of interactions it has with things is underwhelming, so you
could barely consider it a stealth tool. The duration is also quite
scarce, I pointed that out in the original PR too.
Basically, I want to make the item cooler.
## Changelog
🆑
balance: Buffed the duration of the SC/FISHER Saboteur Handgun's
disruption effects. It's also stealthier and it won't conspiciously
alert living mobs hit by it.
add: Added saboteur interactions with radios, pAIs, turrets, secbots and
APCs.
/🆑
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
## About The Pull Request
This PR does many things, I'll try to explain the basic/background stuff
to the main thing first:
1. Adds a new remote that allows a human to function like an AI. It
controls a fly that will fly around the station slowly, and when it
reaches a machine then the person can interact with it as if they were
an AI. This required changing a lot of silicon/AI checks with one that
also checks for this remote, and some messing with shared ui state.
2. Moves req_access from the obj and bot to ``/atom/movable`` which lets
it be shared between the two, no more copy-paste and one side lacking
features/checks/signals the other has.
3. Adds a check for AI config for AI-related station traits, which was
lacking prior
Now for the good part...
Adds a new station trait that replaces the AI with a Human.
This person is equipped with an AI headset (including Binary), an
advanced camera console, an omni door wand, the machine controller, and
their laws.
They are immune to the SAT's turrets (even if set to target borgs) and
are slow outside of the SAT, mimicing the actions of the AI.
They interact with the world through their advanced camera console,
which allows them to do most AI stuff needed, and the holopad they can
connect to without having to ring first (like Command can).
They are given a paper with the laws they must follow, but since they
are human they are able to bend it. Cyborgs that run the default lawset
are "slaved" to them via an unremovable law 0, so the Human AI can bend
the laws if they really need to (for their own survival n such), and
make the cyborgs obey their commands above laws, but in general this
shouldn't be a frequent occurrence. This does take into account the
unique AI trait, so it's not guaranteed Asimov.
When this station trait rolls, all Intellicards, AI uploads, and AI core
boards are destroyed and are unresearchable. They can be spawned by
admins in-game if necessary. Maybe in the future we can also exclude
Oldstation from this but I haven't really decided.
Extra perks:
Human AI spawns with a Robotic voicebox (unless they are a body purist)
and teleport blocking implant, so they can't use teleporters to bypass
their on-station slowdown.
They also have an infinite laser pointer that can be used to blind
through their camera console. This is unfortunately nerfed from the
recent borg balance PR that removed its stun. This was meant to be the
alternative to no longer being able to permanently lock borgs down like
AIs can (or more than one, for that matter).
They aren't affected by Roburgers, Acid, and Fuel's toxicity.
Bots salute them like they do Beepsky (which is now a trait)
They spawn with SyndEye to replace the AI's tracking ability
They do not have a bank account
### The machine remote
The machine remote has a little fly in it that flies to the machines it
is pointed to, working as the arms and legs of the Human AI. It scans
the machine and punches in the action the AI does, and is how the AI
accesses basically anything. This fly slowly moves from one machine to
the next, and can be recalled with Alt Click.
It works on machines and bots.
### Video (Low quality to fit Github)
https://github.com/tgstation/tgstation/assets/53777086/e16509f8-8bed-42b5-9fbf-7e37165a11e8
## Why It's Good For The Game
I've seen a funny screenshot one day of a person replacing the AI by
using a bunch of door remotes, camera console, crew monitoring console,
and a few other things. I've been thinking about that for a few years
and really wanted to make it official if not easier to make possible,
because it is an incredibly funny interaction.
This makes it a reality, and while they aren't as powerful as regular
AIs, I think it makes for better and funnier in-game moments. With the
same weight as Cargorilla (1), I hope this wouldn't be rolling too often
and ruin rounds, but instead show off the different capabilities that
Humans and AIs can do, to do the job of an AI. You win some you lose
some.
## Changelog
🆑 JohnFulpWillard, Tattax
add: Adds a new station trait job: The Human AI.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
Paddy mech claw didn't
- Call `action_checks`
- istype the right type
- call parent (no signal, no log)
This fixes that.
## Changelog
🆑 Melbert
fix: The Paddy's Claw should be properly unusable in situations which it
should be properly unusable.
/🆑
## About The Pull Request
While on the floor, you can:
- Use the UIs of Atmos machinery (except thermomachine and bluespace gas
vendor), Holopads, Crayons (spray cans too), radios, and Disposal bins
- Close extinguisher cabinets with Right-Click
- Click and drag yourself onto a photocopier to climb onto it.
I also changed all instances of ``ui_status`` to have all the args it's
being passed, I was messing with it a bit but it's gonna be for a later
PR.
## Why It's Good For The Game
It's an extra layer of harmless realism, also nice QoL for people who do
not have functional legs and do not have a wheelchair.
## Changelog
🆑
qol: You can use atmos machines, holopads, crayons, spray cans, and
disposal bins while floored.
fix: You can close extinguisher cabinets while floored.
fix: You can climb onto a photocopier from the floor.
/🆑
## About The Pull Request
Removes the servo tier in mech construction examine text, so it's more
consistent with other parts.
## Why It's Good For The Game
I hate inconsistency of servos containing tier in mech construction.
## Changelog
🆑 MrDas
spellcheck: The tier of servo in mech construction is no longer
explicitly stated.
/🆑
## About The Pull Request
- Fixes#81527. Adds loc checks for every iteration of
`do_after_mecha()` so if we move at any point (like in strife mode which
slips by this proc) drilling stops. This calls `action_checks()` which
uses power & does other integrity checks for every drill iteration like
it should
- Stops the mecha drill from using power & doing other checks if the
target cannot be drilled
## Changelog
🆑
fix: mecha drill won't use power & do other checks if the target cannot
be drilled.
fix: mecha drill will stop drilling if the mech moves even without
changing direction. Also will use power & check other conditions every
drill cycle.
/🆑
## About The Pull Request
Basically, this means players holding cardboard cutouts will now assume
their appearance, just like for potted plants. Good for pranking.
I've had to tweak the tactical component and the waddling element a bit
to get them to work as intended while dealing with the multiple sources
of the waddling element.
## Why It's Good For The Game

## Changelog
🆑
add: Players holding cardboard cutouts will now assume their appearance,
just like for potted plants.
/🆑
## About The Pull Request
[Fixes static lights not
moving](ffef43c05a)
Worked fine when the owner moved, but if the owner was inside something
else, it would try and trigger an update on the PARENT's lights, which
are obviously not us.
[Renames MOVABLE_LIGHT and STATIC_LIGHT to better describe what they
do](de73a63bd4)
People keep trying to change the lighting system of lamps and it makes
me mad.
I choose OVERLAY_LIGHT and COMPLEX_LIGHT here, I couldn't figure out a
better name for turf matrix lighting. Suggestions welcome
## Why It's Good For The Game
Closes#80005
Hopefully improves understanding of lighting at a glance
## Changelog
🆑
fix: Fixes fancy lights not updating their source location when picked
up and moved
/🆑
## About The Pull Request
Adds a decade old item that has been in the code for a LONG LONG TIME
but yet still unobtainable without admin intervention
as a traitor item as it was (supposedly?) designed as
screenshots of the item


and a ameteur demonstration video
https://github.com/tgstation/tgstation/assets/118483925/641dfc9c-d548-4e56-a106-6f85a5c12ad4
Note: this is my first ever addition PR in tgstation, please inform me
if you believe i have made any issues!
## Why It's Good For The Game
makes a decade old mime-themed item, obtainable by mime traitors
this item is a **VERY FRAGILE** silent, fast, "assasination" exosuit
the suit has barely any armor and exactly 100 durability making it
extremely fragile to oncoming attacks, however, it includes a RCD, a
silenced pistol and the ability to punch open structures
effectively making this a glass cannon
personally i think this item should have been obtainable by mime
traitors in the first place, but i dont get why it never was, i believe
it to be a fairly balanced item for any ordinary traitor to use ((unlike
certain items))
so i believe its a good addition
## Changelog
🆑
add: Added Reticence Assasination Exosuit For 20 TC to mime traitors
tweak: makes the mime mech have a air tank by default
tweak: reticence is faster and slightly stronger
/🆑
## About The Pull Request
When you rename a mech, it now becomes a proper name.
## Why It's Good For The Game
People give their guns people names, and in my experience people also
give mechs people names, it would be cool if they were referred to
'thing' instead of 'the thing', to encourage that.
## Changelog
🆑
spellcheck: Mechs that have been renamed now are proper names, so are
not described as 'the' mech.
/🆑
## About The Pull Request
This gives the mounted RCD the same functionality as the handheld
version, from upgrades to destruction scanning. Upgrades can be
installed by using them on either the mech or the equipment item, and
both the scanner and RCD menu can be accessed in the equipment's menu.
Because mechs don't have different left/right click actions,
deconstructing is toggled in the menu as well.

## Why It's Good For The Game
Gives exosuits more things to do that aren't combat-related, which I
feel is lacking currently.
## Changelog
🆑
add: Exosuit-mounted RCDs now have the same functionality as the
handheld version.
/🆑
## About The Pull Request
- The screwdriver_act() proc is blocked if the mech's occupant list
isn't empty.
- Entering a mech also force-sets the panel closed.
- Fixes an incorrect comment.
## Why It's Good For The Game
I think mech wires were dumb to begin with, but that's not the hill I'm
here to die on today.
The ability to mess with mech wires while the mech is piloted doesn't
really make anti-mech combat better. Pilot gets a big giant text
warning, if they're looking at the text window, but if not the wires can
be quick-snipped once the do-after is done. If you were in the middle of
typing, you have a short window to close the text box and get back to
moving before the panel is open (and you cannot close it without exiting
the mech). At the same time, there's no real way to combo into it, so
it's _only_ really useful against mechs otherwise distracted, or as
cheese when the mech is in a corner. Then we put things like weapon
disabling and forced overclocking (and thus, damage) into the wires, so
cutting everything cripples the vehicle.
In short, it's stupid powerful when it works, and yet it only works
against inattentive players unaware of the mech wire system. An overly
cheesy anti-mech strat when the go-to should be EMPs.
You can still steal unoccupied mechs, I guess, go nuts.
## Changelog
🆑
balance: Mech wire panels are now blocked when the mech is occupied. I
guess it was moved to be behind the seat.
/🆑
## About The Pull Request
Fixes Mk-II Ripley exosuits not being enclosed, and converted mechs not
having lights on if they did before.
## Why It's Good For The Game
Closes#81034
## Changelog
🆑
fix: Mk-II Ripley exosuits are spaceproof again.
fix: Converted mechs now have their lights on if they did before the
conversion.
/🆑
This one's not like the last one, so much so that I'm not even going to
outsource the PR description to a robot this time!
Basically, **You should read the PR body before assuming that everything
is the same as last time. It's not.**
## Video Summary
Click the link below to see a video summary of the main features of this
pull request.
https://youtu.be/Aho2omR0mjY?feature=shared
## About The Pull Request
This pull request serves as a large rework of minerals produced by
mining, and by extension mining itself. I'll try and list each change
and it's associated nuance here.
### Ore Vents
The biggest addition to the game with ArcMining is **Ore Vents**. Ore
vents spawn as a ruin on the map, placing a randomized ore vent onto map
generation. Ore vents spawn in 3 different sizes, **Small, Medium, and
Large**. These vents will pick from a pool of materials they can
generate, and will hang out across the map. A player can use a mining
scanner to discover an ore vent, granting a small quantity of **mining
points** to begin with. Once scanned, ore vents will show what minerals
that ore vent will generate after they're fully tapped.
Scanning the vent again will trigger the extraction process. A small
drone will fly down, called the NODE drone, and buckle onto the vent.
Your job during wave defense is to protect the drone and to defeat waves
of randomly spawning mobs (dependent on if you're on lavaland or on
icebox). The quantity, duration, and time between waves is scaled to the
size of the vent you're protecting. Starting by scanning and protecting
lower tier vents earlier in the shift is a safer bet than doing a large
vent in the first few minutes. The drone has 500 health, and can take a
good few hits, but leaving it alone will cause it to meet an unfortunate
end quite quickly.
Cooperation can be your best asset, as mining with allies can greatly
help with wave defense, and mineral points are granted to anyone who
helps with defending the ore vent equally (So 500 * size tier,
regardless of how much help you receive). Once complete, the ore vent
will have a mining machine constructed on top of it, and will start to
dredge up **Boulders** from the earth automatically. More on boulders
later.
Ore vents can be located based on your mining scanner, and will provide
an appropriate audio cue based on if the ore vent has been discovered or
not, and once processed will no longer alert you to it's presence.
**Each station comes with a free vent that produces exclusively iron and
glass, free of charge.** This is to help with shifts where the station
may not have shaft miners to produce minerals, and to provide the
station with a baseline amount of minerals where none may exist
otherwise.
### Mineral Generation
Mineral generation has been completely reworked. Previously, Mineral
Generation had a flat 13% spawn rate in-game. Once minerals spawned,
they would also have a chance to propagate their minerals to nearby
tiles, resulting in a rather massive pool of minerals that could spawn
throughout lavaland on the whole.
This tweaks that, by making minerals in walls spawn based on their
proximity to ore vents on maps that use cave generation. Both the
probability, and quantity of ores spawning in walls is scaled based on
distance, with ore vents looking like large caches of ores found in
walls. This makes following ores found in walls and checking their
quantity of minerals spawned a good indicator of how close you are to a
nearby vent in-round.
This means you can collect some points form both discovering ore vents
first, as well as collecting their surrounding ores, turn those in for
mining points, and then trading them in for gear upgrades to more
effectively take on ore vents. As a result of tweaking the balance of
this, the total amount of ores spawned in walls overall has been
decreased. However, by making more of the process time based, we still
result in a mostly balanced finished product.
### Boulder Processing
On station, there are now three new machines. These are the BRM, the
Refinery, and the Smelter.
- The BRM acts as a teleporter. Instead of needing to carry boulders
back to the station, you can activate the BRM, and it will automatically
pick boulders to teleport back to itself. You can use this to teleport
boulders dredged up from lavaland onto the station for processing. **The
BRM will only lock on to boulders that are resting on an ore vent.**
Moving boulders back by hand will mean you'll have to haul it back by
hand.
- The refinery processes the non-metallic materials out of boulders.
This process sends the materials straight to the ORM, and collects
mining points from the ores smelted in the machine. Swiping with an ID
card lets you withdraw those points for your own personal account, but
remember that these points are for your whole team to share from. The
**Mining points obtained from this process is only 75% of the amount an
equivalent amount of ores would provide.**
- The smelter works nearly identically, however the smelter produces
metallic materials out of boulders instead.
- Once a boulder has had all of it's materials extracted, it's broken
down and deleted from the line. Otherwise, the boulder is spat out for
the next machine to process it (either the refinery or smelter).
- Once there's no minerals left in a boulder of any type, the refinery
or smelter will break the boulder down.
- Boulders **do not stack onto tiles with each other**, so they'll block
each other when pulled or when moving on a conveyor belt.
Boulders can also be processed by hand. Using a mining tool on a boulder
with right click will allow you to break down a boulder into it's
composite ores, but limits you to a maximum of 10 ore per boulder, where
the full amount can be extracted using the proper processing machines.
Also, processing by hand does deal small amounts of stamina damage over
time, do breaking a full large boulder can be particularly taxing.
Additional Boulder Processing Machines can be built, with the BRM board
being obtained from the Protolathe, while the Smelter and Refinery
boards being obtainable from the Autolathe instead. A _boulder
processing beacon_ can also be obtained from the mining points vendor as
a reward to assist with boulder processing. Boulder processing beacons
can be used to spawn in a new BRM, refinery, and smelter on the tile the
user is standing on, however **you'll still need to link them to the
ORM**!
All three machines can be upgraded with Stock Parts, allowing for **more
boulders to be processed at a time**. It does not, however, increase the
amount of minerals received from boulders, or points earned.
### Mining Borg Tweaks
Mining borgs have been given some minor adjustments to compensate for
the changes to mining. Their mineral scanner, which now has an active
component to gameplay, is now a module as opposed to built into the mob.
This module allows for the same ability to discover and start waves of
monsters to fight.
Mining modules will find that their PKA now has a total of 90% mod
capacity as compared to the 80% they had before, to allow for more
robust defense of ore vents.
In addition, all borgs and AIs can interact with the BRM for boulder
collection.
### Mining Mech Tweaks
Mining Mechs have had their utility tweaked as a result of these changes
as well. Mineral scanners to be used on mining mechs now have a larger
radius by comparison to their handheld cousins. Similarly, it now has an
active scanning button, which will actively discovery nearby ore vents.
To begin wave defense, you will need to hop out and scan a second time
however, so that you can properly accept the risks of drawing a horde of
bloodthirsty wildlife towards you and your companions.
Mechs can also manually process boulders, similar to mining tools using
their drill.
### Golem Tweaks
Golems, being more gentle and less aggressive than humans, while being
made out of LITERAL ROCKS, have a greater need to secure access to ores
and minerals to eat. As such, they have adapted to be able to do two new
things:
- Golems may now right click ore vents to be able to manually haul a
boulder out of the vent. This costs a hefty amount of stamina, but it
allows for golems to avoid combat during regular gameplay.
- Golems may now left click a boulder with an open hand in order to
manually process a boulder like a pickaxe. While not faster, it is
consistent and prevents golems from starving if they have access to a
vent, but no ores, somehow.
### Gulag Tweaks
The labor camp, being a camp for rehabilitation and ~~excessive manual
labor~~ has been tweaked. Boulders now replace the random minerals
located on their island, and to acquire their prizes inside, much be
excavated and then broken out of the rock. Now YOU TOO can excavate
minerals and become a true mineral hero by working your way to freedom.
### Mining Point Changes
As a result of fewer mining points being available across the map due to
the new ore spawning mechanics, and the shift in how and when ores will
be coming in, almost every progress based mining point cost has been
reduced by around 10-20%. Many numbers are still subject to change at
present, but the idea is that core progress unlocks should be made a bit
more available earlier in the round before players can start to solo or
duo larger or more difficult ore vents, after which they'll be rolling
in ores.
### Rarities
Every once in awhile, an unusual boulder will get hauled up from the
mineral rich depths of lavaland. These **Artifact boulders** can
occasionally produce rare items, but for now they've mostly just been
pulling up **Strange objects** for science. Nanotrasen Natural Sciences
department will reward you extra points to be collected by boulder
processing machines for successfully extracting one. In the future, this
opens up a passive reward space that mining can reward to the station,
like providing cytology DNA samples, ancient seeds, or other artifacts.
### Misc notes
- Boulders can be stored in all varieties of ore boxes (ground, mech)
should you choose, however as mentioned it's best to leave them where
they spawn and teleport them to the station for convenience.
- Maps that are not subject to cave generation will find that they are
largely untouched in terms of mineral balance.
- Future or existing ruins can now be tweaked to have a mineral balance
cost, as the ore vent ruin does. This will allow us to spawn in more
interesting ruins for pre-made combat challenges.
- There are unique ore vents that spawn across the map, that will summon
a boss mob relevant to that map. If the boss mob is defeated, that vent
will spawn large boulders pulling from every possible ore type that can
spawn. Not for the faint of heart!
- Similarly, the number of ore vents and mineral budget is now
adjustable in the cave generation procs, so maps may spawn with more or
less ore vents as desired for balance.
- Artifact boulders opens up a LOT of room for possible future content
like archaeology, xenoarch, artisci, and other design spaces!
- Megafauna STILL SPAWN ON THE MAP. They just happen to spawn in
addition to boss ore vents.
- **I'll add more to this as I get asked questions and remember things,
this is a huge PR and I'm confident I've missed at least something**
## Why It's Good For The Game
I outlined a lot of this in #78040, so I'll try and keep this relatively
snappy this time, while noting that I've made some concessions to make
the whole system a lot more playable while not trying to break out
design decisions that are at the end of the day, better for the game and
the overall resource balance in round.
Minerals are a very poorly balanced system, and have been since their
inception many years ago. We heavily rely on mineral balance in round,
and yet we've really only balanced it by introducing so much supply that
there's no equivalent exchange for materials that doesn't just heavily
flood the exchanged material. For example, items printed from materials
that are otherwise considered "rare" on master exist in such quantities
and they'll never practically run out in our allotted 90 minute time
slot design. This PR adjusts how ores spawn to a point where we can
minimize the amount of ores that need to exist on the map for mining to
be able to progress, while still providing enough resources for the
station that it covers the needs of the station adequately.
Miners will need to be more strategic about what resources they've
collected, and be able to make decisions about which vents are worth the
risk of attempting to fight, how to prepare for a wave defense, and when
to head back up for upgrades, while finally giving them at least some
kind of incentive to work together and use different equipment.
Resonators make cleaning up the caves around vent easy, sandbags set up
easy defenses for your vent, mechs can serve as a wider range radar
while mining, all while still providing a new gameplay loop to mining.
By limiting the amount of ores that can enter the round from the
massive, massive amounts that were coming into the round beforehand (see
#78346 ), we can make ore processing more meaningful by adding more
gameplay to the processing of minerals. I have some plans for that,
however this PR already got bloated really REALLY badly due to scope
creep and the number of intersecting systems that rammed into each other
to make this PR possible. So that'll be next. Plus, as I've mentioned,
we open up places for ore processing to find fossils, relics, and other
things that can implemented down the line.
Overall, I don't expect this PR to save or kill ore balance, but we gain
a LOT more control over it through the use of our mining defines
attached to this PR, and at the end of the day, that's a great place to
start off of.
## Changelog
🆑
add: Added ore vents. Scanning them with mining scanners shows what
minerals they contain. Scan again to fight off a horde of beasts as your
drone assistant excavates the vent, so the ore vent will produce mineral
boulders!
bal: Ores that spawn in walls now spawn based on their proximity to ore
vents, with their chance to spawn and their minerals contained scaling
from low to high.
add: Added the BRM, Refinery, and Smelter. These pieces of equipment are
used to process ore boulders into minerals for the station. Stock Part
upgrades allow more boulders to be processed at one time. They collect
mining points as well, to be redeemed with an ID card swipe.
add: Boulders are teleported to the station via the BRM if left
untouched. Boulders can also be cracked open for a reduced amount of ore
using pickaxes or golems hands.
add: All stations come equipt with a pre-excavated ore vent, which
produces a basic supply of iron and glass only. Scan other vents for
your critical resources!
add: Look there's a shit ton of changes on mining, for more detail check
out the Pull Request: https://github.com/tgstation/tgstation/pull/78524.
sound: New sounds and noises for your high octane factorio-like
gameplay!
image: All new boulder sprites for the new minerals and rocks added to
the mining gameplay loop, as well as mining machines!
image: Overlays appear over vents when scanned to let you know their
contents at a glance when actively scanned with any mining scanners.
/🆑
---------
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>