Skip to content

Commit f0b8460

Browse files
committed
Addressed code review comments.
Renamed 'patch' to 'product' and added more information to the product information that's exchanged between clients.
1 parent c4e3f1d commit f0b8460

File tree

10 files changed

+93
-76
lines changed

10 files changed

+93
-76
lines changed

GeneralsMD/Code/GameEngine/Include/GameNetwork/GameInfo.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,8 @@ class GameSlot
126126
void mute( Bool isMuted ) { m_isMuted = isMuted; }
127127
Bool isMuted( void ) const { return m_isMuted; }
128128

129-
void setPatchVersion(UnsignedInt patchVersion) { m_patchVersion = patchVersion; }
130-
UnsignedInt getPatchVersion() const { return m_patchVersion; }
129+
void setProductVersion(UnsignedInt productVersion) { m_productVersion = productVersion; }
130+
UnsignedInt getProductVersion() const { return m_productVersion; }
131131
protected:
132132
SlotState m_state;
133133
Bool m_isAccepted;
@@ -146,7 +146,7 @@ class GameSlot
146146
FirewallHelperClass::FirewallBehaviorType m_NATBehavior; ///< The NAT behavior for this slot's player.
147147
UnsignedInt m_lastFrameInGame; // only valid for human players
148148
Bool m_disconnected; // only valid for human players
149-
UnsignedInt m_patchVersion; ///< Community made product version
149+
UnsignedInt m_productVersion; ///< Community made product version
150150
};
151151

