Skip to content

Radio Emotes + Possessive Emotes - #463

Open
nanbyt wants to merge 7 commits into
Triad-Sector:mainfrom
nanbyt:Radio-Emotes
Open

Radio Emotes + Possessive Emotes#463
nanbyt wants to merge 7 commits into
Triad-Sector:mainfrom
nanbyt:Radio-Emotes

Conversation

@nanbyt

@nanbyt nanbyt commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

About the PR

Cherypicked the ability to send emotes over radio, as well as emoting possessively without being spaced weird, from Delta-V
This also adds "?" as shorthand for "looks confused"

Why / Balance

Must miao on radio,,,

Media

Image from original.
image
Demonstration video from original.
https://github.com/user-attachments/assets/e070d97f-12c3-4042-8a36-f6bab7d00199

Requirements

  • I have read relevant guidelines/documentation to this PR found on our devwiki.
  • I have added media to this PR or it does not require an ingame showcase.
  • I can confirm this PR contains either no AI-generated content, or AI-generated content that meets our guidelines.

How to test

Emote over radio using @![radio prefix] ex, @!; or @!:d
Emote possessively using @' ("s" not needed, or else youll look a fool)

Breaking changes

I have touched the forbidden chat code..

Changelog

🆑

  • add: ability to emote over radio using @![radio channel]
  • add: ability to emote possessively using @'
  • add: "?" shorthand emote for "looks confused"

Utmanarn and others added 3 commits August 2, 2026 22:57
* Changed up how emoting works

This was a long 10 hours just to get the chat to behave slightly different.

At least we can now scream over radio!

Will most definitely need some more work to get bugs out since this is the first implementation.

* Not ok

This was unmarked for some reason... I don't remember unmarking this.

* DeltaV comments

Added comments to explain changes.

Moved localization files to the _DV folder.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Moved code

Moved code to more suitable files and added some comments.

* Rights for robots

Now those with intrinsic radios can also emote!

* Fixes up some small stuff

Changes to fix some small issues with the code to align it more with modern standards.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Fix by-ref event

Never worked with this event type before so gonna hope this works.

* Update Content.Shared/Chat/SharedChatSystem.Emote.cs

Signed-off-by: pathetic meowmeow <uhhadd@gmail.com>

* Update Content.Shared/Chat/SharedChatSystem.cs

Signed-off-by: pathetic meowmeow <uhhadd@gmail.com>

* Update Content.Server/Chat/Systems/ChatSystem.cs

Signed-off-by: pathetic meowmeow <uhhadd@gmail.com>

* fix style nits

* remove conflicting chatsan

---------

Signed-off-by: pathetic meowmeow <uhhadd@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>
* Changed up how emoting works

This was a long 10 hours just to get the chat to behave slightly different.

At least we can now scream over radio!

Will most definitely need some more work to get bugs out since this is the first implementation.

* Not ok

This was unmarked for some reason... I don't remember unmarking this.

* DeltaV comments

Added comments to explain changes.

Moved localization files to the _DV folder.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Moved code

Moved code to more suitable files and added some comments.

* Rights for robots

Now those with intrinsic radios can also emote!

* Fixes up some small stuff

Changes to fix some small issues with the code to align it more with modern standards.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Fix by-ref event

Never worked with this event type before so gonna hope this works.

* Update Content.Shared/Chat/SharedChatSystem.Emote.cs

Signed-off-by: pathetic meowmeow <uhhadd@gmail.com>

* Update Content.Shared/Chat/SharedChatSystem.cs

Signed-off-by: pathetic meowmeow <uhhadd@gmail.com>

* Update Content.Server/Chat/Systems/ChatSystem.cs

Signed-off-by: pathetic meowmeow <uhhadd@gmail.com>

* fix style nits

* remove conflicting chatsan

---------

Signed-off-by: pathetic meowmeow <uhhadd@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>
@github-actions github-actions Bot added S: Untriaged size/M C# FTL Changes to localization files and removed S: Untriaged size/M labels Aug 4, 2026
mnva0
mnva0 previously requested changes Aug 5, 2026

@mnva0 mnva0 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry if a review took a while. I had a look through every file and found some little things. I would've done a more thorough review but I'll leave that to the other maintainers who know C# better than me

Comment thread Resources/Locale/en-US/_DV/headset/headset-component.ftl Outdated
Comment thread Content.Server/Radio/EntitySystems/RadioSystem.cs Outdated
Comment thread Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs Outdated
@nanbyt

nanbyt commented Aug 6, 2026

Copy link
Copy Markdown
Contributor Author

Kaay! Removed extra lines and nittypicked the line commets

@mnva0
mnva0 dismissed their stale review August 6, 2026 12:44

Splendid! Thank you

@rebaserHEAD rebaserHEAD left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Needs some work and then a final review. Thanks for your efforts on this one! Chat is a real pain.

