Skip to content

Upstream 2026-06-17#149

Open
mass-bot[bot] wants to merge 127 commits into
masterfrom
upstream
Open

Upstream 2026-06-17#149
mass-bot[bot] wants to merge 127 commits into
masterfrom
upstream

Conversation

@mass-bot

@mass-bot mass-bot Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

🆑 MassMeta
add: Upstream 2026-06-17
/:cl:
conflicts: .github/workflows/discord_pr_announce.yml
code/__DEFINES/say.dm
code/__DEFINES/text.dm
code/__HELPERS/spatial_info.dm
code/__HELPERS/tts.dm
code/controllers/subsystem/traitor.dm
code/controllers/subsystem/tts.dm
code/datums/3d_sounds/_3d_sound.dm
code/game/say.dm
code/modules/client/preferences/middleware/tts.dm
code/modules/clothing/chameleon/generic_chameleon_clothing.dm
code/modules/mob/living/living_say.dm
code/modules/mob/living/silicon/ai/ai_say.dm
code/modules/mob/living/silicon/silicon_say.dm
code/modules/transport/tram/tram_controller.dm
config/config.txt
tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/tts_voice.tsx

SmArtKar and others added 30 commits June 11, 2026 11:31
…onds/bluespace crystals (#96417)

## About The Pull Request

Boulder-specific materials got overriden by the vent

## Changelog
:cl:
fix: Fixed diamond and bluespace artifact boulders not containing any
diamonds/bluespace crystals
/:cl:
…ty change in plants with the gene. (#96402)

## About The Pull Request

Cross-pollination has a lot of potential for fun, but the aspect of
instability loss and gain in plants makes me experience great suffering.
Therefore, it has been suggested that I can get rid of this great pain
by just preventing it with a plant trait! Magnificent!

Grass was chosen to receive this trait because of its.. _checks notes_
"[remarkable conservation of gene content and gene
order](https://pmc.ncbi.nlm.nih.gov/articles/PMC33824/)"! How wonderful!
I hope I'm interpreting that correctly!

## Why It's Good For The Game

The trait allows for botanists to achieve a finer control over which
plants are altered during cross-pollination, preventing undesired
instability loss or gain.
With this, the experience of setting up trays next to each other comes
with fewer pains, and enables more sophisticated cross-poll. setups as
one wishes, preventing undesired mutations or reagent changes.

## Changelog

:cl:
add: Adds "Conserved Genetics", a plant trait which prevents the plant
from having its instability be altered by cross-pollination.
/:cl:
## About The Pull Request
This adds the flashlight toggle on/off sound to the room light switches.
This is also used by a lot of other lighting objects, like lamps and
lanterns.

## Why It's Good For The Game
Mah Immersion!

## Changelog
:cl:
sound: Add on/off sound to light switches in rooms
/:cl:
## About The Pull Request
Tin. If someone decides to add wilderness levels for maps that isnt ice,
they will not suffer anymore. Uses default icy wilderness traits
(renamed define for clarity), also adjusted another var name, for
clarity too.
## Why It's Good For The Game
Allows for a higher degree of customisation for wilderness levels, which
is a very good idea, but somehow it was hardcoded to only work with snow
maps.
## Changelog
Nothing player facing (i hope)
… from last item in the stack (#96404)

## About The Pull Request

Fixes #96244.
Problem was that when you use last item in the stack, the stack gets
qdel'd and the destructor is called. The destructor sets `mats_per_unit
= null` for the object, and when custom materials applied to tile/wall
it is null.
Bug was caused by #92620. I'm not gonna review 272 files from that PR to
see if I can delete that destructor, potentially breaking something
else, so this is a lazy fix for the annoying bug which is 6 months old.

## Changelog
:cl:
fix: fixed material tiles and walls not having material when constructed
from last item in the stack
/:cl:
updates dreamluau to
[0.2.2](https://github.com/tgstation/dreamluau/releases/tag/0.2.2) - the
only change is a meowtonin update that should fix the compiler issues
that tg is struggling with on live

closes tgstation/tgstation#96434
## About The Pull Request
Santa Claus can hear prayers that contain the words "santa", "claus",
"christmas" or "xmas". Prayers containing the word "satan" have a 40%
probability to being "erroneously" relayed to Santa instead. Talk about
a terrible typo. I'm toooootally sure nobody will do it on purpose
(totally forced joke ik ik).
Santa cannot know who the person praying is if not told inside the
prayer itself, however he can tell if the person is naughty (either
antag or has the evil trait) or not, so be mindful of that. If tired or
harassed by unwanted prayers, Santa can also click an action button at
any time to silence them. The prayers will still be sent to admins, they
just won't be heard by Mr. Claus.

This PR comes with a new component and a mild refactor of prayers. For
admins, the message from the pray verb is now wrapped in boxed message
spans. This will make prayers a bit easier to notice, since the lack of
message box coupled with lack of sound (for now, unless it's the
chaplain praying) makes them easy to miss.

Also tinfoil hats prevent you from hearing prayers, Santa (redundant
with the action button, this is just a little touch).

## Why It's Good For The Game
Early Christmas PR ! Yeah, I know, headsets exist and Santa Claus is
very capable of wearing one, but he's the same guy who rides a flying
sleight, climb down chimneys (notwithstanding his corpulent body). The
prayer thing makes a bit sense if you think of the more religious roots
of the character, though our Santa Claus is a bit more secular ya know,
and this is more of an excuse to give him something extra.

Oh, yeah, if people will abuse the feature, I guess I could add an
incapacitated check for the praying mob so that Santa won't hear prayers
from people dying or restrained, or remove the tidbit that says if the
person who sent the prayer is naughty or not.

## Changelog

:cl:
admin: Prayers from players are now boxed (like examine messages and
some health readouts for example), making them easier to tell apart from
the constant stream of text in your chat tabs.
add: Santa Claus can now hear prayers that mention him or Christmas. He
won't know who's praying unless told, though he can tell if they're
naughty.
/:cl:
## About The Pull Request

Ports Monkestation/Monkestation2.0#5744,
alongside the metadata stuff from
Monkestation/Monkestation2.0#11617 and
Monkestation/Monkestation2.0#11644

> This PR adds a websocket client to the chatbox, that redirects all
incoming payloads from the server, to the specified server, which allows
for external integrations with the game. All of which is parsable JSON.
> 
> Some ideas include RGB feedback, triggering an event in VTubing
software, or automating a physical device based on what's sent to the
chat. (For example, a haptic suit, and have a regex for "in the right
leg" or any body part)

The websocket can also be used to request basic "metadata" about the
current round - server name, station name, round id, map name, round
duration, and game state (all this information can be obtained via the
`status` world topic without being logged in anyways, to be clear) - if
the server has webroot set up, it will also send the webroot base url
and the links to the chat assets (i added this just so i could embed the
chat styling and icons in my chat log html)

**To be clear, the websocket is entirely client-side, if it's not
obvious.**

<details>
<summary>Example of metadata JSON</summary>

```json
{
  "type": "metadata",
  "payload": {
    "game_version": "/tg/Station 13",
    "server_name": "kbity station 13 (tg)",
    "round_id": "152",
    "map_name": "Minimal Runtime Station",
    "round_duration": 6,
    "gamestate": 3
  }
}
```

</details>

<sub>if y'all make a freaky joke i will beat you with a rock, I do not
care about _that_ kind of thing in the slightest.</sub>

## Why It's Good For The Game

Lots of interesting things. I've made a doohickey that allows me to
automatically save my chat logs instead of having to manually click
"Save Chat Log" in settings repeatedly (which is also limited by the
chat scrollback limit)

"i have had a recurring thought of adding websocket support so I can
swap my spotify playlists whenever I get into combat on lavaland" -
smartkar

## Screenshots

<img width="676" height="158" alt="2026-05-27 (1779927348) ~
dreamseeker"
src="https://github.com/user-attachments/assets/28185ddd-b6b6-423e-9b46-cfaa519972ac"
/>

<img width="2298" height="608" alt="2026-05-27 (1779927386) ~
WindowsTerminal"
src="https://github.com/user-attachments/assets/1e41b783-6c43-4399-9ab5-a9c8bf67d117"
/>

<img width="1651" height="391" alt="2026-05-27 (1779927395) ~
dreamseeker"
src="https://github.com/user-attachments/assets/5e905670-edd6-4efc-8d0c-3d19e39799a6"
/>

## Changelog
:cl: Absolucy, Flleeppyy
add: Added a websocket client, you can now forward incoming chat
messages to an external program, i.e allowing you to change music
playlists based on events, or such.
/:cl:
## About The Pull Request

Capitalizes the butterbean plant name when planted so it shows up as
`hydroponics tray (Butterbean Plant)`, instead of `hydroponics tray
(butterbean Plant)`.

## Why It's Good For The Game

Consistency (this one thing has bugged me for a while and I have only
just now decided to fix it).

## Changelog

:cl:
spellcheck: Butterbean plants are now capitalized properly when planted.
/:cl:

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
## About The Pull Request

After #96352 got merged, the actual interaction for dumping a bag of
soil/vermaculite/etc. into a hydroponics tray broke because the
current_soil (and subsequently soil flags) weren't being transferred
properly. This fixes that by adjusting transfer_soil() to return the
placed/moved soil, allowing us to grab the soil flags and whatnot.

## Why It's Good For The Game

I think dumping soil into the tray should probably work right.

## Changelog

96352 didn't have a changelog so maybe this one shouldn't either.

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
## About The Pull Request

Mending globule can no longer be cast if you don't have enough nutrition
to do so.

The ooze hud now inherits the living hud, meaning ooze mobs can see
their health and all of the other stuff.
<img width="1186" height="776" alt="image"
src="https://github.com/user-attachments/assets/068cc22d-5721-4c90-ac38-bcdda9af9dcc"
/>
The combination of the nutrition display and the health doll is kinda
ugly for now but probably better than nothing.

The descriptions of shoolean grapes abilities now include the cost of
the ability in question.

## Why It's Good For The Game

Not being able to see how wounded you are is kinda bad, and being able
to see that is kinda good. Knowing how much your abilities cost is good
too.

## Changelog
:cl:
qol: Ooze mobs from cytology now have the same type of HUD as other
mobs, allowing them to see their health
qol: The abilities of shoolean grapes now have their cost specified in
their description
fix: The mending globule ability used by shoolean grapes no longer can
be cast while there isn't enough nutrition to do so
/:cl:
my watch has ended

<img width="401" height="256" alt="ffffff"
src="https://github.com/user-attachments/assets/a539203c-020b-4ad8-b034-f69ec0eafa78"
/>



## Changelog
:cl: Profakos (originally pulled from their branch, did massive chunk of
this), Ben10omintrix
refactor: mulebots have been refactored. please report any bugs
/:cl:
…t animation) (#96450)

## About The Pull Request

Missing END_STAGE check caused mask overlays to remain when the weather
ended and bleed through the blackness if you did not have mesons
equipped (which i did during testing, and did not spot the issue. Oops)

## Changelog
:cl:
fix: Fixed broken area overlays for particle weather 
/:cl:
tgstation-ci Bot and others added 20 commits June 16, 2026 20:19
## About The Pull Request

The module was active but stealth itself was passive, so calling
deactivate() would runtime as the module would not necessarily be active
at this point.

## Changelog
:cl:
fix: Fixed wraith cloaking module runtimes
/:cl:
## About The Pull Request

<img width="670" height="600" alt="image"
src="https://github.com/user-attachments/assets/db451921-5cfa-437d-b9ca-be09f0daa91e"
/>

Adds buttons to eject 1, 5, or all sheets of any material from the
autolathe, and removes sheet designs.

## Why It's Good For The Game

The existing system is insanely stupid and results in most uncommon
materials being stuck in the autolathe until it is disassembled, and
having to find the sheet manually is annoying.

## Changelog
:cl:
qol: Materials can now be directly ejected from autolathes rather than
needing to be printed.
/:cl:
## About The Pull Request

Closes #96531

## Changelog
:cl:
fix: Fixed earthcracker not getting spent on mining z levels
/:cl:
…(#96319)

## About The Pull Request
- Discord message is now sent when the PR is reopened
- Removes `username`, `title_url`, `title`, & `message` from discord
notify action as their default values work fine

## Changelog
N/A
## About The Pull Request
Tooltips are positioned according to `screen_loc` var which was
incorrectly being modified by `/datum/storage_interface/silicon`. They
covered the whole item making it virtually impossible to click on.

We can't check if the item is in the borgs hand because `add_items()`
gets called BEFORE the transfer to hands not after BUT we can check if
the item was transferred out of storage via the `IN_STORAGE` flag which
has the same results. It's fixed now

Before
<img width="182" height="156" alt="Screenshot (23)"
src="https://github.com/user-attachments/assets/cd3db288-87bb-49bb-bf02-b8662104e441"
/>
After
<img width="296" height="113" alt="Screenshot (25)"
src="https://github.com/user-attachments/assets/1e61fc36-1f40-4b06-9c01-1b1ce7fc07b8"
/>

## Changelog
:cl:
fix: Tooltips no longer cover the whole borgs hands held items
/:cl:
## About The Pull Request

<details>
<summary>About the gizmode</summary>

- It creates a code that the user needs to crack.
- The interface for the code is much like those RPG maker combination
locks:

<img width="190" height="107" alt="image"
src="https://github.com/user-attachments/assets/8b64d29a-7585-4e61-9308-7d66eb01f32b"
/>

- You can cycle the selected position and the selected digit, then send
the code to test it.

- After every cracking attempt, the code is reset and some sort of
feedback is provided, including how many attempts are left.

- There are 2 versions of this gizmo, the "tutorial" and the
"hard-mode".
- The "tutorial" code is 2 digits long, and it tells the user whether
the digits they inputted are higher, lower or exactly the same as the
solution digits ("over/under" feedback).
- The "hard-mode" code is 2-3 digits long "bulls and cows" puzzle,
essentially. It can only be accessed by solving the tutorial.

</details>
Also, fixed a bug I noticed where users didn't have a way to interact
with item gizmo wires

## Why It's Good For The Game
The gizmodes that currently exist are simply way too easy to work with.
We gotta spice it up with some real interface hell.

## Changelog
:cl:
add: new gizmode
fix: you can now interact with item gizmo wires
/:cl:

---------

Co-authored-by: l0 <-->
Bruh-24 added 2 commits June 18, 2026 00:50
нахуя спрашивается поменял robot на borg???
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.