From 2faf511e0d106e4e1b68ccf630bbd86a02f5ba49 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Wed, 4 May 2022 11:14:32 -0700 Subject: [PATCH] add some notes about PSOBB command handlers --- src/CommandFormats.hh | 47 ++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/src/CommandFormats.hh b/src/CommandFormats.hh index 43dd8a9c..a17b13e6 100644 --- a/src/CommandFormats.hh +++ b/src/CommandFormats.hh @@ -110,6 +110,8 @@ struct S_ServerInit_BB_03 { // confuse the client, and (on pre-V3 clients) possibly corrupt the character // data. For this reason, newserv tries pretty hard to hide the remote guild // card number when clients connect to the proxy server. +// Note: PSOBB has a handler for the 04 command, but (as of yet) I haven't +// figured out what it does. struct S_UpdateClientConfig_DC_PC_GC_04 { le_uint32_t player_tag; @@ -225,6 +227,8 @@ struct C_MenuSelection { // 11 (S->C): Ship info // Same format as 01 command. +// 12 (S->C): Unknown (BB) + // 12: Session complete (patch server) // No arguments @@ -253,9 +257,9 @@ struct S_WriteFile_13_A7 { le_uint32_t data_size; }; -// 14: Invalid command +// 14 (S->C): Unknown (BB) // 15: Invalid command -// 16: Invalid command +// 16 (S->C): Unknown (BB) // 17 (S->C): Start encryption at login server (except on BB) // Same format as 02 command, but a different copyright string. @@ -324,9 +328,9 @@ struct SC_GameCardCheck_BB_22 { parray data; }; -// 23: Invalid command -// 24: Invalid command -// 25: Invalid command +// 23 (S->C): Unknown (BB) +// 24 (S->C): Unknown (BB) +// 25 (S->C): Unknown (BB) // 26: Invalid command // 27: Invalid command // 28: Invalid command @@ -673,7 +677,13 @@ struct C_Login_BB_93 { ptext username; ptext unused2; ptext password; - ptext unused3; + ptext unused3; + uint64_t unknown; + // Note: Unlike other versions, BB puts the version string in the client + // config at connect time. So the first time the server gets this command, it + // will be something like "Ver. 1.24.3". Note also that some old versions + // (before 1.23.8?) omit the unknown field before the client config, so the + // client config starts 8 bytes earlier on those versions. ClientConfigBB client_config; }; @@ -740,9 +750,9 @@ struct C_Login_DC_PC_GC_9A { ptext email_address; }; -// 9B: Invalid command +// 9B (S->C): Unknown (BB) -// 9C (C->S): Login result +// 9C (S->C): Login result // The only possible error here seems to be wrong password (127) which is // displayed if the header.flag field is zero. If header.flag is nonzero, the // client proceeds with the login procedure by sending a 9E. @@ -795,7 +805,7 @@ struct C_LoginWithUnusedSpace_GC_9E : C_Login_GC_9E { parray unused_space; }; -// 9F: Invalid command +// 9F (S->C): Unknown (BB) // A0 (C->S): Change ship // No arguments @@ -845,7 +855,7 @@ struct S_QuestMenuEntry_BB_A2_A4 { // should be sent with A6/A7 commands rather than 44/13, and it must be in a // different encrypted format (not described here). -// A5: Invalid command +// A5 (S->C): Unknown (BB) // A6: Open file for download // Used for download quests and GBA games. @@ -860,7 +870,7 @@ struct S_QuestMenuEntry_BB_A2_A4 { // No arguments // AA: Invalid command -// AB: Invalid command +// AB (S->C): Unknown (BB) // AC (C->S): Ready to start quest // AC (S->C): Start quest @@ -890,6 +900,7 @@ struct S_QuestMenuEntry_BB_A2_A4 { // GC v1.0 and v1.1 only. // Format unknown. // Client will respond with a B3 command. +// Note: BB has a handler for this, but (as of yet) I don't know what it does. // B3 (C->S): Execute code response // GC v1.0 and v1.1 only. @@ -918,6 +929,8 @@ struct S_RankUpdate_GC_Ep3_B7 { // (PRS-compressed) data, followed immediately by the data. newserv sends the // system/ep3/cardupdate.mnr file verbatim using this command when an Episode 3 // client connects to the login server. +// Note: BB has a handler for this, but (as of yet) I don't know what it does. +// It almost certainly doesn't do the same thing as the Ep3 B8 command. // B9: Invalid command @@ -1102,6 +1115,8 @@ struct C_GBAGameRequest_GC_D7 { ptext filename; }; +// D7 (S->C): Unknown (BB) + // D8 (C->S): Info board request // No arguments // The server should respond with a D8 command (described below). @@ -1161,8 +1176,8 @@ struct S_GuildCardHeader_BB_01DC { // uint32_t chunk_index; // uint8_t data[0x6800, or less if last chunk] -// DD: Invalid command -// DE: Unknown (used by BB) +// DD (S->C): Unknown (BB) +// DE (S->C): Unknown (BB) // DF: Invalid command // E0 (S->C): Tournament list (Episode 3) @@ -1302,11 +1317,11 @@ union C_UpdateAccountData_BB_ED { parray customize; // 07ED }; -// EE: Scrolling message (BB) +// EE (S->C): Scrolling message (BB) // Contents are plain text (char16_t) -// EF: Invalid command -// F0: Invalid command +// EF (S->C): Unknown (BB) +// F0 (S->C): Unknown (BB) // F1: Invalid command // F2: Invalid command // F3: Invalid command