Merge branch 'fuzziqersoftware:master' into master

This commit is contained in:
Maria J. Belmonte
2023-12-28 19:34:47 +01:00
committed by GitHub
14 changed files with 247 additions and 155 deletions
+1 -1
View File
@@ -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: 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`) * 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 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`) * Encrypt or decrypt data using Episode 3's trivial scheme (`encrypt-trivial-data`, `decrypt-trivial-data`)
+111 -94
View File
@@ -17,126 +17,143 @@ Patch server handler table
14 => 004052D0 0070C0D0 0000000C 14 => 004052D0 0070C0D0 0000000C
15 => 004052A8 0070C910 00000004 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 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 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 -------- 007FCF54 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 -------- -------- 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 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 -------- 007C4FC8 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 -------- 007C8318 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 -------- 007C834C 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 -------- 007C8380 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 -------- 007C848C 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 -------- -------- 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 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 -------- 007C87A0 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 -------- 00779DF0 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 -------- 007C8700 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 -------- 00779DF0 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 -------- 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 -------- -------- 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 -------- -------- 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 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 00478700 007C8854 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 -------- -------- 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 -------- -------- 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 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 -------- 007C92E4 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 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
22 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007F2E5C 007F2E5C 22 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 0047E92C 007F2E5C
23 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007F2EEC 23 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007EBC6C 007F2EEC
24 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007F2F08 24 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007EBC88 007F2F08
25 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007F2F48 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 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
41 => 8C024EBC 8C025BB8 8C028F74 8C0295E4 8C0295F0 8C02E540 8C02E540 004DD400 0058CEC0 80231694 801D91E8 801DD000 801DD6E0 801DD154 002DA3E0 800FA064 800F6734 800F6B78 -------- 007C8BA8 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 -------- 007C8E94 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 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
60 => 8C024D38 8C025A34 8C028E54 8C0294C4 8C0294D0 8C02E3FC 8C02E3FC 004DD310 0058CDD0 80231A88 801D9674 801DD24C 801DD92C 801DD3A0 002DA1A0 800FA4F0 800F6BC0 800F7004 -------- 007C8898 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 -------- 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 -------- 007C85C8 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 -------- 007C8C28 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 -------- 007FCF24 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 -------- 007C88D8 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 -------- 007C8CEC 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 -------- 007FCEFC 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 -------- 007C8DA8 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 -------- 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 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
80 => 8C024E00 8C025AFC 8C028EC4 8C029534 8C029540 8C02E44C 8C02E44C 004DD330 0058CDF0 80231990 801D9550 801DD128 801DD808 801DD27C 002DA200 800FA3CC 800F6A9C 800F6EE0 -------- -------- 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 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 -------- 007C89EC 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 -------- 007CC810 88 => 8C025DEC -------- -------- -------- -------- 8C02FD80 8C02FD80 004DE7A0 0058E200 8022E034 801D60C8 801DAF0C 801DB5C8 801DB10C 002DB6A0 800F701C 800F3C98 800F40DC 007C55A4 007CC810
89 => 8C025AC4 -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 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 -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 8D => 8C0260C8 -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- --------
8E => 8C02486C -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 8E => 8C02486C -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- --------
8F => 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 -------- -------- 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 -------- -------- 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 -------- -------- 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 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 -------- 007C9244 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 -------- 007DE6BC 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 -------- 007DB0F4 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 -------- 007E1964 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 -------- 007EBAF8 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 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
A0 => -------- 8C025520 8C028820 8C028E90 8C028E9C 8C02DDC8 8C02DDC8 004DCED0 0058C990 80232C5C 801DA3F0 801DDADC 801DE1BC 801DDC30 002D9B00 800FB1A8 800F7878 800F7CBC -------- 007C8380 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 -------- 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 -------- 007C8E00 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 -------- 007C8E50 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 -------- 007C8F94 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 -------- 007C9060 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 -------- 007C90A4 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 -------- 007C91A4 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 -------- 007EBD04 AB => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D4A18 801D9D50 801DA40C 801D9F50 002DC2C0 800F5860 800F26C0 800F2B04 007E4A98 007EBD04
AC => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D4958 801D9CB4 801DA370 801D9EB4 002DC2E0 800F57C4 800F2624 800F2A68 -------- 007EBD4C 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 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
B0 => -------- -------- 8C0290FC 8C02976C 8C029778 8C02E6C8 8C02E6C8 004DD580 0058D040 8023110C 801D8C44 801DCBC4 801DD2A4 801DCD18 002DA5F0 800F9ACC 800F618C 800F65D0 -------- 007C925C 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 -------- 007C93E4 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 -------- -------- -------- 007C9524 B2 => -------- -------- -------- -------- -------- 8C02FCF4 8C02FCF4 004DE730 0058E190 8022E108 801D6238 801DAF60 801DB61C -------- 002DB630 800F718C -------- -------- 007C22B8 007C9524
B7 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3EAC 800F0CB8 800F10FC -------- -------- B7 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3EAC 800F0CB8 800F10FC -------- --------
B8 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3DB8 800F0BC4 800F1008 -------- 00779DF0 B8 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3DB8 800F0BC4 800F1008 005A9104 00779DF0
B9 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F0590 800F09D4 -------- -------- B9 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F0590 800F09D4 -------- --------
BA => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800EFA0C 800EFE50 -------- -------- BA => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800EFA0C 800EFE50 -------- --------
BB => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F0454 800F0898 -------- -------- 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 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 -------- 007C9468 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 -------- 007C94AC 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 -------- 007E4C0C C5 => -------- -------- -------- -------- -------- 8C030530 8C030530 004DEDF0 0058E8D0 8022D4A8 801D5538 801DA648 801DAD04 801DA848 002DBE50 800F6380 800F31F0 800F3634 007DD9A0 007E4C0C
C9 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800FA4F0 800F6BC0 800F7004 -------- -------- C9 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800FA4F0 800F6BC0 800F7004 -------- --------
CB => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F0324 800F0768 -------- -------- CB => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F0324 800F0768 -------- --------
CC => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F1EE4 800F2328 -------- -------- 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 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 -------- 007CC854 D1 => -------- -------- -------- -------- -------- -------- -------- -------- -------- 8022D1D4 801D508C 801DA24C 801DA908 801DA44C 002DC060 800F5ED4 800F2D34 800F3178 007C55E8 007CC854
D3 => -------- -------- -------- -------- -------- -------- -------- -------- -------- 8022D0A8 801D4F3C 801DA15C 801DA818 801DA35C 002DC080 800F5D84 800F2BE4 800F3028 -------- 007CFAF0 D3 => -------- -------- -------- -------- -------- -------- -------- -------- -------- 8022D0A8 801D4F3C 801DA15C 801DA818 801DA35C 002DC080 800F5D84 800F2BE4 800F3028 007C8884 007CFAF0
D4 => -------- -------- -------- -------- -------- -------- -------- -------- -------- 8022D054 801D4EE8 801DA108 801DA7C4 801DA308 002DC0F0 800F5D30 800F2B90 800F2FD4 -------- 007F9C60 D4 => -------- -------- -------- -------- -------- -------- -------- -------- -------- 8022D054 801D4EE8 801DA108 801DA7C4 801DA308 002DC0F0 800F5D30 800F2B90 800F2FD4 007F29E0 007F9C60
D5 => -------- -------- -------- -------- -------- -------- -------- -------- -------- 8022CF88 801D4E20 801DA040 801DA6FC 801DA240 002DC110 800F5C68 800F2AC8 800F2F0C -------- 007EBA50 D5 => -------- -------- -------- -------- -------- -------- -------- -------- -------- 8022CF88 801D4E20 801DA040 801DA6FC 801DA240 002DC110 800F5C68 800F2AC8 800F2F0C 007E47E4 007EBA50
D7 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D4CD4 801D9F20 801DA5DC 801DA120 002DC1B0 800F5B1C 800F297C 800F2DC0 -------- 00779DF0 D7 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D4CD4 801D9F20 801DA5DC 801DA120 002DC1B0 800F5B1C 800F297C 800F2DC0 005A9104 00779DF0
D8 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D5244 801DA3E4 801DAAA0 801DA5E4 002DBF40 800F608C 800F2EEC 800F3330 -------- 007D7A20 D8 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D5244 801DA3E4 801DAAA0 801DA5E4 002DBF40 800F608C 800F2EEC 800F3330 007D07B4 007D7A20
DA => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D4C80 801D9ECC 801DA588 801DA0CC 002DC1C0 800F5AC8 800F2928 800F2D6C -------- 007EBAE0 DA => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 801D4C80 801D9ECC 801DA588 801DA0CC 002DC1C0 800F5AC8 800F2928 800F2D6C 007E4874 007EBAE0
DC => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F39E0 800F07EC 800F0C30 0047ECB4 -------- DC => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F39E0 800F07EC 800F0C30 -------- --------
DD => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007F2E44 DD => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007EBBD8 007F2E44
DE => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007F6970 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 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
E0 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F554C 800F23F0 800F2834 -------- -------- E0 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F554C 800F23F0 800F2834 -------- --------
E1 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F54BC 800F2360 800F27A4 0046EC6C -------- E1 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F54BC 800F2360 800F27A4 -------- --------
E2 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F5218 800F20BC 800F2500 0046B838 -------- E2 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F5218 800F20BC 800F2500 -------- --------
E3 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F5130 800F1FD4 800F2418 -------- -------- E3 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F5130 800F1FD4 800F2418 -------- --------
E4 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F472C 800F14D0 800F1914 00475354 -------- E4 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F472C 800F14D0 800F1914 -------- --------
E5 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 00471F28 -------- E5 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- --------
E6 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F4CE0 800F1A84 800F1EC8 00464E18 007EF2DC E6 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F4CE0 800F1A84 800F1EC8 007E8070 007EF2DC
E7 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F43F0 800F1184 800F15C8 -------- 007F264C E7 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F43F0 800F1184 800F15C8 007EB3E0 007F264C
E8 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F4910 800F16B4 800F1AF8 0047ECB4 -------- E8 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F4910 800F16B4 800F1AF8 -------- --------
E9 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F4888 800F162C 800F1A70 -------- -------- E9 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F4888 800F162C 800F1A70 -------- --------
EA => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F45C8 800F136C 800F17B0 -------- 007C19F4 EA => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F45C8 800F136C 800F17B0 007BA788 007C19F4
EB => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F413C 800F0F58 800F139C 0047ECCC -------- EB => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F413C 800F0F58 800F139C -------- --------
ED => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3FC8 800F0DE4 800F1228 -------- -------- ED => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3FC8 800F0DE4 800F1228 -------- --------
EE => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3C7C 800F0A88 800F0ECC -------- 007C92A0 EE => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3C7C 800F0A88 800F0ECC 007C2034 007C92A0
EF => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 800F3824 800F064C 800F0A90 007C94FC 007C94FC 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 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
F0 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007F2DB8 F0 => -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- 007EBB4C 007F2DB8
Subcommands flags: Subcommands flags:
+3
View File
@@ -3081,6 +3081,9 @@ struct S_ClientInit_BB_00E6 {
le_uint32_t error_code = 0; le_uint32_t error_code = 0;
le_uint32_t player_tag = 0x00010000; le_uint32_t player_tag = 0x00010000;
le_uint32_t guild_card_number = 0; 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; le_uint32_t security_token = 0;
parray<uint8_t, 0x28> client_config; parray<uint8_t, 0x28> client_config;
uint8_t can_create_team = 1; uint8_t can_create_team = 1;
+8
View File
@@ -127,6 +127,14 @@ shared_ptr<License> LicenseIndex::get(uint32_t serial_number) const {
} }
} }
shared_ptr<License> 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<shared_ptr<License>> LicenseIndex::all() const { vector<shared_ptr<License>> LicenseIndex::all() const {
vector<shared_ptr<License>> ret; vector<shared_ptr<License>> ret;
ret.reserve(this->serial_number_to_license.size()); ret.reserve(this->serial_number_to_license.size());
+1
View File
@@ -100,6 +100,7 @@ public:
size_t count() const; size_t count() const;
std::shared_ptr<License> get(uint32_t serial_number) const; std::shared_ptr<License> get(uint32_t serial_number) const;
std::shared_ptr<License> get_by_bb_username(const std::string& bb_username) const;
std::vector<std::shared_ptr<License>> all() const; std::vector<std::shared_ptr<License>> all() const;
void add(std::shared_ptr<License> l); void add(std::shared_ptr<License> l);
+16 -19
View File
@@ -465,27 +465,24 @@ void Lobby::add_client(shared_ptr<Client> c, ssize_t required_client_id) {
this->leader_id = c->lobby_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 // item IDs and reset the next item IDs
if (this->is_game()) { if (!this->is_game() || (leader_index >= this->max_clients)) {
if (leader_index >= this->max_clients) { for (size_t x = 0; x < 12; x++) {
for (size_t x = 0; x < 12; x++) { this->next_item_id_for_client[x] = 0x00010000 + 0x00200000 * x;
this->next_item_id_for_client[x] = 0x00010000 + 0x00200000 * x; }
} this->next_game_item_id = 0xCC000000;
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' this->assign_inventory_and_bank_item_ids(c);
// item IDs
for (auto& m : this->floor_item_managers) { // On BB, we send artificial flag state to fix an Episode 2 bug where the
this->next_game_item_id = m.reassign_all_item_ids(this->next_game_item_id); // 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);
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);
}
} }
// If the lobby is recording a battle record, add the player join event // If the lobby is recording a battle record, add the player join event
+23 -14
View File
@@ -221,6 +221,7 @@ static void a_compress_decompress_fn(Arguments& args) {
bool is_prs = ends_with(action, "-prs"); bool is_prs = ends_with(action, "-prs");
bool is_bc0 = ends_with(action, "-bc0"); bool is_bc0 = ends_with(action, "-bc0");
bool is_pr2 = ends_with(action, "-pr2"); bool is_pr2 = ends_with(action, "-pr2");
bool is_prc = ends_with(action, "-prc");
bool is_decompress = starts_with(action, "decompress-"); bool is_decompress = starts_with(action, "decompress-");
bool is_big_endian = args.get<bool>("big-endian"); bool is_big_endian = args.get<bool>("big-endian");
bool is_optimal = args.get<bool>("optimal"); bool is_optimal = args.get<bool>("optimal");
@@ -231,7 +232,7 @@ static void a_compress_decompress_fn(Arguments& args) {
string data = read_input_data(args); string data = read_input_data(args);
size_t pr2_expected_size = 0; 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<true>(data) : decrypt_pr2_data<false>(data); auto decrypted = is_big_endian ? decrypt_pr2_data<true>(data) : decrypt_pr2_data<false>(data);
pr2_expected_size = decrypted.decompressed_size; pr2_expected_size = decrypted.decompressed_size;
data = std::move(decrypted.compressed_data); data = std::move(decrypted.compressed_data);
@@ -253,13 +254,13 @@ static void a_compress_decompress_fn(Arguments& args) {
}; };
uint64_t start = now(); uint64_t start = now();
if (!is_decompress && (is_prs || is_pr2)) { if (!is_decompress && (is_prs || is_pr2 || is_prc)) {
if (is_optimal) { if (is_optimal) {
data = prs_compress_optimal(data.data(), data.size(), optimal_progress_fn); data = prs_compress_optimal(data.data(), data.size(), optimal_progress_fn);
} else { } else {
data = prs_compress(data, compression_level, progress_fn); 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)); data = prs_decompress(data, bytes, (bytes != 0));
} else if (!is_decompress && is_bc0) { } else if (!is_decompress && is_bc0) {
if (is_optimal) { 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)", 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()); 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)) { if (is_pr2 || is_prc) {
log_warning("Result data size (%zu bytes) does not match expected size from PR2 header (%zu bytes)", data.size(), pr2_expected_size); if (is_decompress && (data.size() != pr2_expected_size)) {
} else if (!is_decompress && is_pr2) { log_warning("Result data size (%zu bytes) does not match expected size from PR2 header (%zu bytes)", data.size(), pr2_expected_size);
uint32_t pr2_seed = seed.empty() ? random_object<uint32_t>() : stoul(seed, nullptr, 16); } else if (!is_decompress) {
data = is_big_endian uint32_t pr2_seed = seed.empty() ? random_object<uint32_t>() : stoul(seed, nullptr, 16);
? encrypt_pr2_data<true>(data, input_bytes, pr2_seed) data = is_big_endian
: encrypt_pr2_data<false>(data, input_bytes, pr2_seed); ? encrypt_pr2_data<true>(data, input_bytes, pr2_seed)
: encrypt_pr2_data<false>(data, input_bytes, pr2_seed);
}
} }
const char* extension; const char* extension;
@@ -299,6 +302,8 @@ static void a_compress_decompress_fn(Arguments& args) {
extension = "prs"; extension = "prs";
} else if (is_bc0) { } else if (is_bc0) {
extension = "bc0"; extension = "bc0";
} else if (is_prc) {
extension = "prc";
} else if (is_pr2) { } else if (is_pr2) {
extension = "pr2"; extension = "pr2";
} else { } 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_prs("compress-prs", nullptr, a_compress_decompress_fn);
Action a_compress_bc0("compress-bc0", 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-prs [INPUT-FILENAME [OUTPUT-FILENAME]]\n\
compress-pr2 [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-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\ 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\ 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\ 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); a_compress_decompress_fn);
Action a_decompress_prs("decompress-prs", nullptr, 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_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-prs [INPUT-FILENAME [OUTPUT-FILENAME]]\n\
decompress-pr2 [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-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); a_compress_decompress_fn);
Action a_prs_size( Action a_prs_size(
+8 -4
View File
@@ -563,11 +563,11 @@ bool PlayerInventory::has_equipped_item(EquipSlot slot) const {
} }
} }
void PlayerInventory::equip_item_id(uint32_t item_id, EquipSlot 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); 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]; auto& item = this->items[index];
if (slot == EquipSlot::UNKNOWN) { 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"); throw runtime_error("incorrect item type for equip slot");
} }
if (this->has_equipped_item(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; item.flags |= 0x00000008;
+2 -2
View File
@@ -82,8 +82,8 @@ struct PlayerInventory {
size_t find_equipped_item(EquipSlot slot) const; size_t find_equipped_item(EquipSlot slot) const;
bool has_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_id(uint32_t item_id, EquipSlot slot, bool allow_overwrite);
void equip_item_index(size_t index, EquipSlot slot); void equip_item_index(size_t index, EquipSlot slot, bool allow_overwrite);
void unequip_item_id(uint32_t item_id); void unequip_item_id(uint32_t item_id);
void unequip_item_slot(EquipSlot slot); void unequip_item_slot(EquipSlot slot);
void unequip_item_index(size_t index); void unequip_item_index(size_t index);
+57 -20
View File
@@ -4845,6 +4845,7 @@ static void on_EA_BB(shared_ptr<Client> c, uint16_t command, uint32_t flag, stri
// The client only sends this command with flag = 0x00, 0x30, or 0x40 // The client only sends this command with flag = 0x00, 0x30, or 0x40
bool send_updates_for_this_m = false; bool send_updates_for_this_m = false;
bool send_updates_for_other_m = false; bool send_updates_for_other_m = false;
bool send_master_transfer_updates = false;
switch (flag) { switch (flag) {
case 0x00: // Demote member case 0x00: // Demote member
if (s->team_index->demote_leader(c->license->serial_number, cmd.guild_card_number)) { 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<Client> c, uint16_t command, uint32_t flag, stri
send_command(c, 0x11EA, 0x00000000); send_command(c, 0x11EA, 0x00000000);
send_updates_for_this_m = true; send_updates_for_this_m = true;
send_updates_for_other_m = true; send_updates_for_other_m = true;
send_master_transfer_updates = true;
break; break;
default: default:
throw runtime_error("invalid privilege level"); 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) { if (send_updates_for_this_m) {
send_update_team_metadata_for_client(c); send_update_team_metadata_for_client(c);
send_team_membership_info(c); send_team_membership_info(c);
@@ -5003,34 +5014,60 @@ static void on_04_P(shared_ptr<Client> c, uint16_t, uint32_t, string& data) {
const auto& cmd = check_size_t<C_Login_Patch_04>(data); const auto& cmd = check_size_t<C_Login_Patch_04>(data);
auto s = c->require_server_state(); auto s = c->require_server_state();
try { string username = cmd.username.decode();
auto l = s->license_index->verify_bb(cmd.username.decode(), cmd.password.decode()); string password = cmd.password.decode();
c->set_license(l);
} catch (const LicenseIndex::incorrect_password& e) { // There are 3 cases here:
send_message_box(c, string_printf("Login failed: %s", e.what())); // - No login information at all: just proceed without checking license
c->should_disconnect = true; // - Username only: check that license exists if allow_unregistered_users is off
return; // - 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) { } catch (const LicenseIndex::incorrect_password& e) {
if (!s->allow_unregistered_users) {
send_message_box(c, string_printf("Login failed: %s", e.what())); send_message_box(c, string_printf("Login failed: %s", e.what()));
c->should_disconnect = true; c->should_disconnect = true;
return; return;
} else {
auto l = s->license_index->create_license(); } catch (const LicenseIndex::missing_license& e) {
l->serial_number = fnv1a32(cmd.username.decode()) & 0x7FFFFFFF; if (!s->allow_unregistered_users) {
l->bb_username = cmd.username.decode(); send_message_box(c, string_printf("Login failed: %s", e.what()));
l->bb_password = cmd.password.decode(); c->should_disconnect = true;
s->license_index->add(l); return;
if (!s->is_replay) { } else {
l->save();
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<uint32_t>() & 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 // On BB we can use colors and newlines should be \n; on PC we can't use
+1 -1
View File
@@ -1436,7 +1436,7 @@ static void on_equip_item(shared_ptr<Client> c, uint8_t command, uint8_t flag, v
auto l = c->require_lobby(); auto l = c->require_lobby();
EquipSlot slot = static_cast<EquipSlot>(cmd.equip_slot.load()); EquipSlot slot = static_cast<EquipSlot>(cmd.equip_slot.load());
auto p = c->character(); 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()); c->log.info("Equipped item %08" PRIX32, cmd.item_id.load());
forward_subcommand(c, command, flag, data, size); forward_subcommand(c, command, flag, data, size);
+11
View File
@@ -2181,6 +2181,17 @@ void send_player_join_notification(shared_ptr<Client> c,
} }
} }
void send_update_lobby_data_bb(std::shared_ptr<Client> 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<Lobby> l, uint8_t leaving_client_id) { void send_player_leave_notification(shared_ptr<Lobby> l, uint8_t leaving_client_id) {
S_LeaveLobby_66_69_Ep3_E9 cmd = {leaving_client_id, l->leader_id, 1, 0}; S_LeaveLobby_66_69_Ep3_E9 cmd = {leaving_client_id, l->leader_id, 1, 0};
uint8_t cmd_num; uint8_t cmd_num;
+1
View File
@@ -268,6 +268,7 @@ void send_lobby_list(std::shared_ptr<Client> c);
void send_player_records(std::shared_ptr<Client> c, std::shared_ptr<Lobby> l, std::shared_ptr<Client> joining_client = nullptr); void send_player_records(std::shared_ptr<Client> c, std::shared_ptr<Lobby> l, std::shared_ptr<Client> joining_client = nullptr);
void send_join_lobby(std::shared_ptr<Client> c, std::shared_ptr<Lobby> l); void send_join_lobby(std::shared_ptr<Client> c, std::shared_ptr<Lobby> l);
void send_update_lobby_data_bb(std::shared_ptr<Client> c);
void send_player_join_notification(std::shared_ptr<Client> c, std::shared_ptr<Lobby> l, std::shared_ptr<Client> joining_client); void send_player_join_notification(std::shared_ptr<Client> c, std::shared_ptr<Lobby> l, std::shared_ptr<Client> joining_client);
void send_player_leave_notification(std::shared_ptr<Lobby> l, uint8_t leaving_client_id); void send_player_leave_notification(std::shared_ptr<Lobby> l, uint8_t leaving_client_id);
void send_self_leave_notification(std::shared_ptr<Client> c); void send_self_leave_notification(std::shared_ptr<Client> c);
+4
View File
@@ -327,6 +327,10 @@ void ServerState::on_player_left_lobby(shared_ptr<Lobby> l, uint8_t leaving_clie
} }
shared_ptr<Client> ServerState::find_client(const string* identifier, uint64_t serial_number, shared_ptr<Lobby> l) { shared_ptr<Client> ServerState::find_client(const string* identifier, uint64_t serial_number, shared_ptr<Lobby> 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) { if ((serial_number == 0) && identifier) {
try { try {
serial_number = stoull(*identifier, nullptr, 0); serial_number = stoull(*identifier, nullptr, 0);