From 78968f86dd984f11f3a5b7a62bceb0f479750e89 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Mon, 27 Feb 2023 22:38:00 -0800 Subject: [PATCH] document all Ep3 lobby banner positions --- src/CommandFormats.hh | 58 ++++++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 14 deletions(-) diff --git a/src/CommandFormats.hh b/src/CommandFormats.hh index 138121a2..79ed5fe5 100644 --- a/src/CommandFormats.hh +++ b/src/CommandFormats.hh @@ -1944,23 +1944,53 @@ struct S_UpdateMediaHeader_GC_Ep3_B9 { // the others don't seem to be anywhere on the disc. 'NJBM' is found in // psohistory_e.sfd, but not in any other files. le_uint32_t type = 0; - // Valid values for the which field (at least, when type is 1): - // 0: Unknown - // 1: Set lobby banner 1 (in front of where player 0 enters) - // 2: Set lobby banner 2 (left of banner 1) - // 3: Unknown - // 4: Set lobby banner 3 (left of banner 2; opposite where player 0 enters) - // 5: Unknown - // 6: Unknown - // Any other value: entire command is ignored - le_uint32_t which = 0; + // which is a bit field specifying which positions to set. The bits are: + // 00000001: South above-counter banner (facing away from teleporters) + // 00000002: West above-counter banner + // 00000004: North above-counter banner (facing toward jukebox) + // 00000008: East above-counter banner + // 00000010: Banner above west (left) teleporter + // 00000020: Banner above east (right) teleporter + // 00000040: Banner at south end of lobby (opposite the jukebox) + // 00000080: Immediately left of 00000040 + // 00000100: Immediately right of 00000040 + // 00000200: Same as 00000080, but further left and at a slight inward angle + // 00000400: Same as 00000100, but further right and at a slight inward angle + // 00000800: Banner at north end of lobby, above the jukebox + // 00001000: Immediately right of 00000800 + // 00002000: Immediately left of 00000800 + // 00004000: Same as 00001000, but further right and at a slight inward angle + // 00008000: Same as 00002000, but further left and at a slight inward angle + // 00010000: Banners at west AND east ends of lobby, next to battle tables + // 00020000: Immediately left of 00001000 (2 banners) + // 00040000: Immediately right of 00001000 (2 banners) + // 00080000: Banners on southwest AND southeast ends of the lobby + // 00100000: Banners on south-southwest AND south-southeast ends of the lobby + // 00200000: Floor banners in front of the counter (4 banners) + // 00400000: Banners on both small walls in front of the battle tables + // 00800000: On southern platform + // 01000000: In front of jukebox + // 02000000: In western battle table corner (next to 4-player tables) + // 04000000: In eastern battle table corner (next to 2-player tables) + // 08000000: In southeastern battle table corner (next to 2-player tables) + // 10000000: In southwestern battle table corner (next to 4-player tables) + // 20000000: Just north-northwest of the counter + // 40000000: In front of the small wall in front of the 2-player battle tables + // 80000000: Inside the lobby counter, facing southeast + // Positions 00800000 and above appear to be intended for models and not + // banners - if a banner is sent in these locations, it appears sideways and + // halfway submerged in the floor, and has no collision. Furthermore, it seems + // that up to 8 positions may have banners or models set simultaneously - if 8 + // positions are already in use, further B9 commands are ignored. + le_uint32_t which = 0x00000000; + // This field specifies the size of the compressed data. The uncompressed size + // is not sent anywhere in this command. le_uint16_t size = 0; le_uint16_t unused = 0; // The PRS-compressed data immediately follows this header. The maximum size - // of the compressed data is 0x3800 bytes, and the data must decompress to - // fewer than 0x37000 bytes of output. The size field above contains the - // compressed size of this data (the decompressed size is not included - // anywhere in the command). + // of the compressed data is 0x3800 bytes, and it must decompress to fewer + // than 0x37000 bytes of output. If either of these limits are violated, the + // client ignores the command. } __packed__; // B9 (C->S): Confirm received B9 (Episode 3)