## About The Pull Request
Re-did blips to be significantly nicer sounding and way better. Alien
speech you don't understand now comes through as Blips. If you have TTS
entirely disabled, you won't hear blips. Blips also now include more
customization options, and a dedicated Blips preview button by clicking
the leaf icon.
<img width="1749" height="354" alt="ApplicationFrameHost_5nKJEvaNV1"
src="https://github.com/user-attachments/assets/ef6c6b61-7c22-4a87-94c9-be50e89c65bb"
/>
https://github.com/user-attachments/assets/8cab7e55-6370-4e4e-99ba-ea2475569453
Radio TTS has been implemented. By default, you will hear all TTS over
the radio, but will not hear yourself over the radio. You can configure
this in Game Settings.
https://github.com/user-attachments/assets/94a44d84-17a9-4e6e-ac5c-3b800b11c159
<img width="743" height="193" alt="chrome_MOIcXaC2gh"
src="https://github.com/user-attachments/assets/907379b7-0689-486c-b29c-9be0a2259b05"
/>
The new TTS stack is located at
https://github.com/Iamgoofball/tgtts-qwen3 and is AGPLv3 licensed. The
new blips design was inspired by
https://github.com/joshxviii/animalese-typing.
The configuration to disable TTS on whispering has been removed, as it
is no longer needed and also interferes with radio TTS functioning
properly.
The Tram now utilizes TTS, and has had a general audio tune-up.
https://github.com/user-attachments/assets/f532d002-939c-43a1-95d0-0f0c43048997
TTS audio is now 3D and in space, see attached.
https://github.com/user-attachments/assets/b00df49a-9d1d-4b27-a8a0-d103099f5c7e
## Why It's Good For The Game
Quality of life improvements to the TTS system, long overdue. Also, TGMC
can migrate to this new method of doing radio audio so they aren't
sending double the TTS requests anymore.
## Changelog
🆑
add: Added support for Radio TTS. You will now hear players over the
radio via the TTS system.
add: Configure this in Game Options under the Sound tab.
sound: Re-did blips to be significantly nicer sounding and way better.
sound: Alien speech you don't understand now comes through as Blips. If
you have TTS entirely disabled, you won't hear blips.
sound: The Tram and Computers now utilize the TTS system. Configs have
been added to set a consistent voice.
sound: TTS audio now utilizes 3D audio; you can now walk away from
people saying stupid shit and it gets quieter.
sound: Blips also now include more customization options, and a
dedicated Blips preview button by clicking the leaf icon.
del: The configuration to disable TTS on whispering has been removed, as
it is no longer needed and also interferes with radio TTS functioning
properly.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
## About The Pull Request
Adds some intercom templates based on some commonly mapped in var-edited
intercoms
- Interrogation
- AI private (AI upload)
- AI private (AI antechamber)
- AI private (AI chamber)
- Free range
- Free range (AI chamber)
Also adds some templates for the recently added
encryption-key-in-intercom mechanic
- Departmental intercoms
Doesn't map in any of these templates (yet)
Also allows for radios to have locked keyslots in addition to locked
frequencies
## Why it's good for the game
Makes it a bit easier to map intercoms, particularly for event maps
## Changelog
🆑 Melbert
code: Radios can now have their keyslot locked, though no radios
currently have a keyslot lock. However, report any bugs with being
unable to emag, install, or remove radio keys.
/🆑
## About The Pull Request
Radio encryption key removal handling, including nulling, is handled in
`Exited()`. The key never exits the radio if it wasn't inside the radio
to begin with.
## Why It's Good For The Game
fixes#95207
## Changelog
🆑
fix: Radio encryption keys are no longer tied to their radios once
removed
/🆑
## About The Pull Request
Deletes `can_hear`, replaces it with trait-checking deafness.
The only two non-trait sources of deafness (hardcrit and lacking ears)
were refactored into using the trait.
## Why It's Good For The Game
Many places inconsistently check for the deaf trait rather than use
can_hear which meant behavior was not consistent.
Some code would treat "do we lack ears?" as being deaf, some would not.
This unifies all the behavior so being deaf means you're deaf
everywhere.
It also means we can now easily react to gaining and losing deafness via
signal, where before we could not react to it without hooking the trait,
organ remove, AND stat change. Which no one did, of course, because who
would ever think to do that?
## Changelog
🆑 Melbert
refactor: Refactored how deafness is tracked. Please report any weird
interactions with sounds, like messages or sfx being missing.
fix: Lacking ears and being in hard crit now consistently treats you as
"being deaf". This affects a few minor interactions like empath, the
jukebox, and sleeping.
/🆑
## About The Pull Request
This PR refactors ``effect_system``s to be a bit easier to use by
getting rid of ``set_up``, allowing ``attach()`` to be chained into
``start()`` and refactoring most direct system usages in our code to use
helper procs.
``set_up`` was unnecessary and only existed to allow ``New``'s behavior
to be fully overriden, which is not required if we split
sparks/lightning/steam into a new ``/datum/effect_system/basic`` subtype
which houses the effect spreading behavior. This allows us to roll all
logic from ``set_up`` into ``New`` and cut down on code complexity.
Chaining setup as ``system.attach(src).start()`` also helps a bit in
case no helper method exists
I've added ``do_chem_smoke`` and ``do_foam`` helpers, which respectively
allow chemical smoke or foam to be spawned easily without having to
manually create effect datums and reagent holders.
Also turns out we've had some nonfunctional effect systems which either
never set themselves up, or never started, so I fixed those while I was
at it (mostly by moving them to aforementioned helper procs)
## Why It's Good For The Game
Cleaner code, makes it significantly easier for users to work with. Also
most of our effect system usage was copypasta which was passing booleans
as numbers, while perfectly fine helper procs existed in our code.
## Changelog
🆑
refactor: Refactored sparks, foam, smoke, and other miscellaneous effect
systems.
refactor: Vapes now have consistent rigging with cigs using the new
system.
fix: Fixed some effects never working.
/🆑
## About The Pull Request
*All* radios can have an encryption key installed
This includes intercoms and station-bounced radios
<img width="472" height="294" alt="image"
src="https://github.com/user-attachments/assets/8fe8880b-2872-4030-9e42-ced4ce529b31"
/>
These radios are *not* normally freerange, meaning to tune into channels
added by an encryption key, a new button in the radio UI has been added
- "Tune", which tunes you directly into the channel.
This even works with the Syndie key, giving the intercom access to
Syndie channel and the ability to hear all encrypted channels. However,
it will *not* work with a Binary key.
Likewise, any key with language understanding on it will do nothing. I
think **theoretically** we can have intercepted messages in alternate
languages check to see if they have a key of that language with (to
relay a translation instead), but that sounds like a lot of work...
Also this means you can now speak on encrypted frequencies (like
departmental ones) via non-subspace means - ie, when telecomms is
disabled.
## Why It's Good For The Game
To be completely honest, I haven't fully considered the repercussions of
such a change.
Someone just offhandedly mentioned that if they could tune into a dept.
radio via subspace, they would try playing without a headset, and I
thought that sounded fun.
Otherwise, this opens up stuff like departmental intercom systems -
which sounds cool - and in the future we could possibly de-hardcode
freerange settings (like the command intercom).
## Changelog
🆑 Melbert
add: All radios (intercoms and station-bounced) can have encryption keys
installed in them, rather than solely headsets and cyborgs.
add: Existing screwdriver interactions for station-bounced radios and
intercoms have been moved to right click. However, intercoms will still
default to the old behavior if they have no key installed.
qol: Screentips for radios.
/🆑
## About The Pull Request
- Gives `/obj/item/radio/headset/heads` a command headset icon, making
subtypes not need to redefine it 7 times for no reason
- (Also gives a fairly long if() check an early return, but thats more
minor)
## Why It's Good For The Game
> Gives `/obj/item/radio/headset/heads` a command headset icon, making
subtypes not need to redefine it 7 times for no reason
> (Also gives a fairly long if() check an early return, but thats more
minor)
- Makes the code slightly clearer to look at, that they all have the
same icon except for alts
## Changelog
🆑
code: slightly cleaned up command headsets in-code
/🆑
## About The Pull Request
Depends on #94064 for the unit test but offers a better method for
finding an atom to mount on
- Finding a mount now takes into consideration the objects pixel x & y
offsets meaning diagonal mounting is now supported. Gives great
flexibility for mappers
- If you don't want to use pixel offsets but default back to using the
objects direction that behaviour is still preserved. Useful if your
object uses directional icon states(lights & cameras for now) AND don't
use offsets
- If no direction could be specified then as the last resort it defaults
back to the objects local turf for mounting
## Changelog
🆑
fix: all mounted objects on tables, fences, windows & walls should fall
of correctly when the atom it is placed on is destroyed
fix: security telescreen now falls off when their mounted wall is
destroyed
fix: defib wall mount falls off when their mounted wall is destroyed
fix: floor lights are mounted to the ground/catwalk/tram floor they are
sitting on meaning destroying it will destroy the light
fix: wall mounted plaques now fall off when their mounted wall is
destroyed
/🆑
## About The Pull Request
This PR adds a new gateway with not too much threat a, a little bit of
reward more often in the form of gimmicky items or armor.
credit to https://github.com/NovaSector/NovaSector/pull/4880
For the gun and sfx sprite
## Why It's Good For The Game
The gateway system is about as decrepit and old, the last gateway that
was added was the museum which was made by somebody who would short
after receive a rule 8 ban and plus that away mission is a neat scenery
and has a lot of cool locations to look at but it has no loot, and you
know what? that's okay and it achieves what it sets out to do
beautifully, but if we discount that one for that reason alone (which
for the record is a bad reason to discount something) then the last
gateway that was added and that stuck was added in 2018? and it was
snowdin? I dont actually know, correct me on this. But basically, more
content good.
## Changelog
<details>
<summary>Screenshots/Videos</summary>
<img width="862" height="431" alt="image"
src="https://github.com/user-attachments/assets/d56add04-4b8c-4cd0-be7f-36d895e43868"
/>
<img width="654" height="665" alt="image"
src="https://github.com/user-attachments/assets/1ccd15c4-5c31-4b00-b5f8-9a662efa3436"
/>
<img width="651" height="571" alt="image"
src="https://github.com/user-attachments/assets/08ab4c1d-d9d0-413c-bc02-a3c51eda8761"
/>
<img width="1177" height="172" alt="image"
src="https://github.com/user-attachments/assets/8df5e28d-5041-4676-8370-b8ab351f5b52"
/>
<img width="850" height="586" alt="image"
src="https://github.com/user-attachments/assets/c03e6cbe-b290-421e-bbed-80a203221de4"
/>
<img width="1248" height="912" alt="image"
src="https://github.com/user-attachments/assets/aa3c415d-52de-46b9-b317-e397b481b1b7"
/>
<img width="885" height="697" alt="image"
src="https://github.com/user-attachments/assets/dd96d364-deae-4c56-9fc1-68b5e738ef4a"
/>
<img width="1284" height="646" alt="image"
src="https://github.com/user-attachments/assets/b433f591-d92f-4bea-921c-b231fce2e7d9"
/>
also NO you cannot make the sm sword using the slow recharge shrink ray
<img width="621" height="240" alt="image"
src="https://github.com/user-attachments/assets/75f7d235-33c2-424e-9260-a3cc8c931ab9"
/>
</details>
<details>
<summary>Documentation of all notable loot 11/8/2025</summary>
/obj/item/clothing/shoes/gunboots/disabler
/obj/item/gun/energy/shrink_ray/one_shot (A shrink way that has a long
recharge time and can only shoot once)
/obj/item/slimepotion/lovepotion x 2
/obj/item/slimepotion/genderchange x 1
/obj/item/slimepotion/slime/mutator
/obj/item/gun/energy/disabler/smoothbore
/obj/item/gun/energy/alien/zeta
/obj/item/gun/magic/midas_hand
/obj/item/autosurgeon/xeno (A autosurgeon that only allows xenomorph
organs, here because it looks unique)
/obj/item/organ/heart/gland (abductor organs, random.)
/obj/item/organ/eyes/corrupt
/obj/item/organ/appendix/corrupt
/obj/item/clothing/suit/utility/radiation/cbrnsuit x 2
/obj/item/clothing/head/utility/radiation/cbrnhood x 2
/obj/item/clothing/gloves/combat x 4
/obj/item/clothing/shoes/combat/swat x 2
/obj/item/clothing/mask/gas/atmos/glass x 2
/obj/item/clothing/under/rank/engineering/atmospheric_technician/nova/utility/advanced
/obj/item/gun/ballistic/automatic/wt550/p90 x 2
/obj/item/ammo_box/magazine/p90_mag x 14
/obj/item/gun/energy/modular_laser_rifle/carbine x 2
/obj/effect/spawner/random/armory/laser_gun
/obj/item/grenade/c4 x 3
/obj/machinery/deployable_turret/hmg x 3 (you think these are good, but
they're not, they are really not, they're only good if you hit somebody
with them when they're not expecting it, otherwise people will simply
just avoid it, or if your being defensive of an area this thing will
have you just be a beast.)
/obj/machinery/mounted_machine_gun x 8 (But with no ammo, so theyre only
setpieces, okay well there IS ammo on the map but its anchored, and
theres no way to unanchor anchored items, if fallout thirteen players
cant do it over the course of 4 years then tg players sure cant.)
Also hello there it looks like you actually read this section, if you
have dont worry, this PR wont get merged, why? I dont want to salt about
that here.
</details>
🆑
map: added the "heretic" gateway map (it has nothing related to
heretics)
/🆑
## About The Pull Request
Extends the part of the crafting unit test that ensures consistency
between the total mats of the components of a recipe (or rather, the
result of said recipe) and a generic instance of the same type as its
result, previously only implemented on food recipes.
## Why It's Good For The Game
This ensures a degree of consistency with the material composition of
various objects in the game. I couldn't do it in the original PR as that
one was too big already and it took months to get it merged, and have
the relative bugs fixed.
Currently a WIP as I slowly deal with the unit test reports.
## Changelog
🆑
refactor: Follow-up to the crafting/material refactor from months ago.
All objects crafted with stacks now inherit their mat composition (not
necessarily the effects and color) by default, while previously only a
few things like chair, sinks and toilets did. Report any object looking
or behaving weirdly as a result.
fix: The material composition of ammo boxes is no longer a 1/10 of what
it's supposed to be. It was a shitty hack to make it harder to recycle
empty ammo boxes. Instead, they lose materials as they're emptied now.
/🆑
## About The Pull Request
Depends on #94064 for the unit test but offers a better method for
finding an atom to mount on
- Finding a mount now takes into consideration the objects pixel x & y
offsets meaning diagonal mounting is now supported. Gives great
flexibility for mappers
- If you don't want to use pixel offsets but default back to using the
objects direction that behaviour is still preserved. Useful if your
object uses directional icon states(lights & cameras for now) AND don't
use offsets
- If no direction could be specified then as the last resort it defaults
back to the objects local turf for mounting
## Changelog
🆑
fix: all mounted objects on tables, fences, windows & walls should fall
of correctly when the atom it is placed on is destroyed
fix: security telescreen now falls off when their mounted wall is
destroyed
fix: defib wall mount falls off when their mounted wall is destroyed
fix: floor lights are mounted to the ground/catwalk/tram floor they are
sitting on meaning destroying it will destroy the light
fix: wall mounted plaques now fall off when their mounted wall is
destroyed
/🆑
## About The Pull Request
This 1st has to be PR'd so the integration tests can point out all
wallmounts that could not find a support structure to mount on. I then
will do many map edits to align them onto the closest atom
Yes we no longer use wall mount but atom mounted component. All objects
that are mounted on windows/tables & fences now also fall off when
destroyed
It'll probably be a WHILE before I can fix all wall mounts. Long day.
Expect me to misalign many stuff to fix failing CI so make sure to
provide suggestions when possible
Improved wallmount code overall
- Fixes#93793
## Changelog
🆑
fix: fixes all incorrectly maploded wall mounts that aren't actually
hanging on any support structure
fix: objects mounted on tables, windows & fences also fall off now when
destoryed
qol: lights can be mounted on windows
qol: cameras can be mounted on windows
qol: buttons can be mounted on tables
refactor: improved how wall mounts interact with objects as a whole
report bugs on github
/🆑
## About The Pull Request
- Fixes#93392
- Replaces all custom callbacks with call to `deconstruct()`. The
callbacks weren't necessary as it did the same thing as `deconstruct()`
but in an round about way
- Removed duplicate `Initialize()` procs and the params `building` &
`ndir` from all wall mounts. Makes everything cleaner
## Changelog
🆑
fix: wall mounts placed by player now falls off when the wall they are
mounted on is destroyed
code: cleaned up wall mount code
/🆑
## About The Pull Request
The first argument of `Hear` is `message`, the message heard
OR SO YOU'D THINK
Actually the first argument doesn't do anything but get overridden by
ALL implementations of `Hear`
No other uses as far as I and Ephe can tell. Removing it makes it a ton
easier to understand and gives us some free performance in radio code by
not rendering messages twice
## Changelog
🆑 Melbert
code: Removed some redundant code from core hearing code. Report if you
hear anything weird.
/🆑
## About The Pull Request
Fixes Cyborgs not being able to interact with station intercoms Ai and
Humans
## Why It's Good For The Game
Seems like a bug no? Silicon Remote interaction should be the same for
Ai and Cyborgs.
## Changelog
🆑
fix: Intercomms work for Cyborgs
/🆑
## About The Pull Request
This PR fixes wrong usage of bitflags in a few places, where instead of
bitfields lists were used.
## Why It's Good For The Game
It will help prevent problems that can be a thing in the future,
improving consistency of the codebase.
## About The Pull Request
This PR fixes wrong usage of bitflags in a few places, where instead of
bitfields lists were used.
## Why It's Good For The Game
It will help prevent problems that can be a thing in the future,
improving consistency of the codebase.
## About The Pull Request
I have added the ability to create and edit station radio channels
through the existing telecommunications system.
You can change the name of the radio channel and its color.
The channel settings are changed and created through the servers
(Frequencies Settings)

