WinryChat 1.5 | Open-Source Multi-Platform Chat UI for TextChatService

29-01-25 Hotfix - WinryChat 1.3.1

We noticed during testing of Teensy Tiny Tankery and Outpost Gambit that the floodchecked message was absent by mistake. This has been added in while we’re looking into Controller Support. The controller support feature set is a necessary feature we need for our titles as well, so it is a top-priority task.

:raised_back_of_hand: :neutral_face: :raised_hand:

:fire: ABSOLUTE :fire: CINEMA. :fire:

Winry Chat - Update Log for Version 1.4

After the hotfix dropped, we got to work straight away on the newest version. There are a list of features we’re looking to include over time, as and when possible. This release focuses on Gamepad Support and an Integrated On-Screen-Keyboard for testing and devices that don’t have an on-screen keyboard.

We’re also deprecating the GetKeyCodeIdAsEnumValue(number) function, as we noticed there is a workaround with the Studio Command Bar to set Enum attributes to scripts. While we do intend to remove this function later, it will still be made available to developers who wish to use this function for the time-being.

This update matters on a personal level too. During my studies at university, I developed a plethora of custom tools for Unity Engine and Unreal Engine that allowed for better Controller/Gamepad support. Some of which are open-source to this day. By adding this support for gamepads, we hope to expand the accessibility of ROBLOX’s Chat System for platforms that otherwise may not be able to use it. Unfortunately, we can’t do this for PlatformChat or ROBLOX’s integrated features.


New Features


  • Gamepad Support for XBOX, PlayStation and Nintendo Switch accessories. We see you, console gamers!

  • WINRY VIRTUAL KEYBOARD - An Integrated On-Screen Keyboard for all platforms. This has primarily been designed for ROBLOX Studio, ROBLOX for Desktop (UWP) and ROBLOX for 64-bit Windows, however, it should work for all paltforms regardless. Instead of this just being an integrated UI, you will be able to copy this new On-Screen Keyboard independently of WinryChat and adapt it to your own works.

Official XBOX, PlayStation and Nintendo Switch Pro Controllers have been tested with this, and work as intended. If unexpected behaviour is encountered, please report the full accessory title and encountered behaviour.


New Settings (Attributes)


FocusChatKeyCode : Enum.KeyCode
Changes the keyboard button used for focusing chat. Default: Enum.KeyCode.Slash

GamepadFocusChatKeyCode : Enum.KeyCode
Changes the keyboard button used for focusing chat. Requires GamepadSupportEnabled to be true to have an effect. Default: Enum.KeyCode.DPadUp

ToggleChatVisibilityKeyCode : Enum.KeyCode
Changes the keyboard button used for showing and hiding chat. Default: Enum.KeyCode.DpadDown

GamepadToggleChatVisibilityKeyCode : Enum.KeyCode
Changes the keyboard button used for showing and hiding chat. Default: Enum.KeyCode.DpadUp

GamepadSupportEnabled : boolean
Whether Gamepad Support is enabled for the WinryChat UI. Includes built-in UI Focus Navigation support. Default: true


Changes


  • FocusChatKeyCodeId has been removed and replaced with FocusChatKeyCode, an attribute with the type Enum.KeyCode.
  • GetKeyCodeIdAsEnumValue(number) now marked as DEPRECATED.
  • The placeholder text for the Text Input Field now uses UserInputService:GetStringForKeyCode(Enum.KeyCode) instead of the “Name” property of an Enum.KeyCode value.
  • Placeholder text for the Text Input Field now automatically changes it’s wording depending on if the player is using a Gamepad or Keyboard and Mouse.

Closing Notes


This was a triumph. I’m making a note here, huge success. It’s hard to overstate my satisfaction…
Seriously. I stumbled upon GuiService looking for something else 7 hours ago now… wrote this update devlog as I was going along and now we’re at release at 4:10 AM GMT on 31/01/25. I spent the best part of 7 hours designing, debugging and polishing an on-screen keyboard for everyone to enjoy. And big note!

We’ll be Open-Sourcing Winry Virtual Keyboard soon after on it’s own for developers to use in their experiences, but it’s shipping with WinryChat 1.4 first. This virtual keyboard has Mouse support as well, but works independently of your keyboard. It also resizes based on your screen size!

All completely for free, and it will follow the same NO-ATTRIBUTION License as WinryChat does!

Winry Virtual Keyboard can be found alongside Winry Chat as “OnScreenKeyboard”.

Example Images - WinryVirtualKeyboard

image


Lastly. You will be able to have this designed entirely to your preferences too… Though neon pink is not recommended and is for demonstration purposes only.

image

