diff --git a/Core/GameEngine/Include/GameNetwork/LANAPI.h b/Core/GameEngine/Include/GameNetwork/LANAPI.h index a562aa257b..d69f5d516c 100644 --- a/Core/GameEngine/Include/GameNetwork/LANAPI.h +++ b/Core/GameEngine/Include/GameNetwork/LANAPI.h @@ -108,6 +108,8 @@ class LANAPIInterface : public SubsystemInterface RET_UNKNOWN, // Default message for oddity }; UnicodeString getErrorStringFromReturnType( ReturnType ret ); + // TheSuperHackers @feature arcticdolphin 08/03/2026 Adds processChatMessage to handle /me slash command in LAN chat, consistent with WOL + void processChatMessage( const UnicodeString &message ); // On functions are (generally) the result of network traffic virtual void OnGameList( LANGameInfo *gameList ) = 0; ///< List of games diff --git a/Core/GameEngine/Source/GameNetwork/LANAPICallbacks.cpp b/Core/GameEngine/Source/GameNetwork/LANAPICallbacks.cpp index f87a2c76ed..8eeee355cf 100644 --- a/Core/GameEngine/Source/GameNetwork/LANAPICallbacks.cpp +++ b/Core/GameEngine/Source/GameNetwork/LANAPICallbacks.cpp @@ -93,6 +93,29 @@ UnicodeString LANAPIInterface::getErrorStringFromReturnType( ReturnType ret ) } } +// TheSuperHackers @feature arcticdolphin 08/03/2026 Adds processChatMessage to handle /me slash command in LAN chat, consistent with WOL +void LANAPIInterface::processChatMessage( const UnicodeString &message ) +{ + AsciiString ascii; + ascii.translate(message); + + if (!ascii.isEmpty() && ascii.getCharAt(0) == '/') + { + AsciiString remainder = ascii.str() + 1; + AsciiString token; + remainder.nextToken(&token); + token.toLower(); + + if (token == "me" && message.getLength() > 4) + { + RequestChat(UnicodeString(message.str() + 4), LANCHAT_EMOTE); + return; + } + } + + RequestChat(message, LANCHAT_NORMAL); +} + // On functions are (generally) the result of network traffic void LANAPI::OnAccept( UnsignedInt playerIP, Bool status ) diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp index f1805eb670..cbaf61d170 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp @@ -107,7 +107,8 @@ static NameKeyType textEntryChatID = NAMEKEY_INVALID; static NameKeyType textEntryMapDisplayID = NAMEKEY_INVALID; static NameKeyType buttonBackID = NAMEKEY_INVALID; static NameKeyType buttonStartID = NAMEKEY_INVALID; -static NameKeyType buttonEmoteID = NAMEKEY_INVALID; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static NameKeyType buttonChatID = NAMEKEY_INVALID; static NameKeyType buttonSelectMapID = NAMEKEY_INVALID; static NameKeyType windowMapID = NAMEKEY_INVALID; // Window Pointers ------------------------------------------------------------------------ @@ -115,7 +116,8 @@ static GameWindow *parentLanGameOptions = nullptr; static GameWindow *buttonBack = nullptr; static GameWindow *buttonStart = nullptr; static GameWindow *buttonSelectMap = nullptr; -static GameWindow *buttonEmote = nullptr; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static GameWindow *buttonChat = nullptr; static GameWindow *textEntryChat = nullptr; static GameWindow *textEntryMapDisplay = nullptr; static GameWindow *windowMap = nullptr; @@ -614,15 +616,17 @@ void InitLanGameGadgets() textEntryChatID = TheNameKeyGenerator->nameToKey( "LanGameOptionsMenu.wnd:TextEntryChat" ); textEntryMapDisplayID = TheNameKeyGenerator->nameToKey( "LanGameOptionsMenu.wnd:TextEntryMapDisplay" ); listboxChatWindowLanGameID = TheNameKeyGenerator->nameToKey( "LanGameOptionsMenu.wnd:ListboxChatWindowLanGame" ); - buttonEmoteID = TheNameKeyGenerator->nameToKey( "LanGameOptionsMenu.wnd:ButtonEmote" ); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChatID = TheNameKeyGenerator->nameToKey( "LanGameOptionsMenu.wnd:ButtonEmote" ); // TODO Rename ButtonEmote to ButtonChat in .wnd file buttonSelectMapID = TheNameKeyGenerator->nameToKey( "LanGameOptionsMenu.wnd:ButtonSelectMap" ); windowMapID = TheNameKeyGenerator->nameToKey( "LanGameOptionsMenu.wnd:MapWindow" ); // Initialize the pointers to our gadgets parentLanGameOptions = TheWindowManager->winGetWindowFromId( nullptr, parentLanGameOptionsID ); DEBUG_ASSERTCRASH(parentLanGameOptions, ("Could not find the parentLanGameOptions")); - buttonEmote = TheWindowManager->winGetWindowFromId( parentLanGameOptions,buttonEmoteID ); - DEBUG_ASSERTCRASH(buttonEmote, ("Could not find the buttonEmote")); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChat = TheWindowManager->winGetWindowFromId( parentLanGameOptions,buttonChatID ); + DEBUG_ASSERTCRASH(buttonChat, ("Could not find the buttonChat")); buttonSelectMap = TheWindowManager->winGetWindowFromId( parentLanGameOptions,buttonSelectMapID ); DEBUG_ASSERTCRASH(buttonSelectMap, ("Could not find the buttonSelectMap")); buttonStart = TheWindowManager->winGetWindowFromId( parentLanGameOptions,buttonStartID ); @@ -717,7 +721,8 @@ void InitLanGameGadgets() void DeinitLanGameGadgets() { parentLanGameOptions = nullptr; - buttonEmote = nullptr; + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChat = nullptr; buttonSelectMap = nullptr; buttonStart = nullptr; buttonBack = nullptr; @@ -1132,7 +1137,8 @@ WindowMsgHandledType LanGameOptionsMenuSystem( GameWindow *window, UnsignedInt m //TheShell->pop(); } - else if ( controlID == buttonEmoteID ) + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + else if ( controlID == buttonChatID ) { // read the user's input txtInput.set(GadgetTextEntryGetText( textEntryChat )); @@ -1142,7 +1148,10 @@ WindowMsgHandledType LanGameOptionsMenuSystem( GameWindow *window, UnsignedInt m txtInput.trim(); // Echo the user's input to the chat window if (!txtInput.isEmpty()) - TheLAN->RequestChat(txtInput, LANAPIInterface::LANCHAT_EMOTE); + { + // TheSuperHackers @feature arcticdolphin 08/03/2026 Uses processChatMessage to handle /me slash command in LAN chat + TheLAN->processChatMessage(txtInput); + } } else if ( controlID == buttonSelectMapID ) { @@ -1274,7 +1283,10 @@ WindowMsgHandledType LanGameOptionsMenuSystem( GameWindow *window, UnsignedInt m txtInput.trim(); // Echo the user's input to the chat window if (!txtInput.isEmpty()) - TheLAN->RequestChat(txtInput, LANAPIInterface::LANCHAT_NORMAL); + { + // TheSuperHackers @feature arcticdolphin 08/03/2026 Uses processChatMessage to handle /me slash command in LAN chat + TheLAN->processChatMessage(txtInput); + } } break; diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanLobbyMenu.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanLobbyMenu.cpp index 9283219f78..354999d6d5 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanLobbyMenu.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanLobbyMenu.cpp @@ -295,7 +295,8 @@ static NameKeyType buttonClearID = NAMEKEY_INVALID; static NameKeyType buttonHostID = NAMEKEY_INVALID; static NameKeyType buttonJoinID = NAMEKEY_INVALID; static NameKeyType buttonDirectConnectID = NAMEKEY_INVALID; -static NameKeyType buttonEmoteID = NAMEKEY_INVALID; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static NameKeyType buttonChatID = NAMEKEY_INVALID; static NameKeyType staticToolTipID = NAMEKEY_INVALID; static NameKeyType textEntryPlayerNameID = NAMEKEY_INVALID; static NameKeyType textEntryChatID = NAMEKEY_INVALID; @@ -310,7 +311,8 @@ static GameWindow *buttonClear = nullptr; static GameWindow *buttonHost = nullptr; static GameWindow *buttonJoin = nullptr; static GameWindow *buttonDirectConnect = nullptr; -static GameWindow *buttonEmote = nullptr; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static GameWindow *buttonChat = nullptr; static GameWindow *staticToolTip = nullptr; static GameWindow *textEntryPlayerName = nullptr; static GameWindow *textEntryChat = nullptr; @@ -373,7 +375,8 @@ void LanLobbyMenuInit( WindowLayout *layout, void *userData ) buttonHostID = TheNameKeyGenerator->nameToKey( "LanLobbyMenu.wnd:ButtonHost" ); buttonJoinID = TheNameKeyGenerator->nameToKey( "LanLobbyMenu.wnd:ButtonJoin" ); buttonDirectConnectID = TheNameKeyGenerator->nameToKey( "LanLobbyMenu.wnd:ButtonDirectConnect" ); - buttonEmoteID = TheNameKeyGenerator->nameToKey( "LanLobbyMenu.wnd:ButtonEmote" ); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChatID = TheNameKeyGenerator->nameToKey( "LanLobbyMenu.wnd:ButtonEmote" ); // TODO Rename ButtonEmote to ButtonChat in .wnd file staticToolTipID = TheNameKeyGenerator->nameToKey( "LanLobbyMenu.wnd:StaticToolTip" ); textEntryPlayerNameID = TheNameKeyGenerator->nameToKey( "LanLobbyMenu.wnd:TextEntryPlayerName" ); textEntryChatID = TheNameKeyGenerator->nameToKey( "LanLobbyMenu.wnd:TextEntryChat" ); @@ -390,7 +393,8 @@ void LanLobbyMenuInit( WindowLayout *layout, void *userData ) buttonHost = TheWindowManager->winGetWindowFromId( nullptr, buttonHostID ); buttonJoin = TheWindowManager->winGetWindowFromId( nullptr, buttonJoinID ); buttonDirectConnect = TheWindowManager->winGetWindowFromId( nullptr, buttonDirectConnectID ); - buttonEmote = TheWindowManager->winGetWindowFromId( nullptr,buttonEmoteID ); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChat = TheWindowManager->winGetWindowFromId( nullptr,buttonChatID ); staticToolTip = TheWindowManager->winGetWindowFromId( nullptr, staticToolTipID ); textEntryPlayerName = TheWindowManager->winGetWindowFromId( nullptr, textEntryPlayerNameID ); textEntryChat = TheWindowManager->winGetWindowFromId( nullptr, textEntryChatID ); @@ -805,7 +809,8 @@ WindowMsgHandledType LanLobbyMenuSystem( GameWindow *window, UnsignedInt msg, } } - else if ( controlID == buttonEmoteID ) + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + else if ( controlID == buttonChatID ) { // read the user's input txtInput.set(GadgetTextEntryGetText( textEntryChat )); @@ -815,8 +820,8 @@ WindowMsgHandledType LanLobbyMenuSystem( GameWindow *window, UnsignedInt msg, txtInput.trim(); // Echo the user's input to the chat window if (!txtInput.isEmpty()) { -// TheLAN->RequestChat(txtInput, LANAPIInterface::LANCHAT_EMOTE); - TheLAN->RequestChat(txtInput, LANAPIInterface::LANCHAT_NORMAL); + // TheSuperHackers @feature arcticdolphin 08/03/2026 Uses processChatMessage to handle /me slash command in LAN chat + TheLAN->processChatMessage(txtInput); } } else if (controlID == buttonDirectConnectID) @@ -897,7 +902,10 @@ WindowMsgHandledType LanLobbyMenuSystem( GameWindow *window, UnsignedInt msg, // Echo the user's input to the chat window if (!txtInput.isEmpty()) - TheLAN->RequestChat(txtInput, LANAPIInterface::LANCHAT_NORMAL); + { + // TheSuperHackers @feature arcticdolphin 08/03/2026 Uses processChatMessage to handle /me slash command in LAN chat + TheLAN->processChatMessage(txtInput); + } } /* diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ScoreScreen.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ScoreScreen.cpp index a217b8023c..1ed5c7ad66 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ScoreScreen.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ScoreScreen.cpp @@ -105,7 +105,8 @@ static NameKeyType parentID = NAMEKEY_INVALID; static NameKeyType buttonOkID = NAMEKEY_INVALID; ///static NameKeyType buttonRehostID = NAMEKEY_INVALID; static NameKeyType textEntryChatID = NAMEKEY_INVALID; -static NameKeyType buttonEmoteID = NAMEKEY_INVALID; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static NameKeyType buttonChatID = NAMEKEY_INVALID; static NameKeyType chatBoxBorderID = NAMEKEY_INVALID; static NameKeyType buttonContinueID = NAMEKEY_INVALID; static NameKeyType buttonBuddiesID = NAMEKEY_INVALID; @@ -116,7 +117,8 @@ static GameWindow *buttonOk = nullptr; //static GameWindow *buttonRehost = nullptr; static GameWindow *buttonContinue = nullptr; static GameWindow *textEntryChat = nullptr; -static GameWindow *buttonEmote = nullptr; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static GameWindow *buttonChat = nullptr; static GameWindow *chatBoxBorder = nullptr; static GameWindow *buttonBuddies = nullptr; static GameWindow *staticTextGameSaved = nullptr; @@ -228,7 +230,8 @@ void ScoreScreenInit( WindowLayout *layout, void *userData ) parentID = TheNameKeyGenerator->nameToKey( "ScoreScreen.wnd:ParentScoreScreen" ); buttonOkID = TheNameKeyGenerator->nameToKey( "ScoreScreen.wnd:ButtonOk" ); textEntryChatID = TheNameKeyGenerator->nameToKey( "ScoreScreen.wnd:TextEntryChat" ); - buttonEmoteID = TheNameKeyGenerator->nameToKey( "ScoreScreen.wnd:ButtonEmote" ); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChatID = TheNameKeyGenerator->nameToKey( "ScoreScreen.wnd:ButtonEmote" ); // TODO Rename ButtonEmote to ButtonChat in .wnd file listboxChatWindowScoreScreenID = TheNameKeyGenerator->nameToKey( "ScoreScreen.wnd:ListboxChatWindowScoreScreen" ); // buttonRehostID = TheNameKeyGenerator->nameToKey( "ScoreScreen.wnd:ButtonRehost" ); chatBoxBorderID = TheNameKeyGenerator->nameToKey( "ScoreScreen.wnd:ChatBoxBorder" ); @@ -239,7 +242,8 @@ void ScoreScreenInit( WindowLayout *layout, void *userData ) parent = TheWindowManager->winGetWindowFromId( nullptr, parentID ); buttonOk = TheWindowManager->winGetWindowFromId( parent, buttonOkID ); textEntryChat = TheWindowManager->winGetWindowFromId( parent, textEntryChatID ); - buttonEmote = TheWindowManager->winGetWindowFromId( parent,buttonEmoteID ); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChat = TheWindowManager->winGetWindowFromId( parent,buttonChatID ); listboxChatWindowScoreScreen = TheWindowManager->winGetWindowFromId( parent, listboxChatWindowScoreScreenID ); // buttonRehost = TheWindowManager->winGetWindowFromId( parent, buttonRehostID ); chatBoxBorder = TheWindowManager->winGetWindowFromId( parent, chatBoxBorderID ); @@ -498,7 +502,8 @@ WindowMsgHandledType ScoreScreenSystem( GameWindow *window, UnsignedInt msg, saveReplayLayout->bringForward(); } - else if ( controlID == buttonEmoteID ) + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + else if ( controlID == buttonChatID ) { // read the user's input txtInput.set(GadgetTextEntryGetText( textEntryChat )); @@ -509,7 +514,10 @@ WindowMsgHandledType ScoreScreenSystem( GameWindow *window, UnsignedInt msg, // Echo the user's input to the chat window if (!txtInput.isEmpty()) if(TheLAN) - TheLAN->RequestChat(txtInput, LANAPIInterface::LANCHAT_EMOTE); + { + // TheSuperHackers @feature arcticdolphin 08/03/2026 Uses processChatMessage to handle /me slash command in LAN chat + TheLAN->processChatMessage(txtInput); + } //add the gamespy chat request here } for(Int i = 0; i < MAX_SLOTS; ++i) @@ -566,7 +574,10 @@ WindowMsgHandledType ScoreScreenSystem( GameWindow *window, UnsignedInt msg, // Echo the user's input to the chat window if (!txtInput.isEmpty()) if(TheLAN) - TheLAN->RequestChat(txtInput, LANAPIInterface::LANCHAT_NORMAL); + { + // TheSuperHackers @feature arcticdolphin 08/03/2026 Uses processChatMessage to handle /me slash command in LAN chat + TheLAN->processChatMessage(txtInput); + } //add the gamespy chat request here } @@ -590,8 +601,9 @@ void initSkirmish() grabMultiPlayerInfo(); if (textEntryChat) textEntryChat->winHide(TRUE); - if (buttonEmote) - buttonEmote->winHide(TRUE); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + if (buttonChat) + buttonChat->winHide(TRUE); if (chatBoxBorder) chatBoxBorder->winHide(TRUE); if (buttonBuddies) @@ -729,8 +741,9 @@ void finishSinglePlayerInit() buttonContinue->winHide(TRUE); if (textEntryChat) textEntryChat->winHide(TRUE); - if (buttonEmote) - buttonEmote->winHide(TRUE); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + if (buttonChat) + buttonChat->winHide(TRUE); if (listboxChatWindowScoreScreen) listboxChatWindowScoreScreen->winHide(TRUE); if (chatBoxBorder) @@ -792,8 +805,9 @@ void finishSinglePlayerInit() buttonContinue->winHide(FALSE); if (textEntryChat) textEntryChat->winHide(TRUE); - if (buttonEmote) - buttonEmote->winHide(TRUE); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + if (buttonChat) + buttonChat->winHide(TRUE); if (listboxChatWindowScoreScreen) listboxChatWindowScoreScreen->winHide(TRUE); if (chatBoxBorder) @@ -817,8 +831,9 @@ void initReplaySinglePlayer() staticTextGameSaved->winHide(TRUE); if (textEntryChat) textEntryChat->winHide(TRUE); - if (buttonEmote) - buttonEmote->winHide(TRUE); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + if (buttonChat) + buttonChat->winHide(TRUE); if (chatBoxBorder) chatBoxBorder->winHide(TRUE); if (buttonContinue) @@ -843,8 +858,9 @@ void initLANMultiPlayer() staticTextGameSaved->winHide(TRUE); if (textEntryChat) textEntryChat->winHide(FALSE); - if (buttonEmote) - buttonEmote->winHide(FALSE); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + if (buttonChat) + buttonChat->winHide(FALSE); if (buttonContinue) buttonContinue->winHide(TRUE); if (listboxChatWindowScoreScreen) @@ -869,8 +885,9 @@ void initInternetMultiPlayer() buttonContinue->winHide(TRUE); if (textEntryChat) textEntryChat->winHide(TRUE); - if (buttonEmote) - buttonEmote->winHide(TRUE); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + if (buttonChat) + buttonChat->winHide(TRUE); if (listboxChatWindowScoreScreen) listboxChatWindowScoreScreen->winHide(FALSE); if (chatBoxBorder) @@ -901,8 +918,9 @@ void initReplayMultiPlayer() staticTextGameSaved->winHide(TRUE); if (textEntryChat) textEntryChat->winHide(TRUE); - if (buttonEmote) - buttonEmote->winHide(TRUE); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + if (buttonChat) + buttonChat->winHide(TRUE); if (listboxChatWindowScoreScreen) listboxChatWindowScoreScreen->winHide(TRUE); if (chatBoxBorder) diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp index f0f4b8df4a..0c7719c1bb 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp @@ -187,7 +187,8 @@ static NameKeyType textEntryChatID = NAMEKEY_INVALID; static NameKeyType textEntryMapDisplayID = NAMEKEY_INVALID; static NameKeyType buttonBackID = NAMEKEY_INVALID; static NameKeyType buttonStartID = NAMEKEY_INVALID; -static NameKeyType buttonEmoteID = NAMEKEY_INVALID; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static NameKeyType buttonChatID = NAMEKEY_INVALID; static NameKeyType buttonSelectMapID = NAMEKEY_INVALID; static NameKeyType windowMapID = NAMEKEY_INVALID; @@ -197,7 +198,8 @@ static GameWindow *parentWOLGameSetup = nullptr; static GameWindow *buttonBack = nullptr; static GameWindow *buttonStart = nullptr; static GameWindow *buttonSelectMap = nullptr; -static GameWindow *buttonEmote = nullptr; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static GameWindow *buttonChat = nullptr; static GameWindow *textEntryChat = nullptr; static GameWindow *textEntryMapDisplay = nullptr; static GameWindow *windowMap = nullptr; @@ -997,7 +999,8 @@ void InitWOLGameGadgets() textEntryChatID = TheNameKeyGenerator->nameToKey( "GameSpyGameOptionsMenu.wnd:TextEntryChat" ); textEntryMapDisplayID = TheNameKeyGenerator->nameToKey( "GameSpyGameOptionsMenu.wnd:TextEntryMapDisplay" ); listboxGameSetupChatID = TheNameKeyGenerator->nameToKey( "GameSpyGameOptionsMenu.wnd:ListboxChatWindowGameSpyGameSetup" ); - buttonEmoteID = TheNameKeyGenerator->nameToKey( "GameSpyGameOptionsMenu.wnd:ButtonEmote" ); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChatID = TheNameKeyGenerator->nameToKey( "GameSpyGameOptionsMenu.wnd:ButtonEmote" ); // TODO Rename ButtonEmote to ButtonChat in .wnd file buttonSelectMapID = TheNameKeyGenerator->nameToKey( "GameSpyGameOptionsMenu.wnd:ButtonSelectMap" ); windowMapID = TheNameKeyGenerator->nameToKey( "GameSpyGameOptionsMenu.wnd:MapWindow" ); windowMapSelectMapID = TheNameKeyGenerator->nameToKey("WOLMapSelectMenu.wnd:WinMapPreview"); @@ -1006,7 +1009,8 @@ void InitWOLGameGadgets() // Initialize the pointers to our gadgets parentWOLGameSetup = TheWindowManager->winGetWindowFromId( nullptr, parentWOLGameSetupID ); - buttonEmote = TheWindowManager->winGetWindowFromId( parentWOLGameSetup,buttonEmoteID ); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChat = TheWindowManager->winGetWindowFromId( parentWOLGameSetup,buttonChatID ); buttonSelectMap = TheWindowManager->winGetWindowFromId( parentWOLGameSetup,buttonSelectMapID ); buttonStart = TheWindowManager->winGetWindowFromId( parentWOLGameSetup,buttonStartID ); buttonBack = TheWindowManager->winGetWindowFromId( parentWOLGameSetup, buttonBackID); @@ -1117,7 +1121,8 @@ void InitWOLGameGadgets() void DeinitWOLGameGadgets() { parentWOLGameSetup = nullptr; - buttonEmote = nullptr; + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChat = nullptr; buttonSelectMap = nullptr; buttonStart = nullptr; buttonBack = nullptr; @@ -2506,7 +2511,8 @@ WindowMsgHandledType WOLGameSetupMenuSystem( GameWindow *window, UnsignedInt msg GameSpyToggleOverlay( GSOVERLAY_BUDDY ); } - else if ( controlID == buttonEmoteID ) + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + else if ( controlID == buttonChatID ) { // read the user's input txtInput.set(GadgetTextEntryGetText( textEntryChat )); diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLLobbyMenu.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLLobbyMenu.cpp index a4650e3b2f..8ca8a43a01 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLLobbyMenu.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLLobbyMenu.cpp @@ -103,7 +103,8 @@ static NameKeyType buttonHostID = NAMEKEY_INVALID; static NameKeyType buttonRefreshID = NAMEKEY_INVALID; static NameKeyType buttonJoinID = NAMEKEY_INVALID; static NameKeyType buttonBuddyID = NAMEKEY_INVALID; -static NameKeyType buttonEmoteID = NAMEKEY_INVALID; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static NameKeyType buttonChatID = NAMEKEY_INVALID; static NameKeyType textEntryChatID = NAMEKEY_INVALID; static NameKeyType listboxLobbyPlayersID = NAMEKEY_INVALID; static NameKeyType listboxLobbyChatID = NAMEKEY_INVALID; @@ -117,7 +118,8 @@ static GameWindow *buttonHost = nullptr; static GameWindow *buttonRefresh = nullptr; static GameWindow *buttonJoin = nullptr; static GameWindow *buttonBuddy = nullptr; -static GameWindow *buttonEmote = nullptr; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static GameWindow *buttonChat = nullptr; static GameWindow *textEntryChat = nullptr; static GameWindow *listboxLobbyPlayers = nullptr; static GameWindow *listboxLobbyChat = nullptr; @@ -624,8 +626,9 @@ void WOLLobbyMenuInit( WindowLayout *layout, void *userData ) buttonBuddyID = TheNameKeyGenerator->nameToKey("WOLCustomLobby.wnd:ButtonBuddy"); buttonBuddy = TheWindowManager->winGetWindowFromId(parent, buttonBuddyID); - buttonEmoteID = TheNameKeyGenerator->nameToKey("WOLCustomLobby.wnd:ButtonEmote"); - buttonEmote = TheWindowManager->winGetWindowFromId(parent, buttonEmoteID); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChatID = TheNameKeyGenerator->nameToKey("WOLCustomLobby.wnd:ButtonEmote"); // TODO Rename ButtonEmote to ButtonChat in .wnd file + buttonChat = TheWindowManager->winGetWindowFromId(parent, buttonChatID); textEntryChatID = TheNameKeyGenerator->nameToKey("WOLCustomLobby.wnd:TextEntryChat"); textEntryChat = TheWindowManager->winGetWindowFromId(parent, textEntryChatID); @@ -1621,7 +1624,8 @@ WindowMsgHandledType WOLLobbyMenuSystem( GameWindow *window, UnsignedInt msg, { ToggleGameListType(); } - else if ( controlID == buttonEmoteID ) + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + else if ( controlID == buttonChatID ) { // read the user's input and clear the entry box UnicodeString txtInput; diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp index 4072ce98ad..6b6bc9f4a5 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp @@ -110,7 +110,8 @@ static NameKeyType textEntryChatID = NAMEKEY_INVALID; static NameKeyType textEntryMapDisplayID = NAMEKEY_INVALID; static NameKeyType buttonBackID = NAMEKEY_INVALID; static NameKeyType buttonStartID = NAMEKEY_INVALID; -static NameKeyType buttonEmoteID = NAMEKEY_INVALID; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static NameKeyType buttonChatID = NAMEKEY_INVALID; static NameKeyType buttonSelectMapID = NAMEKEY_INVALID; static NameKeyType checkboxLimitSuperweaponsID = NAMEKEY_INVALID; static NameKeyType comboBoxStartingCashID = NAMEKEY_INVALID; @@ -120,7 +121,8 @@ static GameWindow *parentLanGameOptions = nullptr; static GameWindow *buttonBack = nullptr; static GameWindow *buttonStart = nullptr; static GameWindow *buttonSelectMap = nullptr; -static GameWindow *buttonEmote = nullptr; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static GameWindow *buttonChat = nullptr; static GameWindow *textEntryChat = nullptr; static GameWindow *textEntryMapDisplay = nullptr; static GameWindow *checkboxLimitSuperweapons = nullptr; @@ -677,7 +679,8 @@ void InitLanGameGadgets() textEntryChatID = TheNameKeyGenerator->nameToKey( "LanGameOptionsMenu.wnd:TextEntryChat" ); textEntryMapDisplayID = TheNameKeyGenerator->nameToKey( "LanGameOptionsMenu.wnd:TextEntryMapDisplay" ); listboxChatWindowLanGameID = TheNameKeyGenerator->nameToKey( "LanGameOptionsMenu.wnd:ListboxChatWindowLanGame" ); - buttonEmoteID = TheNameKeyGenerator->nameToKey( "LanGameOptionsMenu.wnd:ButtonEmote" ); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChatID = TheNameKeyGenerator->nameToKey( "LanGameOptionsMenu.wnd:ButtonEmote" ); // TODO Rename ButtonEmote to ButtonChat in .wnd file buttonSelectMapID = TheNameKeyGenerator->nameToKey( "LanGameOptionsMenu.wnd:ButtonSelectMap" ); checkboxLimitSuperweaponsID = TheNameKeyGenerator->nameToKey( "LanGameOptionsMenu.wnd:CheckboxLimitSuperweapons" ); comboBoxStartingCashID = TheNameKeyGenerator->nameToKey( "LanGameOptionsMenu.wnd:ComboBoxStartingCash" ); @@ -686,8 +689,9 @@ void InitLanGameGadgets() // Initialize the pointers to our gadgets parentLanGameOptions = TheWindowManager->winGetWindowFromId( nullptr, parentLanGameOptionsID ); DEBUG_ASSERTCRASH(parentLanGameOptions, ("Could not find the parentLanGameOptions")); - buttonEmote = TheWindowManager->winGetWindowFromId( parentLanGameOptions,buttonEmoteID ); - DEBUG_ASSERTCRASH(buttonEmote, ("Could not find the buttonEmote")); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChat = TheWindowManager->winGetWindowFromId( parentLanGameOptions,buttonChatID ); + DEBUG_ASSERTCRASH(buttonChat, ("Could not find the buttonChat")); buttonSelectMap = TheWindowManager->winGetWindowFromId( parentLanGameOptions,buttonSelectMapID ); DEBUG_ASSERTCRASH(buttonSelectMap, ("Could not find the buttonSelectMap")); buttonStart = TheWindowManager->winGetWindowFromId( parentLanGameOptions,buttonStartID ); @@ -791,7 +795,8 @@ void InitLanGameGadgets() void DeinitLanGameGadgets() { parentLanGameOptions = nullptr; - buttonEmote = nullptr; + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChat = nullptr; buttonSelectMap = nullptr; buttonStart = nullptr; buttonBack = nullptr; @@ -1235,7 +1240,8 @@ WindowMsgHandledType LanGameOptionsMenuSystem( GameWindow *window, UnsignedInt m //TheShell->pop(); } - else if ( controlID == buttonEmoteID ) + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + else if ( controlID == buttonChatID ) { // read the user's input txtInput.set(GadgetTextEntryGetText( textEntryChat )); @@ -1245,7 +1251,10 @@ WindowMsgHandledType LanGameOptionsMenuSystem( GameWindow *window, UnsignedInt m txtInput.trim(); // Echo the user's input to the chat window if (!txtInput.isEmpty()) - TheLAN->RequestChat(txtInput, LANAPIInterface::LANCHAT_EMOTE); + { + // TheSuperHackers @feature arcticdolphin 08/03/2026 Uses processChatMessage to handle /me slash command in LAN chat + TheLAN->processChatMessage(txtInput); + } } else if ( controlID == buttonSelectMapID ) { @@ -1381,7 +1390,10 @@ WindowMsgHandledType LanGameOptionsMenuSystem( GameWindow *window, UnsignedInt m txtInput.trim(); // Echo the user's input to the chat window if (!txtInput.isEmpty()) - TheLAN->RequestChat(txtInput, LANAPIInterface::LANCHAT_NORMAL); + { + // TheSuperHackers @feature arcticdolphin 08/03/2026 Uses processChatMessage to handle /me slash command in LAN chat + TheLAN->processChatMessage(txtInput); + } } break; diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanLobbyMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanLobbyMenu.cpp index 2f395f7389..7dcc8faa0d 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanLobbyMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanLobbyMenu.cpp @@ -295,7 +295,8 @@ static NameKeyType buttonClearID = NAMEKEY_INVALID; static NameKeyType buttonHostID = NAMEKEY_INVALID; static NameKeyType buttonJoinID = NAMEKEY_INVALID; static NameKeyType buttonDirectConnectID = NAMEKEY_INVALID; -static NameKeyType buttonEmoteID = NAMEKEY_INVALID; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static NameKeyType buttonChatID = NAMEKEY_INVALID; static NameKeyType staticToolTipID = NAMEKEY_INVALID; static NameKeyType textEntryPlayerNameID = NAMEKEY_INVALID; static NameKeyType textEntryChatID = NAMEKEY_INVALID; @@ -310,7 +311,8 @@ static GameWindow *buttonClear = nullptr; static GameWindow *buttonHost = nullptr; static GameWindow *buttonJoin = nullptr; static GameWindow *buttonDirectConnect = nullptr; -static GameWindow *buttonEmote = nullptr; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static GameWindow *buttonChat = nullptr; static GameWindow *staticToolTip = nullptr; static GameWindow *textEntryPlayerName = nullptr; static GameWindow *textEntryChat = nullptr; @@ -373,7 +375,8 @@ void LanLobbyMenuInit( WindowLayout *layout, void *userData ) buttonHostID = TheNameKeyGenerator->nameToKey( "LanLobbyMenu.wnd:ButtonHost" ); buttonJoinID = TheNameKeyGenerator->nameToKey( "LanLobbyMenu.wnd:ButtonJoin" ); buttonDirectConnectID = TheNameKeyGenerator->nameToKey( "LanLobbyMenu.wnd:ButtonDirectConnect" ); - buttonEmoteID = TheNameKeyGenerator->nameToKey( "LanLobbyMenu.wnd:ButtonEmote" ); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChatID = TheNameKeyGenerator->nameToKey( "LanLobbyMenu.wnd:ButtonEmote" ); // TODO Rename ButtonEmote to ButtonChat in .wnd file staticToolTipID = TheNameKeyGenerator->nameToKey( "LanLobbyMenu.wnd:StaticToolTip" ); textEntryPlayerNameID = TheNameKeyGenerator->nameToKey( "LanLobbyMenu.wnd:TextEntryPlayerName" ); textEntryChatID = TheNameKeyGenerator->nameToKey( "LanLobbyMenu.wnd:TextEntryChat" ); @@ -390,7 +393,8 @@ void LanLobbyMenuInit( WindowLayout *layout, void *userData ) buttonHost = TheWindowManager->winGetWindowFromId( nullptr, buttonHostID ); buttonJoin = TheWindowManager->winGetWindowFromId( nullptr, buttonJoinID ); buttonDirectConnect = TheWindowManager->winGetWindowFromId( nullptr, buttonDirectConnectID ); - buttonEmote = TheWindowManager->winGetWindowFromId( nullptr,buttonEmoteID ); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChat = TheWindowManager->winGetWindowFromId( nullptr,buttonChatID ); staticToolTip = TheWindowManager->winGetWindowFromId( nullptr, staticToolTipID ); textEntryPlayerName = TheWindowManager->winGetWindowFromId( nullptr, textEntryPlayerNameID ); textEntryChat = TheWindowManager->winGetWindowFromId( nullptr, textEntryChatID ); @@ -805,7 +809,8 @@ WindowMsgHandledType LanLobbyMenuSystem( GameWindow *window, UnsignedInt msg, } } - else if ( controlID == buttonEmoteID ) + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + else if ( controlID == buttonChatID ) { // read the user's input txtInput.set(GadgetTextEntryGetText( textEntryChat )); @@ -815,8 +820,8 @@ WindowMsgHandledType LanLobbyMenuSystem( GameWindow *window, UnsignedInt msg, txtInput.trim(); // Echo the user's input to the chat window if (!txtInput.isEmpty()) { -// TheLAN->RequestChat(txtInput, LANAPIInterface::LANCHAT_EMOTE); - TheLAN->RequestChat(txtInput, LANAPIInterface::LANCHAT_NORMAL); + // TheSuperHackers @feature arcticdolphin 08/03/2026 Uses processChatMessage to handle /me slash command in LAN chat + TheLAN->processChatMessage(txtInput); } } else if (controlID == buttonDirectConnectID) @@ -897,7 +902,10 @@ WindowMsgHandledType LanLobbyMenuSystem( GameWindow *window, UnsignedInt msg, // Echo the user's input to the chat window if (!txtInput.isEmpty()) - TheLAN->RequestChat(txtInput, LANAPIInterface::LANCHAT_NORMAL); + { + // TheSuperHackers @feature arcticdolphin 08/03/2026 Uses processChatMessage to handle /me slash command in LAN chat + TheLAN->processChatMessage(txtInput); + } } /* diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ScoreScreen.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ScoreScreen.cpp index 38c88601e4..3e4bf85cd6 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ScoreScreen.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ScoreScreen.cpp @@ -109,7 +109,8 @@ static NameKeyType parentID = NAMEKEY_INVALID; static NameKeyType buttonOkID = NAMEKEY_INVALID; ///static NameKeyType buttonRehostID = NAMEKEY_INVALID; static NameKeyType textEntryChatID = NAMEKEY_INVALID; -static NameKeyType buttonEmoteID = NAMEKEY_INVALID; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static NameKeyType buttonChatID = NAMEKEY_INVALID; static NameKeyType chatBoxBorderID = NAMEKEY_INVALID; static NameKeyType buttonContinueID = NAMEKEY_INVALID; static NameKeyType buttonBuddiesID = NAMEKEY_INVALID; @@ -121,7 +122,8 @@ static GameWindow *buttonOk = nullptr; //static GameWindow *buttonRehost = nullptr; static GameWindow *buttonContinue = nullptr; static GameWindow *textEntryChat = nullptr; -static GameWindow *buttonEmote = nullptr; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static GameWindow *buttonChat = nullptr; static GameWindow *chatBoxBorder = nullptr; static GameWindow *buttonBuddies = nullptr; static GameWindow *staticTextGameSaved = nullptr; @@ -270,7 +272,8 @@ void ScoreScreenInit( WindowLayout *layout, void *userData ) parentID = TheNameKeyGenerator->nameToKey( "ScoreScreen.wnd:ParentScoreScreen" ); buttonOkID = TheNameKeyGenerator->nameToKey( "ScoreScreen.wnd:ButtonOk" ); textEntryChatID = TheNameKeyGenerator->nameToKey( "ScoreScreen.wnd:TextEntryChat" ); - buttonEmoteID = TheNameKeyGenerator->nameToKey( "ScoreScreen.wnd:ButtonEmote" ); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChatID = TheNameKeyGenerator->nameToKey( "ScoreScreen.wnd:ButtonEmote" ); // TODO Rename ButtonEmote to ButtonChat in .wnd file listboxChatWindowScoreScreenID = TheNameKeyGenerator->nameToKey( "ScoreScreen.wnd:ListboxChatWindowScoreScreen" ); listboxAcademyWindowScoreScreenID = TheNameKeyGenerator->nameToKey( "ScoreScreen.wnd:ListboxWarschoolAdvice" ); staticTextAcademyTitleID = TheNameKeyGenerator->nameToKey( "ScoreScreen.wnd:StaticTextWarSchool" ); @@ -284,7 +287,8 @@ void ScoreScreenInit( WindowLayout *layout, void *userData ) parent = TheWindowManager->winGetWindowFromId( nullptr, parentID ); buttonOk = TheWindowManager->winGetWindowFromId( parent, buttonOkID ); textEntryChat = TheWindowManager->winGetWindowFromId( parent, textEntryChatID ); - buttonEmote = TheWindowManager->winGetWindowFromId( parent,buttonEmoteID ); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChat = TheWindowManager->winGetWindowFromId( parent,buttonChatID ); listboxChatWindowScoreScreen = TheWindowManager->winGetWindowFromId( parent, listboxChatWindowScoreScreenID ); listboxAcademyWindowScoreScreen = TheWindowManager->winGetWindowFromId( parent, listboxAcademyWindowScoreScreenID ); staticTextAcademyTitle = TheWindowManager->winGetWindowFromId( parent, staticTextAcademyTitleID ); @@ -592,7 +596,8 @@ WindowMsgHandledType ScoreScreenSystem( GameWindow *window, UnsignedInt msg, saveReplayLayout->bringForward(); } - else if ( controlID == buttonEmoteID ) + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + else if ( controlID == buttonChatID ) { // read the user's input txtInput.set(GadgetTextEntryGetText( textEntryChat )); @@ -603,7 +608,10 @@ WindowMsgHandledType ScoreScreenSystem( GameWindow *window, UnsignedInt msg, // Echo the user's input to the chat window if (!txtInput.isEmpty()) if(TheLAN) - TheLAN->RequestChat(txtInput, LANAPIInterface::LANCHAT_EMOTE); + { + // TheSuperHackers @feature arcticdolphin 08/03/2026 Uses processChatMessage to handle /me slash command in LAN chat + TheLAN->processChatMessage(txtInput); + } //add the gamespy chat request here } for(Int i = 0; i < MAX_SLOTS; ++i) @@ -660,7 +668,10 @@ WindowMsgHandledType ScoreScreenSystem( GameWindow *window, UnsignedInt msg, // Echo the user's input to the chat window if (!txtInput.isEmpty()) if(TheLAN) - TheLAN->RequestChat(txtInput, LANAPIInterface::LANCHAT_NORMAL); + { + // TheSuperHackers @feature arcticdolphin 08/03/2026 Uses processChatMessage to handle /me slash command in LAN chat + TheLAN->processChatMessage(txtInput); + } //add the gamespy chat request here } @@ -684,8 +695,9 @@ void initSkirmish() grabMultiPlayerInfo(); if (textEntryChat) textEntryChat->winHide(TRUE); - if (buttonEmote) - buttonEmote->winHide(TRUE); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + if (buttonChat) + buttonChat->winHide(TRUE); if (chatBoxBorder) chatBoxBorder->winHide(TRUE); if (buttonBuddies) @@ -886,8 +898,9 @@ void finishSinglePlayerInit() buttonContinue->winHide(TRUE); if (textEntryChat) textEntryChat->winHide(TRUE); - if (buttonEmote) - buttonEmote->winHide(TRUE); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + if (buttonChat) + buttonChat->winHide(TRUE); if (listboxChatWindowScoreScreen) listboxChatWindowScoreScreen->winHide(TRUE); if( listboxAcademyWindowScoreScreen ) @@ -970,8 +983,9 @@ void finishSinglePlayerInit() buttonContinue->winHide(FALSE); if (textEntryChat) textEntryChat->winHide(TRUE); - if (buttonEmote) - buttonEmote->winHide(TRUE); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + if (buttonChat) + buttonChat->winHide(TRUE); if (listboxChatWindowScoreScreen) listboxChatWindowScoreScreen->winHide(TRUE); @@ -1003,8 +1017,9 @@ void initReplaySinglePlayer() staticTextGameSaved->winHide(TRUE); if (textEntryChat) textEntryChat->winHide(TRUE); - if (buttonEmote) - buttonEmote->winHide(TRUE); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + if (buttonChat) + buttonChat->winHide(TRUE); if (chatBoxBorder) chatBoxBorder->winHide(TRUE); if (buttonContinue) @@ -1034,8 +1049,9 @@ void initLANMultiPlayer() staticTextGameSaved->winHide(TRUE); if (textEntryChat) textEntryChat->winHide(FALSE); - if (buttonEmote) - buttonEmote->winHide(FALSE); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + if (buttonChat) + buttonChat->winHide(FALSE); if (buttonContinue) buttonContinue->winHide(TRUE); if (listboxChatWindowScoreScreen) @@ -1065,8 +1081,9 @@ void initInternetMultiPlayer() buttonContinue->winHide(TRUE); if (textEntryChat) textEntryChat->winHide(TRUE); - if (buttonEmote) - buttonEmote->winHide(TRUE); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + if (buttonChat) + buttonChat->winHide(TRUE); if (listboxChatWindowScoreScreen) listboxChatWindowScoreScreen->winHide(FALSE); @@ -1104,8 +1121,9 @@ void initReplayMultiPlayer() staticTextGameSaved->winHide(TRUE); if (textEntryChat) textEntryChat->winHide(TRUE); - if (buttonEmote) - buttonEmote->winHide(TRUE); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + if (buttonChat) + buttonChat->winHide(TRUE); if (listboxChatWindowScoreScreen) listboxChatWindowScoreScreen->winHide(TRUE); if( listboxAcademyWindowScoreScreen ) diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp index f360ba9423..cca17a61d5 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp @@ -189,7 +189,8 @@ static NameKeyType textEntryChatID = NAMEKEY_INVALID; static NameKeyType textEntryMapDisplayID = NAMEKEY_INVALID; static NameKeyType buttonBackID = NAMEKEY_INVALID; static NameKeyType buttonStartID = NAMEKEY_INVALID; -static NameKeyType buttonEmoteID = NAMEKEY_INVALID; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static NameKeyType buttonChatID = NAMEKEY_INVALID; static NameKeyType buttonSelectMapID = NAMEKEY_INVALID; static NameKeyType windowMapID = NAMEKEY_INVALID; @@ -204,7 +205,8 @@ static GameWindow *parentWOLGameSetup = nullptr; static GameWindow *buttonBack = nullptr; static GameWindow *buttonStart = nullptr; static GameWindow *buttonSelectMap = nullptr; -static GameWindow *buttonEmote = nullptr; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static GameWindow *buttonChat = nullptr; static GameWindow *textEntryChat = nullptr; static GameWindow *textEntryMapDisplay = nullptr; static GameWindow *windowMap = nullptr; @@ -1106,7 +1108,8 @@ void InitWOLGameGadgets() textEntryChatID = TheNameKeyGenerator->nameToKey( "GameSpyGameOptionsMenu.wnd:TextEntryChat" ); textEntryMapDisplayID = TheNameKeyGenerator->nameToKey( "GameSpyGameOptionsMenu.wnd:TextEntryMapDisplay" ); listboxGameSetupChatID = TheNameKeyGenerator->nameToKey( "GameSpyGameOptionsMenu.wnd:ListboxChatWindowGameSpyGameSetup" ); - buttonEmoteID = TheNameKeyGenerator->nameToKey( "GameSpyGameOptionsMenu.wnd:ButtonEmote" ); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChatID = TheNameKeyGenerator->nameToKey( "GameSpyGameOptionsMenu.wnd:ButtonEmote" ); // TODO Rename ButtonEmote to ButtonChat in .wnd file buttonSelectMapID = TheNameKeyGenerator->nameToKey( "GameSpyGameOptionsMenu.wnd:ButtonSelectMap" ); checkBoxUseStatsID = TheNameKeyGenerator->nameToKey( "GameSpyGameOptionsMenu.wnd:CheckBoxUseStats" ); windowMapID = TheNameKeyGenerator->nameToKey( "GameSpyGameOptionsMenu.wnd:MapWindow" ); @@ -1119,7 +1122,8 @@ void InitWOLGameGadgets() // Initialize the pointers to our gadgets parentWOLGameSetup = TheWindowManager->winGetWindowFromId( nullptr, parentWOLGameSetupID ); - buttonEmote = TheWindowManager->winGetWindowFromId( parentWOLGameSetup,buttonEmoteID ); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChat = TheWindowManager->winGetWindowFromId( parentWOLGameSetup,buttonChatID ); buttonSelectMap = TheWindowManager->winGetWindowFromId( parentWOLGameSetup,buttonSelectMapID ); checkBoxUseStats = TheWindowManager->winGetWindowFromId( parentWOLGameSetup, checkBoxUseStatsID ); buttonStart = TheWindowManager->winGetWindowFromId( parentWOLGameSetup,buttonStartID ); @@ -1270,7 +1274,8 @@ void InitWOLGameGadgets() void DeinitWOLGameGadgets() { parentWOLGameSetup = nullptr; - buttonEmote = nullptr; + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChat = nullptr; buttonSelectMap = nullptr; buttonStart = nullptr; buttonBack = nullptr; @@ -2701,7 +2706,8 @@ WindowMsgHandledType WOLGameSetupMenuSystem( GameWindow *window, UnsignedInt msg GameSpyToggleOverlay( GSOVERLAY_BUDDY ); } - else if ( controlID == buttonEmoteID ) + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + else if ( controlID == buttonChatID ) { // read the user's input txtInput.set(GadgetTextEntryGetText( textEntryChat )); diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLLobbyMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLLobbyMenu.cpp index bbfa632b82..0ef7875ac1 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLLobbyMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLLobbyMenu.cpp @@ -103,7 +103,8 @@ static NameKeyType buttonHostID = NAMEKEY_INVALID; static NameKeyType buttonRefreshID = NAMEKEY_INVALID; static NameKeyType buttonJoinID = NAMEKEY_INVALID; static NameKeyType buttonBuddyID = NAMEKEY_INVALID; -static NameKeyType buttonEmoteID = NAMEKEY_INVALID; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static NameKeyType buttonChatID = NAMEKEY_INVALID; static NameKeyType textEntryChatID = NAMEKEY_INVALID; static NameKeyType listboxLobbyPlayersID = NAMEKEY_INVALID; static NameKeyType listboxLobbyChatID = NAMEKEY_INVALID; @@ -117,7 +118,8 @@ static GameWindow *buttonHost = nullptr; static GameWindow *buttonRefresh = nullptr; static GameWindow *buttonJoin = nullptr; static GameWindow *buttonBuddy = nullptr; -static GameWindow *buttonEmote = nullptr; +// TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose +static GameWindow *buttonChat = nullptr; static GameWindow *textEntryChat = nullptr; static GameWindow *listboxLobbyPlayers = nullptr; static GameWindow *listboxLobbyChat = nullptr; @@ -641,8 +643,9 @@ void WOLLobbyMenuInit( WindowLayout *layout, void *userData ) buttonBuddyID = TheNameKeyGenerator->nameToKey("WOLCustomLobby.wnd:ButtonBuddy"); buttonBuddy = TheWindowManager->winGetWindowFromId(parent, buttonBuddyID); - buttonEmoteID = TheNameKeyGenerator->nameToKey("WOLCustomLobby.wnd:ButtonEmote"); - buttonEmote = TheWindowManager->winGetWindowFromId(parent, buttonEmoteID); + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + buttonChatID = TheNameKeyGenerator->nameToKey("WOLCustomLobby.wnd:ButtonEmote"); // TODO Rename ButtonEmote to ButtonChat in .wnd file + buttonChat = TheWindowManager->winGetWindowFromId(parent, buttonChatID); textEntryChatID = TheNameKeyGenerator->nameToKey("WOLCustomLobby.wnd:TextEntryChat"); textEntryChat = TheWindowManager->winGetWindowFromId(parent, textEntryChatID); @@ -1639,7 +1642,8 @@ WindowMsgHandledType WOLLobbyMenuSystem( GameWindow *window, UnsignedInt msg, { ToggleGameListType(); } - else if ( controlID == buttonEmoteID ) + // TheSuperHackers @tweak arcticdolphin 08/03/2026 Renamed from buttonEmote to buttonChat to reflect chat button purpose + else if ( controlID == buttonChatID ) { // read the user's input and clear the entry box UnicodeString txtInput;