Jump to content

[Gen 3] Editing checksum in Ruby/Sapphire to force shiny WISHMKR Jirachi


Misdreavus
 Share

Recommended Posts

I was told that it was possible to edit the checksum in a Ruby or Sapphire save file using a save editor to cause the Colosseum Bonus Disc to give me a shiny Jirachi (or any other Jirachi of my choice out of the possible 65536).  Is this something that can be done with PKHex?  I opened up a save file with it and I don't see an option to edit the checksum (only an option to verify it).

Also, the same source told me that I may need to edit other variables so that my checksum remains valid, or else the disc will catch that I have an invalid checksum and won't give me the Jirachi.  What would I need to edit?

I've attempted to RNG this Jirachi with no luck, so I've used rschecksum before.  Do I need to edit my information in PkHex so that it matches whatever info in rschecksum which causes the output seed to be the seed of the desired Jirachi?  Is this my checksum?  rschecksum also uses several other variables (starter, Pokémon encountered, time in game, clock setting game options) in computing my output seed, so I'm not sure how I would account for these in a save editor.

Any and all help is appreciated!

EDIT: Alternatively, what I may do is play through until I get the Pokédex and Running Shoes, save once at a predetermined point using EonTimer (leaving the other save bank blank) and backup my save.  When viewing my save in a save editor, I'd like to know how far off I am, so how can I simply view the checksum so that I can see how long I should open the game before I save again?  When I do save again, I can then view my checksum again and see if it's what I want it to be.  If it is, I get the Jirachi.  If it's not, I restore the save file from my initial backup, and try again.

Edited by Misdreavus
Link to comment
Share on other sites

16 hours ago, Misdreavus said:

I was told that it was possible to edit the checksum in a Ruby or Sapphire save file using a save editor to cause the Colosseum Bonus Disc to give me a shiny Jirachi (or any other Jirachi of my choice out of the possible 65536).  Is this something that can be done with PKHex?  I opened up a save file with it and I don't see an option to edit the checksum (only an option to verify it).

Also, the same source told me that I may need to edit other variables so that my checksum remains valid, or else the disc will catch that I have an invalid checksum and won't give me the Jirachi.  What would I need to edit?

I've attempted to RNG this Jirachi with no luck, so I've used rschecksum before.  Do I need to edit my information in PkHex so that it matches whatever info in rschecksum which causes the output seed to be the seed of the desired Jirachi?  Is this my checksum?  rschecksum also uses several other variables (starter, Pokémon encountered, time in game, clock setting game options) in computing my output seed, so I'm not sure how I would account for these in a save editor.

Any and all help is appreciated!

EDIT: Alternatively, what I may do is play through until I get the Pokédex and Running Shoes, save once at a predetermined point using EonTimer (leaving the other save bank blank) and backup my save.  When viewing my save in a save editor, I'd like to know how far off I am, so how can I simply view the checksum so that I can see how long I should open the game before I save again?  When I do save again, I can then view my checksum again and see if it's what I want it to be.  If it is, I get the Jirachi.  If it's not, I restore the save file from my initial backup, and try again.

I did this manually using a hex editor and then had a program regenerate the checksum. The checksum algorithm is so simple that editing manually using a hex editor is easy to do since it is easy to predict how the checksum will change. 

Link to comment
Share on other sites

11 minutes ago, Sabresite said:

I did this manually using a hex editor and then had a program regenerate the checksum. The checksum algorithm is so simple that editing manually using a hex editor is easy to do since it is easy to predict how the checksum will change. 

Thanks for your reply.  What programs did you use for hex editing and checksum regeneration?  Also, would you mind explaining to me (or pointing me to the proper resources) how it changes?

Link to comment
Share on other sites

9 hours ago, Misdreavus said:

Thanks for your reply.  What programs did you use for hex editing and checksum regeneration?  Also, would you mind explaining to me (or pointing me to the proper resources) how it changes?

You are lucky because PKHex can do it now.  And you can read the code on github to find out how.

Link to comment
Share on other sites

I found my checksum in HxD hex editor at line 2FF0.  It's EDED (pic).  I'm sure this is it because I claimed a Jirachi whose seed is EDED.  My target Jirachi has a seed of F500.  I changed EDED to 00F5, then loaded my game in PKHeX.  I used the "Verify Checksums" option, and it outputted the following to the clipboard:

Block 00 @ 02000 invalid.

That block contains the value C8 (pic).  What should I change this to so that my checksum is valid?  I've looked for guides on hex editing, but haven't come up with anything for Ruby/Sapphire.

Link to comment
Share on other sites

16 minutes ago, Misdreavus said:

I found my checksum in HxD hex editor at line 2FF0.  It's EDED (pic).  I'm sure this is it because I claimed a Jirachi whose seed is EDED.  My target Jirachi has a seed of F500.  I changed EDED to 00F5, then loaded my game in PKHeX.  I used the "Verify Checksums" option, and it outputted the following to the clipboard:

Block 00 @ 02000 invalid.

That block contains the value C8 (pic).  What should I change this to so that my checksum is valid?  I've looked for guides on hex editing, but haven't come up with anything for Ruby/Sapphire.

You have to change data in that block so when the checksum is regenerated by PKHex, it is 0xF500.

Link to comment
Share on other sites

58 minutes ago, Sabresite said:

It is done automagically when you save.

Okay.  So you're saying to change that block first, rather than directly changing my checksum to 00F5?  How do I know what to change that block to (either manually in a hex editor, or by changing something in PKHeX)?