Finally, console chat!! One feature I would suggest is “Chat templates” for console users (as typing out messages manually is very tedious…)

How it would work is that console players would type out their chat template message, then store it somewhere as a clickable button (maybe on the right side of the screen? It’s pretty empty), and when they click that button they’ll chat out the full premade message!

Maybe the premade messages should also be saved inside of a datastore, because manually retyping them everytime you join can be tedious too xd

1 Like

I ran into this too during testing, while trying to do the Still Alive song in portal as a test. The scope of WinryChat and WinryVirtualKeyboard are client-sided only, so I can’t exactly add data-store related features to the system.

However, if you and other console users have examples of frequent messages and phrases you’d like to be able to type out with a drop-down menu, I’d be more than happy to build them into WinryChat alongside any feature requests for WinryVirtualKeyboard.

Accessibility matters, and so does socialising with your friends!

Ahh, that’s right… client sided only…

Instead, I was thinking maybe you can instead add some kinda dropdown menu for commonly used words (word shortcuts), where if you type a letter into the chat box it’ll show commonly used words starting with that letter (or those letters), and if you click one it’ll add it to your chat box (This way it’s still quite fast without having to type out entire sentences you want to use)

Here are some common words I can think of that can be used in basically every game:

“Yes”
“No”
“What”
“Why”
“Don’t”
“Do”
“Where”
“For”
“Some”
“Reason”
“How”
“When”
“Ah”
“So”
“That”
“This”
“In”
“Out”
“Side”
“Game”
“Leave”
“Join”
“Friend”
etc…

Honestly this is very similar to how the PS4 virtual keyboard works and I use it alot and it’s very fast

1 Like

This will definitely be in for WinryChat 1.5.

WinryChat 1.4 was created in a very spur-of-the-moment atmosphere where I found a part of ROBLOX I never knew existed (GuiService) and ran for the hills with it, as far as I could go. I didn’t even know there wasn’t a console chat. I wanted to make it so that players with accessibility controllers (like the XBOX Adaptive Controller) on PC could socialise with everyone else.

This would be a great feature to enhance communication skills for everyone with a controller, so expect it to come out soon too.

1 Like

01-02-25 Hotfix - WinryChat 1.4.1

Following a day-one patch to WinryVirtualKeyboard, we have also migrated the changes to WinryChat 1.4 and fixed a few issues that the chat system was running into with Gamepad Inputs. Here are a list of fixes:

  • When interacting with “Enter” on the keyboard, players will no longer experience an issue where the keyboard will be stuck as hidden due to the TextBox/TextField not releasing focus properly. The text field now summons the keyboard again if it’s already in focus.

  • The Virtual Keyboard now displays gamepad hints by default.

  • Players are now able to exit out of the keyboard via their gamepad. (This is a fix to WinryVirtualKeyboard directly, but exists because of WinryChat).

1 Like

Good news, these features are being added now. They will be available as part of WinryChat 1.5.
The main features are:


Settings As Lua Module
While the current layout of settings as a module is somewhat crude and will be modified, all existing attributes have been added to the new list. I am planning on integrating the API documentation into this script as well.

To enable settings, an attribute exists as part of the module. However, you can forego this and just mark the value as “true” directly.
image


Drag-and-Drop Themes
Drag-and-Drop themes are a… difficult task. However, I did figure out a way to add them safely and resolve any conflicts from objects changing unexpectedly.

For a theme to be generally guaranteed to work, this will involve copying and modifying the existing GuiObjects and templates from inside the ChatUI CanvasGroup and the WinryTextChatManager script. The only things that shouldn’t change are the objects that are already there and their hierarchy, but other than that you can add, decorate and rearrange the ZIndex of everything to be however you want.

New Chat Theme Function

An example bubbly-theme is being included, though it’s not enabled by default.

There are plans to allow for theme module-scripts that let theme developers script functions for if there’s a disabled/enabled attribute, like if DragCornersEnabled is false. That way, the DragCorner can be hidden and result in the InputArea being resized to fit the now empty space.

This feature will also make it’s way to WinryVirtualKeyboard when there are no more object restructures in the works.


Assistive Typing Results for WinryVirtualKeyboard + Backspace Support for Selected Word Suggestion

There are plans in early production (no images yet) to contain a dictionary built into WVK of common words used for sending chat messages and making sentences, as well as support for using backspace to remove the last word selected from the suggestion. Hopefully (and very likely), it will be possible to make it so you go back to the incomplete word and suggestions list instead of going through the full process of retyping the word from scratch.

