PSO Network Protocol Documentation by Fuzziqer Software ================================== PSO sends game data in "commands". Each command has a 4-byte (8-byte on BB) header that tells what type of command it is, and the total size of the command. -------------- Header formats -------------- For PSO GameCube and PSO DC, the header is formatted like this: CC FF SS SS (C = command number, F = flags, S = size) For PSO PC, the header is formatted like this: SS SS CC FF (C = command number, F = flags, S = size) For PSO BB, the header (8 bytes rather than 4) is formatted like this: SS SS CC CC FF FF FF FF (C = command number, F = flags, S = size) --------------------- Command documentation --------------------- 00 - invalid command 01 - lobby message box (server->client) (all versions) DC/GC: 01 00 SS SS 00 00 00 00 00 00 00 00 PC: SS SS 01 00 00 00 00 00 00 00 00 00 BB: SS SS 01 00 00 00 00 00 00 00 00 00 00 00 00 00 02 - init encryption (server->client) (DC?, GC) DC/GC: 02 00 4C 00 44 72 65 61 6D 43 61 73 74 20 4C 6F 62 62 79 20 53 65 72 76 65 72 2E 20 43 6F 70 79 72 69 67 68 74 20 53 45 47 41 20 45 6E 74 65 72 70 72 69 73 65 73 2E 20 31 39 39 39 00 00 00 00 00 00 00 00 SS SS SS SS CC CC CC CC (C = client key, S = server key) Note: client will respond with either a 9A, 9D, or 9E command 03 - init encryption and check license (server->client) (BB) BB: C8 00 03 00 00 00 00 00 50 68 61 6E 74 61 73 79 20 53 74 61 72 20 4F 6E 6C 69 6E 65 20 42 6C 75 65 20 42 75 72 73 74 20 47 61 6D 65 20 53 65 72 76 65 72 2E 20 43 6F 70 79 72 69 67 68 74 20 31 39 39 39 2D 32 30 30 34 20 53 4F 4E 49 43 54 45 41 4D 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC (C = client key, S = server key) Note: client will respond with a 93 command 04 - Security data / guild card number (server->client) (DC?, PC, GC) PC: 2C 00 04 00 00 01 00 00 GG GG GG GG SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS DC/GC: 04 00 2C 00 00 01 00 00 GG GG GG GG SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS SS (G = guild card number, S = security data) Note: client will respond with a 96 command only for the first 04 it receives 05 - disconnect (client->server) (all versions) DC/GC: 05 00 04 00 PC: 04 00 05 00 BB: 08 00 05 00 00 00 00 00 06 - chat (bidirectional) (all versions) DC/GC Client->Server: 06 00 SS SS 00 00 00 00 00 00 00 00 DC/GC Server->Client: 06 00 SS SS 00 01 00 00 GG GG GG GG 09 PC Client->Server: 06 00 SS SS 00 00 00 00 00 00 00 00 PC Server->Client: 06 00 SS SS 00 01 00 00 GG GG GG GG 09 00 BB Client->Server: SS SS 06 00 00 00 00 00 00 00 00 00 00 00 00 00 BB Server->Client: SS SS 06 00 00 00 00 00 00 01 00 00 GG GG GG GG 09 00 (G = Guild Card number of player who sent message) Note: when a client sends an 06 command, the server broadcasts a chat command to all players in the same game/lobby 07 - Ship Select (server->client) (all versions) Note: DC format unknown; it's likely to be the same as the GC format PC: SS SS 07 NN MM MM MM MM XX XX XX XX 04 0F RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR [MM MM MM MM YY YY YY YY 04 0F TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT] GC: 07 NN SS SS MM MM MM MM XX XX XX XX 04 0F RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR [MM MM MM MM YY YY YY YY 04 0F TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT] BB: SS SS 07 00 NN 00 00 00 MM MM MM MM XX XX XX XX 04 00 RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR [MM MM MM MM YY YY YY YY 04 00 TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT] (S = size, N = number of items, M = menu ID, X = title ID (unused), R = menu title, Y = item ID, T = item text) Note: text in PC and BB (fields R and T) are in Unicode; on GC, they're ANSI Note: bracketed section repeats (N) times Note: R field becomes ship name when player joins a lobby Note: client will respond with either an 09 or 10 command 08 - Team Select (server->client) (all versions) Note: DC format unknown PC: SS SS 08 NN MM MM MM MM XX XX XX XX 00 00 RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR [MM MM MM MM YY YY YY YY GG HH TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT II JJ] GC: 08 NN SS SS MM MM MM MM XX XX XX XX 00 00 RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR [MM MM MM MM YY YY YY YY GG HH TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT KK JJ] BB: SS SS 08 00 NN 00 00 00 MM MM MM MM XX XX XX XX 00 00 RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR RR [MM MM MM MM YY YY YY YY GG HH TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT TT II JJ] (S = size, N = number of teams, M = menu ID, X = title ID (unused), R = menu title (unused), Y = item ID, G = difficulty (Normal: 22, Hard: 23, V Hard: 24, Ultimate: 25, Ep3 game: 0A), H = number of players, I = episode (Ep1: 40, Ep2: 41, Ep4: 43, Ep3: ignored), J = flags (add together; battle: 10, challenge: 20, locked: 02, disabled (BB): 04), K = GC flags (add together; episode 2: 80, episode 1: 40, challenge: 20, battle: 10, locked: 02)) Note: text in PC and BB (fields R and T) are in Unicode; on GC, they're ANSI Note: bracketed section repeats (N) times Note: client will respond with either an 09 or 10 command 09 - Menu item info (client->server) (all versions) DC/GC: 09 00 0C 00 MM MM MM MM II II II II PC: 0C 00 09 00 MM MM MM MM II II II II BB: 10 00 09 00 00 00 00 00 MM MM MM MM II II II II (M = menu ID, I = item ID) Note: server should respond with an 11 command 0A - invalid command 0B - invalid command 0C - invalid command 0D - invalid command 0E - invalid command 0F - invalid command 10 - Select menu item (client->server) (all versions) DC/GC: 10 00 0C 00 MM MM MM MM II II II II PC: 0C 00 10 00 MM MM MM MM II II II II BB: 10 00 10 00 00 00 00 00 MM MM MM MM II II II II (M = menu ID, I = item ID) 11 - Ship Info (server->client) (all versions) DC/GC: 11 7E SS SS 00 F0 FF BF 40 F2 FF BF PC: SS SS 11 7E 00 F0 FF BF 40 F2 FF BF BB: SS SS 11 00 00 00 00 00 00 00 00 00 00 00 00 00 12 - invalid command 13 - continue sending quest file (bidirectional) (all versions) 13 00 18 04 <0x400 byte buffer> SS SS SS SS (S = size of data in buffer (Max. 0x400)) 14 - invalid command 15 - invalid command 16 - invalid command 17 - init encryption and check license (server->client) (PC, GC) Note: same format as 02 command Note: client will respond with a DB command 18 - invalid command 19 - reconnect (server->client) (all versions) DC/GC: 19 00 0C 00 II II II II PP PP 00 00 PC: 0C 00 19 00 II II II II PP PP 00 00 BB: 10 00 19 00 00 00 00 00 II II II II PP PP 00 00 (I = IP address, P = port) Note: client will disconnect and reconnect to the given IP/port after this command is sent 1A - large message box (server->client) (all versions) DC/GC: 1A 00 SS SS PC: SS SS 1A 00 BB: SS SS 1A 00 00 00 00 00 Note: sending this command to a BB client may cause that client to disconnect Note: see D6 command for further information 1B - invalid command 1C - invalid command 1D - ping (bidirectional) (all versions) DC/GC: 1D 00 04 00 PC: 04 00 1D 00 BB: 08 00 1D 00 00 00 00 00 Note: client will respond with the exact same command 1E - invalid command 1F - Information menu (bidirectional) (DC?, PC, BB) PC client->server: 04 00 1F 00 Note: same format and usage (server->client) as 07 command 20 - invalid command 21 - GameGuard control (server->client) (BB) Note: format and usage unknown 22 - GameGuard check (bidirectional) (BB) BB (old format): 08 00 22 00 VV VV VV VV BB (new format): 18 00 22 00 00 00 00 00 VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV (V = GameGuard test value) Note: client will respond with a command in the same format, but with a different value 23 - invalid command 24 - invalid command 25 - invalid command 26 - invalid command 27 - invalid command 28 - invalid command 29 - invalid command 2A - invalid command 2B - invalid command 2C - invalid command 2D - invalid command 2E - invalid command 2F - invalid command 30 - invalid command 31 - invalid command 32 - invalid command 33 - invalid command 34 - invalid command 35 - invalid command 36 - invalid command 37 - invalid command 38 - invalid command 39 - invalid command 3A - invalid command 3B - invalid command 3C - invalid command 3D - invalid command 3E - invalid command 3F - invalid command 40 - guild card search (client->server) (all versions) DC/GC: 40 00 10 00 00 01 00 00 GG GG GG GG TT TT TT TT PC: 10 00 40 00 00 01 00 00 GG GG GG GG TT TT TT TT BB: 14 00 40 00 00 00 00 00 00 01 00 00 GG GG GG GG TT TT TT TT (G = searcher's guild card number, T = target's guild card number) Note: if target is found, server should reply with a 41 command Note: if target is not found, server should not reply 41 - guild card search result (server->client) (all versions) Note: DC and PC formats are unknown GC: 41 00 C4 00 00 01 00 00 GG GG GG GG TT TT TT TT 00 00 00 00 II II II II PP PP 00 00 LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL MM MM MM MM YY YY YY YY 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 BB: 30 01 41 00 00 00 00 00 00 01 00 00 GG GG GG GG TT TT TT TT 10 00 19 00 00 00 00 00 II II II II PP PP 00 00 LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL MM MM MM MM YY YY YY YY 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (G = searcher's guild card number, T = target's guild card number, I = IP address of server that target is on, P = port number on that server, L = location text ("teamname,blockname,,servername"), M = menu ID of lobby list on remote server, Y = lobby ID that player is in, N = player's name) 42 - invalid command 43 - invalid command 44 - begin sending quest file (bidirectional) (all versions) DC/GC server->client: 44 02 3C 00 NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF SS SS SS SS PC server->client: 44 02 3C 00 NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF SS SS SS SS BB server->client: 58 00 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF SS SS SS SS FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00 (N = quest name, F = filename (repeated in BB format), S = file size) 45 - invalid command 46 - invalid command 47 - invalid command 48 - invalid command 49 - invalid command 4A - invalid command 4B - invalid command 4C - invalid command 4D - invalid command 4E - invalid command 4F - invalid command 50 - invalid command 51 - invalid command 52 - invalid command 53 - invalid command 54 - invalid command 55 - invalid command 56 - invalid command 57 - invalid command 58 - invalid command 59 - invalid command 5A - invalid command 5B - invalid command 5C - invalid command 5D - invalid command 5E - invalid command 5F - invalid command 60 - broadcast command (bidirectional) (all versions) DC/GC: 60 00 SS SS PC: SS SS 60 00 BB: SS SS 60 00 00 00 00 00 (S = command size) Note: when a client sends a 60 command, the server broadcasts the command to all clients in the same lobby/game 61 - player info (client->server) (all versions) Note: exact structure of player info is too extensive to be included here 62 - target command (bidirectional) (all versions) DC/GC: 62 PP SS SS PC: SS SS 62 PP BB: SS SS 62 PP 00 00 00 00 (S = command size, P = target slot) Note: when a client sends a 62 command, the server forwards it to the player in the given slot 63 - invalid command 64 - join game (server->client) (all versions) Note: DC format unknown PC: 68 01 64 NN LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ II MM 00 DD BB EE SS CC RR RR RR RR 00 01 00 00 GC: 64 NN 14 01 LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ II MM 01 DD BB EE SS CC RR RR RR RR TT 01 00 00 BB: A8 01 64 00 NN 00 00 00 LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL LL WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW WW XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ II MM 01 DD BB 00 SS CC RR RR RR RR EE 01 00 00 (N = number of players in game, L = map layout, W/X/Y/Z = player lobby data for players 1/2/3/4 respectively, I = client ID of joining player, M = leader ID, D = difficulty, B = battle mode enabled, E = holiday ID, S = section ID of original creator of game, C = challenge mode enabled, R = random number unique to this game, T = episode (0-2)) 65 - other player joined game (server->client) (all versions) Note: same format as 68 command, but used only in games 66 - other player left game (server->client) (all versions) Note: same format as 69 command, but used only in games 67 - join lobby (server->client) (all versions) DC/GC: 67 NN SS SS CC LL 01 TT BB BB EE EE 00 00 00 00 PC: SS SS 67 NN CC LL 01 TT BB BB EE EE 00 00 00 00 BB: SS SS 67 00 NN 00 00 00 CC LL 01 TT BB BB EE EE 00 00 00 00 (S = size, N - number of players, C = client's ID, L = leader's ID, T = lobby number, B = block number, E = event) 68 - other player joined lobby (server->client) (all versions) Note: same format as 67 command, but always only one player 69 - other player left lobby (server->client) (all versions) DC/GC: 69 LL 08 00 LL NN 00 00 PC: 08 00 69 LL LL NN 00 00 BB: 0C 00 69 00 LL 00 00 00 LL NN 00 00 (L = leaving player ID, N = new lobby/game leader ID) Note: leaving player ID is repeated for unknown reasons 6A - invalid command 6B - invalid command 6C - broadcast command (bidirectional) (all versions) Note: same format and usage as 60 command 6D - target command (bidirectional) (all versions) Note: same format and usage as 62 command 6E - invalid command 6F - set game status (client->server) (all versions) DC/GC: 6F 00 04 00 PC: 04 00 6F 00 BB: 08 00 6F JJ 00 00 00 00 (J = 0 if game is open, 1 if a quest is in progress and the game should not be joined by anyone else) Note: this command tells when the client is done loading into a game, so other players may join 70 - invalid command 71 - invalid command 72 - invalid command 73 - invalid command 74 - invalid command 75 - invalid command 76 - invalid command 77 - invalid command 78 - invalid command 79 - invalid command 7A - invalid command 7B - invalid command 7C - invalid command 7D - invalid command 7E - invalid command 7F - invalid command 80 - invalid command 81 - simple mail (bidirectional) (all versions) Note: format unknown 82 - invalid command 83 - lobby list (server->client) (all versions) DC/GC: 83 NN SS SS [MM MM MM MM YY YY YY YY 00 00 00 00] PC: SS SS 83 NN [MM MM MM MM YY YY YY YY 00 00 00 00] BB: SS SS 83 00 NN 00 00 00 [MM MM MM MM YY YY YY YY 00 00 00 00] (S = size, N = number of lobbies (should be 15 for every PSO except Ep3, which requires 20), M = menu ID, Y = lobby ID) Note: repeat bracketed section for each lobby 84 - change lobby (client->server) (all versions) Note: same format as 10 command 85 - invalid command 86 - invalid command 87 - invalid command 88 - set lobby markers (server->client) (all versions) DC/GC: 88 NN SS SS [00 01 00 00 GG GG GG GG CC 00 00 00] PC: SS SS 88 NN [00 01 00 00 GG GG GG GG CC 00 00 00] BB: SS SS 88 00 NN 00 00 00 [00 01 00 00 GG GG GG GG CC 00 00 00] (N = number of players, S = size, G = guild card number, C = color) Note: repeat data in brackets for each player 89 - change lobby marker color (client->server) (all versions) DC/GC: 89 CC 04 00 PC: 04 00 89 CC BB: 08 00 89 00 CC 00 00 00 (C = requested marker color) Note: server should reply with an 88 command 8A - room name (bidirectional) (all versions) DC/GC client->server: 8A 00 04 00 DC/GC server->client: 8A 00 SS SS PC client->server: 04 00 8A 00 PC server->client: SS SS 8A 00 BB client->server: 08 00 8A 00 00 00 00 00 BB server->client: SS SS 8A 00 00 00 00 00 Note: server should respond to 8A with another 8A command 8B - invalid command 8C - invalid command 8D - invalid command 8E - invalid command 8F - invalid command 90 - invalid command 91 - invalid command 92 - invalid command 93 - license check / log in (client->server) (BB) Note: format not fully known 94 - invalid command 95 - invalid command 96 - client checksum (client->server) (DC?, PC?, GC) GC: 96 00 0C 00 ?? ?? ?? ?? ?? ?? ?? ?? (? = client checksum) 97 - save player data (server->client) (DC, PC, GC) DC/GC: 97 01 04 00 PC: 04 00 97 01 Note: client will *probably* respond with a B1 command 98 - leave game (client->server) (all versions) Note: same format as 61 command Note: client will automatically send an 84 command to choose a lobby to join after sending this command 99 - time accepted (client->server) (all versions) DC/GC: 99 00 04 00 PC: 04 00 99 00 BB: 08 00 99 00 00 00 00 00 Note: command might not be used on BB 9A - log in (bidirectional) (DC, PC, GC) DC/GC client->server: 9A 00 SS SS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- NN NN NN NN NN NN NN NN 00 00 00 00 00 00 00 00 AA AA AA AA AA AA AA AA AA AA AA AA 00 00 00 00 .... PC client->server: SS SS 9A 00 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- NN NN NN NN NN NN NN NN 00 00 00 00 00 00 00 00 AA AA AA AA AA AA AA AA AA AA AA AA 00 00 00 00 .... DC/GC server->client: 9A XX 04 00 PC server->client: 04 00 9A XX (S = size, N = serial number as hex string, A = access key, X = reply code (00/02: license ok)) Note: server should respond to a 9A command with its own 9A command Note: client will respond to a 9A command with either a 9C, 9D or 9E command 9B - invalid command 9C - new user (bidirectional) (DC, PC, GC) DC/GC client->server: 9C 00 SS SS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- NN NN NN NN NN NN NN NN 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AA AA AA AA AA AA AA AA AA AA AA AA 00 00 00 00 .... PC client->server: SS SS 9C 00 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- NN NN NN NN NN NN NN NN 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AA AA AA AA AA AA AA AA AA AA AA AA 00 00 00 00 .... DC/GC server->client: 9C XX 04 00 PC server->client: 04 00 9C XX (S = size, N = serial number as hex string, A = access key, X = reply code (00/01/02: license ok)) Note: server should respond to a 9C command with its own 9C command Note: client will respond to a 9C command with either a 9D or 9E command 9D - log in (client->server) (DC, PC, GC) Note: same format as 9E command 9E - log in (client->server) (DC, PC, GC) DC/GC: 9E 00 SS SS -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VV -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- NN NN NN NN NN NN NN NN 00 00 00 00 00 00 00 00 AA AA AA AA AA AA AA AA AA AA AA AA 00 00 00 00 .... PC: SS SS 9E 00 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VV -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- NN NN NN NN NN NN NN NN 00 00 00 00 00 00 00 00 AA AA AA AA AA AA AA AA AA AA AA AA 00 00 00 00 .... (S = size, N = serial number as hex string, A = access key, V = PSO version code) Note: server should respond to a 9E command with an 04 command 9F - invalid command A0 - change ship / ship select (bidirectional) (all versions) DC/GC client->server: A0 00 04 00 PC client->server: 04 00 A0 00 BB client->server: 08 00 A0 00 00 00 00 00 Note: server->client format and usage is the same as the 07 command Note: when a client sends an A0 command, the server should reply with an A0 or 07 (their functions are the same) A1 - change block / block select (bidirectional) (all versions) DC/GC client->server: A1 00 04 00 PC client->server: 04 00 A1 00 BB client->server: 08 00 A1 00 00 00 00 00 Note: server->client format and usage is the same as the 07 command Note: when a client sends an A0 command, the server should reply with an 07 A2 - quest menu (bidirectional) (all versions) DC/GC client->server: A2 TT 04 00 PC client->server: 04 00 A2 TT BB client->server: 08 00 A2 00 TT 00 00 00 DC/GC server->client: A2 NN SS SS [MM MM MM MM YY YY YY YY NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD] PC server->client: SS SS A2 NN [MM MM MM MM YY YY YY YY NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD] BB server->client: SS SS A2 00 NN 00 00 00 [MM MM MM MM YY YY YY YY NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD] (S = size, N = number of quests, M = menu ID, Y = item ID, N = quest name (unicode for PC and BB), D = short quest description (unicode for PC and BB)) Note: repeat bracketed segment for each quest entry Note: client will respond with either an 09 or 10 command A3 - quest information (server->client) (all versions) Note: same format as 1A and D5 commands A4 - download quest menu (server->client) (DC, PC, GC) Note: same format and usage as A2 command A5 - invalid command A6 - begin sending download quest file / GBA game (bidirectional) (DC, PC, GC) Note: same format and usage as 44 command A7 - continue sending download quest file / GBA game (bidirectional) (DC, PC, GC) note: same format and usage as 13 command A8 - invalid command A9 - close quest list (client->server) (all versions) DC/GC: A9 00 04 00 PC: 04 00 A9 00 BB: 08 00 A9 00 00 00 00 00 Note: some servers use this command to get themselves out of infinite stacking loops; you may be able to simply ignore it depending on how your server is built AA - invalid command AB - invalid command AC - launch quest (bidirectional) (all versions) DC/GC: AC 00 04 00 PC: 04 00 AC 00 BB: 08 00 AC 00 00 00 00 00 Note: clients in a game send AC commands when they're ready to begin a quest; server sends all clients in the game an AC command when they're all ready, and the quest begins AD - invalid command AE - invalid command AF - invalid command B0 - text message (server->client) (all versions) Note: same format as 01 command B1 - time (bidirectional) (all verions) DC/GC client->server: B1 00 04 00 PC client->server: 04 00 B1 00 BB client->server: 08 00 B1 00 00 00 00 00 DC/GC server->client: B1 00 SS SS