Here i created my own channel:
1) Add frequency at Receiver (you will not see channel name):

2) Add frequency at Bus (you will not see channel name):

3) Add frequency at Server
4) Add settings for your frequency

5) See the result:

Important Notes:
1) Headsets, radios, and intercoms will not see a change in
telecommunications, but will use standard names (Common, Security etc.).
2) There are still reserved names that cannot be used: CentComm,
Syndicate, Uplink, CTFs channels
3) Servers must filter frequency for applying settings on them
## Why It's Good For The Game
Now telecommunication channels names and colors depends on the settings
of the network servers, which makes it more flexible and logical. It is
also useful for foreign language servers, as you can translate channel
names.
## Changelog
🆑
add: Added ability to change existing radio channels and create new
qol: Added color for some buttons in Telecomms UI
/🆑
(cherry picked from commit 35494b93bb)
## About The Pull Request
I have added the ability to create and edit station radio channels
through the existing telecommunications system.
You can change the name of the radio channel and its color.
The channel settings are changed and created through the servers
(Frequencies Settings)

Here i created my own channel:
1) Add frequency at Receiver (you will not see channel name):

2) Add frequency at Bus (you will not see channel name):

3) Add frequency at Server
4) Add settings for your frequency

5) See the result:

Important Notes:
1) Headsets, radios, and intercoms will not see a change in
telecommunications, but will use standard names (Common, Security etc.).
2) There are still reserved names that cannot be used: CentComm,
Syndicate, Uplink, CTFs channels
3) Servers must filter frequency for applying settings on them
## Why It's Good For The Game
Now telecommunication channels names and colors depends on the settings
of the network servers, which makes it more flexible and logical. It is
also useful for foreign language servers, as you can translate channel
names.
## Changelog
🆑
add: Added ability to change existing radio channels and create new
qol: Added color for some buttons in Telecomms UI
/🆑
Revival of https://github.com/tgstation/tgstation/pull/86482, which is
even more doable now that we have rustg iconforge generation.
What this PR does:
- Sets up every single GAGS icon in the game to have their own preview
icon autogenerated during compile. This is configurable to not run
during live. The icons are created in `icons/map_icons/..`
- This also has the side effect of providing accurate GAGS icons for
things like the loadout menu. No more having to create your own
previews.

