Important Resources: - Gen 3 Flash Save Corruption Tool: https://github.com/CasualPokePlayer/Gen3FlashSaveCorruptionTool/releases/latest - GBA Flash Speed Test: github.com/CasualPokePlayer/gba-flash-speed-test - Practice Saves: https://github.com/CasualPokePlayer/FireRedPIDSearcher/tree/master/res/sav - FlowTimer: https://gunnermaniac.com/ft Before running: The save corruption window is roughly ~1.5 frames large. This window will also vary depending on your cartridge (due to flash being non-deterministic) and may move around slightly in practice (again due to flash being non-deterministic). Gen 3 Flash Save Corruption Tool is intended to help calibrate your hard reset offset. It reports the each save sectors' (Sect) calculated checksum (CChk), stored checksum (SChk), save chunk ID (ID), and save interrupt point (IntPnt). The save interrupt point reports the number of bytes that were successfully written before the hard reset occurs. Note: the calculated checksum, stored checksum, and save chunk ID would be FC1F, FFFF, and 65535 respectively if the sector is fully erased. The goal is to reset after save chunk 11 has completed saving but before savechunk 12 is erased. In case you're slightly early, save chunk 11 will only be partially saved, with FFFF and 65535 in the stored checksum and save chunk ID, while the calculated checksum would not be FC1F. In case you're slightly late, save chunk 11 will be completed and save chunk 12 will be partially erased. It appears if a reset occurs very early in the erasure process, the sector will end up becoming all 0s rather than all FFs (and possibly having a few bits of junk leftover, leading to a weird calculated checksum). If you're fairly late, save chunk 12 will appear fully erased (FC1F/FFFF/65535). Gen 3 Flash Save Corruption Tool can be loaded up using GBI cli args. In the .cli file, simply place the path to the .gba file as an argument (e.g. I place it in the GBI folder and use slot 2 for my SD Card, so I put in cardb:/GBI/FlashSaveCorruptionToolMB.gba). Hold Start+Select during the GBA BIOS intro to load up the tool. GBA Flash Speed Test is a test I wrote a while ago. It will tests the speed of sector erasure and programming. You can use it to get an idea of the window for corrupting the save when clearing all save data (take the average of sector 0 and divide by 280896 to get a rough frame window). The test can be loaded up with GBI like with Gen 3 Flash Save Corruption Tool. Note, the test will nuke whatever save is present on the cart. The RNG manip window is a 5 frame window into a 2 frame window for the initial seed. For the starter manip, there is a final 1 frame window. For the wild mon manip, there is a final 7 frame window and 5 different paths to take depending on the frame hit. Adjusting offsets here is tricky as you need to do so on console, but there aren't obvious cues for the RNG seed hit. For that, there are practice saves which prepare an ACE mon and payload to view the seed in the trainer ID, which can be used to adjust offsets. Note that offsets differ slightly depending on if you saved a single time (starter manip) versus multiple times (wild mon manip), so different practice saves are provided. The RNG manips done here need Stereo and L=A to work. Both expect Start to be held on the 5 frame window then Start+L to be held with the 2 frame window. The RNG manips also require FireRed version, and were made with Rev 1 (unknown if Rev 0 works here). The glitch Pokemon used also requires FireRed version anyways. Charmander initial seed frames (assuming 5 frame window is hit): |-------|-------| | Frame | Seed | |-------|-------| | 1693 | 41405 | | 1694 | 53647 | | 1695 | 06608 | | 1696 | 25279 | <- TARGET | 1697 | 25279 | <- TARGET | 1698 | 43982 | | 1699 | 63157 | | 1700 | 21095 | |-------|-------| Charmander Frames: |-------|-------------------|---------| | Frame | Stats | Nature | |-------|-------------------|---------| | 907 | 19/ 9/10/13/10/12 | Modest | | 908 | 20/11/ 9/ 9/11/13 | Impish | | 909 | 20/10/11/12/ 9/12 | Lax | | 910 | 20/11/ 9/11/ 9/13 | Naive | <- TARGET | 911 | 19/10/10/11/10/12 | Bashful | | 912 | 19/10/ 9/11/11/13 | Quirky | | 913 | 20/10/10/11/10/12 | Bashful | |-------|-------------------|---------| Charmander Offset: 17915/29751/46711 Wild mon initial seed frames (assuming 5 frame window is hit): |-------|-------| | Frame | Seed | |-------|-------| | 2036 | 25979 | | 2037 | 41552 | | 2038 | 60376 | | 2039 | 13404 | <- TARGET | 2040 | 13404 | <- TARGET | 2041 | 32062 | | 2042 | 50815 | | 2043 | 04108 | |-------|-------| Wild mon manip paths: https://youtu.be/6jGuQcSqcjs Wild Mon Offset: 17932/35470/39698 (Interval 335 ms / 6 beeps, for the final offset press A on the third beep and hold B on the sixth beep) Route: - Always delete all save data before the run (Up+B+Select on the title screen). - Make sure to set Stereo and L=A in options (required for manip). - Do starter manip with Charmander - Make sure to take every ledge hop (needed for correct step count) - Do wild mon manip once you get Pokeballs - KO 5 Mankeys after wild mon manip (45% to encounter) - Go to Viridian Forest and KO 4 Caterpies (40% to encounter) - Best to fight Anthony here (2 Caterpies), maybe also fight Rick (1 Weedle + 1 Caterpie) - Put Charmander in Box 12, slot 18 (third row on the rightmost column). - Save the game 2 times (should result in your 4th total save). - Soft reset and enter the erase all save data screen (Up+B+Select). - Say yes to erasing all save data, but hard reset a few frames afterwards. The exact window varies depending on the cartridge, but should be fairly large (e.g. ~7 frames). - If successful, the game will inform you the save is corrupted and the previous save will be loaded. - Swap Charmander with wild mon. - Save the game again, this time hard resetting while the game is saving. The exact offset varies depending on the cartridge (my offset is 4602). - If successful, the game will let you load the save and will not inform you of any corruption. - Note, there is no indication of whether you are early or late! If the game tells you the save is corrupted, you can try the corruption again by saving the game again and redoing the Up+B+Select corruption. - Box Names: _ 6 G ’ F B _ ♂ W _ C S Q D H A A M U B H S B H _ _ B H O A I - ’ is right single quote, _ is where space must be entered. - Grab the glitch Pokemon swap it against the Pokemon in your party.