From 767883214d65c4d3dd516dee2fc096884529ebb7 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Sun, 22 May 2022 00:40:14 -0700 Subject: [PATCH] add more info on unused command structures --- src/CommandFormats.hh | 83 +++++++++++++++++++++++++++++++++++++------ src/SendCommands.cc | 1 + 2 files changed, 74 insertions(+), 10 deletions(-) diff --git a/src/CommandFormats.hh b/src/CommandFormats.hh index edecb29b..3fda994f 100644 --- a/src/CommandFormats.hh +++ b/src/CommandFormats.hh @@ -311,6 +311,11 @@ struct S_UpdateClientConfig_DC_PC_GC_04 { ClientConfig cfg; }; +struct S_Unknown_BB_04 { + // header.flag is used too, but it's not clear what it does + le_uint32_t unknown_a1[12]; +}; + // 05: Disconnect // No arguments @@ -395,7 +400,7 @@ struct C_MenuSelection { // 11 (S->C): Ship info // Same format as 01 command. -// 12 (S->C): Unknown (BB) +// 12 (S->C): Valid but ignored (BB) // 13 (S->C): Write online quest file // Used for downloading online quests. For download quests (to be saved to the @@ -421,9 +426,9 @@ struct C_WriteFileConfirmation_GC_BB_13_A7 { ptext filename; }; -// 14 (S->C): Unknown (BB) +// 14 (S->C): Valid but ignored (BB) // 15: Invalid command -// 16 (S->C): Unknown (BB) +// 16 (S->C): Valid but ignored (BB) // 17 (S->C): Start encryption at login server (except on BB) // Same format as 02 command, but a different copyright string. @@ -484,7 +489,7 @@ struct S_ReconnectSplit_19 { // 20: Invalid command -// 21: GameGuard control (BB) +// 21: GameGuard control (old versions of BB) // Format unknown // 22: GameGuard check (BB) @@ -496,8 +501,27 @@ struct SC_GameCardCheck_BB_22 { }; // 23 (S->C): Unknown (BB) +// header.flag is used, but command has no other arguments. + // 24 (S->C): Unknown (BB) + +struct S_Unknown_BB_24 { + le_uint16_t unknown_a1; + le_uint16_t unknown_a2; + parray values; +}; + // 25 (S->C): Unknown (BB) + +struct S_Unknown_BB_25 { + le_uint16_t unknown_a1; + uint8_t offset1; + uint8_t value1; + uint8_t offset2; + uint8_t value2; + le_uint16_t unused; +}; + // 26: Invalid command // 27: Invalid command // 28: Invalid command @@ -966,7 +990,14 @@ struct C_Login_DC_PC_GC_9A { // 13 = servers under maintenance (118) // Seems like most (all?) of the rest of the codes are "network error" (119). -// 9B (S->C): Unknown (BB) +// 9B (S->C): Secondary server init? (BB) +// Format is the same as 03 (and the client uses the same encryption afterward). +// The only differences that 9B has from 03: +// - 9B does not work on the data-server phase (before the client has reached +// the ship select menu), whereas 03 does. +// - The copyright string must be +// "PSO NEW PM Server. Copyright 1999-2002 SONICTEAM." for command 9B. +// - The client will respond with a command DB instead of a command 93. // 9C (C->S): Register @@ -1025,6 +1056,10 @@ struct C_LoginWithUnusedSpace_GC_9E : C_Login_GC_9E { // 9F (S->C): Unknown (BB) +struct S_Unknown_BB_9F { + le_uint32_t unknown_a1[10]; +}; + // A0 (C->S): Change ship // This structure is for documentation only; newserv ignores the arguments here. @@ -1080,7 +1115,8 @@ struct S_QuestMenuEntry_BB_A2_A4 { // be in a different encrypted format. The download quest format is documented // in create_download_quest and create_download_quest_file in Quest.cc. -// A5 (S->C): Unknown (BB) +// A5 (S->C): Download quest information +// Same format as 1A/D5 command (plain text) // A6: Open file for download // Used for download quests and GBA games. @@ -1239,8 +1275,7 @@ struct S_RankUpdate_GC_Ep3_B7 { // B8 (S->C): Update card definitions (Episode 3) // Contents is a single little-endian le_uint32_t specifying the size of the // (PRS-compressed) data, followed immediately by the data. -// Note: BB has a handler for B8, 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. +// Note: BB has a handler for B8, but it does nothing - the client ignores B8. // B8 (C->S): Confirm updated card definitions // No arguments @@ -1436,7 +1471,7 @@ struct C_GBAGameRequest_GC_D7 { ptext filename; }; -// D7 (S->C): Unknown (BB) +// D7 (S->C): Valid but ignored (BB) // D8 (C->S): Info board request // No arguments @@ -1461,7 +1496,7 @@ struct S_InfoBoardEntry_DC_GC_D8 : S_InfoBoardEntry_D8 { }; // DA (S->C): Change lobby event // header.flag = new event number; no other arguments. -// DB (C->S): Verify license (GC) +// DB (C->S): Verify license (GC/BB) // Server should respond with a 9A command. struct C_VerifyLicense_GC_DB { @@ -1475,6 +1510,16 @@ struct C_VerifyLicense_GC_DB { ptext password; }; +struct C_VerifyLicense_BB_DB { + ptext unknown_a1; + ptext unknown_a2; + ptext unknown_a3; + ptext unknown_a4; + ptext unknown_a5; + ptext unknown_a6; + ptext unknown_a7; +}; + // DC: Player menu state (Episode 3) // No arguments. It seems the client expects the server to respond with another // DC command with header.flag = 0. @@ -1500,7 +1545,14 @@ struct C_GuildCardDataRequest_BB_03DC { }; // DD (S->C): Unknown (BB) +// header.flag is used, but the command body is unused (no other arguments). + // DE (S->C): Unknown (BB) + +struct S_Unknown_BB_DE { + le_uint32_t unknown_a1[8]; +}; + // DF: Invalid command // E0 (S->C): Tournament list (Episode 3) @@ -1644,7 +1696,18 @@ union C_UpdateAccountData_BB_ED { // screen and slowly scrolls to the left. // EF (S->C): Unknown (BB) +// Has an unknown number of subcommands (00EF, 01EF, etc.) +// Contents are plain text (char). + // F0 (S->C): Unknown (BB) + +struct S_Unknown_BB_F0 { + le_uint32_t unknown_a1[7]; + le_uint32_t which; // Must be < 12 + ptext unknown_a2; + le_uint32_t unknown_a3; +}; + // F1: Invalid command // F2: Invalid command // F3: Invalid command diff --git a/src/SendCommands.cc b/src/SendCommands.cc index 7028ea7b..c62610e7 100644 --- a/src/SendCommands.cc +++ b/src/SendCommands.cc @@ -172,6 +172,7 @@ static const char* anti_copyright = "This server is in no way affiliated, sponso static const char* dc_port_map_copyright = "DreamCast Port Map. Copyright SEGA Enterprises. 1999"; static const char* dc_lobby_server_copyright = "DreamCast Lobby Server. Copyright SEGA Enterprises. 1999"; static const char* bb_game_server_copyright = "Phantasy Star Online Blue Burst Game Server. Copyright 1999-2004 SONICTEAM."; +// static const char* bb_pm_server_copyright = "PSO NEW PM Server. Copyright 1999-2002 SONICTEAM."; static const char* patch_server_copyright = "Patch Server. Copyright SonicTeam, LTD. 2001"; S_ServerInit_DC_PC_GC_02_17 prepare_server_init_contents_dc_pc_gc(