diff --git a/src/CommandFormats.hh b/src/CommandFormats.hh index 0450bb26..03291004 100644 --- a/src/CommandFormats.hh +++ b/src/CommandFormats.hh @@ -175,7 +175,7 @@ struct C_Login_Patch_04 { // 06 (S->C): Open file for writing struct S_OpenFile_Patch_06 { - le_uint32_t unknown = 0; + le_uint32_t unknown_a1 = 0; le_uint32_t size = 0; ptext filename; } __packed__; @@ -339,7 +339,7 @@ struct S_ServerInitWithAfterMessage_DC_PC_V3_02_17_91_9B { struct C_LegacyLogin_PC_V3_03 { le_uint64_t unused = 0; // Same as unused field in 9D/9E le_uint32_t sub_version = 0; - uint8_t unknown_a1 = 0; + uint8_t is_extended = 0; uint8_t language = 0; // Same as 9D/9E le_uint16_t unknown_a2 = 0; // Note: These are suffixed with 2 since they come from the same source data @@ -386,7 +386,7 @@ struct S_ServerInitWithAfterMessage_BB_03_9B { struct C_LegacyLogin_PC_V3_04 { le_uint64_t unused1 = 0; // Same as unused field in 9D/9E le_uint32_t sub_version = 0; - uint8_t unknown_a1 = 0; + uint8_t is_extended = 0; uint8_t language = 0; // Same as 9D/9E le_uint16_t unknown_a2 = 0; ptext serial_number; @@ -543,7 +543,7 @@ struct C_MenuItemInfoRequest_09 { struct S_Unknown_PC_0E { parray unknown_a1; - parray unknown_a2[4]; + parray, 4> unknown_a2; parray unknown_a3; } __packed__; @@ -554,7 +554,7 @@ struct S_Unknown_GC_0E { le_uint16_t unknown_a2 = 0; le_uint32_t unknown_a3 = 0; } __packed__; - UnknownA0 unknown_a0[8]; + parray unknown_a0; le_uint32_t unknown_a1 = 0; parray unknown_a2; parray unknown_a3; @@ -1255,8 +1255,8 @@ struct C_ConnectionInfo_DCNTE_8A { // Contents is a string (char16_t on PC/BB, char on DC/V3) containing the lobby // or game name. The client generally only sends this immediately after joining // a game, but Sega's servers also replied to it if it was sent in a lobby. They -// would return a string like "LOBBY01" even though this would never be used -// under normal circumstances. +// would return a string like "LOBBY01" in that case even though this would +// never be used under normal circumstances. // 8B: Log in (DC NTE only) @@ -1313,7 +1313,7 @@ struct C_LoginV1_DC_PC_V3_90 { struct C_RegisterV1_DC_92 { parray unknown_a1; - uint8_t unknown_a2 = 0; + uint8_t is_extended = 0; // TODO: This is a guess uint8_t language = 0; // TODO: This is a guess; verify it parray unknown_a3; ptext hardware_id; @@ -1599,8 +1599,8 @@ struct C_LoginExtended_BB_9E { // A0 (C->S): Change ship // This structure is for documentation only; newserv ignores the arguments here. -// TODO: This structore is valid for GC clients; check if this command has the -// same arguments on DC/PC. +// TODO: This structure is valid for GC clients; check if this command has the +// same arguments on other versions. struct C_ChangeShipOrBlock_A0_A1 { le_uint32_t player_tag = 0x00010000; @@ -1612,7 +1612,7 @@ struct C_ChangeShipOrBlock_A0_A1 { // Same as 07 command. // A1 (C->S): Change block -// Same format as A0. Like with A0, newserv ignores the arguments. +// Same format as A0. As with A0, newserv ignores the arguments. // A1 (S->C): Block select menu // Same as 07 command. @@ -1675,19 +1675,19 @@ struct S_QuestMenuEntry_BB_A2_A4 : S_QuestMenuEntry { } __packed // No arguments // This command is sent when the in-game quest menu (A2) is closed. When the // download quest menu is closed, either by downloading a quest or canceling, -// the client sends A0 instead. The existance of the A0 response on the download +// the client sends A0 instead. The existence of the A0 response on the download // case makes sense, because the client may not be in a lobby and the server may // need to send another menu or redirect the client. But for the online quest // menu, the client is already in a game and can move normally after canceling // the quest menu, so it's not obvious why A9 is needed at all. newserv (and // probably all other private servers) ignores it. -// Curiously, PSO GC sends uninitialized data in the flag argument. +// Curiously, PSO GC sends uninitialized data in header.flag. // AA (C->S): Update quest statistics (V3/BB) // This command is used in Maximum Attack 2, but its format is unlikely to be // specific to that quest. The structure here represents the only instance I've // seen so far. -// The server will respond with an AB command. +// The server should respond with an AB command. // This command is likely never sent by PSO GC Episodes 1&2 Trial Edition, // because the following command (AB) is definitely not valid on that version. @@ -1745,7 +1745,7 @@ struct S_ConfirmUpdateQuestStatistics_V3_BB_AB { // It seems the client ignores the date part and the milliseconds part; only the // hour, minute, and second fields are actually used. // This command can be sent even if it's not requested by the client (with B1). -// For example, some servers send this every time a client joins a game. +// For example, some servers send this command every time a client joins a game. // Client will respond with a 99 command. // B2 (S->C): Execute code and/or checksum memory @@ -2033,8 +2033,8 @@ struct S_ChoiceSearchResultEntry_V3_C4 { // newserv currently doesn't send this command at all because the V3 and // BB formats aren't fully documented. // TODO: Figure out where the text is in those formats, write appropriate -// conversion functions, and implement the command. Don't forget to override the -// client_id field in each entry before sending. +// conversion functions, and implement the command. Don't forget to overwrite +// the client_id field in each entry before sending. // C6 (C->S): Set blocked senders list (V3/BB) // The command always contains the same number of entries, even if the entries @@ -5367,8 +5367,8 @@ struct G_EndTurn_GC_Ep3_6xB3x48_CAx48 { // 6xB3x49 / CAx49: Card counts // This command is sent when a client joins a game, but it is completely ignored -// by the server. (Not just newserv - the server implementation within Episode 3 -// itself also ignores this command.) Sega presumably could have used this to +// by the original Episode 3 server. (newserv, however, uses this for deck +// verification at battle start time.) Sega presumably could have used this to // detect the presence of unreleased cards to ban cheaters, but the effects of // the non-saveable Have All Cards AR code don't appear in this data, so this // would have been ineffective. diff --git a/src/SendCommands.cc b/src/SendCommands.cc index ed986366..1caa1942 100644 --- a/src/SendCommands.cc +++ b/src/SendCommands.cc @@ -1857,7 +1857,7 @@ void send_ep3_media_update( // sends the client a generic rank void send_ep3_rank_update(shared_ptr c) { S_RankUpdate_GC_Ep3_B7 cmd = { - 0, "\0\0\0\0\0\0\0\0\0\0\0", 0x00FFFFFF, 0x00FFFFFF, 0xFFFFFFFF}; + 0, "\0\0\0\0\0\0\0\0\0\0\0", 1000000, 1000000, 0xFFFFFFFF}; send_command_t(c, 0xB7, 0x00, cmd); } diff --git a/tests/GC-Episode3GameSmokeTest.test.txt b/tests/GC-Episode3GameSmokeTest.test.txt index 91101b37..271f8bc6 100644 --- a/tests/GC-Episode3GameSmokeTest.test.txt +++ b/tests/GC-Episode3GameSmokeTest.test.txt @@ -1890,7 +1890,7 @@ I 13136 2022-11-27 21:06:32 - [Commands] Sending to C-5 (version=GC command=04 f 0020 | FF FF FF FF FF FF FF FF FF FF FF FF | I 13136 2022-11-27 21:06:32 - [Commands] Sending to C-5 (version=GC command=B7 flag=00) 0000 | B7 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 | -0010 | 00 00 00 00 FF FF FF 00 FF FF FF 00 FF FF FF FF | +0010 | 00 00 00 00 40 42 0F 00 40 42 0F 00 FF FF FF FF | @B @B I 13136 2022-11-27 21:06:32 - [Commands] Sending to C-5 (version=GC command=D5 flag=00) 0000 | D5 00 2C 00 59 6F 75 20 61 72 65 20 63 6F 6E 6E | , You are conn 0010 | 65 63 74 65 64 20 74 6F 20 09 43 36 41 6C 65 78 | ected to C6Alex @@ -4742,7 +4742,7 @@ I 13136 2022-11-27 21:07:56 - [Commands] Sending to C-7 (version=GC command=04 f 0020 | FF FF FF FF FF FF FF FF FF FF FF FF | I 13136 2022-11-27 21:07:56 - [Commands] Sending to C-7 (version=GC command=B7 flag=00) 0000 | B7 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 | -0010 | 00 00 00 00 FF FF FF 00 FF FF FF 00 FF FF FF FF | +0010 | 00 00 00 00 40 42 0F 00 40 42 0F 00 FF FF FF FF | @B @B I 13136 2022-11-27 21:07:56 - [Commands] Sending to C-7 (version=GC command=07 flag=05) 0000 | 07 05 AC 00 11 00 00 11 FF FF FF FF 04 00 41 6C | Al 0010 | 65 78 61 6E 64 72 69 61 00 00 00 00 00 00 00 00 | exandria