It works!
Spiritovod's explanation in the post I linked explains all the technical details, but I'll list out the exact steps you need to take.
0. Have a hacked switch and use a save tool (checkpoint, JKSV) to extract your saves and transfer them to your PC
1. Download dq_xi_s_saves_decrypt_v2.bms from the link above, as well as quickbms to run it (https://aluigi.altervista.org/quickbms.htm)
2. Drag and drop the .bms file onto quickbms (or double click quickbms and select the .bms file) to run it, select the switch save you want to convert, and wherever you'd like as the output folder.
3. Open the dataXXX.sav_decrypted file this creates in a hex editor (HXD, 010 Editor, etc.)
4. Add 60 (in hex) to the filesize at offset 0x04 (before the "SQEX" in text). Since it's in little endian format, the bytes are right to left. For example, for me the filesize here was F0 FE 07 00, so I put 7FEF0 into a hex calculator (likely under "programmer mode" or something like that) and added 60, getting 7FF50, so I changed the values to 50 FF 07 00.
5. Change the value at 0x0C (the value right after the "SQEX" in text - 53 51 45 58 in hex) from "89" to "8E".
6. add 60 to the filesize at offset 0x35, in the same manner as in step 4. (in my case, it was changing DD FE 07 00 to 3D FF 07 00)
7. insert 4 empty bytes (so 00 00 00 00) after the 04 at the offset found at 0x39 (88 in my case), then add 4 to the value at 0x39 (so, in my case, I changed it to 8C).
8. Find the offset listed right before the actual data starts (it'll be between an 04 and an 0C, in my case it was 04 00 00 00 00 00 00 00 DC 76 06 00 0C, with DC 76 06 00 being the value), and add 60 to it (so in my case, it changed to 3C 77 06 00)
9. Hit ctrl f and set the find feature to hex values, and search for 050X000000, with X being the save slot as it is in the filename (e.g. since mine was data006.sav, I searched 0506000000. There should be a "S040_01200" in plaintext shortly above, and M00X_E001 shortly after), and insert the following data after the 05 (make sure you are inserting and not overwriting - hitting "ins" on your keyboard should change modes, and your editor will usually tell you what mode you're in at the bottom): "00000000FFFFFFFF000000004C00000037302F36392F36382F34302F33392F34322F36342F37352F34312F32312F32332F37392F38302F38312F38322F31342F31362F31352F32372F32362F32382F32322F33342F33332F33352F00". Note that it doesn't necessarily have to be this data, but since it's just settings that can be changed in game (mainly keybindings), just using these (which is the default settings) is easier.
So in my case
"05 06 00 00 00"
became
"05 00 00 00 00 FF FF FF FF 00 00 00 00 4C 00 00
00 37 30 2F 36 39 2F 36 38 2F 34 30 2F 33 39 2F
34 32 2F 36 34 2F 37 35 2F 34 31 2F 32 31 2F 32
33 2F 37 39 2F 38 30 2F 38 31 2F 38 32 2F 31 34
2F 31 36 2F 31 35 2F 32 37 2F 32 36 2F 32 38 2F
32 32 2F 33 34 2F 33 33 2F 33 35 2F 00 06 00 00
00"
10. Change the filesize value that matches the one from 0x35 as you did in step 6 (it should be the 8 - B column of the second to last row.)
11. Select from 0x08 (which should have a value of 53) to the offset at the new value used in step 6 and step 10 (so 07FF3D in my case) + 7 (07FF44 for me) - including the values at those offsets, not between them. The number of bytes selected (which should be displayed at the bottom) should be that number from step 6 and 10 (so in my case the hex editor says "Sel: 7FF3D"), and find the checksum tool on your hex editor (for example, in the "analysis" tab at the top for HxD or the "Tools" tab for 010 Editor). Select just "CRC-32" in the list of algorithms, and make sure the range is set to "selection" rather than "entire file". In my case it was "8C930FD6"
12. Change the 4 bytes next to the ones from step 10 (so in the C-F columns of the second to last row - the last values before 8 bytes of 00s) to this checksum, again in reverse order (so I put in "D6 0F 93 8C"), and save the file.
13. Open the .bms file from step 2 in a text editor, and change line 15 from
"encryption aes KEY "" 0 32"
to "encryption aes KEY "" 1 32". Make sure to save it.
14. Open the .bms file with quickbms again, and select the modified decrypted save file (so data006.sav_decrypted for me). You'll now have a file called "dataXXX.sav_decrypted_decrypted" (if you care, you can change line 2 of the bms file as well to make it say encrypted)
15. Move that file to your save folder, "Documents\My Games\DRAGON QUEST XI S\Steam\<user-id>\Saved\SaveGames\Book" for steam, "%LOCALAPPDATA%\Packages\<letters/numbers>.DQXIS_<letters/numbers>\SystemAppData\wgs\<letters/numbers>_<letters/numbers>\<letters/numbers>" for gamepass. For Steam, all you have to do is remove the _decrypted_decrypted from the file extension and it should work (to my knowledge). Since the data for windows store is obfuscated, the easiest way to inject the save is to make a new save game in the slot you're inserting into (so for me, it was making a save in slot 7 since I was using data006.sav), and copy the name of the newly created file (it should be around 220kb - there are some meta ms store files and settings files that get made too), delete that file, and rename the switch save to that. If you did everything right, the save should now show up in the game.
I should note of course that there are no guarantees that this converted save will be perfect - theoretically there could be other changes to how the save file works that aren't clear with the initial save that will cause issues, however I wouldn't expect that to be the case. Additionally it should be noted that these steps are specific to doing just these steps. Spiritovod's post explains these elements in more general terms for other forms of editing.
As a bonus, since this is the other major reason people might want to edit their saves, here's how to edit draconian quest restrictions (if you want to do this alongside the conversion, just do it before step 11 - you'll only be modifying data, so you don't need to worry about filesize, but the checksum will change of course):
The data is included in the file twice. The first is right after the empty bytes you added in step 7 - look for the next "0A". The second can be found by hitting ctrl f, setting the search to look for text rather than hex, and searching "DLC". You should be brought to some values that say DLC_00, DLC_01 etc. A few rows above that you'll have a "0A" again.
Here's what an initial save with no draconian quest options looks like:
0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
and here's what one with every draconian quest option looks like:
0A 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00
01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00
01 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00
Only worry about the 8 values that change between these two, the 01 that's in the no draconian quest save is for something else (it became 00 in the save I converted). Change the values corresponding to the draconian quest restrictions you want to. They're not in the exact order they're shown in game as, the ones I've identified for sure are that the first 01 is "No shopping" (the first one listed), the fifth 01 is "Party Wiped Out if Protagonist Perishes" (the eighth one listed). I believe the 6th 01 is "All enemies are super strong" (fourth listed) and the 8th 01 is "Townsfolk Talk Tripe" (since those were two on my save), but they could be the other way around. Make sure to change both, and to correct the checksum after doing so.
EDIT: confirmed (since I was adding it in for my own save) that the 7th one is Reduced Experience from Easy Fights. My guess as to what the full order is:
First: No Shopping (confirmed)
Second: No Armour
Third: Shypox
Fourth: Super Shypox
Fifth: Party Wiped Out if Protagonist Perishes (confirmed)
Sixth: All Enemies are Super Strong
Seventh: Reduced Experience from Easy Fights (confirmed)
Eight: Townsfolk Talk Tripe
Should also note that the DLC stuff right after that seems to be what tracks whether or not you've claimed a DLC reward - so for example "00 00 00 07 00 00 00 44 4C 43 5F 30 30 00 01" means you have claimed DLC_00, whereas "00 00 00 07 00 00 00 44 4C 43 5F 30 30 00 00" means you haven't. Switch saves will have DLC_03-DLC_07 as well, but the pc version doesn't do anything with those values (the number of DLCs is stored right before DLC_00, "08" for Switch and "03" for PC, so I don't think you should have to remove the extra ones from switch saves. I didn't for my save.). I assume this means they removed the code for unlocking the remaining DLCs completely (even though the DLC itself is still in the game I believe, I think people have managed to use console commands to cheat them in). Curious what DLC_05-07 are since only 00-04 were actually usable in the switch version (at least in NA, maybe they were JP exclusive?)
Spiritovod's explanation in the post I linked explains all the technical details, but I'll list out the exact steps you need to take.
0. Have a hacked switch and use a save tool (checkpoint, JKSV) to extract your saves and transfer them to your PC
1. Download dq_xi_s_saves_decrypt_v2.bms from the link above, as well as quickbms to run it (https://aluigi.altervista.org/quickbms.htm)
2. Drag and drop the .bms file onto quickbms (or double click quickbms and select the .bms file) to run it, select the switch save you want to convert, and wherever you'd like as the output folder.
3. Open the dataXXX.sav_decrypted file this creates in a hex editor (HXD, 010 Editor, etc.)
4. Add 60 (in hex) to the filesize at offset 0x04 (before the "SQEX" in text). Since it's in little endian format, the bytes are right to left. For example, for me the filesize here was F0 FE 07 00, so I put 7FEF0 into a hex calculator (likely under "programmer mode" or something like that) and added 60, getting 7FF50, so I changed the values to 50 FF 07 00.
5. Change the value at 0x0C (the value right after the "SQEX" in text - 53 51 45 58 in hex) from "89" to "8E".
6. add 60 to the filesize at offset 0x35, in the same manner as in step 4. (in my case, it was changing DD FE 07 00 to 3D FF 07 00)
7. insert 4 empty bytes (so 00 00 00 00) after the 04 at the offset found at 0x39 (88 in my case), then add 4 to the value at 0x39 (so, in my case, I changed it to 8C).
8. Find the offset listed right before the actual data starts (it'll be between an 04 and an 0C, in my case it was 04 00 00 00 00 00 00 00 DC 76 06 00 0C, with DC 76 06 00 being the value), and add 60 to it (so in my case, it changed to 3C 77 06 00)
9. Hit ctrl f and set the find feature to hex values, and search for 050X000000, with X being the save slot as it is in the filename (e.g. since mine was data006.sav, I searched 0506000000. There should be a "S040_01200" in plaintext shortly above, and M00X_E001 shortly after), and insert the following data after the 05 (make sure you are inserting and not overwriting - hitting "ins" on your keyboard should change modes, and your editor will usually tell you what mode you're in at the bottom): "00000000FFFFFFFF000000004C00000037302F36392F36382F34302F33392F34322F36342F37352F34312F32312F32332F37392F38302F38312F38322F31342F31362F31352F32372F32362F32382F32322F33342F33332F33352F00". Note that it doesn't necessarily have to be this data, but since it's just settings that can be changed in game (mainly keybindings), just using these (which is the default settings) is easier.
So in my case
"05 06 00 00 00"
became
"05 00 00 00 00 FF FF FF FF 00 00 00 00 4C 00 00
00 37 30 2F 36 39 2F 36 38 2F 34 30 2F 33 39 2F
34 32 2F 36 34 2F 37 35 2F 34 31 2F 32 31 2F 32
33 2F 37 39 2F 38 30 2F 38 31 2F 38 32 2F 31 34
2F 31 36 2F 31 35 2F 32 37 2F 32 36 2F 32 38 2F
32 32 2F 33 34 2F 33 33 2F 33 35 2F 00 06 00 00
00"
10. Change the filesize value that matches the one from 0x35 as you did in step 6 (it should be the 8 - B column of the second to last row.)
11. Select from 0x08 (which should have a value of 53) to the offset at the new value used in step 6 and step 10 (so 07FF3D in my case) + 7 (07FF44 for me) - including the values at those offsets, not between them. The number of bytes selected (which should be displayed at the bottom) should be that number from step 6 and 10 (so in my case the hex editor says "Sel: 7FF3D"), and find the checksum tool on your hex editor (for example, in the "analysis" tab at the top for HxD or the "Tools" tab for 010 Editor). Select just "CRC-32" in the list of algorithms, and make sure the range is set to "selection" rather than "entire file". In my case it was "8C930FD6"
12. Change the 4 bytes next to the ones from step 10 (so in the C-F columns of the second to last row - the last values before 8 bytes of 00s) to this checksum, again in reverse order (so I put in "D6 0F 93 8C"), and save the file.
13. Open the .bms file from step 2 in a text editor, and change line 15 from
"encryption aes KEY "" 0 32"
to "encryption aes KEY "" 1 32". Make sure to save it.
14. Open the .bms file with quickbms again, and select the modified decrypted save file (so data006.sav_decrypted for me). You'll now have a file called "dataXXX.sav_decrypted_decrypted" (if you care, you can change line 2 of the bms file as well to make it say encrypted)
15. Move that file to your save folder, "Documents\My Games\DRAGON QUEST XI S\Steam\<user-id>\Saved\SaveGames\Book" for steam, "%LOCALAPPDATA%\Packages\<letters/numbers>.DQXIS_<letters/numbers>\SystemAppData\wgs\<letters/numbers>_<letters/numbers>\<letters/numbers>" for gamepass. For Steam, all you have to do is remove the _decrypted_decrypted from the file extension and it should work (to my knowledge). Since the data for windows store is obfuscated, the easiest way to inject the save is to make a new save game in the slot you're inserting into (so for me, it was making a save in slot 7 since I was using data006.sav), and copy the name of the newly created file (it should be around 220kb - there are some meta ms store files and settings files that get made too), delete that file, and rename the switch save to that. If you did everything right, the save should now show up in the game.
I should note of course that there are no guarantees that this converted save will be perfect - theoretically there could be other changes to how the save file works that aren't clear with the initial save that will cause issues, however I wouldn't expect that to be the case. Additionally it should be noted that these steps are specific to doing just these steps. Spiritovod's post explains these elements in more general terms for other forms of editing.
As a bonus, since this is the other major reason people might want to edit their saves, here's how to edit draconian quest restrictions (if you want to do this alongside the conversion, just do it before step 11 - you'll only be modifying data, so you don't need to worry about filesize, but the checksum will change of course):
The data is included in the file twice. The first is right after the empty bytes you added in step 7 - look for the next "0A". The second can be found by hitting ctrl f, setting the search to look for text rather than hex, and searching "DLC". You should be brought to some values that say DLC_00, DLC_01 etc. A few rows above that you'll have a "0A" again.
Here's what an initial save with no draconian quest options looks like:
0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
and here's what one with every draconian quest option looks like:
0A 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00
01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00
01 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00
Only worry about the 8 values that change between these two, the 01 that's in the no draconian quest save is for something else (it became 00 in the save I converted). Change the values corresponding to the draconian quest restrictions you want to. They're not in the exact order they're shown in game as, the ones I've identified for sure are that the first 01 is "No shopping" (the first one listed), the fifth 01 is "Party Wiped Out if Protagonist Perishes" (the eighth one listed). I believe the 6th 01 is "All enemies are super strong" (fourth listed) and the 8th 01 is "Townsfolk Talk Tripe" (since those were two on my save), but they could be the other way around. Make sure to change both, and to correct the checksum after doing so.
EDIT: confirmed (since I was adding it in for my own save) that the 7th one is Reduced Experience from Easy Fights. My guess as to what the full order is:
First: No Shopping (confirmed)
Second: No Armour
Third: Shypox
Fourth: Super Shypox
Fifth: Party Wiped Out if Protagonist Perishes (confirmed)
Sixth: All Enemies are Super Strong
Seventh: Reduced Experience from Easy Fights (confirmed)
Eight: Townsfolk Talk Tripe
Should also note that the DLC stuff right after that seems to be what tracks whether or not you've claimed a DLC reward - so for example "00 00 00 07 00 00 00 44 4C 43 5F 30 30 00 01" means you have claimed DLC_00, whereas "00 00 00 07 00 00 00 44 4C 43 5F 30 30 00 00" means you haven't. Switch saves will have DLC_03-DLC_07 as well, but the pc version doesn't do anything with those values (the number of DLCs is stored right before DLC_00, "08" for Switch and "03" for PC, so I don't think you should have to remove the extra ones from switch saves. I didn't for my save.). I assume this means they removed the code for unlocking the remaining DLCs completely (even though the DLC itself is still in the game I believe, I think people have managed to use console commands to cheat them in). Curious what DLC_05-07 are since only 00-04 were actually usable in the switch version (at least in NA, maybe they were JP exclusive?)
Attachments
Last edited by Niko_of_Death,