Edited by Misdreavus
Link to comment
Share on other sites

Well... first I think you should get an understanding about what an checksum is.
A checksum is the sum from calculated data and it is for checking purpose. It's in fact to there to protect the data from being manipulated and to prevent errors. Whenever data is saved and stored the checksum gets recalculated. Now if you change data from an block the old checksum that was based on the state prior the editing becomes invalid. The same goes vice versa, meaning if you just edit the the checksum the checksum becomes invalid. Once you understand this it should also become logical for you that it simply isn't possible to change the checksum without changing anything inside the block. This has nothing to do with PKHeX. PKHex just uses the same mechanic that the game uses for getting the correct results... which just makes sense, right? So whatever you do to your checksum, PKHeX is correcting it. (Thankfully!)

So... what you are going to do is changing data from the block and then you use PKHeX to get your new checksum.
You could of course do all of it using PKHeX. I personally recommend to use the Playtime, just stick to the minutes and hours...
Otherwise you can mess with the IDs, but keep in mind that in RS not every TID/SID combination might be legal. So better use FR/LG or Emerald in case you want to reuse the save file for something else... (It doesn't affects the Jirachi, I just say this because I think TID/SID combinations aren't considered in legality checking yet from what I know... so I don't want to encourage to mess with it.)

Edited by ajxpk
Link to comment
Share on other sites

1 hour ago, ajxpk said:

Well... first I think you should get an understanding about what an checksum is.
A checksum is the sum from calculated data and it is for checking purpose. It's in fact to there to protect the data from being manipulated and to prevent errors. Whenever data is saved and stored the checksum gets recalculated. Now if you change data from an block the old checksum that was based on the state prior the editing becomes invalid. The same goes vice versa, meaning if you just edit the the checksum the checksum becomes invalid. Once you understand this it should also become logical for you that it simply isn't possible to change the checksum without changing anything inside the block. This has nothing to do with PKHeX. PKHex just uses the same mechanic that the game uses for getting the correct results... which just makes sense, right? So whatever you do to your checksum, PKHeX is correcting it. (Thankfully!)

So... what you are going to do is changing data from the block and then you use PKHeX to get your new checksum.
You could of course do all of it using PKHeX. I personally recommend to use the Playtime, just stick to the minutes and hours...
Otherwise you can mess with the IDs, but keep in mind that in RS not every TID/SID combination might be legal. So better use FR/LG or Emerald in case you want to reuse the save file for something else... (It doesn't affects the Jirachi, I just say this because I think TID/SID combinations aren't considered in legality checking yet from what I know... so I don't want to encourage to mess with it.)

Thanks for the explanation!  So how do I know what to change the playtime to?  Do I have to just tweak it, check the checksum in HxD, and repeat until I get my desired checksum?

Also:

1) I don't know about all, but I would think there would be a lofty combination of TID/SID in R/S if there is a live battery at the point of generation, as that gives R/S more seeds to work with.

2) The Jirachi bonus disc is only compatible with R/S.

Edited by Misdreavus
  • Like 1
Link to comment
Share on other sites

Yeah. Thanks for reminding me, I barely used it so I completely forgot that it was only compatible with RS... Sorry for that!
Well, to figure out what you need to change it would be most efficient if you gotta figure it out by yourself.
Just change the IDs a little and save it with PKHeX and then you check what your new checksum is. You will get a feel for it.
I did it a long time ago while changing the Playtime via the Memory Viewer in an Emulator, it was pretty easy from what I remember...

Link to comment
Share on other sites

2 hours ago, Misdreavus said:

Thanks for the explanation!  So how do I know what to change the playtime to?  Do I have to just tweak it, check the checksum in HxD, and repeat until I get my desired checksum?

Also:

1) I don't know about all, but I would think there would be a lofty combination of TID/SID in R/S if there is a live battery at the point of generation, as that gives R/S more seeds to work with.

2) The Jirachi bonus disc is only compatible with R/S.

I would take an area of all 00's, and change one value to 01 and see how PKHex recalculates checksum.  Then change it back to 0, and change the next offset to 1 and see how that changes the checksum.  Then change the value back to 0, and change another 00 to 0x2 or 0xF, and see how that changes the checksum when PKHex recalculates it.  You will find it is arithmetic and you will be able to easily find a pattern of changes to get the checksum you want.

Good luck!

Link to comment
Share on other sites

9 hours ago, Sabresite said:

I would take an area of all 00's, and change one value to 01 and see how PKHex recalculates checksum.  Then change it back to 0, and change the next offset to 1 and see how that changes the checksum.  Then change the value back to 0, and change another 00 to 0x2 or 0xF, and see how that changes the checksum when PKHex recalculates it.  You will find it is arithmetic and you will be able to easily find a pattern of changes to get the checksum you want.

Good luck!

I took the very first value in HxD (block 00 in offset 0) and changed it to 01, but after opening in PKHeX and saving, my checksum did not change.  Why would this be?

And thanks!

EDIT: I did, however, get the checksum to 00 F5 by changing my TID to 44405 (and keeping my SID the same at 40171).  How can I tell if this is a valid TID/SID combo given the vast amount of seeds that could be obtained with a live battery?  The only way I can think of is to search each minute of each hour of each calendar day, which is impossible.

EDIT2: I got the checksum to 00 F5 by changing my game time to 5 hr 26 min 30 sec.

EDIT3: I GOT IT!  Thanks everyone for all your help!

Edited by Misdreavus
  • Like 4
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...