Comment thread Content.Shared/Chat/SharedChatSystem.Emote.cs
Comment thread Content.Server/Radio/EntitySystems/HeadsetSystem.cs Outdated
}

// DeltaV
private void OnIntrinsicAudibleEmote(EntityUid uid, IntrinsicRadioTransmitterComponent component, EntityAudiblyEmotedEvent args)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Needs ref too, or it reads a stale copy once the headset handler starts nulling the channel correctly.

Suggested change
private void OnIntrinsicAudibleEmote(EntityUid uid, IntrinsicRadioTransmitterComponent component, EntityAudiblyEmotedEvent args)
private void OnIntrinsicAudibleEmote(EntityUid uid, IntrinsicRadioTransmitterComponent component, ref EntityAudiblyEmotedEvent args)

Comment on lines +212 to +216
// Triad - Prevent speaking emotes
if (args.emType == EmoteType.Audible || args.emType == EmoteType.AudiblePossessive)
{_chat.TrySendInGameICMessage(uid, message, InGameICChatType.Emote, ChatTransmitRange.GhostRangeLimitNoAdminCheck,
nameOverride: name, checkRadioPrefix: false, languageOverride: args.Language);
return;}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Brace style, and this re-emits through the plain emote wrap so a possessive emote loses its 's when it comes out of a speaker. Fine to leave the fidelity bit, but the braces should go.

Suggested change
// Triad - Prevent speaking emotes
if (args.emType == EmoteType.Audible || args.emType == EmoteType.AudiblePossessive)
{_chat.TrySendInGameICMessage(uid, message, InGameICChatType.Emote, ChatTransmitRange.GhostRangeLimitNoAdminCheck,
nameOverride: name, checkRadioPrefix: false, languageOverride: args.Language);
return;}
// Triad - Prevent speaking emotes
if (args.emType == EmoteType.Audible || args.emType == EmoteType.AudiblePossessive)
{
_chat.TrySendInGameICMessage(uid, message, InGameICChatType.Emote, ChatTransmitRange.GhostRangeLimitNoAdminCheck,
nameOverride: name, checkRadioPrefix: false, languageOverride: args.Language);
return;
}

Comment on lines +65 to +72
// if (!TryComp<HandsComponent>(uid, out var hands) || hands.Count < 1 ||
// TryComp<CuffableComponent>(uid, out var cuffable) && _cuffable.IsCuffed((uid, cuffable)))
// {
// _popup.PopupEntity(Loc.GetString("headset-cant-reach"), uid, uid, PopupType.SmallCaution);
// return false;
// }

return true;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dead block. If the reach check isn't wanted here, drop it rather than carrying commented DeltaV code we never ran. The "comment it out" rule is for upstream code we're diverging from, not for incoming ports.

Suggested change
// if (!TryComp<HandsComponent>(uid, out var hands) || hands.Count < 1 ||
// TryComp<CuffableComponent>(uid, out var cuffable) && _cuffable.IsCuffed((uid, cuffable)))
// {
// _popup.PopupEntity(Loc.GetString("headset-cant-reach"), uid, uid, PopupType.SmallCaution);
// return false;
// }
return true;
return true;

Comment thread Content.Server/Radio/RadioEvent.cs Outdated
Comment on lines +20 to +21
EntityUid RadioSource,
EmoteType? emType //Triad

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Positional record members should be PascalCase, and this one is public API that other systems now read.

Suggested change
EntityUid RadioSource,
EmoteType? emType //Triad
EntityUid RadioSource,
EmoteType? EmType //Triad

Call sites to follow: args.emType in RadioDeviceSystem.OnReceiveRadio.

@nanbyt

nanbyt commented Aug 10, 2026

Copy link
Copy Markdown
Contributor Author

Gulp, hopefully I didnt break anything. >< Thanks for catching the oopsies

@mnva0 mnva0 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GitHub is still saying I need to review this but I already did a very basic review (unless my review was requested again somewhere I couldn't see?). I am commenting this in an attempt to make GitHub realize the fact I have reviewed this

@nanbyt
nanbyt requested a review from rebaserHEAD August 11, 2026 03:41
Co-authored-by: rebaserHEAD <38984539+rebaserHEAD@users.noreply.github.com>
@nanbyt
nanbyt requested a review from mnva0 August 26, 2026 06:39

@mnva0 mnva0 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure why my review was rerequested, but I had a quick look through again. Looks fine minor-nitpickwise to me from my extremely superficial review, but I'm unqualified to review C# PRs

@rebaserHEAD

Copy link
Copy Markdown
Collaborator

First, sorry for the slow roll on this. I appreciate your patience while I was working on a few other things.

Secondly, I will say after considering this for a bit, that it's a bit odd to be able to emote over the radio which implies it's audio based in game. I might have a bit of a discussion with the other maintainers to chew this over. I'm on the fence with it leaning towards "No" but I can be convinced otherwise.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

C# FTL Changes to localization files S: Needs Review size/M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants