So... if anyone could help me making a checksum.exe for the Dragon Quest VII Save it would be extremely helpful. Since i don't have powersaves or CFW, and don't know how to make a checksum i can't edit my save file because it gets corrupted.
Use the homebrew version of JKSM to dump and inject the saves. It handles the checksums automatically.So... if anyone could help me making a checksum.exe for the Dragon Quest VII Save it would be extremely helpful. Since i don't have powersaves or CFW, and don't know how to make a checksum i can't edit my save file because it gets corrupted.
I do use JKSM but the savefile still gets corrupted, but i didn't know JKSM handled checksums, maybe i'm messing up in the hex editor.Use the homebrew version of JKSM to dump and inject the saves. It handles the checksums automatically.
That could be the problem. I know JKSM handles checksums because it works for games like SSB4.I do use JKSM but the savefile still gets corrupted, but i didn't know JKSM handled checksums, maybe i'm messing up in the hex editor.
I never claimed JKSM was a save editor, but you're right. I was thinking of secure values. Herp.JKSM is not a save editor and does not fix checksums. What you're thinking of is the secure value which is completely different.
We need to find where the checksum is located in the saves and how it's calculated. Making a software that patches it is easy. Some people have tried by making multiple save backups and comparing them to see what's different. So far the checksum location has not been found yet.Oh, so i wasn't messing it up, then? Well, then the request still stands, if anyone at least knows how to make one and could tell me, i could try to do it or if anyone just knows how to do it and wants to do it, i would be really gratefull.
Magic Number for File = 0x5000
// C#
int GetCheckSum(byte[] data, int magicNumber)
{
int index = 0;
int placeHolder;
int value1 = 0, value2 = 0;
int endValue;
if (((magicNumber ^ 0xffffffff) & 1) != 0)
{
value1 = (int)(sbyte)data[index++];
}
placeHolder = (int)(sbyte)data[index];
endValue = (int)(magicNumber - 0x11) >> 1;
for (int i = 0; i < endValue; ++i)
{
value2 += (int)(sbyte)data[index + 1];
index += 2;
value1 += placeHolder;
placeHolder = (int)(sbyte)data[index];
}
return value1 + value2;
}