more previously-undocumented client behaviors
This commit is contained in:
@@ -20,6 +20,7 @@ Current known issues / missing features:
|
|||||||
- Patches currently are platform-specific but not version-specific. This makes them quite a bit harder to write and use properly.
|
- Patches currently are platform-specific but not version-specific. This makes them quite a bit harder to write and use properly.
|
||||||
- Find a way to silence audio in RunDOL.s. Some old DOLs don't reset audio systems at load time and it's annoying to hear the crash buzz when the GC hasn't actually crashed.
|
- Find a way to silence audio in RunDOL.s. Some old DOLs don't reset audio systems at load time and it's annoying to hear the crash buzz when the GC hasn't actually crashed.
|
||||||
- Implement private and overflow lobbies.
|
- Implement private and overflow lobbies.
|
||||||
|
- Enforce client-side size limits (e.g. for 60/62 commands) on the server side as well. (For 60/62 specifically, perhaps transform them to 6C/6D if needed.)
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
|||||||
+21
-9
@@ -555,7 +555,7 @@ struct S_ReconnectSplit_19 {
|
|||||||
parray<uint8_t, 0xB0 - 0x23> unused2;
|
parray<uint8_t, 0xB0 - 0x23> unused2;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 1A: Large message box
|
// 1A (S->C): Large message box
|
||||||
// On V3 (PSO GC), client will usually respond with a D6 command (see D6 for
|
// On V3 (PSO GC), client will usually respond with a D6 command (see D6 for
|
||||||
// more information).
|
// more information).
|
||||||
// Contents are plain text (char on DC/GC, char16_t on PC/BB). There must be at
|
// Contents are plain text (char on DC/GC, char16_t on PC/BB). There must be at
|
||||||
@@ -566,8 +566,8 @@ struct S_ReconnectSplit_19 {
|
|||||||
// The maximum length of the message is 0x400 bytes. This is the only difference
|
// The maximum length of the message is 0x400 bytes. This is the only difference
|
||||||
// between this command and the D5 command.
|
// between this command and the D5 command.
|
||||||
|
|
||||||
// 1B: Valid but ignored (PC/GC)
|
// 1B (S->C): Valid but ignored (PC/GC)
|
||||||
// 1C: Valid but ignored (PC/GC)
|
// 1C (S->C): Valid but ignored (PC/GC)
|
||||||
|
|
||||||
// 1D: Ping
|
// 1D: Ping
|
||||||
// No arguments
|
// No arguments
|
||||||
@@ -693,6 +693,8 @@ struct S_GuildCardSearchResult_BB_41 : S_GuildCardSearchResult<PSOCommandHeaderB
|
|||||||
// 44 (S->C): Open file for download
|
// 44 (S->C): Open file for download
|
||||||
// Used for downloading online quests. For download quests (to be saved to the
|
// Used for downloading online quests. For download quests (to be saved to the
|
||||||
// memory card), use A6 instead.
|
// memory card), use A6 instead.
|
||||||
|
// Unlike the A6 command, the client will react to a 44 command only if the
|
||||||
|
// filename ends in .bin or .dat.
|
||||||
|
|
||||||
struct S_OpenFile_PC_GC_44_A6 {
|
struct S_OpenFile_PC_GC_44_A6 {
|
||||||
ptext<char, 0x20> name;
|
ptext<char, 0x20> name;
|
||||||
@@ -1239,7 +1241,10 @@ struct C_LoginExtended_BB_9E {
|
|||||||
// No arguments
|
// No arguments
|
||||||
|
|
||||||
// 9F (C->S): Client config / security data response
|
// 9F (C->S): Client config / security data response
|
||||||
// Format is ClientConfig on GC, or ClientConfigBB on BB
|
// The data is opaque to the client, as described at the top of this file.
|
||||||
|
// If newserv ever sent a 9F command (it currently does not), the response
|
||||||
|
// format here would be ClientConfig (0x20 bytes) on GC, or ClientConfigBB (0x28
|
||||||
|
// bytes) on BB.
|
||||||
|
|
||||||
// A0 (C->S): Change ship
|
// A0 (C->S): Change ship
|
||||||
// This structure is for documentation only; newserv ignores the arguments here.
|
// This structure is for documentation only; newserv ignores the arguments here.
|
||||||
@@ -1300,15 +1305,21 @@ struct S_QuestMenuEntry_BB_A2_A4 {
|
|||||||
// Same format as 1A/D5 command (plain text)
|
// Same format as 1A/D5 command (plain text)
|
||||||
|
|
||||||
// A6: Open file for download
|
// A6: Open file for download
|
||||||
// Used for download quests and GBA games.
|
|
||||||
// Same format as 44.
|
// Same format as 44.
|
||||||
|
// Used for download quests and GBA games. The client will react to this command
|
||||||
|
// if the filename ends in .bin/.dat (download quests), .gba (GameBoy Advance
|
||||||
|
// games), and, curiously, .pvr (textures). To my knowledge, the .pvr handler in
|
||||||
|
// this command has never been used.
|
||||||
|
// For .bin files, the flags field should be zero. For .pvr files, the flags
|
||||||
|
// field should be 1. For .dat and .gba files, it seems the value in the flags
|
||||||
|
// field does not matter.
|
||||||
|
|
||||||
// A7: Write download file
|
// A7: Write download file
|
||||||
// Same format as 13.
|
// Same format as 13.
|
||||||
|
|
||||||
// A8: Invalid command
|
// A8: Invalid command
|
||||||
|
|
||||||
// A9: Quest menu closed (canceled)
|
// A9 (C->S): Quest menu closed (canceled)
|
||||||
// No arguments
|
// No arguments
|
||||||
// This command is sent when the in-game quest menu (A2) is closed. When the
|
// 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,
|
// download quest menu is closed, either by downloading a quest or canceling,
|
||||||
@@ -1333,7 +1344,8 @@ struct C_UpdateQuestStatistics_AA {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// AB (S->C): Confirm update quest statistics
|
// AB (S->C): Confirm update quest statistics
|
||||||
// TODO: Does this command have a different meaning in Episode 3?
|
// TODO: Does this command have a different meaning in Episode 3? Is it used at
|
||||||
|
// all there, or is the handler an undeleted vestige from Episodes 1&2?
|
||||||
|
|
||||||
struct S_ConfirmUpdateQuestStatistics_AB {
|
struct S_ConfirmUpdateQuestStatistics_AB {
|
||||||
le_uint16_t unknown_a1; // 0
|
le_uint16_t unknown_a1; // 0
|
||||||
@@ -1356,7 +1368,7 @@ struct S_ConfirmUpdateQuestStatistics_AB {
|
|||||||
// AE: Invalid command
|
// AE: Invalid command
|
||||||
// AF: Invalid command
|
// AF: Invalid command
|
||||||
|
|
||||||
// B0: Text message
|
// B0 (S->C): Text message
|
||||||
// Same format as 01 command.
|
// Same format as 01 command.
|
||||||
// The message appears as an overlay on the right side of the screen. The player
|
// The message appears as an overlay on the right side of the screen. The player
|
||||||
// doesn't do anything to dismiss it; it will disappear after a few seconds.
|
// doesn't do anything to dismiss it; it will disappear after a few seconds.
|
||||||
@@ -1933,7 +1945,7 @@ struct C_CardLobbyGame_GC_E4 {
|
|||||||
le_uint16_t seat_number;
|
le_uint16_t seat_number;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Header flag = 2
|
// Header flag = table number
|
||||||
struct S_CardLobbyGame_GC_E4 {
|
struct S_CardLobbyGame_GC_E4 {
|
||||||
struct Entry {
|
struct Entry {
|
||||||
le_uint16_t present; // 1 = player present, 0 = no player
|
le_uint16_t present; // 1 = player present, 0 = no player
|
||||||
|
|||||||
Reference in New Issue
Block a user