From b31747ca49bbfaeb029a68fd76f40dae371195db Mon Sep 17 00:00:00 2001 From: rebaserHEAD <38984539+rebaserHEAD@users.noreply.github.com> Date: Mon, 3 Aug 2026 23:36:25 -0400 Subject: [PATCH 1/2] Add TriTalk PDA messenger, ported from Delta-V NanoChat Ports Delta-V's NanoChat cartridge and rebrands it to TriTalk. Delivery is map-scoped: the cartridge carries ActiveRadio on Common and goes through RadioSendAttemptEvent, RadioReceiveAttemptEvent and HasActiveServer, so message reach is identical to headset reach. Ships already carry telecomms servers and FTL with them, which makes a ship its own relay. C# namespaces and class names stay NanoChat* under _DV/ so future Delta-V merges land mechanically. Everything a player sees is rebranded through locale values and prototype ids. Upstream files touched, all marked: - CartridgeLoaderSystem: ActiveProgramChangedEvent, needed by background programs - RadioSystem: HasActiveServer made public - LogType: TriTalk = 12500 - NameIdentifierSystem: new ReleaseUniqueName - LogProbe: scans a card for its message history instead of access logs - ContentKeyFunctions, keybinds, rebind tab: conversation cycling Admin logging diverges from upstream on purpose. All five call sites use LogType.TriTalk so one filter covers the app including the microwave lines, the send log records the acting player as well as the card (upstream logs only the card, which has no ActorComponent, so the row lands with no player attached and is invisible to a player filter), and contact relabelling is now logged. Two number-pool fixes this fork needs and Delta-V does not. Numbers are returned to the pool on card shutdown, since ships are bought and sold all round and each sale would otherwise drain the pool permanently. And an exhausted pool no longer assigns the silent 0 fallback, which would give every later card #0000 and cross-deliver their messages; minValue is 1 so the sentinel is unambiguous. Sprites are from Delta-V by kushbreth, CC-BY-SA-3.0 and CC0, attributed in the RSI metas. --- .../CartridgeLoader/Cartridges/LogProbeUi.cs | 2 +- .../Cartridges/LogProbeUiFragment.xaml | 22 +- .../Cartridges/LogProbeUiFragment.xaml.cs | 107 ++- .../Options/UI/Tabs/KeyRebindTab.xaml.cs | 8 + .../Cartridges/EditChatPopup.xaml | 53 ++ .../Cartridges/EditChatPopup.xaml.cs | 109 +++ .../Cartridges/NanoChatEntry.xaml | 48 ++ .../Cartridges/NanoChatEntry.xaml.cs | 50 ++ .../Cartridges/NanoChatLogEntry.xaml | 21 + .../Cartridges/NanoChatLogEntry.xaml.cs | 17 + .../Cartridges/NanoChatLookupView.xaml | 14 + .../Cartridges/NanoChatLookupView.xaml.cs | 86 ++ .../Cartridges/NanoChatMessageBubble.xaml | 55 ++ .../Cartridges/NanoChatMessageBubble.xaml.cs | 63 ++ .../CartridgeLoader/Cartridges/NanoChatUi.cs | 43 + .../Cartridges/NanoChatUiFragment.xaml | 221 +++++ .../Cartridges/NanoChatUiFragment.xaml.cs | 395 +++++++++ .../Cartridges/NewChatPopup.xaml | 52 ++ .../Cartridges/NewChatPopup.xaml.cs | 99 +++ Content.Client/_DV/NanoChat/NanoChatSystem.cs | 5 + .../CartridgeLoader/CartridgeLoaderSystem.cs | 19 + .../Cartridges/LogProbeCartridgeComponent.cs | 9 + .../Cartridges/LogProbeCartridgeSystem.cs | 17 +- .../NameIdentifier/NameIdentifierSystem.cs | 26 + .../Radio/EntitySystems/RadioSystem.cs | 2 +- .../LogProbeCartridgeSystem.NanoChat.cs | 84 ++ .../Cartridges/NanoChatCartridgeComponent.cs | 20 + .../Cartridges/NanoChatCartridgeSystem.cs | 771 ++++++++++++++++++ Content.Server/_DV/NanoChat/NanoChatSystem.cs | 178 ++++ Content.Shared.Database/LogType.cs | 8 + .../Cartridges/LogProbeUiState.cs | 11 +- Content.Shared/Input/ContentKeyFunctions.cs | 7 + .../Cartridges/NanoChatUiMessageEvent.cs | 171 ++++ .../Cartridges/NanoChatUiState.cs | 39 + .../_DV/NanoChat/NanoChatCardComponent.cs | 77 ++ .../_DV/NanoChat/SharedNanoChatSystem.cs | 330 ++++++++ .../en-US/_DV/cartridge-loader/cartridges.ftl | 36 + .../components/nanochat-card-component.ftl | 9 + .../en-US/cartridge-loader/cartridges.ftl | 10 + .../en-US/escape-menu/ui/options-menu.ftl | 8 + .../Entities/Objects/Devices/pda.yml | 1 + .../Objects/Misc/identification_cards.yml | 10 + .../Entities/Objects/Devices/cartridges.yml | 27 + .../Prototypes/name_identifier_groups.yml | 8 + .../_DV/Misc/program_icons.rsi/meta.json | 14 + .../_DV/Misc/program_icons.rsi/nanochat.png | Bin 0 -> 725 bytes .../Devices/cartridge.rsi/cart-chat.png | Bin 0 -> 419 bytes .../Objects/Devices/cartridge.rsi/meta.json | 5 +- Resources/keybinds.yml | 21 + 49 files changed, 3372 insertions(+), 16 deletions(-) create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/EditChatPopup.xaml create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/EditChatPopup.xaml.cs create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatEntry.xaml create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatEntry.xaml.cs create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatLogEntry.xaml create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatLogEntry.xaml.cs create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatLookupView.xaml create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatLookupView.xaml.cs create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatMessageBubble.xaml create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatMessageBubble.xaml.cs create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatUi.cs create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatUiFragment.xaml create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/NanoChatUiFragment.xaml.cs create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/NewChatPopup.xaml create mode 100644 Content.Client/_DV/CartridgeLoader/Cartridges/NewChatPopup.xaml.cs create mode 100644 Content.Client/_DV/NanoChat/NanoChatSystem.cs create mode 100644 Content.Server/_DV/CartridgeLoader/Cartridges/LogProbeCartridgeSystem.NanoChat.cs create mode 100644 Content.Server/_DV/CartridgeLoader/Cartridges/NanoChatCartridgeComponent.cs create mode 100644 Content.Server/_DV/CartridgeLoader/Cartridges/NanoChatCartridgeSystem.cs create mode 100644 Content.Server/_DV/NanoChat/NanoChatSystem.cs create mode 100644 Content.Shared/_DV/CartridgeLoader/Cartridges/NanoChatUiMessageEvent.cs create mode 100644 Content.Shared/_DV/CartridgeLoader/Cartridges/NanoChatUiState.cs create mode 100644 Content.Shared/_DV/NanoChat/NanoChatCardComponent.cs create mode 100644 Content.Shared/_DV/NanoChat/SharedNanoChatSystem.cs create mode 100644 Resources/Locale/en-US/_DV/nanochat/components/nanochat-card-component.ftl create mode 100644 Resources/Textures/_DV/Misc/program_icons.rsi/meta.json create mode 100644 Resources/Textures/_DV/Misc/program_icons.rsi/nanochat.png create mode 100644 Resources/Textures/_DV/Objects/Devices/cartridge.rsi/cart-chat.png diff --git a/Content.Client/CartridgeLoader/Cartridges/LogProbeUi.cs b/Content.Client/CartridgeLoader/Cartridges/LogProbeUi.cs index 12b678d5d47..9b403b57dca 100644 --- a/Content.Client/CartridgeLoader/Cartridges/LogProbeUi.cs +++ b/Content.Client/CartridgeLoader/Cartridges/LogProbeUi.cs @@ -31,6 +31,6 @@ public override void UpdateState(BoundUserInterfaceState state) if (state is not LogProbeUiState cast) return; - _fragment?.UpdateState(cast.EntityName, cast.PulledLogs); + _fragment?.UpdateState(cast); // Triad: pass the whole state so the fragment can render TriTalk scans too } } diff --git a/Content.Client/CartridgeLoader/Cartridges/LogProbeUiFragment.xaml b/Content.Client/CartridgeLoader/Cartridges/LogProbeUiFragment.xaml index cdbaf7d6ee7..5efd4583278 100644 --- a/Content.Client/CartridgeLoader/Cartridges/LogProbeUiFragment.xaml +++ b/Content.Client/CartridgeLoader/Cartridges/LogProbeUiFragment.xaml @@ -9,11 +9,25 @@ BorderColor="#5a5a5a" BorderThickness="0 0 0 1"/> - -