<details><summary>Mappers rejoice!</summary>


</details>
<details><summary>Uses iconforge so it does not take up much time during
init</summary>

</details>
---
this still applies:
Note for Spriters:
After you've assigned the correct values to vars, you must run the game
through init on your local machine and commit the changes to the map
icon dmi files. Unit tests should catch all cases of forgetting to
assign the correct vars, or not running through init.
Note for Server Operators:
In order to not generate these icons on live I've added a new config
entry which should be disabled on live called GENERATE_ASSETS_IN_INIT in
the config.txt
No more error icons in SDMM and loadout.
🆑
refactor: preview icons for greyscale items are now automatically
generated, meaning you can see GAGS as they actually appear ingame while
mapping or viewing the loadout menu.
/🆑
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
## About The Pull Request
Revival of https://github.com/tgstation/tgstation/pull/86482, which is
even more doable now that we have rustg iconforge generation.
What this PR does:
- Sets up every single GAGS icon in the game to have their own preview
icon autogenerated during compile. This is configurable to not run
during live. The icons are created in `icons/map_icons/..`
- This also has the side effect of providing accurate GAGS icons for
things like the loadout menu. No more having to create your own
previews.

<details><summary>Mappers rejoice!</summary>


</details>
<details><summary>Uses iconforge so it does not take up much time during
init</summary>

</details>
---
### Copied from https://github.com/tgstation/tgstation/pull/86482 as
this still applies:
Note for Spriters:
After you've assigned the correct values to vars, you must run the game
through init on your local machine and commit the changes to the map
icon dmi files. Unit tests should catch all cases of forgetting to
assign the correct vars, or not running through init.
Note for Server Operators:
In order to not generate these icons on live I've added a new config
entry which should be disabled on live called GENERATE_ASSETS_IN_INIT in
the config.txt
## Why It's Good For The Game
No more error icons in SDMM and loadout.
## Changelog
🆑
refactor: preview icons for greyscale items are now automatically
generated, meaning you can see GAGS as they actually appear ingame while
mapping or viewing the loadout menu.
/🆑
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Melee attack chain now has a list passed along with it,
`attack_modifiers`, which you can stick force modifiers to change the
resulting attack
This is basically a soft implementation of damage packets until a more
definitive pr, but one that only applies to item attack chain, and not
unarmed attacks.
This change was done to facilitate a baton refactor - batons no longer
hack together their own attack chain, and are now integrated straight
into the real attack chain. This refactor itself was done because batons
don't send any attack signals, which has been annoying in the past (for
swing combat).
🆑 Melbert
refactor: Batons have been refactored again. Baton stuns now properly
count as an attack, when before it was a nothing. Report any oddities,
particularly in regards to harmbatonning vs normal batonning.
refactor: The method of adjusting item damage mid-attack has been
refactored - some affected items include the Nullblade and knives.
Report any strange happenings with damage numbers.
refactor: A few objects have been moved to the new interaction chain -
records consoles, mawed crucible, alien weeds and space vines, hedges,
restaurant portals, and some mobs - to name a few.
fix: Spears only deal bonus damage against secure lockers, not all
closet types (including crates)
/🆑
## About The Pull Request
Melee attack chain now has a list passed along with it,
`attack_modifiers`, which you can stick force modifiers to change the
resulting attack
This is basically a soft implementation of damage packets until a more
definitive pr, but one that only applies to item attack chain, and not
unarmed attacks.
This change was done to facilitate a baton refactor - batons no longer
hack together their own attack chain, and are now integrated straight
into the real attack chain. This refactor itself was done because batons
don't send any attack signals, which has been annoying in the past (for
swing combat).
## Changelog
🆑 Melbert
refactor: Batons have been refactored again. Baton stuns now properly
count as an attack, when before it was a nothing. Report any oddities,
particularly in regards to harmbatonning vs normal batonning.
refactor: The method of adjusting item damage mid-attack has been
refactored - some affected items include the Nullblade and knives.
Report any strange happenings with damage numbers.
refactor: A few objects have been moved to the new interaction chain -
records consoles, mawed crucible, alien weeds and space vines, hedges,
restaurant portals, and some mobs - to name a few.
fix: Spears only deal bonus damage against secure lockers, not all
closet types (including crates)
/🆑
People can now pet held mothroaches and pugs if they want to, or use
items on them, hopefully without causing many issues. After all, it only
took about a couple dozen lines of code to make...
...Oh, did the 527 files changed or the 850~ lines added/removed perhaps
catch your eye? Made you wonder if I accidentally pushed the wrong
branch? or skewed something up big time? Well, nuh uh. I just happen to
be fed up with the melee attack chain still using stringized params
instead of an array/list. It was frankly revolting to see how I'd have
had to otherwise call `list2params` for what I'm trying to accomplish
here, and make this PR another tessera to the immense stupidity of our
attack chain procs calling `params2list` over and over and over instead
of just using that one call instance from `ClickOn` as an argument. It's
2025, honey, wake up!
I also tried to replace some of those single letter vars/args but there
are just way too many of them.
Improving old code. And I want to be able to pet mobroaches while
holding them too.
🆑
qol: You can now interact with held mobs in more ways beside wearing
them.
/🆑
## About The Pull Request
Opinions aren't too strong about taking it out of the settings page, I
only did it cause settings doesn't auto update with the pref updating,
so I can put it back if wanted.
Adds a volume slider in radios which you can use to edit your own blip
volume, which then plays a blip back at you so you know what it sounds
like.
## Why It's Good For The Game
You now change the volume using the in-game item instead of having to
scroll through a bunch of settings and find it, and you get instant
feedback so you know exactly what it's gonna sound like.
https://github.com/user-attachments/assets/fe936ed8-9620-4e81-8782-e6fa99de100a
## Changelog
🆑
qol: Radios/headsets now have a slider to change the volume from radio
noises.
/🆑
Fixes#89445 (well, technically. It fixes the bug associated but these
`say`s should really be emotes.)
Three things:
1. Reworks how language translation works.
Rather than scrambling a sentence into a language entirely, sentences
are now scrambled on a per-word basis.
Additionally, the 1000 most common words of a language are *never*
re-scrambled across the duration of a round. Once it's set it's set in
stone.
Example: (Sample / Old / New)

This allows for a number of things:
- More consistent translations, making it (more) viable to actually
"teach" someone words for something
- Maintaining emphasis such as caps (but not `||`, `++`, or `__` - at
least not yet)
- The following:
2. Adds partial language understanding
Some languages can understand portions of other languages.

This pr adds the following:
- Those who understand Beachtongue can understand 50% of Common and 33%
of Uncommon words.
- Those who understand Common can understand 33% of Beachtongue and 20%
of Uncommon words.
- Those who understand Uncommon can understand 20% of Common and 20% of
Beachtongue words.
3. Bilingual quirk has been expanded to accomodate these changes.
There are now two more preferences:
- Language Speakable
- You can toggle this, so you only understand the language, rather than
understand AND speak.
- Language Skill
- If you choose to be unable to speak the language, you can set how much
of the language you can understand, down to 10%.
Playing around languages is fun, but due to the way our translation
works, ALL context is immediately lost for what the other person may be
saying.
If the other person is shouting in all caps? Output language is normal
chatting. This is lame!
Even if someone is unable to understand you, there's a LOT you can
convey just by how you speak, and getting that across in game is quite
difficult when all translations get mauled so badly.
So this changes that.
- Emphasis like caps lock is maintained, so you see someone shouting in
caps in a foreign language you can probably intuit something is wrong
(but not what is wrong!)
- Some languages can gleam bits of other languages, so you MIGHT be able
to pick out context if you pay close attention
- "Brother" languages will now feel more like "brothers" and not
completely divergent
- You can even "teach" someone words in your language - at least the
most common words! (Until next round)
🆑 Melbert
add: Languages can now have partial understanding of other languages.
More common English words are more likely to be mutually understood.
add: Those who understand Beachtongue can understand 50% of Common and
33% of Uncommon words.
add: Those who understand Common can understand 33% of Beachtongue and
20% of Uncommon words.
add: Those who understand Uncommon can understand 20% of Common and 20%
of Beachtongue words.
add: Bilingual quirk: You can now choose between being able to speak or
not speak the language
add: Bilingual quirk: You can now choose to have partial understanding
of your language, rather than full.
qol: If you speak in ALL CAPS in a foreign language, the translated
words will also be ALL CAPS.
qol: Many more forms of punctuation are now conveyed across
translations.
qol: The 1000 most common English words will now never be scrambled when
translating into other languages for the duration of the round. This
means you can actually "learn" some words if you are especially
attentive! (Until the next round at least)
refactor: Refactored language translations. Report if you see any super
odd looking translations.
fix: Force-says forcing you to speak common (such as cult invocations)
will now correctly force you to speak common (even if you don't know
common)
/🆑
## About The Pull Request
- adds silicon access to body controlled by an AI. This is done just by
adding a trait
- adds internal headset with same channels as AI has in its core
(including syndicate and special channels for special AIs)
- binary channel required some additional code to work properly for
carbons without binary key so I decided to also fix big bold text for
borg shells and for big brother. They all have big texts in binary. This
is done by adding new `TRAIT_LOUD_BINARY`
- turns out borg shells also lack loud mode for regular radio, so it is
added too
- ai also locks bodies for themselves the same way as they do with
shells, for consistency
## Why It's Good For The Game
While AIs losing their ability to listen radio when inside uplink brain
can provide so much needed human VS ai conflict (because AI ignored open
door request from that one assistant), it feels a bit unjustified. Same
reason for AI lacking its innate all-access while in carbon body. You
can still open doors for yourself by juggling between uplink brain and
your core so why bother people with additional clicks. It brings carbon
shell on par with silicon shells (and makes them superior cough cough)
## Changelog
🆑
balance: AI uplink brain now comes with built-in radio and free silicon
access for the AI to use
balance: AI entering uplink brain now locks it for themselves. You can
reinsert that brain to reset its controlling AI
fix: fixed AI borg shells and big brother not having loud binary. Now
they do.
/🆑
## About The Pull Request
Fixes#88353
The issue:
```
Say()
try_speak() // checks filter
say signal // modifies message to something blocked by the filter
radio() // checks filter, throws error!
```
The fix:
`talk_into_impl` now passes `ignore_spam = TRUE, filterproof = TRUE`.
This is fine because the only place this is invoked by **players** is
`say` which has already run these checks.
## Changelog
🆑 Melbert
fix: Trying to talk over the radio with a stammer will no longer
occasionally result in the IC chat filter blocking you
/🆑
## About The Pull Request
People can now pet held mothroaches and pugs if they want to, or use
items on them, hopefully without causing many issues. After all, it only
took about a couple dozen lines of code to make...
...Oh, did the 527 files changed or the 850~ lines added/removed perhaps
catch your eye? Made you wonder if I accidentally pushed the wrong
branch? or skewed something up big time? Well, nuh uh. I just happen to
be fed up with the melee attack chain still using stringized params
instead of an array/list. It was frankly revolting to see how I'd have
had to otherwise call `list2params` for what I'm trying to accomplish
here, and make this PR another tessera to the immense stupidity of our
attack chain procs calling `params2list` over and over and over instead
of just using that one call instance from `ClickOn` as an argument. It's
2025, honey, wake up!
I also tried to replace some of those single letter vars/args but there
are just way too many of them.
## Why It's Good For The Game
Improving old code. And I want to be able to pet mobroaches while
holding them too.
## Changelog
🆑
qol: You can now interact with held mobs in more ways beside wearing
them.
/🆑
## About The Pull Request
Opinions aren't too strong about taking it out of the settings page, I
only did it cause settings doesn't auto update with the pref updating,
so I can put it back if wanted.
Adds a volume slider in radios which you can use to edit your own blip
volume, which then plays a blip back at you so you know what it sounds
like.
## Why It's Good For The Game
You now change the volume using the in-game item instead of having to
scroll through a bunch of settings and find it, and you get instant
feedback so you know exactly what it's gonna sound like.
https://github.com/user-attachments/assets/fe936ed8-9620-4e81-8782-e6fa99de100a
## Changelog
🆑
qol: Radios/headsets now have a slider to change the volume from radio
noises.
/🆑
## About The Pull Request
Fixes#89445 (well, technically. It fixes the bug associated but these
`say`s should really be emotes.)
Three things:
1. Reworks how language translation works.
Rather than scrambling a sentence into a language entirely, sentences
are now scrambled on a per-word basis.
Additionally, the 1000 most common words of a language are *never*
re-scrambled across the duration of a round. Once it's set it's set in
stone.
Example: (Sample / Old / New)

