## About The Pull Request
Adds a signal when someone buys an item from the uplink and removes
single-letter vars from the ``spawn_item`` proc, and adds/standardizes
add/removing of telecrystals from uplinks (and admin setting how much TC
they have) to ensure the UI always has the right amount of telecrystals
displayed in it.
## Why It's Good For The Game
There are reasons why someone would want to hook up to a traitor's
uplink and listen to items they purchase to do any special effect
on-purchase, so this adds support to do anything in the future with it.
Also tells players how much TC they actually have without forcing them
to close/reopen the UI every time they insert some TC in it by hand.
## Changelog
🆑
fix: Uplinks now update their UI when you add telecrystals in them, so
you don't need to close and reopen it.
/🆑
## About The Pull Request
Moves update_appearance() proc further after checking if it can be
closed.
It was possible to stand inside an open falsewall, try to close it only
for it to "close" visually and don't change any properties.
## Why It's Good For The Game
Less bugs is good. No more fake-closed falsewalls.
## Changelog
🆑
fix: Now falsewalls visually don't close when they shouldn't.
/🆑
## About The Pull Request
Health analyzer includes a blood alcohol content if the scanned target
is inebriated.
## Why It's Good For The Game
It's useful to know, sometimes their blood is filtered, stomach pumped,
but this effect will still be in action.
## Changelog
🆑 LT3
qol: Health analyzer will now display blood alcohol content
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
I recently played a game where I rotated my skeleton model while
rotating my own character at the same time and it being in sync gave me
the realization on how cool it would be if the Coroner was able to
simply control the skeleton body.
I find skeleton displays very funny and I want to see more funny things
happen with them, so I thought this would be a good place to start, with
the benefits that it also works on mannequins and statues too so they
aren't left out.
Basically, while it is unanchored, if you have a statue/mannequin
grabbed, it will change its direction as you do, and speak the same
words you do. Your own messages can only be heard if the person is
directly next to you, revealing that it was you talking through it all
along.
I was originally gonna add this to the simple rotation component but
moved off when I decided to add talking through it, I left in the code
improvements I made to the component though since it is one of the
oldest components and hasn't been touched in a while.
Video demonstration (before I added the person also talking, just ignore
that missing)
https://github.com/tgstation/tgstation/assets/53777086/27242fc3-9649-418d-95cb-b31619319e97
While fixing the Toilet bong's rotation stuff I noticed a lot of it
wasn't up to proper code standards so I went over it and fixed issues I
had with it. It now doesn't give text saying you found something nasty
to species that still likes mice (like flypeople), and fixed its update
appearance to match the codebase standard set by the introduction of
``update_appearance`` many years ago.
## Why It's Good For The Game
It's a funny small idea I had and got inspired to add, it's a niche
mechanic that I think fits the aesthetic I am going for with Coroner and
also give a funny interaction with the human-like inanimate objects.
## Changelog
🆑
fix: Species that can eat mice don't get disgusted from seeing one in
the toilet bong.
add: Grabbing an unwrenched statue/mannequin/skeleton model will now
move its direction as you move yours, and you can talk through it.
/🆑
## About The Pull Request
1. **Qol Stuff**
- Screentips & examines for screwdriver, crowbar acts, multiool &
wirecutter Also for Alt click
- Techfabs can now also use the Mouse drag functionality to set drop
target for items
- Lathe printing animation now plays on loop instead of just flicking
once till printing is finished for more visual feedback
2. **Code Improvements**
- Merged `start_making()` with `do_make_item()`. That proc was like only
3 lines long and used only in 1 place so let's just move that code to
`ui_act()`
- Merged `user_print_item_id()` with `ui_act()`. Again was used only in
1 place so let's just move that code in to save some proc overhead
- Sets `processing_flags` for autolathe to `NONE` cause we don't use
`process()`
- Autodocs vars such as `hacked` , `shocked` etc & procs
- `maxmult` is now computed client side saving backend bandwidth,
`construction_time` is removed from lathes which did not use it
- Removed all usages of lathe taxes and their related vars, removed
engineering lathe no tax from ice moon, replaced with normal engineering
lathe
3. **Fixes**
- Lathe sheet insertion animations are now linked & work again for all
material types inserted via remote silo/local storage,
silver/titanium/plastic all play the same animation(that is
`protolathe_shiny` overlay). Other materials have their own respective
overlays
- Fixes#81243. Calling `update_static_data_for_all_viewers()` is too
expensive for the UI. We should instead use `SStgui.update_uis(src)`
which will report the `busy` status to the UI more immediatly
- Fixes#81236. Some problems with the params passed to the timer
callback. It should now print the correct number of requested items
- Fixes#81192. `design.materials` would runtime for custom material
items as they were list of texts not materials. We have to pass our
manually parsed list of materials for an specific item to ensure they
are set & used correctly. Same fixes apply for techfabs as well
## Changelog
🆑
qol: adds screentips & examines for screwdriver & crowbar acts & alt
click.
qol: techfabs can now use the mouse drop functionality to set drop
target.
qol: lathe printing animation plays on loop while printing rather than
flicking once for more visual feedback
fix: lathe sheet insertion animations are now linked & work again for
all material types inserted via remote silo/local storage
fix: printing custom materials items from autolathe works again.
fix: printing multiple items from lathes will actually print that
correct quantity of items requested.
fix: printing items the 2nd time around from lathes won't cause the UI
to reload each time.
code: autodoc for some vars & procs, merges procs.
refactor: Optimized code for autolathe & techfabs in general. Report
bugs on github
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
i still dont know what they meant by sanity checks but this should be it
## Why It's Good For The Game
bug or something bad
## Changelog
🆑
fix: you may no longer altclick unanchored toiletbongs from any range in
any condition to rotate them
/🆑
## About The Pull Request
In short, we used a static list previously within the ore_generation
subsystem that held the amount of each ore that we expected a single map
to uniformly need. We held this number constant, since we were spawning
15 vents per map.
**Pros:** This worked flawlessly for Lavaland since 15 vents on a single
Z level makes it pretty densely packed map with a good amount of
map-based ore spawns, and it worked consistently.
**Cons:** 15 vents did not work well on Icebox however, even when split
so that the majority of the ores were spawning on the lower levels,
players did not feel like icebox spawned nearly enough ores and reported
the map spawning empty.
**Result:** As a result, we adjusted the ratio, so that we spawned
vastly more ores on the lower levels, now up to 4 vents on the upper
level, and 21 vents on the lower level. However, as we were still using
the ore distribution list based on lavaland, icebox vents were quickly
running out of ores to distribute between them, resulting in empty vents
-> which produced empty boulders -> which not only don't really let you
process them properly, but also just result in a metric ton of runtimes.
Icebox now has it's own list of ore distributions. These distributions
are now moved to a set of global lists as opposed to being saved on the
subsystem as a static list, which will make going and setting up new ore
distribution lists very very easy. Additionally, we've moved the setting
and getting of those ore_distributions over to the seedRuins proc, so
that we're actually setting the list of ores right before we actually
place them to make sure that the order that it's set is roughly as it's
needed, while still setting the list at the same time the
map-appropriate ruin placements are dropped in.
**Plus some misc cleanup fixes:**
`var/list/ore_vent_sizes` in SSore_generation wasn't being treated as a
similar budget list as `ore_vent_minerals`, since it `pick()`s off it's
own static size list. Which is honestly fine for this five seconds, I
can handle that later while we make sure the rest of the code code is
stable. In the meantime, I've just tweak it so that it's easy to see at
a glance how many of each random vent has spawned into the map.
Tweaked the description to not include anything about chemical
processing, as I'm planning on hitting on that in a part 2 PR that I'll
be picking back up after the freeze.
## Why It's Good For The Game
Cleans up the code a bit, but primarily fixes ores not spawning on
icebox as they should.
Should fix#81058.
Improves description to not mention mechanics that aren't in game.
Also, cleans up a piece of code that currently isn't serving much of a
purpose.
## Changelog
🆑
fix: Icebox should have it's ore distribution and it's ore vents fixed,
so that vents should now produce ore.
spellcheck: Boulder processing machines now don't mention things they
don't do.
/🆑
## About The Pull Request
You got no idea how many times I've had to go to VV and set command=1
because the fucking Interns don't read chat.
With this PR, we no longer have to manually set that crap and can scream
into the Intern's ears in big letters with less steps.
The only outfits that use this type of headset are the CC Commander,
Special Ops Officer, Soviet Admiral, Debug Outfit, and Admin Outfit, so
I think it's cool
## Changelog
🆑
qol: You no longer need to manually set the CC Commander's Headset to
high-volume.
/🆑
## About The Pull Request
During the feature freeze someone pointed out that it was weird that
mothic rations can get dirty if dropped on the floor, as they're
supposed to be inside wrappers.
I added a trash type to them, which has the added side-effect of the
game assuming that if it leaves trash it probably doesn't get dirty when
dropped on the ground.
I also changed the colour of the text on the wrapper from black to very
very dark brown because I didn't like drawing it in black on the
wrapper.
## Why It's Good For The Game
More immersive. More Janitor content.
## Changelog
🆑
add: Mothic Fleet Rations now no longer get dirty or decompose if left
on the floor, due to their wrappers.
/🆑
## About The Pull Request
- Large amount of storage datum cleanup.
- Documentation.
- Maybe more consistent use of parent vs real_location.
- Removes the weakrefs, replaces it with just references.
- These were already managed references anyways so why bother?
- Removes a bunch of arguments no one used and would ever used so only
the most useful args are left.
- Some bugfixes.
## Why It's Good For The Game
Aiming to make storage easier to work with. The whole intent of this was
to bugfix the whole "weight class" thing that keeps popping up but I had
to do this first.
## Changelog
🆑 Melbert
fix: When placing an item into storage (such as backpacks), all nearby
mobs now get a message, rather than just the first mob.
fix: TGC decks of cards should act a bit less odd when looking inside.
refactor: Refactored a bit of storage, cleaned up a fair bit of its
code. Let me know if you notice anything funky about storage (like
backpacks).
/🆑
## About The Pull Request
you may no longer rip out the tag with the power of your mind at range
## Why It's Good For The Game
bug bad
## Changelog
🆑
fix: you may no longer rip pillow tags at range without telekinesis or
crit or any other time you shouldnt be capable of it
/🆑
## About The Pull Request
im getting tired of writing this but you may no longer altclick to
unanchor or anchor when crit or at range or otherwise
## Why It's Good For The Game
bug bad
## Changelog
🆑
fix: you may no longer altclick ethereal disco balls while unconscious
to anchor/unanchor
/🆑
## About The Pull Request
you can no longer altclick them at range to play them
## Why It's Good For The Game
bug bad
## Changelog
🆑
fix: you may no longer altclick tape recorders at range to play them
/🆑
## About The Pull Request
What it says on the tin. To fit with the description of volume 1 ("The
pages don't make any sound when turned."), they now use the sound of
faint rustling instead of the default page-turning sound effect.
Pictured below (you may wish to turn up your volume):
https://github.com/tgstation/tgstation/assets/80640114/e9867815-8e33-47a5-83e2-19fc979e15d6
## Why It's Good For The Game
Makes the book's behaviour consistent with their description, plus it's
just fitting, isn't it?.
## Changelog
🆑
sound: The Guide to Advanced Mimery book series now only make a very
faint noise when turning their pages, in order to match their
description
/🆑
## About The Pull Request
- Kicks Martial Arts out of the attack chain.
- All Martial Arts attacks are now handled via unarmed attack or grab
signals
- This means all martial arts are now technically on the living level,
allowing any mob that can unarmed attack to martial arts. Sort of. YMMV.
- All martial arts block checking is now handled by the arts themselves,
meaning you can selectively decide for a martial arts strike to not be
blocked. Maybe good for the future.
- A comprehensive cleanup of all existing martial arts. Improving var
names, code, adding some missing animation calls, etc.
Fixes#74829
## Why It's Good For The Game
Untangles the mess that is martial arts, making it a lot easier to work
with the attack chain and making it overall a ton more consistent.
## Changelog
🆑 Melbert
refactor: Big martial arts refactor, they should now overall act a ton
more consistent. Also technically any mob can do martial arts. Let me
know if something is funky.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## 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.
/🆑
<!-- 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
This PR increases cuff time to 4 seconds, but adds a trait for gloves
that makes you cuff 1 second faster. Currently this is placed on black
gloves, the captain's gloves and any other gloves which are used for
combat (like krav maga, any tacklers, and combat gloves). Chameleon
gloves also have this trait so that traitors have a glove choice other
than the somewhat conspicuous combat gloves to help them with
kidnapping, something they may do for objectives or contracting.
It also makes nitrile and latex gloves hide your fingerprints once
again.
<!-- 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
Latex gloves not hiding fingerprints was basically done purely for
balance reasons to make them not a direct upgrade over black gloves,
however it bothered me that this made little sense logically and is very
unintuitive and not something that's easy to tell in game. I've
personally arrested multiple people while playing sec using finger print
evidence they didn't even realize I could possibly have because they
thought their gloves would protect them.
Also I don't like playing against shove cuffing, dying because you dared
to stand within 1 tile of a wall or table and got shoved once is unfun
and takes basically zero effort or preparation and is one of the most
effective things you can do to fight someone, it discourages RP because
literally anyone can just turn on combat mode, walk you into the wall
while you're typing and kill you with nothing but a pair a cable cuffs.
This will make it take a little more prep and make you a little more
conspicuous when you intend to do it.
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->
## Changelog
<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->
🆑
add: Wearing certain gloves (such as black gloves and combat oriented
gloves) allow you to cuff people faster
balance: base handcuffing time is now 4 seconds
balance: latex gloves now hide your fingerprints
/🆑
<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
## About The Pull Request
[Converts all manual extraction of rbg with rgb2num. It's just
better](ae798eabd5)
[Yanks out old HSV management, replaces it with list
stuff](4997e86051)
There's this old lummy era clunky code that passed HSV as text
We can now cleanly replace it with passing hsv as lists from a rgb2hsv
proc
So let's just do that.
Also, cleans up spraytan code (and ethereal lighting)
## Why It's Good For The Game
Code better
## About The Pull Request
Removed explicit plane set to `GAME_PLANE` and `ABOVE_MOB_LAYER` thus
fixing issue when well was drawn on improper plane, possibly the ghost
one.
## Why It's Good For The Game
This PR fixes a visual bug.

## Changelog
🆑
fix: fixed ore vent's well being drawn over ash storm.
/🆑
## About The Pull Request
Assigning a bank account to an ID was moved to alt-right-click but no
examine text indicates this change. Adds examine text and a dialog to
set the bank account from the player's memory if the card is unassigned.
## Why It's Good For The Game
Less screaming at HoP "how I set ID!"
## Changelog
🆑 LT3
fix: ID card examine text shows how to set your linked bank account
fix: ID card withdrawal from an unassigned account will ask if you want
to link an account
/🆑
## About The Pull Request
- Scanning ore vents did a do_after to do the actual scan, but if the
do_after failed, it didn't cancel the scan proc, and rewarded you points
anyways. So you could just keep cancelling the scan for free points?
- Also there was nothing preventing someone from stacking scans on the
same vent
- Also, when generating the ore description, always override existing
descriptions. Given `generate_description` can be called multiple times,
prevents it from stacking on itself.
## Changelog
🆑 Melbert
fix: Fixed ore vent descriptions looking weird sometimes
fix: Fixed being able to scan an ore vent multiple times at once
fix: Fixed gaining scan points from scannning an ore vent without
finishing the scan
/🆑
## About The Pull Request
`healthscan` is a global proc, but if you want to call the proc with a
different scan mode, you can't use the defines as they're def'd and
undef'd in the health analyzer file.
So I moved them to a global define file.
## About The Pull Request
The construction console (in game only used as the aux base construction
console) summons a little drone while its active. This drone's
invisibility is turned off, and when the user logs out, its reset to
default. However, after the invisibility refactor, it was the console's
invisibility that was being removed and reapplied. This PR fixes that,
and properly applies it to the drone.
## Why It's Good For The Game
I want to know where the RCD is about to place the wall, so I can place
the items where I want them to go.
## Changelog
🆑
fix: The construction console drone becomes visible again while its in
use
/🆑
## About The Pull Request
Makes shivs and bone daggers not conduct electricity (i.e. you don't get
shocked from hitting an electrified grill with it).
In #80033 `CONDUCTS_ELECTRICITY` was moved to `obj_flags` instead of the
`flags_1` it was before and given a new constant for it. The author
generally replaced the `flags_1` with `obj_flags` but seems to have
forgotten to do this for the bone dagger and glass shiv `Initialize`
calls, while replacing the flag to the new constant though. Meaning that
they weren't non-conductive anymore.
## Why It's Good For The Game
These aren't meant to conduct electricity, this resolves that issue of
them doing that currently.
## Changelog
🆑
fix: Bone daggers and shivs are now longer electrically conductive
/🆑
## About The Pull Request
This just seemed like a minor error with the new syntax that popped up:
The intent of these seem to be "take our obj flags and add
`NO_DECONSTRUCTION` to it", which was perfectly serviceable in a
majority of places, as the parent type had the same obj flags as `/obj`.
But in a small handfull of places (such as any table subtypes) this was
not the case, and it caused some objects to have missing flags that they
were otherwise intended(?) to inherit.
So I replaced `/obj::` with `parent_type::` meaning rather than using
the base obj flags and then adding `NO_DECONSTRUCTION`, they use their
parent type's obj flags and then add `NO_DECONSTRUCTION`.
## Changelog
🆑 Melbert
fix: You can build on some niche tables again, such as the Wabbajack
Altar.
/🆑
## About The Pull Request
Some bug smashing, as well as adding decent values to martian drinks.
This is also my first few ever PRs, so if something goes wrong, yell at
me
## Why It's Good For The Game
This should hopefully make it so that martian drinks appear more at
bars. Also, you can now eat a pesto pizza whole. Yey.
## Changelog
🆑
fix martian drinks give various moodboosts that aren't just "nice" now
fix: pesto pizza (cooked) is no longer raw, and cilbir is meat instead
of fruit
/🆑
## About The Pull Request
Fixes thermoelectric generators so they work again
Pipes can be connected to it, the machine can be rotated
Adds the ventcrawl movement flags as a defined bitfield
I also gave it a TGUI menu, it was small so it is pretty insignificant.
I added a little bit more text to error messages to make it clearer why
the thermoelectric generator isn't functional.
I also repathed generator to thermoelectric_generator because
'generator' is a keyword and is highlighted in green which makes people
using vscode a little confused what it's meant to be.
Old

New
https://github.com/tgstation/tgstation/assets/53777086/064a5dda-5407-4817-b090-d22eb6c4aab8
## Why It's Good For The Game
This is one of the things I had to move to TGUI in
https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA
I was originally gonna remove it, but in the spirit of feature freeze I
thought I should at least give it a try.
This fixes many issues with it and gives it a new better UI that won't
stop updating easily so you can actually watch the changes as it
happens.
The TEG may not be obtainable in-game but it can still be mapped in or
give by admins, letting it function as intended is still a massive
benefit.
Closes https://github.com/tgstation/tgstation/issues/75738
## Changelog
🆑 JohnFulpWillard, Unit2E teaching me the TEG
fix: The TEG now works again (still unobtainable by regular means
though).
fix: the TEG and its circulators can now be rotated counterclockwise
again.
refactor: The TEG now uses a TGUI interface rather than the old HTML
one.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
Fixes https://github.com/tgstation/tgstation/issues/81014 where you can
interact with medical beds while incapacitated.
## Changelog
🆑 LT3
fix: You can no longer interact with medical beds while incapacitated
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
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>
## About The Pull Request
cyborg inducers use the cell of the cyborg instead of the one in the
borg when it was inserted
also minor code cleanup
## Why It's Good For The Game
fixes#80956
## Changelog
🆑
fix: cyborg inducer respects cell changes
/🆑
## About The Pull Request
Fixes#81009.
Trash bags did not have a `worn_icon_state` set, which means that it
tried to use an invalid state when worn while not empty. This is now
fixed.
## Why It's Good For The Game
Missing sprites bad.
## Changelog
🆑
fix: Filled trash bags show up properly when worn.
/🆑
## About The Pull Request
Situation: areas have a list of all turfs in their area.
Problem: `/area/space` is an area and has a 6 to 7 digit count of turfs
that has to be traversed for every turf we need to remove from it. This
can take multiple byond ticks just to preform this action for a single
space rune
Solution: split the list by zlevel, and only search the right zlevel
list when removing turfs from areas.
replaces `area.get_contained_turfs()` with a few new procs:
* `get_highest_zlevel()` - returns the highest zlevel the area contains
turfs in. useful for use with `get_turfs_by_zlevel`
* `get_turfs_by_zlevel(zlevel)` - returns a list of turfs in the area in
a given zlevel. Useful for code that only cares about a specific zlevel
or changes behavior based on zlevel like lighting init.
* `get_turfs_from_all_zlevels()` - the replacement for
`get_contained_turfs()`, renamed as such so anybody copying/cargo
culting code gets a hint that a zlevel specific version might exist.
Still used in for loops that type checked so byond would do that all at
once
* `get_zlevel_turf_lists()` - returns the area's zlevel lists of lists
but only for non-empty zlevels. very useful for for loops.
The area contents unit test has been rewritten to ensure any improper
data triggers failures or runtimes by not having it use the helpers
above (some of which ensure a list is always returned) and access the
lists directly.
## About The Pull Request
I was messing a little bit with TGUI stuff and ended up turning the
implant pad TGUI, so why not.
On top of the new UI, I replaced the messages to chat with nice and
consistent balloon alerts which will hopefully make it not seem like an
ancient piece of shit.
Video demonstration
https://github.com/tgstation/tgstation/assets/53777086/a1ebe0d4-005b-4e29-a623-2c1b352cd017
I also removed ``INTERACT_MACHINE_SET_MACHINE`` from the prisoner
console, because it was accidentally left in when the console was moved
to TGUI
## Why It's Good For The Game
I'm still going down the list of things that need to be TGUI, and I
ended up doing this cause I just felt like it while messing with some
other stuff.
Rest of the list is visible here:
https://hackmd.io/@sClqlHM0T4yZfn-qa5KnAg/S152Tl2hh
## Changelog
🆑
refactor: Implant pads now use TGUI
/🆑
## About The Pull Request
Removes the ice cream vat's html window for ice cream, reagents, and
cones and replaces it with a radial menu and the ability to simply
examine the machine to see its contents.
Soup and Salads currently allow you to see whats inside without the need
for science/bar goggles, so following that theme I thought it would make
more sense for it to also be the case here (and for feature parity with
previous behavior).
#### Controls
Left-click chooses ice cream flavor or ice cream cone
Right-click swaps between which one you will be choosing from
Left click with a beaker will put it inside to use for custom
ingredients
Right click with a beaker will transfer its reagents to the machine (any
that is used for making ice cream)
Dispensing custom ice cream takes from the beaker inside of the beaker
Video demonstration
https://github.com/tgstation/tgstation/assets/53777086/9ebdcb13-b29f-4b3c-9d5f-54be1f6da888
Custom Ice cream
https://github.com/tgstation/tgstation/assets/53777086/687af270-14e4-4851-bf1f-3c4da4aeb21f
## Why It's Good For The Game
The ice cream machine is genuinely confusing because of it's UI and
personally it was unironically the last kitchen tool I learned because I
just didn't think it was worth it. This makes it feel way better to use.
It also helps me with https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA which
I've been trying to chisel away at.
## Changelog
🆑
refactor: Ice cream vats now use a radial menu instead of an HTML one.
/🆑
## About The Pull Request
I wanted to add the ability to shove people with shields by
right-clicking your target, just like how it works barehanded.
This also required a solid refactor of disarm code, effectively bringing
down the core of it to `mob/living` from `mob/living/carbon` or
`mob/living/carbon/human`. This also means you can shove simple mobs
inside closets, bins and on tables.
Xenos and borgs are pretty much immune to regular disarms, but using a
shield will work (borgs and royal xenos are immune to the knockdown).
The riot shield armor has been balanced. It now tanks melee attacks
pretty well, but will break against bullets in just about 2 to 4 hits
depending on the bullet damage. I've always found the lack of sturdiness
of the riot shields for what they're supposed to be good for a bit
detrimental.
Because I've refactored an item flag into a trait, I've had to add a new
MOD module that grants protection from shove knockdown and staggering;
found pre-installed in the administrative MODsuit, but I've also added
it to the black market to make it cooler.
You can bash people with the strobe shield on combat mode.
## Why It's Good For The Game
Currently, shields are simply items that take a held slot in return of
some block chance without being anything special, save for the strobe
shield's integrated flash I guess, but are also a botherance as most
crumple under the duress of less than half a dozen attacks. Meanwhile
swords and other weapons with blok chance just don't care.
TL;DR, I want them a bit more remarkable, and flexible as a tool.
Of course, this ended up in a larger refactor because the right-click /
disarm code was inconsistent.
## Changelog
🆑
add: Shields (and pillows) can be used to shove people around the same
way barehanded right-clicking does. Xenos and borgs can actually be
moved this way.
add: Added a new MODsuit module, the bulwark module, which prevents
knockdown and staggering from shoving, and getting pushed away by thrown
objects. Inbuilt for the safeguard MODsuit, but one might also it in the
black market.
refactor: Disarming has been refactored. You can now shove simple
critters onto tables and into bins and closets
balance: Shields now take their own armor values and the armor
penetration of the attack they blocked when damaged. This means shields
are a bit sturdier now.
balance: Riot shields can tank a lot more damage against melee weapons,
but less against bullets.
qol: strobe shields can now be used to bash people while combat mode is
on.
/🆑
## About The Pull Request
Partial Revert of https://github.com/tgstation/tgstation/pull/80800
Assuming every num passed in the parameters of `add_mood_effect` is a
`timeout_mod` is incorrect, because there can be mood events that take a
numeric arg which is not meant to be multiplied against the timeout.
This leads to the same issue as multiplying it with strings essentially
(in one case, shown below, this results in a negative duration of a
timer).


Plus having a keyword arg that may or may not actually be what the
keyword arg claims to be is really confusing and bad.
Instead here's what I propose: passing in an instantiated mood datum
itself, which has been modified, and copying the timeout from it before
discarding it.
It is not as clean as I'd prefer either, but at least it's logically
sound and the intent is clear, and it's the best I can think of short of
a major refactor of the entire system for this one small thing which is
only being used by food quality.

## Why It's Good For The Game
Clearer, less smelly code.
## Changelog
🆑
code: removed the timeout_mod arg from add_mood_event, which was only
used for one thing and causes more issues than it's worth
/🆑
## About The Pull Request
Emptying the access list of an ID is a totally legit thing to do, so
let's stop throwing errors because vibebots have no access at all.
## Why It's Good For The Game
Fewer runtimes.
## Changelog
Nothing changes.
## About The Pull Request
Alternative title: "Baby's third pr: surprise say code refactor"
While testing sign language I worked out that if the first message sent
after toggling sign language involves speaking directly into a radio, it
proceeds to use the wrong verb. After several hours of digging through
say and telecomms code, I worked out the cause:
the `verb_say` on humans is primarily updated to match tongue data
during the verb _selection_ method `say_mod()` in `human_say.dm`, and as
a consequence this meant the verb wasn't updated to the correct one
until far after it had been copied to a virtualspeaker, leading to the
incorrect verb being used for the radio message.
This pr fixes this by refactoring this verb updating behaviour to be in
a new method `update_verbs()`, which we then call _before_ attempting to
call `radio()` to avoid wrongful copying and thus fixing the bug.
There's theoretically also cases where the previous behaviour would use
the wrong verb if one lost or gained a tongue between radio messages, or
the wrong verb from those picked from a list for some simple/basic
animals, but those are significantly less common.
To note, I gave the new `update_verbs()` method the same arguments as
the `say_mod()` method it got split out of, but having gone through all
instances of it being used for this I don't feel it actually *needs*
those arguments. So I'm unsure whether it should keep them or not.
Opened as a draft for now for sanity's sake, and also cause, y'know, it
touches say code.
## Why It's Good For The Game
It was _really_ annoying.
## Changelog
🆑
fix: Signers no longer use the wrong verb when speaking directly into a
radio for the first message after toggling sign language.
refactor: Moved the updating of verb variables into a new method which
is called earlier in living's say, which should avoid this happening for
other things which updated their verbs the same way.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
In a previous PR (https://github.com/tgstation/tgstation/pull/79661), I
noted that a lot of moodlets tended to have their timeouts break because
it was passing their names and whatnot as a parameter, that gets fed
into the timeout modifier parameter, causing the timeout multiplier to
break, because BYOND type-agnosticism means that it can multiply a
number (timeout_mod) by text (a name or some other object), resulting in
0 - which makes a moodlet permanent. This is probably not intended.
This fixes that in two ways:
- Adding a `1` to potentially applicable moodlets (searched for with a
regex of `.add_mood_event(.*, .*,)`) just to make sure the timeout
doesn't get multiplied out weirdly.
- Making the add_mood_event thing CRASH() if the timeout_mod is bad.
If someone else wants to come up with a solution better than this,
please do.
## Why It's Good For The Game
Maybe having your arm permanently fall asleep after getting it
reattached sucks, moodlet-wise. (Being stuck with permanent
positive/negative moodlets is probably not intended.)
## Changelog
🆑
fix: Moodlets with parameters/effects e.g. limb reattachment moodlets
should probably disappear more appropriately.
/🆑
---------
Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
## About The Pull Request
- Makes borg apparatus-type tools able to start the held item's attack
chain again.
## Why It's Good For The Game
Bug of my own making.
Fixes#80881
## Changelog
🆑
fix: Borg tools that hold and use specific items now work correctly
again.
/🆑
Oops.
## About The Pull Request
This pull request fixes two things. First, it moves the behavior for
setting your account id from right click (shared with withdrawing
credits) over to Alt-Right click instead.
Second, this pull request fixes contextual screen tips for the Id card,
explaining how to set a bank account on a new card as a result.
## Why It's Good For The Game
This fixes#68351. Additionally he early return on add_context was
blocking all screen tips from appearing. It improves the readability of
ID cards by having the screen tips back, while also correctly splitting
two very distinct behaviors into separate hotkeys that weren't available
at the time we moved blank ID cards into having blank savings accounts.
## Changelog
🆑
qol: ID cards now set their accounts with Alt-Right click.
fix: ID cards now once again have contextual screen tips showing what
buttons do what actions.
/🆑
## About The Pull Request
See title
## Why It's Good For The Game
1. Its a bit odd that the rods are still there and on top of the new
tile you placed, considering you were build on top of them.
2. Because building didn't use place on top, the lighting on the tile
would be broken and made entirely black for the rest of the round.
Slightly annoying when you're constructing something on top of it!
## Changelog
🆑
qol: The heat-proof catwalk made by heat-proof rods will go away when a
tile is placed on it, rather than sticking around and needing to be
removed manually
fix: The lighting will not irreparably break on tiles where plating was
placed on lava-proof catwalks
code: Some single letter variables and the structure of the code around
placing tiles on lava-proof catwalks has been improved
/🆑
## About The Pull Request
Fixed healing simplemobs with sutures and other stacks
Also made the formatting of the balloon alerts better and added some
extra feedback messages that are clearer than "can't heal X"
After assessing damage for 1 second, if the body part is fully healed
and the user is healing themselves, I made it NOT show another balloon
alert, so as to not overload the user with balloon alerts, its obvious
that its fully healed from the user's own HUD
The simplemob thing is me fixing my own PR, the
grammar/formatting/feedback is new, so not sure about GBP no update, up
to maints
Fixes https://github.com/tgstation/tgstation/issues/80884
## Changelog
🆑
fix: Healing simplemobs with sutures and other stacks works again
spellcheck: Healing mobs with medical stacks like suture and mesh give
better user feedback messages
/🆑
## About The Pull Request
Goofy ahhh assumption.
```dm
/obj/item/syndicate_teleporter/proc/make_bloods(turf/old_location, turf/new_location, mob/user)
var/mob/living/carbon/carbon_user = user
```
Carbons are not the only mobs who have hands.