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

looks really good, good job!
Let me know when this is public

2 Likes

It’ll be out with the next release. There’s also safeguards built in for a minimum size and restraining the chat window to within the Viewport. This includes a new setting for a Safe Zone if you want some padding between the bottom right corner and the drag resize UI.

Of course, the issues with making drag-and-drop theming is the amount of settings provided to users. So that would take more time, if it is even possible with the existing logic. In the mean time, we’ve been reworking how the settings are applied. We want to make way for a settings panel for users can try out custom themes with in the future (and a developer setting for enabling or disabling custom theming).

1 Like

Winry Chat - Update Log for Version 1.3

Happy New Years folks! We intended to ship this yesterday, yet the Autocomplete feature couldn’t be completed in a single 4 hour sprint… so it took another 4 hour sprint today to debug and address that feature in a way that integrated nicely with the chat.

Our goal with WinryChat as an open-source utility is and always will be the same: Minimize Impact on Developer Workflows.


New Features


  • Drag Resizing (Feature Request) We understand the importance of being able to see and resize your chat window, especially for those moments where someone spills the tea. So, we made it a top priority to get this in first for developers.

  • Autocomplete for Command Arguments (Internal Request)
    Something missing from our server manager, Winry, was the ability to display information for TextChatCommand arguments. While we considered it as an internal feature in settings or in a separate panel, that just wouldn’t cut it. With some careful considerations, we found a way we believe to be unobtrusive to developers’ workflows for this feature.


New Settings (Attributes)


DragCornerColor : Color3
Changes whether the text box is cleared or not when using the keyboard shortcut for focusing chat or clicking on the text area of chat. Default: (10, 185, 255)

MaxResizeSafeZone : Vector2
An offset in pixels from the viewport’s bottom right corner to limit resizing to. Default: {16, 72}


New Functions


BindDragResizeFeature : () → ()
Binds functions to UserInputService and the DragArea (ImageButton) so that players can use the new Drag Resize feature.

CreateCommandInfoForAlias : ( {} , string, {} ) → (ChatCommandInfo)
Consolidated the creation of command info for command aliases into one function, so that redundant code is reduced. First and Third Arguments are custom types with names too long to keep this on a single line.

SetAppearanceAndBehaviourFromSettings : () → ()
Refresh the appearance and behaviour of the Chat UI from it’s settings attributes. This has been added ahead of time, for when we can find an appropriate way to integrate a settings panel for custom theming.

SetInteractableState : (boolean) → ()
Set the interactable property of the Chat Channels list, Channel View and Input Area.


Bugfixes


  • Fixed an issue where MessageTemplate was requesting an attribute called TextMesageFont and not TextMessageFont.

  • Fixed a few conditional statements and added more object clearing / destruction steps where appropriate to prevent memory leaks.

  • Fixed the initial Interactable state of Chat UI elements. Core elements were not reverted to true after testing the dragging feature.


These changes should be live now!

If you’re reading this a few minutes after it’s posted, we’ll be updating the initial forum post to be reflective of the new version. We will also add additional information on how to specify information to display for an argument of a TextChatCommand, so that it can appear with our Autocomplete.

[Update]: We’ve rewritten the original post to reflect the changes, and provide better documentation.

@Wertyhappy27 - Here’s Version 1.3 for you too!

1 Like

As a Ui designer myself, that is very good!
Keep up the great work, looking forward to it! :grin:

2 Likes

Thank you!

We’ve brought our internal version of WinryChat 1.3 up to parity with the open-source version now, and are doing some bug hunting in a live production (good for case studies too). A few small patches to the open-source version should roll out for the argument autocomplete.


Update: This seems to be specific to our project’s object creation pipeline, but if we can identify a cause that’s caused by WinryChat’s scripting, we’ll push a patch as soon as possible.

2 Likes

Hello, I was just wondering but does WinryChat have a community server we can join for support or live discussions?

Hi, Iris!

We didn’t previously consider a community server for WinryChat, as it’s an independent system from our main server system. These were developed in house for The Horizon Ascendancy. We’ll look at creating one, though given the original community space our projects come from, this may take a while.

I’ll discuss with TigerValdos on how to approach this request, as there’s moderation & user/staff safety to setup too. In the mean time, I can try my best to answer your queries.

– May / extraclear

1 Like

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