152152
/**

GeneralsMD/Code/GameEngine/Include/GameNetwork/LANAPI.h

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ class LANAPI : public LANAPIInterface
198198
// Misc utility functions
199199
virtual LANGameInfo * LookupGame( UnicodeString gameName ); ///< return a pointer to a game we know about
200200
virtual LANGameInfo * LookupGameByListOffset( Int offset ); ///< return a pointer to a game we know about
201+
virtual LANGameInfo * LookupGameByHost( UnsignedInt hostIP ); ///< return a pointer to a game we know about
201202
virtual LANPlayer * LookupPlayer( UnsignedInt playerIP ); ///< return a pointer to a player we know about
202203
virtual Bool SetLocalIP( UnsignedInt localIP ); ///< For multiple NIC machines
203204
virtual void SetLocalIP( AsciiString localIP ); ///< For multiple NIC machines
@@ -277,13 +278,13 @@ class LANAPI : public LANAPIInterface
277278
void handleGameOptions( LANMessage *msg, UnsignedInt senderIP );
278279
void handleInActive( LANMessage *msg, UnsignedInt senderIP );
279280

280-
void handlePatchInfo(Int messageType, UnsignedInt senderIP, UnicodeString gameName);
281-
void handleGameRequestPatchInfo(LANMessage *msg, UnsignedInt senderIP);
282-
void handleGameAcknowledgePatchInfo(LANMessage *msg, UnsignedInt senderIP);
283-
void handleLobbyRequestPatchInfo(LANMessage *msg, UnsignedInt senderIP);
284-
void handleLobbyAcknowledgePatchInfo(LANMessage *msg, UnsignedInt senderIP);
285-
void handleMatchRequestPatchInfo(LANMessage *msg, UnsignedInt senderIP);
286-
void handleMatchAcknowledgePatchInfo(LANMessage *msg, UnsignedInt senderIP);
281+
void sendProductInfoMessage(Int messageType, UnsignedInt senderIP);
282+
void handleGameProductInfoRequest(LANMessage *msg, UnsignedInt senderIP);
283+
void handleGameProductInfoResponse(LANMessage *msg, UnsignedInt senderIP);
284+
void handleLobbyProductInfoRequest(LANMessage *msg, UnsignedInt senderIP);
285+
void handleLobbyProductInfoResponse(LANMessage *msg, UnsignedInt senderIP);
286+
void handleMatchProductInfoRequest(LANMessage *msg, UnsignedInt senderIP);
287+
void handleMatchProductInfoResponse(LANMessage *msg, UnsignedInt senderIP);
287288
};
288289

289290

@@ -321,13 +322,13 @@ struct LANMessage
321322

322323
MSG_REQUEST_GAME_INFO, ///< For direct connect, get the game info from a specific IP Address
323324

324-
// Community patch
325-
MSG_GAME_REQUEST_PATCH_INFO = 1000,
326-
MSG_GAME_ACKNOWLEDGE_PATCH_INFO,
327-
MSG_LOBBY_REQUEST_PATCH_INFO,
328-
MSG_LOBBY_ACKNOWLEDGE_PATCH_INFO,
329-
MSG_MATCH_REQUEST_PATCH_INFO,
330-
MSG_MATCH_ACKNOWLEDGE_PATCH_INFO,
325+
// Community Product
326+
MSG_GAME_REQUEST_PRODUCT_INFO = 1000,
327+
MSG_GAME_RESPONSE_PRODUCT_INFO,
328+
MSG_LOBBY_REQUEST_PRODUCT_INFO,
329+
MSG_LOBBY_RESPONSE_PRODUCT_INFO,
330+
MSG_MATCH_REQUEST_PRODUCT_INFO,
331+
MSG_MATCH_RESPONSE_PRODUCT_INFO,
331332
} messageType;
332333

333334
WideChar name[g_lanPlayerNameLength+1]; ///< My name, for convenience
@@ -424,9 +425,12 @@ struct LANMessage
424425

425426
struct
426427
{
427-
WideChar gameName[g_lanGameNameLength + 1];
428-
UnsignedInt patchVersion;
429-
} PatchInfo;
428+
UnsignedInt exeHash;
429+
UnsignedInt iniHash;
430+
UnsignedInt productVersion;
431+
Char gitTagOrHash[33];
432+
WideChar productName[129];
433+
} ProductInfo;
430434
};
431435
};
432436
#pragma pack(pop)

GeneralsMD/Code/GameEngine/Include/GameNetwork/LANPlayer.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
class LANPlayer
3636
{
3737
public:
38-
LANPlayer() { m_name = m_login = m_host = L""; m_lastHeard = 0; m_next = NULL; m_IP = 0; m_patchVersion = 0; }
38+
LANPlayer() { m_name = m_login = m_host = L""; m_lastHeard = 0; m_next = NULL; m_IP = 0; m_productVersion = 0; }
3939

4040
// Access functions
4141
inline UnicodeString getName( void ) { return m_name; }
@@ -52,8 +52,8 @@ class LANPlayer
5252
inline void setNext( LANPlayer *next ) { m_next = next; }
5353
inline UnsignedInt getIP( void ) { return m_IP; }
5454
inline void setIP( UnsignedInt IP ) { m_IP = IP; }
55-
inline void setPatchVersion(UnsignedInt patchVersion) { m_patchVersion = patchVersion; }
56-
inline UnsignedInt getPatchVersion() const { return m_patchVersion; }
55+
inline void setProductVersion(UnsignedInt productVersion) { m_productVersion = productVersion; }
56+
inline UnsignedInt getProductVersion() const { return m_productVersion; }
5757

5858
protected:
5959
UnicodeString m_name; ///< Player name
@@ -62,5 +62,5 @@ class LANPlayer
6262
UnsignedInt m_lastHeard; ///< The last time we heard from this player (for timeout purposes)
6363
LANPlayer *m_next; ///< Linked list pointer
6464
UnsignedInt m_IP; ///< Player's IP
65-
UnsignedInt m_patchVersion; ///< Community made product version
65+
UnsignedInt m_productVersion; ///< Community made product version
6666
};

GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Diplomacy.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,7 @@ void PopulateInGameDiplomacyPopup( void )
574574
}
575575

576576
// TheSuperHackers @feature Caball009 06/11/2025 Set special status for players that are using a patched client version.
577-
if (slot->isHuman() && (TheGameInfo->getLocalSlotNum() == slotNum || slot->getPatchVersion() > 0))
577+
if (slot->isHuman() && (TheGameInfo->getLocalSlotNum() == slotNum || slot->getProductVersion() > 0))
578578
text.format(L"%s [%s]", text.str(), TheVersion->getUnicodeGitTagOrHash().str());
579579

580580
staticTextStatus[rowNum]->winSetEnabledTextColors(frontColor, backColor);

GeneralsMD/Code/GameEngine/Source/GameNetwork/GUIUtil.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ void UpdateSlotList( GameInfo *myGame, GameWindow *comboPlayer[],
423423
}
424424
if(slot->isHuman())
425425
{
426-
if (i == myGame->getLocalSlotNum() || myGame->getSlot(i)->getPatchVersion() > 0)
426+
if (i == myGame->getLocalSlotNum() || myGame->getSlot(i)->getProductVersion() > 0)
427427
{
428428
// TheSuperHackers @feature Caball009 06/11/2025 Set special color for players that are using a patched client version.
429429
GadgetComboBoxSetEnabledTextColors(comboPlayer[i], playerColorPatchVersion, GameMakeColor(0, 0, 0, 255));

GeneralsMD/Code/GameEngine/Source/GameNetwork/GameInfo.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ void GameSlot::reset()
7373
m_origPlayerTemplate = -1;
7474
m_origStartPos = -1;
7575
m_origColor = -1;
76-
m_patchVersion = 0;
76+
m_productVersion = 0;
7777
}
7878

7979
void GameSlot::saveOffOriginalInfo( void )
@@ -1488,7 +1488,7 @@ Bool ParseAsciiStringToGameInfo(GameInfo *game, AsciiString options)
14881488
{
14891489
// retain the patch version if a slot is still occupied by the same player
14901490
if (game->getConstSlot(i)->getState() == SLOT_PLAYER && newSlot[i].getState() == SLOT_PLAYER)
1491-
newSlot[i].setPatchVersion(game->getConstSlot(i)->getPatchVersion());
1491+
newSlot[i].setProductVersion(game->getConstSlot(i)->getProductVersion());
14921492

14931493
game->setSlot(i,newSlot[i]);
14941494
}

GeneralsMD/Code/GameEngine/Source/GameNetwork/LANAPI.cpp

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -425,24 +425,24 @@ void LANAPI::update( void )
425425
handleInActive( msg, senderIP );
426426
break;
427427

428-
// TheSuperHackers @feature Caball009 06/11/2025 Exchange patch information with other players.
429-
case LANMessage::MSG_GAME_REQUEST_PATCH_INFO:
430-
handleGameRequestPatchInfo(msg, senderIP);
428+
// TheSuperHackers @feature Caball009 06/11/2025 Exchange product information with other players.
429+
case LANMessage::MSG_GAME_REQUEST_PRODUCT_INFO:
430+
handleGameProductInfoRequest(msg, senderIP);
431431
break;
432-
case LANMessage::MSG_GAME_ACKNOWLEDGE_PATCH_INFO:
433-
handleGameAcknowledgePatchInfo(msg, senderIP);
432+
case LANMessage::MSG_GAME_RESPONSE_PRODUCT_INFO:
433+
handleGameProductInfoResponse(msg, senderIP);
434434
break;
435-
case LANMessage::MSG_LOBBY_REQUEST_PATCH_INFO:
436-
handleLobbyRequestPatchInfo(msg, senderIP);
435+
case LANMessage::MSG_LOBBY_REQUEST_PRODUCT_INFO:
436+
handleLobbyProductInfoRequest(msg, senderIP);
437437
break;
438-
case LANMessage::MSG_LOBBY_ACKNOWLEDGE_PATCH_INFO:
439-
handleLobbyAcknowledgePatchInfo(msg, senderIP);
438+
case LANMessage::MSG_LOBBY_RESPONSE_PRODUCT_INFO:
439+
handleLobbyProductInfoResponse(msg, senderIP);
440440
break;
441-
case LANMessage::MSG_MATCH_REQUEST_PATCH_INFO:
442-
handleMatchRequestPatchInfo(msg, senderIP);
441+
case LANMessage::MSG_MATCH_REQUEST_PRODUCT_INFO:
442+
handleMatchProductInfoRequest(msg, senderIP);
443443
break;
444-
case LANMessage::MSG_MATCH_ACKNOWLEDGE_PATCH_INFO:
445-
handleMatchAcknowledgePatchInfo(msg, senderIP);
444+
case LANMessage::MSG_MATCH_RESPONSE_PRODUCT_INFO:
445+
handleMatchProductInfoResponse(msg, senderIP);
446446
break;
447447

448448
default:
@@ -1132,6 +1132,18 @@ LANGameInfo * LANAPI::LookupGameByListOffset( Int offset )
11321132
return theGame; // NULL means we didn't find anything.
11331133
}
11341134

1135+
LANGameInfo * LANAPI::LookupGameByHost( UnsignedInt hostIP )
1136+
{
1137+
LANGameInfo* theGame = m_games;
1138+
1139+
while (theGame && theGame->getHostIP() != hostIP)
1140+
{
1141+
theGame = theGame->getNext();
1142+
}
1143+
1144+
return theGame; // NULL means we didn't find anything.
1145+
}
1146+
11351147
void LANAPI::removeGame( LANGameInfo *game )
11361148
{
11371149
LANGameInfo *g = m_games;

GeneralsMD/Code/GameEngine/Source/GameNetwork/LANAPICallbacks.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -645,7 +645,7 @@ void LANAPI::OnPlayerList( LANPlayer *playerList )
645645
while (player)
646646
{
647647
// TheSuperHackers @feature Caball009 06/11/2025 Set special color for players that are using a patched client version.
648-
const Color color = (player->getPatchVersion() > 0 || m_localIP == player->getIP()) ? playerColorPatchVersion : playerColor;
648+
const Color color = (player->getProductVersion() > 0 || m_localIP == player->getIP()) ? playerColorPatchVersion : playerColor;
649649
const Int addedIndex = GadgetListBoxAddEntryText(listboxPlayers, player->getName(), color, -1, -1);
650650
GadgetListBoxSetItemData(listboxPlayers, (void *)player->getIP(),addedIndex, 0 );
651651

GeneralsMD/Code/GameEngine/Source/GameNetwork/LANAPIhandlers.cpp

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -41,55 +41,56 @@
4141
#include "GameNetwork/LANAPICallbacks.h"
4242
#include "GameClient/MapUtil.h"
4343

44-
void LANAPI::handlePatchInfo(Int messageType, UnsignedInt senderIP, UnicodeString gameName)
44+
void LANAPI::sendProductInfoMessage(Int messageType, UnsignedInt senderIP)
4545
{
4646
LANMessage msg;
4747
fillInLANMessage(&msg);
4848
msg.messageType = (LANMessage::Type)messageType;
49-
wcslcpy(msg.PatchInfo.gameName, gameName.str(), ARRAY_SIZE(msg.PatchInfo.gameName));
50-
msg.PatchInfo.patchVersion = TheVersion->getVersionNumber();
49+
50+
msg.ProductInfo.exeHash = TheGlobalData->m_exeCRC;
51+
msg.ProductInfo.iniHash = TheGlobalData->m_iniCRC;
52+
msg.ProductInfo.productVersion = TheVersion->getVersionNumber();
53+
strlcpy(msg.ProductInfo.gitTagOrHash, TheVersion->getAsciiGitTagOrHash().str(), ARRAY_SIZE(msg.ProductInfo.gitTagOrHash));
54+
wcslcpy(msg.ProductInfo.productName, TheVersion->getUnicodeProductString().str(), ARRAY_SIZE(msg.ProductInfo.productName));
5155

5256
sendMessage(&msg, senderIP);
5357
}
5458

55-
void LANAPI::handleGameRequestPatchInfo(LANMessage *msg, UnsignedInt senderIP)
59+
void LANAPI::handleGameProductInfoRequest(LANMessage *msg, UnsignedInt senderIP)
5660
{
5761
if (!AmIHost())
5862
return;
5963

60-
// acknowledge as game host a request for patch information by a player in the lobby
61-
handlePatchInfo(LANMessage::MSG_GAME_ACKNOWLEDGE_PATCH_INFO, senderIP, m_currentGame->getName());
64+
// acknowledge as game host a request for product information by a player in the lobby
65+
sendProductInfoMessage(LANMessage::MSG_GAME_RESPONSE_PRODUCT_INFO, senderIP);
6266
}
6367

64-
void LANAPI::handleGameAcknowledgePatchInfo(LANMessage *msg, UnsignedInt senderIP)
68+
void LANAPI::handleGameProductInfoResponse(LANMessage *msg, UnsignedInt senderIP)
6569
{
6670
if (!m_inLobby)
6771
return;
6872

69-
LANGameInfo *game = LookupGame(UnicodeString(msg->GameInfo.gameName));
73+
LANGameInfo *game = LookupGameByHost(senderIP);
7074
if (!game)
7175
return;
7276

73-
if (game->getIP(0) != senderIP)
74-
return;
75-
76-
// a game host has acknowledged our request for patch information
77-
game->getSlot(0)->setPatchVersion(msg->PatchInfo.patchVersion);
77+
// a game host has acknowledged our request for product information
78+
game->getSlot(0)->setProductVersion(msg->ProductInfo.productVersion);
7879

7980
// update game list with colored names
8081
OnGameList(m_games);
8182
}
8283

83-
void LANAPI::handleLobbyRequestPatchInfo(LANMessage *msg, UnsignedInt senderIP)
84+
void LANAPI::handleLobbyProductInfoRequest(LANMessage *msg, UnsignedInt senderIP)
8485
{
8586
if (!m_inLobby)
8687
return;
8788

88-
// acknowledge a request for patch information by a fellow player in the lobby
89-
handlePatchInfo(LANMessage::MSG_LOBBY_ACKNOWLEDGE_PATCH_INFO, senderIP, UnicodeString());
89+
// acknowledge a request for product information by a fellow player in the lobby
90+
sendProductInfoMessage(LANMessage::MSG_LOBBY_RESPONSE_PRODUCT_INFO, senderIP);
9091
}
9192

92-
void LANAPI::handleLobbyAcknowledgePatchInfo(LANMessage *msg, UnsignedInt senderIP)
93+
void LANAPI::handleLobbyProductInfoResponse(LANMessage *msg, UnsignedInt senderIP)
9394
{
9495
if (!m_inLobby)
9596
return;
@@ -98,26 +99,26 @@ void LANAPI::handleLobbyAcknowledgePatchInfo(LANMessage *msg, UnsignedInt sender
9899
if (!player)
99100
return;
100101

101-
// a fellow player in the lobby has acknowledged our request for patch information
102-
player->setPatchVersion(msg->PatchInfo.patchVersion);
102+
// a fellow player in the lobby has acknowledged our request for product information
103+
player->setProductVersion(msg->ProductInfo.productVersion);
103104

104105
// update player list with colored names
105106
OnPlayerList(m_lobbyPlayers);
106107
}
107108

108-
void LANAPI::handleMatchRequestPatchInfo(LANMessage *msg, UnsignedInt senderIP)
109+
void LANAPI::handleMatchProductInfoRequest(LANMessage *msg, UnsignedInt senderIP)
109110
{
110111
if (!m_currentGame)
111112
return;
112113

113-
// acknowledge a request for patch information by a fellow player in the game
114-
handlePatchInfo(LANMessage::MSG_MATCH_ACKNOWLEDGE_PATCH_INFO, senderIP, m_currentGame->getName());
114+
// acknowledge a request for product information by a fellow player in the game
115+
sendProductInfoMessage(LANMessage::MSG_MATCH_RESPONSE_PRODUCT_INFO, senderIP);
115116

116-
// treat request for patch information as acknowledgement
117-
handleMatchAcknowledgePatchInfo(msg, senderIP);
117+
// treat request for product information as acknowledgement
118+
handleMatchProductInfoResponse(msg, senderIP);
118119
}
119120

120-
void LANAPI::handleMatchAcknowledgePatchInfo(LANMessage *msg, UnsignedInt senderIP)
121+
void LANAPI::handleMatchProductInfoResponse(LANMessage *msg, UnsignedInt senderIP)
121122
{
122123
if (!m_currentGame)
123124
return;
@@ -127,8 +128,8 @@ void LANAPI::handleMatchAcknowledgePatchInfo(LANMessage *msg, UnsignedInt sender
127128
if (!m_currentGame->getLANSlot(i)->isHuman() || m_currentGame->getIP(i) != senderIP)
128129
continue;
129130

130-
// a fellow player in the game has acknowledged our request for patch information
131-
m_currentGame->getSlot(i)->setPatchVersion(msg->PatchInfo.patchVersion);
131+
// a fellow player in the game has acknowledged our request for product information
132+
m_currentGame->getSlot(i)->setProductVersion(msg->ProductInfo.productVersion);
132133

133134
// update player list with colored names
134135
lanUpdateSlotList();
@@ -237,8 +238,8 @@ void LANAPI::handleGameAnnounce( LANMessage *msg, UnsignedInt senderIP )
237238
game->setName(UnicodeString(msg->GameInfo.gameName));
238239
addGame(game);
239240

240-
// TheSuperHackers @feature Caball009 06/11/2025 Request a game host to send patch information.
241-
handlePatchInfo(LANMessage::MSG_GAME_REQUEST_PATCH_INFO, senderIP, game->getName());
241+
// TheSuperHackers @feature Caball009 06/11/2025 Request a game host to send product information.
242+
sendProductInfoMessage(LANMessage::MSG_GAME_REQUEST_PRODUCT_INFO, senderIP);
242243
}
243244
Bool success = ParseGameOptionsString(game,AsciiString(msg->GameInfo.options));
244245
game->setGameInProgress(msg->GameInfo.inProgress);
@@ -266,8 +267,8 @@ void LANAPI::handleLobbyAnnounce( LANMessage *msg, UnsignedInt senderIP )
266267
player = NEW LANPlayer;
267268
player->setIP(senderIP);
268269

269-
// TheSuperHackers @feature Caball009 06/11/2025 Request a player in the lobby to send patch information.
270-
handlePatchInfo(LANMessage::MSG_LOBBY_REQUEST_PATCH_INFO, senderIP, UnicodeString());
270+
// TheSuperHackers @feature Caball009 06/11/2025 Request a player in the lobby to send product information.
271+
sendProductInfoMessage(LANMessage::MSG_LOBBY_REQUEST_PRODUCT_INFO, senderIP);
271272
}
272273
else
273274
{
@@ -505,8 +506,8 @@ void LANAPI::handleJoinAccept( LANMessage *msg, UnsignedInt senderIP )
505506
//DEBUG_ASSERTCRASH(false, ("setting host to %ls@%ls", m_currentGame->getLANSlot(0)->getUser()->getLogin().str(),
506507
// m_currentGame->getLANSlot(0)->getUser()->getHost().str()));
507508

508-
// TheSuperHackers @feature Caball009 06/11/2025 Request players in the match to send patch information.
509-
handlePatchInfo(LANMessage::MSG_MATCH_REQUEST_PATCH_INFO, 0, m_currentGame->getName());
509+
// TheSuperHackers @feature Caball009 06/11/2025 Request players in the match to send product information.
510+
sendProductInfoMessage(LANMessage::MSG_MATCH_REQUEST_PRODUCT_INFO, 0);
510511
}
511512
m_pendingAction = ACT_NONE;
512513
m_expiration = 0;

GeneralsMD/Code/GameEngine/Source/GameNetwork/LANGameInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ void LANDisplayGameList( GameWindow *gameListbox, LANGameInfo *gameList )
228228
}
229229

230230
// TheSuperHackers @feature Caball009 06/11/2025 Set special color for games that are using a patched client version.
231-
const Color color = (gameList->getSlot(0)->getPatchVersion() > 0)
231+
const Color color = (gameList->getSlot(0)->getProductVersion() > 0)
232232
? ((gameList->isGameInProgress()) ? gameInProgressColorPatchVersion : gameColorPatchVersion)
233233
: ((gameList->isGameInProgress()) ? gameInProgressColor : gameColor);
234234
const Int addedIndex = GadgetListBoxAddEntryText(gameListbox, txtGName, color, -1, -1);

0 commit comments

Comments
 (0)