This allows for a number of things:
- More consistent translations, making it (more) viable to actually
"teach" someone words for something
- Maintaining emphasis such as caps (but not `||`, `++`, or `__` - at
least not yet)
- The following:
2. Adds partial language understanding
Some languages can understand portions of other languages.

This pr adds the following:
- Those who understand Beachtongue can understand 50% of Common and 33%
of Uncommon words.
- Those who understand Common can understand 33% of Beachtongue and 20%
of Uncommon words.
- Those who understand Uncommon can understand 20% of Common and 20% of
Beachtongue words.
3. Bilingual quirk has been expanded to accomodate these changes.
There are now two more preferences:
- Language Speakable
- You can toggle this, so you only understand the language, rather than
understand AND speak.
- Language Skill
- If you choose to be unable to speak the language, you can set how much
of the language you can understand, down to 10%.
## Why It's Good For The Game
Playing around languages is fun, but due to the way our translation
works, ALL context is immediately lost for what the other person may be
saying.
If the other person is shouting in all caps? Output language is normal
chatting. This is lame!
Even if someone is unable to understand you, there's a LOT you can
convey just by how you speak, and getting that across in game is quite
difficult when all translations get mauled so badly.
So this changes that.
- Emphasis like caps lock is maintained, so you see someone shouting in
caps in a foreign language you can probably intuit something is wrong
(but not what is wrong!)
- Some languages can gleam bits of other languages, so you MIGHT be able
to pick out context if you pay close attention
- "Brother" languages will now feel more like "brothers" and not
completely divergent
- You can even "teach" someone words in your language - at least the
most common words! (Until next round)
## Changelog
🆑 Melbert
add: Languages can now have partial understanding of other languages.
More common English words are more likely to be mutually understood.
add: Those who understand Beachtongue can understand 50% of Common and
33% of Uncommon words.
add: Those who understand Common can understand 33% of Beachtongue and
20% of Uncommon words.
add: Those who understand Uncommon can understand 20% of Common and 20%
of Beachtongue words.
add: Bilingual quirk: You can now choose between being able to speak or
not speak the language
add: Bilingual quirk: You can now choose to have partial understanding
of your language, rather than full.
qol: If you speak in ALL CAPS in a foreign language, the translated
words will also be ALL CAPS.
qol: Many more forms of punctuation are now conveyed across
translations.
qol: The 1000 most common English words will now never be scrambled when
translating into other languages for the duration of the round. This
means you can actually "learn" some words if you are especially
attentive! (Until the next round at least)
refactor: Refactored language translations. Report if you see any super
odd looking translations.
fix: Force-says forcing you to speak common (such as cult invocations)
will now correctly force you to speak common (even if you don't know
common)
/🆑
## About The Pull Request
- adds silicon access to body controlled by an AI. This is done just by
adding a trait
- adds internal headset with same channels as AI has in its core
(including syndicate and special channels for special AIs)
- binary channel required some additional code to work properly for
carbons without binary key so I decided to also fix big bold text for
borg shells and for big brother. They all have big texts in binary. This
is done by adding new `TRAIT_LOUD_BINARY`
- turns out borg shells also lack loud mode for regular radio, so it is
added too
- ai also locks bodies for themselves the same way as they do with
shells, for consistency
## Why It's Good For The Game
While AIs losing their ability to listen radio when inside uplink brain
can provide so much needed human VS ai conflict (because AI ignored open
door request from that one assistant), it feels a bit unjustified. Same
reason for AI lacking its innate all-access while in carbon body. You
can still open doors for yourself by juggling between uplink brain and
your core so why bother people with additional clicks. It brings carbon
shell on par with silicon shells (and makes them superior cough cough)
## Changelog
🆑
balance: AI uplink brain now comes with built-in radio and free silicon
access for the AI to use
balance: AI entering uplink brain now locks it for themselves. You can
reinsert that brain to reset its controlling AI
fix: fixed AI borg shells and big brother not having loud binary. Now
they do.
/🆑
## About The Pull Request
Fixes#88353
The issue:
```
Say()
try_speak() // checks filter
say signal // modifies message to something blocked by the filter
radio() // checks filter, throws error!
```
The fix:
`talk_into_impl` now passes `ignore_spam = TRUE, filterproof = TRUE`.
This is fine because the only place this is invoked by **players** is
`say` which has already run these checks.
## Changelog
🆑 Melbert
fix: Trying to talk over the radio with a stammer will no longer
occasionally result in the IC chat filter blocking you
/🆑
## About The Pull Request
These didn't have a preview despite being used in crafting, which caused
constant runtimes on roundstart.
## Changelog
🆑
fix: Fixed encryption keys in makeshift jammer crafting recipes not
having an icon.
/🆑
## About The Pull Request
Added an headset subtype for ERT leaders. The only difference is the
high-volume mode
Also fixed the fact that Deathsquad Officer spawns with
`/datum/outfit/centcom/death_commando` instead of
`/datum/outfit/centcom/death_commando/officer`
## Why It's Good For The Game
The messages of ERT leaders will have better visibility in chat
## Changelog
🆑
qol: ERT leaders now have a headset with high-volume mode
fix: Deathsquad Officer will now have proper outfit
/🆑
## About The Pull Request
Closes#89553 as aftermath of #89274 changing radio interaction to
item_interaction despite radios still using attackby
Also converted them to balloon alerts, cleaned up the code and made
removing the key put it into user's offhand instead of dropping it on
the ground.
## Changelog
🆑
fix: Fixes borgs not accepting encryption keys
qol: Borg encryption key interactions now use balloon alerts, and
popping out a key puts it in your hands instead of dropping it on the
ground.
/🆑