ROM Hack [Request] Dragon Quest VII Cheksum.exe

  • Thread starter Thread starter Matheusv3
  • Start date Start date
  • Views Views 2,841
  • Replies Replies 8

Matheusv3

Member
Newcomer
Joined
Sep 18, 2016
Messages
11
Reaction score
0
Trophies
0
Age
30
XP
79
Country
Brazil
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.
 
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.
 
JKSM is not a save editor and does not fix checksums. What you're thinking of is the secure value which is completely different.
 
  • Like
Reactions: Xiphiidae
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.
 
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.
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.
 
The checksum for the whole file are the first four bytes of the file. The program will start calculating at offset 0x10.

Code:
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;
  }
 

Attachments

Last edited by unknowndatax,
  • Like
Reactions: hiten

Site & Scene News

Popular threads in this forum