While I have been made aware that Console Chat is coming to consoles sometime this month or next month, I’m not particularly worried of it making WVK obsolete. There may be developers who would want to make use of a custom virtual keyboard instead, one they can decorate and change the language of to fit their needs.

1 Like

Progress on WinryChat 1.5 and WinryVirtualKeyboard 1.2 are ongoing. Setting up a portfolio website has been taking a bit of time on it’s own, but another fraction has been looking at how developers are customizing the default chat and making their own variations.

To help developers get the most out of WinryChat, we’re adding two new features for UI Design support.


Input Area Only UI

I’ve been experiencing a variety of games on the ROBLOX platform to get an idea of the many modifications and changes that developers make to their chat systems. Notably, some Social Games disable the chat view and showcase the input area alone. (Image taken from Habitat 84).

WinryChat 1.5 will be adding support for this style of text chat, with the ability for players to select specific text channels to broadcast in. This feature will also work with custom themes.

Default Dark Mode:

Custom Theme:


Theme Behaviour Modules

Another important aspect of a theme is making sure you can do your own things, namely, have extravagant design features that work specifically with how you want the UI to adapt to changed settings. For this, a module script named BehaviourModule can be added to your themes.

To make a function that will be bound to a given setting, you need to define a function that takes two arguments:

  • settingValue - Can be given a strict type of the same as the setting being bound to.
  • ChatUI - The ChatUI itself, which gets passed into the function so that you can change the appearance and design dynamically.

Each function should be assigned to a string-key named after the setting you wish to react to. WinryChat will handle the rest!

Example: Bubbly Theme Behaviour Module


WinryChat 1.5 will be released on the marketplace once the Auto-typing feature is in, as that was promised above.

Console development guidelines | Documentation - Roblox Creator Hub.

Should be noted that the Chat Ui should be disabled for console devices, the gamepad support is useful for players using controllers whilst on pc/ mobile though.

1 Like

WinryChat itself will remain supportive of console controllers, however, that is up to the discretion of the developer and not the maintainer for whether or not they try put it on Console. We’d recommend waiting for ROBLOX to officially condone it.

Considering ROBLOX itself is working on Console Chat, that guideline is going to be up in the air from then-on. I personally use this controller support for testing development.

See: Creator Roadmap 2024: End of Year Recap - Updates / Announcements - Developer Forum | Roblox

1 Like

A quick update on this - the last one before release. We’ve got auto-suggestions built in and region files, as well as Parallel Luau being used for text filtering. WinryVirtualKeyboard 1.2 is going to be big enough as an update all on it’s own, let alone the changes to WinryChat 1.5.

This has been one of the most taxing updates in terms of making everything work relatively seamlessly, so expect hotfixes if anything’s even remotely off.

Right now, for testing, the dictionary for [EN-US] contains:

  • Your suggestions
  • words that I can think of off the top of my head for general conversation (do, doing, can, can’t, etc)
  • random words suitable for all audiences that I can think of from the english language (in terms of context)
  • The Radiotelephony Spelling Alphabet (Alpha/Bravo/Charlie/Echo…) *minus one due to it being informal slang
An excerpt of it

We’re in testing right now, so the word-bank is wholesale incomplete and being tested with phrases and sentences. I’ll also be contacting a good friend (a writer) to get help with parsing useful and useless words, as well as helpful and unhelpful suggestions.

We’ll be looking at implementing algorithms using n-grams in parallel luau (2-gram/3-gram/4-gram) for WinryVirtualKeyboard 1.3, once we have a complete dictionary. The forum post at the top (OP) will be redone with graphics too.

2 Likes

Winry Chat - Update Log for Version 1.5

After 3 weeks of development, testing and proofreading… this latest update brings several improvements and changes to the Chat UI. Of course, this update log will follow up with a complete redesign of the original forum post.

Previously, updates were shipped in about 48 hours. Hotfixes in about an hour at most after the original issue was found. 1.5 was a harder and longer process due to several factors, including a rework of how features will be added in the future. This will also include Creator Marketplace releases of WinryChat 1.5 and WinryVirtualKeyboard 1.2.

Due to the limitations of an update log’s visibility, the main post will also be updated with instructions on how to use certain features as well within the next 24 hours. (We also need to design brand-new SVG assets for the main post.)


