Transport Layer:Transmission Control Protocol (TCP)
Application Layer:Battle.net v1 TCP Messages (SID)
Message Id:0x22
Direction:Client to Server
Used By:Starcraft Original, Starcraft Broodwar
Starcraft Shareware, Starcraft Japanese
Diablo Retail, Diablo Shareware
Diablo II, Diablo II Lord of Destruction
Warcraft II BNE
Message Format:
(does not include protocol header)
(UINT32) Product ID *
(UINT32) Product version
(STRING) Game Name
(STRING) Game Password


Notifies Battle.net that the client has joined a game. This is what causes you to receive "Your friend entered a game called _." from Battle.net if you are mutual friends with this client.

SID_LEAVECHAT (0x10) does not need to be sent after this, since this does what LEAVECHAT does but with an added notification.

  • This can be any valid Product ID, even if you are not connected with that ID.



Ripple Chat Bot is awesome for this...
Open RCB, connect, enter a channel or something...
Press Ctrl+P to open the Packet Builder.

  • Packet ID: 22
  • String: The client ID your using (I used NB2W, while using Diablo II)
  • DWORD: Anything you want... (I used 79 which is 4F)
  • NTString: A game that's currently online (find one with /games).
  • NTString: The password, leave blank if no password.
    Press Send and then type "/whoami", or look at the channel you were in and notice your not in it.

I have messed with this packet enough to know that, the first DWORD must be a valid game ID (doesn't have to be your current client) and the second DWORD can be anything you wish (0-255).

I assume these:

  • The first DWORD is used to tell other clients that you are or are not playing the same game id as they are.
  • The second DWORD is used to tell other clients that you are or are not playing the same game version as they are.