Been trying to mess around with the save files

I took a quick look at how interchangeable save files from the DC are, and as others have pointed out, they are very much compatible... except if your save comes from a US or JP version. It seems that the PC version specifically works with European saves of Shenmue (DC), and refuses to even acknowledge their existence from other regions. It turns out that it is pretty easy to work around this.

1. Export DC save using VMU Explorer (this is the only step needed for EU saves);
2. Open exported save with hex-editor, and go to offset 0x680;
3. Edit 6 bytes, as shown below:
Code:
US version
Find pattern: 53 48 45 55 FA 00
Replace with: 53 48 45 45 0E 01
4. Use the following method to bypass save checksum when loading the game: https://www.shenmuedojo.com/forum/i...ess-around-with-the-save-files.873/post-20655

NOTE: For Japanese saves it will probably work in the same way, just that the 1st pattern in step 3 will have the last 3 bytes different, the replacement is the same though.
 
This should be useful. Further looking at save files I found value that shows how many times Ryo opened a notebook at the offset 11014(decimal), but it doesn't seems like many people interested in passport data, so there's probably no point to continue looking into it.
 
Even though Shenmue 2 does not perform a checksum when loading its own save files, it does check the region of save files from Shenmue 1 in regards to importing a save for a new game, preventing from loading foreign saves - something that would happen if you wanted to export Dreamcast S1 save from US or JP region to the PC S2. Although the save file can be easily tweaked to match the expected EU pattern, you can permanently disable this check by hex-editing a few instructions in the game executable (Shenmue2.exe). The same check is performed at two different points:

1. Here the game loops through all the save files from Shenmue 1 to check which ones are eligible to be listed in the New Game import list:
Code:
00007FF785ADBBD1  | 813D 15E48E00 53484545   | cmp dword ptr ds:[7FF7863C9FF0],45454853     | IMPORT SAVE LIST CHECK REGION
00007FF785ADBBDB  | 75 0F                    | jne shenmue2.7FF785ADBBEC                    | NOP TO BYPASS
00007FF785ADBBDD  | 813D 0DE48E00 0E010000   | cmp dword ptr ds:[7FF7863C9FF4],10E          | IMPORT SAVE LIST CHECK - PASS 2
00007FF785ADBBE7  | 8D48 01                  | lea ecx,qword ptr ds:[rax+1]                 |
00007FF785ADBBEA  | 74 03                    | je shenmue2.7FF785ADBBEF                     | FORCE JMP TO BYPASS

2. Here the game checks the selected save in the same way to decide if it can actually be loaded:
Code:
00007FF785ADCD60  | 8139 53484545            | cmp dword ptr ds:[rcx],45454853              | IMPORT SAVE LOAD CHECK REGION
00007FF785ADCD66  | 75 0F                    | jne shenmue2.7FF785ADCD77                    | NOP TO BYPASS
00007FF785ADCD68  | 8179 04 0E010000         | cmp dword ptr ds:[rcx+4],10E                 | IMPORT SAVE LOAD CHECK - PASS 2
00007FF785ADCD6F  | 75 06                    | jne shenmue2.7FF785ADCD77                    | NOP TO BYPASS



... And it turns out that Shenmue 1 performs the same check, pretty much, so for good measure here's the code responsible for that:

1. Here the game loops through all the save files from Shenmue 1 to check which ones are eligible to be listed in the Continue/Load list:
Code:
00007FF763F85E68  | 81BC24 B0000000 53484545 | cmp dword ptr ss:[rsp+B0],45454853           | SAVE LIST CHECK REGION
00007FF763F85E73  | 75 10                    | jne shenmue.7FF763F85E85                     | NOP TO BYPASS
00007FF763F85E75  | 81BC24 B4000000 0E010000 | cmp dword ptr ss:[rsp+B4],10E                | SAVE LIST CHECK - PASS 2
00007FF763F85E80  | 8D48 01                  | lea ecx,qword ptr ds:[rax+1]                 |
00007FF763F85E83  | 74 02                    | je shenmue.7FF763F85E87                      | FORCE JMP TO BYPASS

2. Here the game checks the selected save in the same way to decide if it can actually be loaded:
Code:
00007FF7640E2920  | 81BB 80060000 53484545   | cmp dword ptr ds:[rbx+680],45454853          | SAVE LOAD CHECK REGION
00007FF7640E292A  | 75 0F                    | jne shenmue.7FF7640E293B                     | NOP TO BYPASS
00007FF7640E292C  | 81BB 84060000 0E010000   | cmp dword ptr ds:[rbx+684],10E               | SAVE LOAD CHECK - PASS 2
00007FF7640E2936  | 8D41 01                  | lea eax,qword ptr ds:[rcx+1]                 |
00007FF7640E2939  | 74 02                    | je shenmue.7FF7640E293D                      | FORCE JMP TO BYPASS
 
Last edited:
Back
Top