diff --git a/README.md b/README.md index 33aa3ec1..ebe59b27 100644 --- a/README.md +++ b/README.md @@ -431,7 +431,7 @@ For GC clients, you'll have to use newserv's built-in DNS server or set up your newserv has many CLI options, which can be used to access functionality other than the game and proxy server. Run `newserv help` to see these options and how to use them. The non-server things newserv can do are: -* Compress or decompress data in PRS, PR2, or BC0 format (`compress-prs`, `compress-pr2`, `compress-bc0`, `decompress-prs`, `decompress-pr2`, `decompress-bc0`) +* Compress or decompress data in PRS, PR2/PRC, or BC0 format (`compress-prs`, `compress-pr2`, `compress-bc0`, `decompress-prs`, `decompress-pr2`, `decompress-bc0`) * Compute the decompressed size of compressed PRS data without decompressing it (`prs-size`) * Encrypt or decrypt data using any PSO version's network encryption scheme (`encrypt-data`, `decrypt-data`) * Encrypt or decrypt data using Episode 3's trivial scheme (`encrypt-trivial-data`, `decrypt-trivial-data`) diff --git a/notes/handler-tables.txt b/notes/handler-tables.txt index de20f9fa..6b542958 100644 --- a/notes/handler-tables.txt +++ b/notes/handler-tables.txt @@ -17,126 +17,143 @@ Patch server handler table 14 => 004052D0 0070C0D0 0000000C 15 => 004052A8 0070C910 00000004 +BB data server handler table + BB1243UD BB12513D +03 => 004615F0 00461978 +19 => 0046819C 00468524 +1A => 00478378 00478700 +1D => 0047B684 0047BA0C +22 => 0047E92C 007F2E5C +DC => 0047E940 0047ECB4 +E1 => 0046E8E4 0046EC6C +E2 => 0046B4B0 0046B838 +E4 => 00474FCC 00475354 +E5 => 00471BA0 00471F28 +E6 => 00464A90 00464E18 +E8 => 0047E940 0047ECB4 +EB => 0047E958 0047ECCC +EF => 007C2290 007C94FC + Game command handler table - DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB-LOGIN BB-GAME -01 => 8C0245E4 8C025298 8C0285A8 8C028C18 8C028C24 8C02DAC4 8C02DAC4 004DCD70 0058C830 802330EC 801DA750 801DDD70 801DE450 801DDEC4 002D9920 800FB508 800F7BD8 800F801C -------- 007FCF54 + DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB1243U BB12513J +01 => 8C0245E4 8C025298 8C0285A8 8C028C18 8C028C24 8C02DAC4 8C02DAC4 004DCD70 0058C830 802330EC 801DA750 801DDD70 801DE450 801DDEC4 002D9920 800FB508 800F7BD8 800F801C 007F5CD4 007FCF54 02 => 8C025BD4 8C026910 8C02A07C 8C02A6D4 8C02A6E0 8C030110 8C030110 004DEA90 0058E540 8022D870 801D5960 801DA870 801DAF2C 801DAA70 002DB9B0 800F6918 800F3594 800F39D8 -------- -------- -03 => 8C02465C 8C025310 8C02861C 8C028C8C 8C028C98 8C02DB60 8C02DB60 004DCDB0 0058C870 8023302C 801DA690 801DDCB0 801DE390 801DDE04 002D99A0 800FB448 800F7B18 800F7F5C 00461978 007EBDBC -04 => 8C0246A8 8C02535C 8C028664 8C028CD4 8C028CE0 8C02DBCC 8C02DBCC 004DCDE0 0058C8A0 80232F74 801DA544 801DDC30 801DE310 801DDD84 002D99C0 800FB2FC 800F79CC 800F7E10 -------- 007C4FC8 -05 => 8C0247D4 8C025488 8C028788 8C028DF8 8C028E04 8C02DD30 8C02DD30 004DCE20 0058C8E0 80232F10 801DA4E0 801DDBCC 801DE2AC 801DDD20 002D9A70 800FB298 800F7968 800F7DAC -------- 007C8318 -06 => 8C024830 8C0254E4 8C0287E4 8C028E54 8C028E60 8C02DD8C 8C02DD8C 004DCE60 0058C920 80232E5C 801DA488 801DDB74 801DE254 801DDCC8 002D9AB0 800FB240 800F7910 800F7D54 -------- 007C834C -07 => 8C02486C 8C025520 8C028820 8C028E90 8C028E9C 8C02DDC8 8C02DDC8 004DCED0 0058C990 80232C5C 801DA3F0 801DDADC 801DE1BC 801DDC30 002D9B00 800FB1A8 800F7878 800F7CBC -------- 007C8380 -08 => 8C02490C 8C0255C0 8C0288B8 8C028F28 8C028F34 8C02DE60 8C02DE60 004DCF40 0058CA00 80232A5C 801DA358 801DDA44 801DE124 801DDB98 002D9B90 800FB110 800F77E0 800F7C24 -------- 007C848C +03 => 8C02465C 8C025310 8C02861C 8C028C8C 8C028C98 8C02DB60 8C02DB60 004DCDB0 0058C870 8023302C 801DA690 801DDCB0 801DE390 801DDE04 002D99A0 800FB448 800F7B18 800F7F5C 007E4B50 007EBDBC +04 => 8C0246A8 8C02535C 8C028664 8C028CD4 8C028CE0 8C02DBCC 8C02DBCC 004DCDE0 0058C8A0 80232F74 801DA544 801DDC30 801DE310 801DDD84 002D99C0 800FB2FC 800F79CC 800F7E10 007E4B50 007C4FC8 +05 => 8C0247D4 8C025488 8C028788 8C028DF8 8C028E04 8C02DD30 8C02DD30 004DCE20 0058C8E0 80232F10 801DA4E0 801DDBCC 801DE2AC 801DDD20 002D9A70 800FB298 800F7968 800F7DAC 007E4B50 007C8318 +06 => 8C024830 8C0254E4 8C0287E4 8C028E54 8C028E60 8C02DD8C 8C02DD8C 004DCE60 0058C920 80232E5C 801DA488 801DDB74 801DE254 801DDCC8 002D9AB0 800FB240 800F7910 800F7D54 007E4B50 007C834C +07 => 8C02486C 8C025520 8C028820 8C028E90 8C028E9C 8C02DDC8 8C02DDC8 004DCED0 0058C990 80232C5C 801DA3F0 801DDADC 801DE1BC 801DDC30 002D9B00 800FB1A8 800F7878 800F7CBC 007E4B50 007C8380 +08 => 8C02490C 8C0255C0 8C0288B8 8C028F28 8C028F34 8C02DE60 8C02DE60 004DCF40 0058CA00 80232A5C 801DA358 801DDA44 801DE124 801DDB98 002D9B90 800FB110 800F77E0 800F7C24 007E4B50 007C848C 0E => 8C0249AC 8C025660 8C0289E8 8C029058 8C029064 8C02DF90 8C02DF90 004DD020 0058CAE0 80232590 801D9F20 801DD88C 801DDF6C 801DD9E0 002D9CB0 800FAEC0 800F7590 800F79D4 -------- -------- - DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB-LOGIN BB-GAME -11 => 8C024BF4 8C0258F0 8C028CC8 8C029338 8C029344 8C02E270 8C02E270 004DD1E0 0058CCA0 80231D24 801D9844 801DD41C 801DDAFC 801DD570 002D9FF0 800FA6C0 800F6D90 800F71D4 -------- 007C87A0 -12 => 8C024B88 8C02583C 8C028BAC 8C02921C 8C029228 8C02E154 8C02E154 004DD150 0058CC10 80232108 801D9C08 801DD77C 801DDE5C 801DD8D0 002DA190 800FAA88 800F7158 800F759C -------- 00779DF0 -13 => 8C024BB0 8C0258A0 8C028C7C 8C0292EC 8C0292F8 8C02E224 8C02E224 004DD1C0 0058CC80 80231DD4 801D989C 801DD478 801DDB58 801DD5CC 002D9F70 800FA71C 800F6DEC 800F7230 -------- 007C8700 -14 => 8C024BE0 8C0258DC 8C028CB4 8C029324 8C029330 8C02E25C 8C02E25C 004DD150 0058CC10 80231DD0 801D9898 801DD474 801DDB54 801DD5C8 002DA190 800FA718 800F6DE8 800F722C -------- 00779DF0 -16 => 8C024B9C 8C025850 8C028BC0 8C029230 8C02923C 8C02E168 8C02E168 004DD150 0058CC10 80232104 801D9C04 801DD778 801DDE58 801DD8CC 002DA190 800FAA84 800F7154 800F7598 -------- 00779DF0 + DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB1243U BB12513J +11 => 8C024BF4 8C0258F0 8C028CC8 8C029338 8C029344 8C02E270 8C02E270 004DD1E0 0058CCA0 80231D24 801D9844 801DD41C 801DDAFC 801DD570 002D9FF0 800FA6C0 800F6D90 800F71D4 007C1534 007C87A0 +12 => 8C024B88 8C02583C 8C028BAC 8C02921C 8C029228 8C02E154 8C02E154 004DD150 0058CC10 80232108 801D9C08 801DD77C 801DDE5C 801DD8D0 002DA190 800FAA88 800F7158 800F759C 005A9104 00779DF0 +13 => 8C024BB0 8C0258A0 8C028C7C 8C0292EC 8C0292F8 8C02E224 8C02E224 004DD1C0 0058CC80 80231DD4 801D989C 801DD478 801DDB58 801DD5CC 002D9F70 800FA71C 800F6DEC 800F7230 007C1494 007C8700 +14 => 8C024BE0 8C0258DC 8C028CB4 8C029324 8C029330 8C02E25C 8C02E25C 004DD150 0058CC10 80231DD0 801D9898 801DD474 801DDB54 801DD5C8 002DA190 800FA718 800F6DE8 800F722C 005A9104 00779DF0 +16 => 8C024B9C 8C025850 8C028BC0 8C029230 8C02923C 8C02E168 8C02E168 004DD150 0058CC10 80232104 801D9C04 801DD778 801DDE58 801DD8CC 002DA190 800FAA84 800F7154 800F7598 005A9104 00779DF0 17 => 8C025AC4 8C026800 8C029F74 8C02A5CC 8C02A5D8 8C02FF24 8C02FF24 004DE900 0058E380 8022DC28 801D5C64 801DAB38 801DB1F4 801DAD38 002DB800 800F6C1C 800F3898 800F3CDC -------- -------- 18 => 8C025DEC 8C026B28 8C02A298 8C02A8F0 8C02A8FC 8C02F63C 8C02F63C 004DE2A0 0058E510 8022EDD8 801D7180 801DB904 801DBFE4 801DBA58 002DB1E0 800F8130 800F4BC4 800F5008 -------- -------- -19 => 8C024C30 8C02592C 8C028D00 8C029370 8C02937C 8C02E2A8 8C02E2A8 004DD200 0058CCC0 80231C54 801D97AC 801DD384 801DDA64 801DD4D8 002DA030 800FA628 800F6CF8 800F713C 00468524 007C87E8 -1A => 8C024620 8C0252D4 8C0285E4 8C028C54 8C028C60 8C02DB28 8C02DB28 004DCD90 0058C850 80233088 801DA6EC 801DDD0C 801DE3EC 801DDE60 002D9960 800FB4A4 800F7B74 800F7FB8 00478700 007C8854 +19 => 8C024C30 8C02592C 8C028D00 8C029370 8C02937C 8C02E2A8 8C02E2A8 004DD200 0058CCC0 80231C54 801D97AC 801DD384 801DDA64 801DD4D8 002DA030 800FA628 800F6CF8 800F713C 007C157C 007C87E8 +1A => 8C024620 8C0252D4 8C0285E4 8C028C54 8C028C60 8C02DB28 8C02DB28 004DCD90 0058C850 80233088 801DA6EC 801DDD0C 801DE3EC 801DDE60 002D9960 800FB4A4 800F7B74 800F7FB8 007C15E8 007C8854 1B => 8C024D10 8C025A0C 8C028E2C 8C02949C 8C0294A8 8C02E3D4 8C02E3D4 004DD150 0058CC10 80231AEC 801D96D8 801DD2B0 801DD990 801DD404 002DA190 800FA554 800F6C24 800F7068 -------- -------- 1C => 8C024D24 8C025A20 8C028E40 8C0294B0 8C0294BC 8C02E3E8 8C02E3E8 004DD150 0058CC10 80231AE8 801D96D4 801DD2AC 801DD98C 801DD400 002DA190 800FA550 800F6C20 800F7064 -------- -------- -1D => 8C024EF8 8C025BF4 8C028FAC 8C02961C 8C029628 8C02E578 8C02E578 004DD420 0058CEE0 8023162C 801D9184 801DCF9C 801DD67C 801DD0F0 002DA420 800FA000 800F66D0 800F6B14 0047BA0C 007C8BFC -1F => -------- -------- 8C028950 8C028FC0 8C028FCC 8C02DEF8 8C02DEF8 004DCFB0 0058CA70 8023285C 801DA114 801DD958 801DE038 801DDAAC 002D9C20 800FB078 800F7748 800F7B8C -------- 007C92E4 - DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB-LOGIN BB-GAME -22 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007F2E5C 007F2E5C -23 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007F2EEC -24 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007F2F08 -25 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007F2F48 - DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB-LOGIN BB-GAME -41 => 8C024EBC 8C025BB8 8C028F74 8C0295E4 8C0295F0 8C02E540 8C02E540 004DD400 0058CEC0 80231694 801D91E8 801DD000 801DD6E0 801DD154 002DA3E0 800FA064 800F6734 800F6B78 -------- 007C8BA8 -44 => -------- 8C025864 8C028BD4 8C029244 8C029250 8C02E17C 8C02E17C 004DD160 0058CC20 80232034 801D9B40 801DD6B4 801DDD94 801DD808 002D9E10 800FA9C0 800F7090 800F74D4 -------- 007C8E94 - DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB-LOGIN BB-GAME -60 => 8C024D38 8C025A34 8C028E54 8C0294C4 8C0294D0 8C02E3FC 8C02E3FC 004DD310 0058CDD0 80231A88 801D9674 801DD24C 801DD92C 801DD3A0 002DA1A0 800FA4F0 800F6BC0 800F7004 -------- 007C8898 -62 => 8C024D38 8C025A34 8C028E54 8C0294C4 8C0294D0 8C02E3FC 8C02E3FC 004DD310 0058CDD0 80231A88 801D9674 801DD24C 801DD92C 801DD3A0 002DA1A0 800FA4F0 800F6BC0 800F7004 -------- 007C8898 -64 => 8C024ABC 8C025770 8C028AF0 8C029160 8C02916C 8C02E098 8C02E098 004DD0C0 0058CB80 80232410 801D9EB0 801DD81C 801DDEFC 801DD970 002D9D60 800FAD90 800F7460 800F78A4 -------- 007C85C8 -65 => 8C0258F4 8C026630 8C029DAC 8C02A404 8C02A410 8C02F43C 8C02F43C 004DE110 0058DBD0 8022F574 801D76CC 801DBBAC 801DC28C 801DBD00 002DAFD0 800F8580 800F5024 800F5468 -------- 007C8C28 -66 => 8C025938 8C026674 8C029DEC 8C02A444 8C02A450 8C02F47C 8C02F47C 004DE140 0058DC00 8022F504 801D763C 801DBB3C 801DC21C 801DBC90 002DB020 800F84F0 800F4F94 800F53D8 -------- 007FCF24 -67 => 8C024B38 8C0257EC 8C028B48 8C0291B8 8C0291C4 8C02E0F0 8C02E0F0 004DD100 0058CBC0 8023210C 801D9C0C 801DD780 801DDE60 801DD8D4 002D9DC0 800FAA8C 800F715C 800F75A0 -------- 007C88D8 -68 => 8C02597C 8C0266B8 8C029E2C 8C02A484 8C02A490 8C02F4BC 8C02F4BC 004DE170 0058DC30 8022EFBC 801D7390 801DBAD4 801DC1B4 801DBC28 002DB060 800F8320 800F4DB4 800F51F8 -------- 007C8CEC -69 => 8C0259BC 8C0266F8 8C029E68 8C02A4C0 8C02A4CC 8C02F4F8 8C02F4F8 004DE190 0058DC50 8022EF54 801D7308 801DBA6C 801DC14C 801DBBC0 002DB0B0 800F82B8 800F4D4C 800F5190 -------- 007FCEFC -6C => 8C024D9C 8C025A98 8C028E8C 8C0294FC 8C029508 8C02E414 8C02E414 004DD310 0058CDD0 80231A48 801D9634 801DD20C 801DD8EC 801DD360 002DA1E0 800FA4B0 800F6B80 800F6FC4 -------- 007C8DA8 -6D => 8C024D9C 8C025A98 8C028E8C 8C0294FC 8C029508 8C02E414 8C02E414 004DD310 0058CDD0 80231A48 801D9634 801DD20C 801DD8EC 801DD360 002DA1E0 800FA4B0 800F6B80 800F6FC4 -------- 007C8DA8 - DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB-LOGIN BB-GAME +1D => 8C024EF8 8C025BF4 8C028FAC 8C02961C 8C029628 8C02E578 8C02E578 004DD420 0058CEE0 8023162C 801D9184 801DCF9C 801DD67C 801DD0F0 002DA420 800FA000 800F66D0 800F6B14 007C1990 007C8BFC +1F => -------- -------- 8C028950 8C028FC0 8C028FCC 8C02DEF8 8C02DEF8 004DCFB0 0058CA70 8023285C 801DA114 801DD958 801DE038 801DDAAC 002D9C20 800FB078 800F7748 800F7B8C 007C2078 007C92E4 + DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB1243U BB12513J +22 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 0047E92C 007F2E5C +23 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007EBC6C 007F2EEC +24 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007EBC88 007F2F08 +25 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007EBCC8 007F2F48 + DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB1243U BB12513J +41 => 8C024EBC 8C025BB8 8C028F74 8C0295E4 8C0295F0 8C02E540 8C02E540 004DD400 0058CEC0 80231694 801D91E8 801DD000 801DD6E0 801DD154 002DA3E0 800FA064 800F6734 800F6B78 007C193C 007C8BA8 +44 => -------- 8C025864 8C028BD4 8C029244 8C029250 8C02E17C 8C02E17C 004DD160 0058CC20 80232034 801D9B40 801DD6B4 801DDD94 801DD808 002D9E10 800FA9C0 800F7090 800F74D4 007C1C28 007C8E94 + DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB1243U BB12513J +60 => 8C024D38 8C025A34 8C028E54 8C0294C4 8C0294D0 8C02E3FC 8C02E3FC 004DD310 0058CDD0 80231A88 801D9674 801DD24C 801DD92C 801DD3A0 002DA1A0 800FA4F0 800F6BC0 800F7004 007C162C 007C8898 +62 => 8C024D38 8C025A34 8C028E54 8C0294C4 8C0294D0 8C02E3FC 8C02E3FC 004DD310 0058CDD0 80231A88 801D9674 801DD24C 801DD92C 801DD3A0 002DA1A0 800FA4F0 800F6BC0 800F7004 007C162C 007C8898 +64 => 8C024ABC 8C025770 8C028AF0 8C029160 8C02916C 8C02E098 8C02E098 004DD0C0 0058CB80 80232410 801D9EB0 801DD81C 801DDEFC 801DD970 002D9D60 800FAD90 800F7460 800F78A4 007C135C 007C85C8 +65 => 8C0258F4 8C026630 8C029DAC 8C02A404 8C02A410 8C02F43C 8C02F43C 004DE110 0058DBD0 8022F574 801D76CC 801DBBAC 801DC28C 801DBD00 002DAFD0 800F8580 800F5024 800F5468 007C19BC 007C8C28 +66 => 8C025938 8C026674 8C029DEC 8C02A444 8C02A450 8C02F47C 8C02F47C 004DE140 0058DC00 8022F504 801D763C 801DBB3C 801DC21C 801DBC90 002DB020 800F84F0 800F4F94 800F53D8 007F5CA4 007FCF24 +67 => 8C024B38 8C0257EC 8C028B48 8C0291B8 8C0291C4 8C02E0F0 8C02E0F0 004DD100 0058CBC0 8023210C 801D9C0C 801DD780 801DDE60 801DD8D4 002D9DC0 800FAA8C 800F715C 800F75A0 007C166C 007C88D8 +68 => 8C02597C 8C0266B8 8C029E2C 8C02A484 8C02A490 8C02F4BC 8C02F4BC 004DE170 0058DC30 8022EFBC 801D7390 801DBAD4 801DC1B4 801DBC28 002DB060 800F8320 800F4DB4 800F51F8 007C1A80 007C8CEC +69 => 8C0259BC 8C0266F8 8C029E68 8C02A4C0 8C02A4CC 8C02F4F8 8C02F4F8 004DE190 0058DC50 8022EF54 801D7308 801DBA6C 801DC14C 801DBBC0 002DB0B0 800F82B8 800F4D4C 800F5190 007F5C7C 007FCEFC +6C => 8C024D9C 8C025A98 8C028E8C 8C0294FC 8C029508 8C02E414 8C02E414 004DD310 0058CDD0 80231A48 801D9634 801DD20C 801DD8EC 801DD360 002DA1E0 800FA4B0 800F6B80 800F6FC4 007C1B3C 007C8DA8 +6D => 8C024D9C 8C025A98 8C028E8C 8C0294FC 8C029508 8C02E414 8C02E414 004DD310 0058CDD0 80231A48 801D9634 801DD20C 801DD8EC 801DD360 002DA1E0 800FA4B0 800F6B80 800F6FC4 007C1B3C 007C8DA8 + DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB1243U BB12513J 80 => 8C024E00 8C025AFC 8C028EC4 8C029534 8C029540 8C02E44C 8C02E44C 004DD330 0058CDF0 80231990 801D9550 801DD128 801DD808 801DD27C 002DA200 800FA3CC 800F6A9C 800F6EE0 -------- -------- -81 => 8C024F38 8C025C34 8C028FEC 8C02965C 8C029668 8C02E5B8 8C02E5B8 004DD450 0058CF10 80231550 801D90A0 801DCEB8 801DD598 801DD00C 002DA450 800F9F1C 800F65EC 800F6A30 -------- 007C8DC4 -83 => 8C024E4C 8C025B48 8C028F0C 8C02957C 8C029588 8C02E494 8C02E494 004DD370 0058CE30 80231844 801D9360 801DD054 801DD734 801DD1A8 002DA240 800FA1DC 800F68AC 800F6CF0 -------- 007C89EC -88 => 8C025DEC -------- -------- -------- -------- 8C02FD80 8C02FD80 004DE7A0 0058E200 8022E034 801D60C8 801DAF0C 801DB5C8 801DB10C 002DB6A0 800F701C 800F3C98 800F40DC -------- 007CC810 +81 => 8C024F38 8C025C34 8C028FEC 8C02965C 8C029668 8C02E5B8 8C02E5B8 004DD450 0058CF10 80231550 801D90A0 801DCEB8 801DD598 801DD00C 002DA450 800F9F1C 800F65EC 800F6A30 007C1B58 007C8DC4 +83 => 8C024E4C 8C025B48 8C028F0C 8C02957C 8C029588 8C02E494 8C02E494 004DD370 0058CE30 80231844 801D9360 801DD054 801DD734 801DD1A8 002DA240 800FA1DC 800F68AC 800F6CF0 007C1780 007C89EC +88 => 8C025DEC -------- -------- -------- -------- 8C02FD80 8C02FD80 004DE7A0 0058E200 8022E034 801D60C8 801DAF0C 801DB5C8 801DB10C 002DB6A0 800F701C 800F3C98 800F40DC 007C55A4 007CC810 89 => 8C025AC4 -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -8A => 8C025EEC -------- -------- -------- -------- 8C02FDC4 8C02FDC4 004DE7F0 0058E250 8022DF58 801D5FD0 801DAE34 801DB4F0 801DB034 002DB6E0 800F6F24 800F3BA0 800F3FE4 -------- 007D7B7C +8A => 8C025EEC -------- -------- -------- -------- 8C02FDC4 8C02FDC4 004DE7F0 0058E250 8022DF58 801D5FD0 801DAE34 801DB4F0 801DB034 002DB6E0 800F6F24 800F3BA0 800F3FE4 007D0910 007D7B7C 8D => 8C0260C8 -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 8E => 8C02486C -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 8F => 8C02486C -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- - DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB-LOGIN BB-GAME + DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB1243U BB12513J 90 => -------- 8C026B28 8C02A298 8C02A8F0 8C02A8FC 8C02F63C 8C02F63C 004DE2A0 0058E510 8022EDD8 801D7180 801DB904 801DBFE4 801DBA58 002DB1E0 800F8130 800F4BC4 800F5008 -------- -------- 91 => -------- 8C026800 8C029F74 8C02A5CC 8C02A5D8 8C02F534 8C02F534 004DE1B0 0058DC70 8022EE34 801D71DC 801DB960 801DC040 801DBAB4 002DB0E0 800F818C 800F4C20 800F5064 -------- -------- 92 => -------- 8C026C28 8C02A3A4 8C02A9FC 8C02AA08 8C02F74C 8C02F74C 004DE380 0058E740 8022EC9C 801D6FF4 801DB7E8 801DBEC8 801DB93C 002DB2B0 800F7FA4 800F4A38 800F4E7C -------- -------- -95 => -------- 8C026E04 8C02A58C 8C02ABE4 8C02ABF0 8C02F794 8C02F794 004DE3B0 0058DE10 8022EC4C 801D6FA4 801DB798 801DBE78 801DB8EC 002DB2D0 800F7F54 800F49E8 800F4E2C -------- 007C8DF0 -97 => -------- -------- 8C02A790 8C02ADE8 8C02ADF4 8C02F984 8C02F984 004DE500 0058DF60 8022E924 801D6C08 801DB4DC 801DBBBC 801DB630 002DB3B0 800F7BB8 800F464C 800F4A90 -------- 007C9244 -9A => -------- -------- -------- -------- -------- 8C0300C8 8C0300C8 004DE2A0 0058E510 8022DBCC 801D5C08 801DAADC 801DB198 801DACDC 002DB1E0 800F6BC0 800F383C 800F3C80 -------- 007DE6BC -9B => -------- -------- -------- -------- -------- 8C02FF24 8C02FF24 004DE900 0058E380 8022DC28 801D5C64 801DAB38 801DB1F4 801DAD38 002DB800 800F6C1C 800F3898 800F3CDC -------- 007DB0F4 -9C => -------- -------- -------- -------- -------- 8C030358 8C030358 004DE380 0058E740 8022D814 801D5904 801DA814 801DAED0 801DAA14 002DB2B0 800F68BC 800F3538 800F397C -------- 007E1964 -9F => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D4BC0 801D9E54 801DA510 801DA054 002DC1E0 800F5A08 800F2868 800F2CAC -------- 007EBAF8 - DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB-LOGIN BB-GAME -A0 => -------- 8C025520 8C028820 8C028E90 8C028E9C 8C02DDC8 8C02DDC8 004DCED0 0058C990 80232C5C 801DA3F0 801DDADC 801DE1BC 801DDC30 002D9B00 800FB1A8 800F7878 800F7CBC -------- 007C8380 -A1 => -------- 8C025520 8C028820 8C028E90 8C028E9C 8C02DDC8 8C02DDC8 004DCED0 0058C990 80232C5C 801DA3F0 801DDADC 801DE1BC 801DDC30 002D9B00 800FB1A8 800F7878 800F7CBC -------- 007C8380 -A2 => -------- 8C025C70 8C029024 8C029694 8C0296A0 8C02E5F0 8C02E5F0 004DD4B0 0058CF70 80231444 801D904C 801DCE64 801DD544 801DCFB8 002DA4A0 800F9EC8 800F6598 800F69DC -------- 007C8E00 -A3 => -------- 8C025C90 8C02903C 8C0296AC 8C0296B8 8C02E608 8C02E608 004DD4D0 0058CF90 802313CC 801D8FD4 801DCDEC 801DD4CC 801DCF40 002DA4E0 800F9E50 800F6520 800F6964 -------- 007C8E50 -A4 => -------- -------- 8C029054 8C0296C4 8C0296D0 8C02E620 8C02E620 004DD4F0 0058CFB0 80231230 801D8D98 801DCCF8 801DD3D8 801DCE4C 002DA520 800F9C14 800F62D4 800F6718 -------- 007C8F94 -A5 => -------- -------- 8C0290E4 8C029754 8C029760 8C02E6B0 8C02E6B0 004DD560 0058D020 802311B8 801D8D00 801DCC80 801DD360 801DCDD4 002DA5B0 800F9B7C 800F623C 800F6680 -------- 007C9060 -A6 => -------- -------- 8C028C0C 8C02927C 8C029288 8C02E1B4 8C02E1B4 004DD180 0058CC40 80231F64 801D9A48 801DD5F0 801DDCD0 801DD744 002D9E80 800FA8C8 800F6F98 800F73DC -------- 007C90A4 -A7 => -------- -------- 8C028C44 8C0292B4 8C0292C0 8C02E1EC 8C02E1EC 004DD1A0 0058CC60 80231E9C 801D998C 801DD534 801DDC14 801DD688 002D9EF0 800FA80C 800F6EDC 800F7320 -------- 007C91A4 -AB => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D4A18 801D9D50 801DA40C 801D9F50 002DC2C0 800F5860 800F26C0 800F2B04 -------- 007EBD04 -AC => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D4958 801D9CB4 801DA370 801D9EB4 002DC2E0 800F57C4 800F2624 800F2A68 -------- 007EBD4C - DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB-LOGIN BB-GAME -B0 => -------- -------- 8C0290FC 8C02976C 8C029778 8C02E6C8 8C02E6C8 004DD580 0058D040 8023110C 801D8C44 801DCBC4 801DD2A4 801DCD18 002DA5F0 800F9ACC 800F618C 800F65D0 -------- 007C925C -B1 => -------- -------- 8C02A8E4 8C02AF60 8C02AF6C 8C02FAFC 8C02FAFC 004DE5E0 0058E040 8022E6F8 801D69BC 801DB278 801DB958 801DB3CC 002DB460 800F7934 800F43C8 800F480C -------- 007C93E4 -B2 => -------- -------- -------- -------- -------- 8C02FCF4 8C02FCF4 004DE730 0058E190 8022E108 801D6238 801DAF60 801DB61C -------- 002DB630 800F718C -------- -------- -------- 007C9524 +95 => -------- 8C026E04 8C02A58C 8C02ABE4 8C02ABF0 8C02F794 8C02F794 004DE3B0 0058DE10 8022EC4C 801D6FA4 801DB798 801DBE78 801DB8EC 002DB2D0 800F7F54 800F49E8 800F4E2C 007C1B84 007C8DF0 +97 => -------- -------- 8C02A790 8C02ADE8 8C02ADF4 8C02F984 8C02F984 004DE500 0058DF60 8022E924 801D6C08 801DB4DC 801DBBBC 801DB630 002DB3B0 800F7BB8 800F464C 800F4A90 007C1FD8 007C9244 +9A => -------- -------- -------- -------- -------- 8C0300C8 8C0300C8 004DE2A0 0058E510 8022DBCC 801D5C08 801DAADC 801DB198 801DACDC 002DB1E0 800F6BC0 800F383C 800F3C80 007D7450 007DE6BC +9B => -------- -------- -------- -------- -------- 8C02FF24 8C02FF24 004DE900 0058E380 8022DC28 801D5C64 801DAB38 801DB1F4 801DAD38 002DB800 800F6C1C 800F3898 800F3CDC 007D3E88 007DB0F4 +9C => -------- -------- -------- -------- -------- 8C030358 8C030358 004DE380 0058E740 8022D814 801D5904 801DA814 801DAED0 801DAA14 002DB2B0 800F68BC 800F3538 800F397C 007DA6F8 007E1964 +9F => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D4BC0 801D9E54 801DA510 801DA054 002DC1E0 800F5A08 800F2868 800F2CAC 007E488C 007EBAF8 + DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB1243U BB12513J +A0 => -------- 8C025520 8C028820 8C028E90 8C028E9C 8C02DDC8 8C02DDC8 004DCED0 0058C990 80232C5C 801DA3F0 801DDADC 801DE1BC 801DDC30 002D9B00 800FB1A8 800F7878 800F7CBC 007C1114 007C8380 +A1 => -------- 8C025520 8C028820 8C028E90 8C028E9C 8C02DDC8 8C02DDC8 004DCED0 0058C990 80232C5C 801DA3F0 801DDADC 801DE1BC 801DDC30 002D9B00 800FB1A8 800F7878 800F7CBC 007C1114 007C8380 +A2 => -------- 8C025C70 8C029024 8C029694 8C0296A0 8C02E5F0 8C02E5F0 004DD4B0 0058CF70 80231444 801D904C 801DCE64 801DD544 801DCFB8 002DA4A0 800F9EC8 800F6598 800F69DC 007C1B94 007C8E00 +A3 => -------- 8C025C90 8C02903C 8C0296AC 8C0296B8 8C02E608 8C02E608 004DD4D0 0058CF90 802313CC 801D8FD4 801DCDEC 801DD4CC 801DCF40 002DA4E0 800F9E50 800F6520 800F6964 007C1BE4 007C8E50 +A4 => -------- -------- 8C029054 8C0296C4 8C0296D0 8C02E620 8C02E620 004DD4F0 0058CFB0 80231230 801D8D98 801DCCF8 801DD3D8 801DCE4C 002DA520 800F9C14 800F62D4 800F6718 007C1D28 007C8F94 +A5 => -------- -------- 8C0290E4 8C029754 8C029760 8C02E6B0 8C02E6B0 004DD560 0058D020 802311B8 801D8D00 801DCC80 801DD360 801DCDD4 002DA5B0 800F9B7C 800F623C 800F6680 007C1DF4 007C9060 +A6 => -------- -------- 8C028C0C 8C02927C 8C029288 8C02E1B4 8C02E1B4 004DD180 0058CC40 80231F64 801D9A48 801DD5F0 801DDCD0 801DD744 002D9E80 800FA8C8 800F6F98 800F73DC 007C1E38 007C90A4 +A7 => -------- -------- 8C028C44 8C0292B4 8C0292C0 8C02E1EC 8C02E1EC 004DD1A0 0058CC60 80231E9C 801D998C 801DD534 801DDC14 801DD688 002D9EF0 800FA80C 800F6EDC 800F7320 007C1F38 007C91A4 +AB => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D4A18 801D9D50 801DA40C 801D9F50 002DC2C0 800F5860 800F26C0 800F2B04 007E4A98 007EBD04 +AC => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D4958 801D9CB4 801DA370 801D9EB4 002DC2E0 800F57C4 800F2624 800F2A68 007E4AE0 007EBD4C + DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB1243U BB12513J +B0 => -------- -------- 8C0290FC 8C02976C 8C029778 8C02E6C8 8C02E6C8 004DD580 0058D040 8023110C 801D8C44 801DCBC4 801DD2A4 801DCD18 002DA5F0 800F9ACC 800F618C 800F65D0 007C1FF0 007C925C +B1 => -------- -------- 8C02A8E4 8C02AF60 8C02AF6C 8C02FAFC 8C02FAFC 004DE5E0 0058E040 8022E6F8 801D69BC 801DB278 801DB958 801DB3CC 002DB460 800F7934 800F43C8 800F480C 007C2178 007C93E4 +B2 => -------- -------- -------- -------- -------- 8C02FCF4 8C02FCF4 004DE730 0058E190 8022E108 801D6238 801DAF60 801DB61C -------- 002DB630 800F718C -------- -------- 007C22B8 007C9524 B7 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3EAC 800F0CB8 800F10FC -------- -------- -B8 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3DB8 800F0BC4 800F1008 -------- 00779DF0 +B8 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3DB8 800F0BC4 800F1008 005A9104 00779DF0 B9 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F0590 800F09D4 -------- -------- BA => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800EFA0C 800EFE50 -------- -------- BB => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F0454 800F0898 -------- -------- - DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB-LOGIN BB-GAME -C0 => -------- -------- -------- -------- -------- 8C02FB94 8C02FB94 004DE630 0058E090 8022E5CC 801D6854 801DB180 801DB860 801DB2D4 002DB4F0 800F77CC 800F4250 800F4694 -------- 007C9468 -C4 => -------- -------- -------- -------- -------- 8C02FCBC 8C02FCBC 004DE710 0058E170 8022E1E8 801D6364 801DB00C 801DB6EC 801DB160 002DB5F0 800F72DC 800F3E08 800F424C -------- 007C94AC -C5 => -------- -------- -------- -------- -------- 8C030530 8C030530 004DEDF0 0058E8D0 8022D4A8 801D5538 801DA648 801DAD04 801DA848 002DBE50 800F6380 800F31F0 800F3634 -------- 007E4C0C + DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB1243U BB12513J +C0 => -------- -------- -------- -------- -------- 8C02FB94 8C02FB94 004DE630 0058E090 8022E5CC 801D6854 801DB180 801DB860 801DB2D4 002DB4F0 800F77CC 800F4250 800F4694 007C21FC 007C9468 +C4 => -------- -------- -------- -------- -------- 8C02FCBC 8C02FCBC 004DE710 0058E170 8022E1E8 801D6364 801DB00C 801DB6EC 801DB160 002DB5F0 800F72DC 800F3E08 800F424C 007C2240 007C94AC +C5 => -------- -------- -------- -------- -------- 8C030530 8C030530 004DEDF0 0058E8D0 8022D4A8 801D5538 801DA648 801DAD04 801DA848 002DBE50 800F6380 800F31F0 800F3634 007DD9A0 007E4C0C C9 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800FA4F0 800F6BC0 800F7004 -------- -------- CB => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F0324 800F0768 -------- -------- CC => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F1EE4 800F2328 -------- -------- - DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB-LOGIN BB-GAME -D1 => -------- -------- -------- -------- -------- -------- -------- -------- -------- 8022D1D4 801D508C 801DA24C 801DA908 801DA44C 002DC060 800F5ED4 800F2D34 800F3178 -------- 007CC854 -D3 => -------- -------- -------- -------- -------- -------- -------- -------- -------- 8022D0A8 801D4F3C 801DA15C 801DA818 801DA35C 002DC080 800F5D84 800F2BE4 800F3028 -------- 007CFAF0 -D4 => -------- -------- -------- -------- -------- -------- -------- -------- -------- 8022D054 801D4EE8 801DA108 801DA7C4 801DA308 002DC0F0 800F5D30 800F2B90 800F2FD4 -------- 007F9C60 -D5 => -------- -------- -------- -------- -------- -------- -------- -------- -------- 8022CF88 801D4E20 801DA040 801DA6FC 801DA240 002DC110 800F5C68 800F2AC8 800F2F0C -------- 007EBA50 -D7 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D4CD4 801D9F20 801DA5DC 801DA120 002DC1B0 800F5B1C 800F297C 800F2DC0 -------- 00779DF0 -D8 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D5244 801DA3E4 801DAAA0 801DA5E4 002DBF40 800F608C 800F2EEC 800F3330 -------- 007D7A20 -DA => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D4C80 801D9ECC 801DA588 801DA0CC 002DC1C0 800F5AC8 800F2928 800F2D6C -------- 007EBAE0 -DC => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F39E0 800F07EC 800F0C30 0047ECB4 -------- -DD => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007F2E44 -DE => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007F6970 - DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB-LOGIN BB-GAME + DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB1243U BB12513J +D1 => -------- -------- -------- -------- -------- -------- -------- -------- -------- 8022D1D4 801D508C 801DA24C 801DA908 801DA44C 002DC060 800F5ED4 800F2D34 800F3178 007C55E8 007CC854 +D3 => -------- -------- -------- -------- -------- -------- -------- -------- -------- 8022D0A8 801D4F3C 801DA15C 801DA818 801DA35C 002DC080 800F5D84 800F2BE4 800F3028 007C8884 007CFAF0 +D4 => -------- -------- -------- -------- -------- -------- -------- -------- -------- 8022D054 801D4EE8 801DA108 801DA7C4 801DA308 002DC0F0 800F5D30 800F2B90 800F2FD4 007F29E0 007F9C60 +D5 => -------- -------- -------- -------- -------- -------- -------- -------- -------- 8022CF88 801D4E20 801DA040 801DA6FC 801DA240 002DC110 800F5C68 800F2AC8 800F2F0C 007E47E4 007EBA50 +D7 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D4CD4 801D9F20 801DA5DC 801DA120 002DC1B0 800F5B1C 800F297C 800F2DC0 005A9104 00779DF0 +D8 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D5244 801DA3E4 801DAAA0 801DA5E4 002DBF40 800F608C 800F2EEC 800F3330 007D07B4 007D7A20 +DA => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D4C80 801D9ECC 801DA588 801DA0CC 002DC1C0 800F5AC8 800F2928 800F2D6C 007E4874 007EBAE0 +DC => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F39E0 800F07EC 800F0C30 -------- -------- +DD => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007EBBD8 007F2E44 +DE => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007EF6F0 007F6970 + DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB1243U BB12513J E0 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F554C 800F23F0 800F2834 -------- -------- -E1 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F54BC 800F2360 800F27A4 0046EC6C -------- -E2 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F5218 800F20BC 800F2500 0046B838 -------- +E1 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F54BC 800F2360 800F27A4 -------- -------- +E2 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F5218 800F20BC 800F2500 -------- -------- E3 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F5130 800F1FD4 800F2418 -------- -------- -E4 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F472C 800F14D0 800F1914 00475354 -------- -E5 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 00471F28 -------- -E6 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F4CE0 800F1A84 800F1EC8 00464E18 007EF2DC -E7 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F43F0 800F1184 800F15C8 -------- 007F264C -E8 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F4910 800F16B4 800F1AF8 0047ECB4 -------- +E4 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F472C 800F14D0 800F1914 -------- -------- +E5 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- +E6 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F4CE0 800F1A84 800F1EC8 007E8070 007EF2DC +E7 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F43F0 800F1184 800F15C8 007EB3E0 007F264C +E8 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F4910 800F16B4 800F1AF8 -------- -------- E9 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F4888 800F162C 800F1A70 -------- -------- -EA => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F45C8 800F136C 800F17B0 -------- 007C19F4 -EB => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F413C 800F0F58 800F139C 0047ECCC -------- +EA => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F45C8 800F136C 800F17B0 007BA788 007C19F4 +EB => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F413C 800F0F58 800F139C -------- -------- ED => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3FC8 800F0DE4 800F1228 -------- -------- -EE => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3C7C 800F0A88 800F0ECC -------- 007C92A0 -EF => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3824 800F064C 800F0A90 007C94FC 007C94FC - DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB-LOGIN BB-GAME -F0 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007F2DB8 +EE => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3C7C 800F0A88 800F0ECC 007C2034 007C92A0 +EF => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3824 800F064C 800F0A90 007C2290 007C94FC + DC-NTE DC112000 DC122000 DC012001 DCv1 DC082001 DCv2 PC-NTE PC GC1&2NTE GC-GJAM GC1&2v11 GC1&2EU GC1&2v12 XBOX-EXE GCEp3NTE GCEp3US GCEp3EU BB1243U BB12513J +F0 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007EBB4C 007F2DB8 Subcommands flags: diff --git a/src/CommandFormats.hh b/src/CommandFormats.hh index f6ebe213..aa071f12 100644 --- a/src/CommandFormats.hh +++ b/src/CommandFormats.hh @@ -3081,6 +3081,9 @@ struct S_ClientInit_BB_00E6 { le_uint32_t error_code = 0; le_uint32_t player_tag = 0x00010000; le_uint32_t guild_card_number = 0; + // If security_token is zero, the client scrambles client_config before + // sending it back in a later 93 command. See scramble_bb_security_data in + // ReceiveCommands.cc for details on how this is done. le_uint32_t security_token = 0; parray client_config; uint8_t can_create_team = 1; diff --git a/src/License.cc b/src/License.cc index 31eb6742..bb208d18 100644 --- a/src/License.cc +++ b/src/License.cc @@ -127,6 +127,14 @@ shared_ptr LicenseIndex::get(uint32_t serial_number) const { } } +shared_ptr LicenseIndex::get_by_bb_username(const string& bb_username) const { + try { + return this->bb_username_to_license.at(bb_username); + } catch (const out_of_range&) { + throw missing_license(); + } +} + vector> LicenseIndex::all() const { vector> ret; ret.reserve(this->serial_number_to_license.size()); diff --git a/src/License.hh b/src/License.hh index 0ad0436f..de6a4ad0 100644 --- a/src/License.hh +++ b/src/License.hh @@ -100,6 +100,7 @@ public: size_t count() const; std::shared_ptr get(uint32_t serial_number) const; + std::shared_ptr get_by_bb_username(const std::string& bb_username) const; std::vector> all() const; void add(std::shared_ptr l); diff --git a/src/Lobby.cc b/src/Lobby.cc index 4c272cb2..f2a976e5 100644 --- a/src/Lobby.cc +++ b/src/Lobby.cc @@ -465,27 +465,24 @@ void Lobby::add_client(shared_ptr c, ssize_t required_client_id) { this->leader_id = c->lobby_client_id; } - // If the lobby is a game and there was no one in it, reassign all the floor + // If this is a lobby or no one was here before this, reassign all the floor // item IDs and reset the next item IDs - if (this->is_game()) { - if (leader_index >= this->max_clients) { - for (size_t x = 0; x < 12; x++) { - this->next_item_id_for_client[x] = 0x00010000 + 0x00200000 * x; - } - this->next_game_item_id = 0xCC000000; + if (!this->is_game() || (leader_index >= this->max_clients)) { + for (size_t x = 0; x < 12; x++) { + this->next_item_id_for_client[x] = 0x00010000 + 0x00200000 * x; + } + this->next_game_item_id = 0xCC000000; + for (auto& m : this->floor_item_managers) { + this->next_game_item_id = m.reassign_all_item_ids(this->next_game_item_id); + } + } - // Reassign all floor item IDs so they won't conflict with any players' - // item IDs - for (auto& m : this->floor_item_managers) { - this->next_game_item_id = m.reassign_all_item_ids(this->next_game_item_id); - } - } - this->assign_inventory_and_bank_item_ids(c); - // On BB, we send artificial flag state to fix an Episode 2 bug where the - // CCA door lock state is overwritten by quests. - if (c->version() == Version::BB_V4) { - c->config.set_flag(Client::Flag::SHOULD_SEND_ARTIFICIAL_FLAG_STATE); - } + this->assign_inventory_and_bank_item_ids(c); + + // On BB, we send artificial flag state to fix an Episode 2 bug where the + // CCA door lock state is overwritten by quests. + if (this->is_game() && (c->version() == Version::BB_V4)) { + c->config.set_flag(Client::Flag::SHOULD_SEND_ARTIFICIAL_FLAG_STATE); } // If the lobby is recording a battle record, add the player join event diff --git a/src/Main.cc b/src/Main.cc index 57983975..94bac908 100644 --- a/src/Main.cc +++ b/src/Main.cc @@ -221,6 +221,7 @@ static void a_compress_decompress_fn(Arguments& args) { bool is_prs = ends_with(action, "-prs"); bool is_bc0 = ends_with(action, "-bc0"); bool is_pr2 = ends_with(action, "-pr2"); + bool is_prc = ends_with(action, "-prc"); bool is_decompress = starts_with(action, "decompress-"); bool is_big_endian = args.get("big-endian"); bool is_optimal = args.get("optimal"); @@ -231,7 +232,7 @@ static void a_compress_decompress_fn(Arguments& args) { string data = read_input_data(args); size_t pr2_expected_size = 0; - if (is_decompress && is_pr2) { + if (is_decompress && (is_pr2 || is_prc)) { auto decrypted = is_big_endian ? decrypt_pr2_data(data) : decrypt_pr2_data(data); pr2_expected_size = decrypted.decompressed_size; data = std::move(decrypted.compressed_data); @@ -253,13 +254,13 @@ static void a_compress_decompress_fn(Arguments& args) { }; uint64_t start = now(); - if (!is_decompress && (is_prs || is_pr2)) { + if (!is_decompress && (is_prs || is_pr2 || is_prc)) { if (is_optimal) { data = prs_compress_optimal(data.data(), data.size(), optimal_progress_fn); } else { data = prs_compress(data, compression_level, progress_fn); } - } else if (is_decompress && (is_prs || is_pr2)) { + } else if (is_decompress && (is_prs || is_pr2 || is_prc)) { data = prs_decompress(data, bytes, (bytes != 0)); } else if (!is_decompress && is_bc0) { if (is_optimal) { @@ -283,13 +284,15 @@ static void a_compress_decompress_fn(Arguments& args) { log_info("%zu (0x%zX) bytes input => %zu (0x%zX) bytes output (%g%%) in %s (%s / sec)", input_bytes, input_bytes, data.size(), data.size(), size_ratio, time_str.c_str(), bytes_per_sec_str.c_str()); - if (is_decompress && is_pr2 && (data.size() != pr2_expected_size)) { - log_warning("Result data size (%zu bytes) does not match expected size from PR2 header (%zu bytes)", data.size(), pr2_expected_size); - } else if (!is_decompress && is_pr2) { - uint32_t pr2_seed = seed.empty() ? random_object() : stoul(seed, nullptr, 16); - data = is_big_endian - ? encrypt_pr2_data(data, input_bytes, pr2_seed) - : encrypt_pr2_data(data, input_bytes, pr2_seed); + if (is_pr2 || is_prc) { + if (is_decompress && (data.size() != pr2_expected_size)) { + log_warning("Result data size (%zu bytes) does not match expected size from PR2 header (%zu bytes)", data.size(), pr2_expected_size); + } else if (!is_decompress) { + uint32_t pr2_seed = seed.empty() ? random_object() : stoul(seed, nullptr, 16); + data = is_big_endian + ? encrypt_pr2_data(data, input_bytes, pr2_seed) + : encrypt_pr2_data(data, input_bytes, pr2_seed); + } } const char* extension; @@ -299,6 +302,8 @@ static void a_compress_decompress_fn(Arguments& args) { extension = "prs"; } else if (is_bc0) { extension = "bc0"; + } else if (is_prc) { + extension = "prc"; } else if (is_pr2) { extension = "pr2"; } else { @@ -309,11 +314,13 @@ static void a_compress_decompress_fn(Arguments& args) { Action a_compress_prs("compress-prs", nullptr, a_compress_decompress_fn); Action a_compress_bc0("compress-bc0", nullptr, a_compress_decompress_fn); -Action a_compress_pr2("compress-pr2", "\ +Action a_compress_pr2("compress-pr2", nullptr, a_compress_decompress_fn); +Action a_compress_prc("compress-prc", "\ compress-prs [INPUT-FILENAME [OUTPUT-FILENAME]]\n\ compress-pr2 [INPUT-FILENAME [OUTPUT-FILENAME]]\n\ + compress-prc [INPUT-FILENAME [OUTPUT-FILENAME]]\n\ compress-bc0 [INPUT-FILENAME [OUTPUT-FILENAME]]\n\ - Compress data using the PRS, PR2, or BC0 algorithms. By default, the\n\ + Compress data using the PRS, PR2, PRC, or BC0 algorithms. By default, the\n\ heuristic-based compressor is used, which gives a good balance between\n\ memory usage, CPU usage, and output size. For PRS and PR2, this compressor\n\ can be tuned with the --compression-level=N option, which specifies how\n\ @@ -328,11 +335,13 @@ Action a_compress_pr2("compress-pr2", "\ a_compress_decompress_fn); Action a_decompress_prs("decompress-prs", nullptr, a_compress_decompress_fn); Action a_decompress_bc0("decompress-bc0", nullptr, a_compress_decompress_fn); -Action a_decompress_pr2("decompress-pr2", "\ +Action a_decompress_pr2("decompress-pr2", nullptr, a_compress_decompress_fn); +Action a_decompress_prc("decompress-prc", "\ decompress-prs [INPUT-FILENAME [OUTPUT-FILENAME]]\n\ decompress-pr2 [INPUT-FILENAME [OUTPUT-FILENAME]]\n\ + decompress-prc [INPUT-FILENAME [OUTPUT-FILENAME]]\n\ decompress-bc0 [INPUT-FILENAME [OUTPUT-FILENAME]]\n\ - Decompress data compressed using the PRS, PR2, or BC0 algorithms.\n", + Decompress data compressed using the PRS, PR2, PRC, or BC0 algorithms.\n", a_compress_decompress_fn); Action a_prs_size( diff --git a/src/PlayerSubordinates.cc b/src/PlayerSubordinates.cc index e78ceb02..82d6ae9a 100644 --- a/src/PlayerSubordinates.cc +++ b/src/PlayerSubordinates.cc @@ -563,11 +563,11 @@ bool PlayerInventory::has_equipped_item(EquipSlot slot) const { } } -void PlayerInventory::equip_item_id(uint32_t item_id, EquipSlot slot) { - this->equip_item_index(this->find_item(item_id), slot); +void PlayerInventory::equip_item_id(uint32_t item_id, EquipSlot slot, bool allow_overwrite) { + this->equip_item_index(this->find_item(item_id), slot, allow_overwrite); } -void PlayerInventory::equip_item_index(size_t index, EquipSlot slot) { +void PlayerInventory::equip_item_index(size_t index, EquipSlot slot, bool allow_overwrite) { auto& item = this->items[index]; if (slot == EquipSlot::UNKNOWN) { @@ -578,7 +578,11 @@ void PlayerInventory::equip_item_index(size_t index, EquipSlot slot) { throw runtime_error("incorrect item type for equip slot"); } if (this->has_equipped_item(slot)) { - throw runtime_error("equip slot is already in use"); + if (allow_overwrite) { + this->unequip_item_slot(slot); + } else { + throw runtime_error("equip slot is already in use"); + } } item.flags |= 0x00000008; diff --git a/src/PlayerSubordinates.hh b/src/PlayerSubordinates.hh index 2f3dd54d..2f8db744 100644 --- a/src/PlayerSubordinates.hh +++ b/src/PlayerSubordinates.hh @@ -82,8 +82,8 @@ struct PlayerInventory { size_t find_equipped_item(EquipSlot slot) const; bool has_equipped_item(EquipSlot slot) const; - void equip_item_id(uint32_t item_id, EquipSlot slot); - void equip_item_index(size_t index, EquipSlot slot); + void equip_item_id(uint32_t item_id, EquipSlot slot, bool allow_overwrite); + void equip_item_index(size_t index, EquipSlot slot, bool allow_overwrite); void unequip_item_id(uint32_t item_id); void unequip_item_slot(EquipSlot slot); void unequip_item_index(size_t index); diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index b15732f1..5bbca1f9 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -4845,6 +4845,7 @@ static void on_EA_BB(shared_ptr c, uint16_t command, uint32_t flag, stri // The client only sends this command with flag = 0x00, 0x30, or 0x40 bool send_updates_for_this_m = false; bool send_updates_for_other_m = false; + bool send_master_transfer_updates = false; switch (flag) { case 0x00: // Demote member if (s->team_index->demote_leader(c->license->serial_number, cmd.guild_card_number)) { @@ -4867,11 +4868,21 @@ static void on_EA_BB(shared_ptr c, uint16_t command, uint32_t flag, stri send_command(c, 0x11EA, 0x00000000); send_updates_for_this_m = true; send_updates_for_other_m = true; + send_master_transfer_updates = true; break; default: throw runtime_error("invalid privilege level"); } + if (send_master_transfer_updates) { + for (const auto& it : team->members) { + try { + auto other_c = s->find_client(nullptr, it.second.serial_number); + send_update_lobby_data_bb(other_c); + } catch (const out_of_range&) { + } + } + } if (send_updates_for_this_m) { send_update_team_metadata_for_client(c); send_team_membership_info(c); @@ -5003,34 +5014,60 @@ static void on_04_P(shared_ptr c, uint16_t, uint32_t, string& data) { const auto& cmd = check_size_t(data); auto s = c->require_server_state(); - try { - auto l = s->license_index->verify_bb(cmd.username.decode(), cmd.password.decode()); - c->set_license(l); + string username = cmd.username.decode(); + string password = cmd.password.decode(); - } catch (const LicenseIndex::incorrect_password& e) { - send_message_box(c, string_printf("Login failed: %s", e.what())); - c->should_disconnect = true; - return; + // There are 3 cases here: + // - No login information at all: just proceed without checking license + // - Username only: check that license exists if allow_unregistered_users is off + // - Username and password: call verify_bb + if (!username.empty() && !password.empty()) { + try { + auto l = s->license_index->verify_bb(username, password); + c->set_license(l); - } catch (const LicenseIndex::missing_license& e) { - if (!s->allow_unregistered_users) { + } catch (const LicenseIndex::incorrect_password& e) { send_message_box(c, string_printf("Login failed: %s", e.what())); c->should_disconnect = true; return; - } else { - auto l = s->license_index->create_license(); - l->serial_number = fnv1a32(cmd.username.decode()) & 0x7FFFFFFF; - l->bb_username = cmd.username.decode(); - l->bb_password = cmd.password.decode(); - s->license_index->add(l); - if (!s->is_replay) { - l->save(); + } catch (const LicenseIndex::missing_license& e) { + if (!s->allow_unregistered_users) { + send_message_box(c, string_printf("Login failed: %s", e.what())); + c->should_disconnect = true; + return; + } else { + + auto l = s->license_index->create_license(); + l->serial_number = fnv1a32(cmd.username.decode()) & 0x7FFFFFFF; + l->bb_username = cmd.username.decode(); + l->bb_password = cmd.password.decode(); + s->license_index->add(l); + if (!s->is_replay) { + l->save(); + } + c->set_license(l); + string l_str = l->str(); + c->log.info("Created license %s", l_str.c_str()); } - c->set_license(l); - string l_str = l->str(); - c->log.info("Created license %s", l_str.c_str()); } + + } else if (!username.empty() && !s->allow_unregistered_users) { + try { + auto l = s->license_index->get_by_bb_username(username); + c->set_license(l); + } catch (const LicenseIndex::missing_license& e) { + send_message_box(c, string_printf("Login failed: %s", e.what())); + c->should_disconnect = true; + return; + } + + } else { + auto l = s->license_index->create_temporary_license(); + l->serial_number = random_object() & 0x7FFFFFFF; + l->bb_username = "__unknown__"; + l->bb_password = "__unknown__"; + c->set_license(l); } // On BB we can use colors and newlines should be \n; on PC we can't use diff --git a/src/ReceiveSubcommands.cc b/src/ReceiveSubcommands.cc index 5c153f61..1a59b6cd 100644 --- a/src/ReceiveSubcommands.cc +++ b/src/ReceiveSubcommands.cc @@ -1436,7 +1436,7 @@ static void on_equip_item(shared_ptr c, uint8_t command, uint8_t flag, v auto l = c->require_lobby(); EquipSlot slot = static_cast(cmd.equip_slot.load()); auto p = c->character(); - p->inventory.equip_item_id(cmd.item_id, slot); + p->inventory.equip_item_id(cmd.item_id, slot, is_pre_v1(c->version())); c->log.info("Equipped item %08" PRIX32, cmd.item_id.load()); forward_subcommand(c, command, flag, data, size); diff --git a/src/SendCommands.cc b/src/SendCommands.cc index b761796f..abc19729 100644 --- a/src/SendCommands.cc +++ b/src/SendCommands.cc @@ -2181,6 +2181,17 @@ void send_player_join_notification(shared_ptr c, } } +void send_update_lobby_data_bb(std::shared_ptr c) { + auto l = c->require_lobby(); + for (auto lc : l->clients) { + if (lc) { + PlayerLobbyDataBB cmd; + populate_lobby_data_for_client(cmd, c, lc); + send_command_t(lc, 0x00F0, 0x00000000, cmd); + } + } +} + void send_player_leave_notification(shared_ptr l, uint8_t leaving_client_id) { S_LeaveLobby_66_69_Ep3_E9 cmd = {leaving_client_id, l->leader_id, 1, 0}; uint8_t cmd_num; diff --git a/src/SendCommands.hh b/src/SendCommands.hh index c36e3fe3..a24b00f1 100644 --- a/src/SendCommands.hh +++ b/src/SendCommands.hh @@ -268,6 +268,7 @@ void send_lobby_list(std::shared_ptr c); void send_player_records(std::shared_ptr c, std::shared_ptr l, std::shared_ptr joining_client = nullptr); void send_join_lobby(std::shared_ptr c, std::shared_ptr l); +void send_update_lobby_data_bb(std::shared_ptr c); void send_player_join_notification(std::shared_ptr c, std::shared_ptr l, std::shared_ptr joining_client); void send_player_leave_notification(std::shared_ptr l, uint8_t leaving_client_id); void send_self_leave_notification(std::shared_ptr c); diff --git a/src/ServerState.cc b/src/ServerState.cc index 934621cb..74d5be76 100644 --- a/src/ServerState.cc +++ b/src/ServerState.cc @@ -327,6 +327,10 @@ void ServerState::on_player_left_lobby(shared_ptr l, uint8_t leaving_clie } shared_ptr ServerState::find_client(const string* identifier, uint64_t serial_number, shared_ptr l) { + // WARNING: There are multiple callsites where we assume this function never + // returns a client that isn't in any lobby. If this behavior changes, we will + // need to audit all callsites to ensure correctness. + if ((serial_number == 0) && identifier) { try { serial_number = stoull(*identifier, nullptr, 0);