Highlights


  • Drag & Drop Theming
    An example theme - Bubbly Theme - is provided by default, including Luau Documentation and examples of all features.

  • Keyboard Suggestions via Dictionary
    As part of the update to WinryChat, WinryVirtualKeyboard 1.2 includes a complete rework with an EN-US Dictionary. The initial version of our EN-US dictionary has been a collaboration with @Ebonhelm to ensure that appropriate suggestions are given for an all-ages audience.

  • Chat Settings - Luau Module
    A Luau Module can now be used to configure your chat UI. This is parented to the Chat CanvasGroup itself.

  • Input Area Only
    Developers can now set the WinryChat UI to only show the Input Field, as well as the channels list. If there is only one channel, the Channels List disappears by default.

  • Chat Bubble Visibility based on Chat Channel Access
    Developers can now toggle the visibility of Chat Bubbles to that of only the viewers with access to a given chat channel. Due to limitations of TextChatService, this will break any chat bubble customization as this feature requires BubbleChatConfiguration.Enabled to be false so that the chat system can automate message display.

  • Chat Feature Modules - Find Source Code for reference easily
    With the growing complexity of WinryChat, the entire system is undergoing a near-total conversion to a modules system. Initially features were designed as part of the main script because the scope of this open-source resource was limited.

  • Settings Documentation Migrated to Chat Settings Lua Module - This change happened to unify the settings and the API documentation together during development. Developers can now find all API documentation in Chat/ChatSettings, instead of Chat/README.

NOTE: So far only 3 features are extracted as Chat Feature Modules.

  • Chat Command Autocomplete
  • Chat Bubble Visibility
  • Drag Resize Feature

More features will be extracted into their own modules once we have tested and verified they work as intended. The next feature to be extracted will be Gamepad Support.


Changes


  • New Chat/Sounds folder added. Sounds moved to this folder and references have been amended.

  • New Chat/Theme folder for storing custom UI themes and a behavior module.

  • New Chat/ChatSettings Luau module added.

  • New Chat/WinryTextChatManager/Modules folder added. Any future features will be modules added here, rather than integrated into the main script.

  • ChatAutocompleteFeature, ChatBubbleVisibilityFeature and DragResizeFeature added to Chat/WinryTextChatManager/Modules.

  • Depercated Function GetKeyCodeIdAsEnumValue(Enum.KeyCode) removed from Chat/WinryTextChatManager. Anyone in need of this can find the source-code for it below.

Function Code
-- [DEPRECATED][GetKeyCodeIdAsEnumValue] - Returns the Enum.KeyCode value, if one exists for the given id.
--[[
<strong>[DEPRECATED]</strong> This function will be removed in a future release.<br>
Returns the Enum.KeyCode value, if one exists for the given id.<br>
<strong>id</strong>								: The id to search for in the list of KeyCodes.
]]
function GetKeyCodeIdAsEnumValue(id : number) : Enum.KeyCode
	-- Iterate through all keycodes to get the Enum.KeyCode
	for index : number, value : Enum.KeyCode in pairs(Enum.KeyCode:GetEnumItems()) do
		if (value.Value == id) then return value end
	end

	-- If none was found, return nil.
	return nil
end

New Settings (Attributes)


ChannelVisibilityAppliesToChatBubbles : boolean
Whether to take control of Chat Bubble display and show chat messages to only those who are in the channel(s) with the sender.

DragCornerEnabled : boolean
Whether to enable the Drag-Resizing feature. This was accidentally left out of Version 1.3.

ShowInputAreaOnly : boolean
Whether to hide the Chat History window and show only the Text Field.

UseCustomTheme : boolean
Whether to use the contents of Chat/Theme for the chat UI instead of the default theme.


Bugfixes


  • Fixed an issue list of results for autocomplete would overflow into the Input Area.

  • Fixed an issue where if more than three channels were present, the first button wouldn’t scale properly.

  • Fixed an issue where ChangeInputOnlyAppearanceForAutocomplete was being incorrectly called without a check to see if ShowInputAreaOnly was true, just before a list of command aliases or valid arguments would be searched for in BindAutocompleteFeature. This would have caused the chat window to be resized and restricted regardless of if the Drag Resize Feature was enabled.

  • Fixed the way Chat Themes’ behaviour modules are initialized. Now instead of multiple connections generated for each attribute of ChatUI, only one is generated using ChatUI.AttributeChanged.

  • Fixed an issue where Drag Corners would still be visible and intercepting inputs if ShowInputAreaOnly was set to true.

  • Fixed an issue with ShowInputAreaOnly causing TextChannel.OnIncomingMessage from notifying ChatModules, notably ChatBubbleVisbilityFeature, of chat messages.

  • Fixed an issue where if there was no channel view, TextChannel.OnIncomingMessage would not notify ChatModules, notably ChatBubbleVisbilityFeature, of chat messages that were successfully sent.


These changes should be live now! The post will be updated to reflect the changes temporarily, and a rewrite to the original post will happen in the next 24 hours, including proper credits to all contributors and players who suggested features.

1 Like