Even though the source code tells you how, Better use this here with the step-by-step for both supported verisons. Saving the new Block: Needed: Save_and_load.out, ROM to apply Common to both versions 1. Copy the contents to a free location in your ROM, 4 bytes aligned. Write down the location (called loc through this guide). For Emerald 2. At loc + 0x14, place the reverse pointer for the correct return address (ready to place should be 6d 27 15 08) 3. At loc + 0x48, place place the reverse pointer for the correct return address (ready to place should be Ad 20 2e 08) 4. At 0x15276a place 00 47 4.5 At 0x15279c place the reversed pointer (loc+0x1 in reverse) 5. At 0x152ea0 place 00 48 00 47 (loc+0x19 in reverse) For Fire Red 2. At 0x0d983a place 00 47 2.5 At 0x0d986c place the reversed pointer (loc+0x1 in reverse) 3. At 0x0D9EE4 place 00 48 00 47 (loc+0x19 in reverse) This will allow RAM 0x0203e000 to be saved to the Flash ROM. Not happy with the RAM Address? Know a better one? Then all you need to do is change (loc + 0x40) to the new RAM Address you wish to save. This second part fixes the Variables, according to this Rules: 0x4000-0x4fff are the old ones. Use with caution 0x5000-0x57ff == 0x5800-0x5fff The variables in the new RAM Area 0x6000-0x6fff are Byte-address to the above variables ([0x5000] = [0x6000] OR [0x6001]<<8) 0x7000-0x73ff are Word address to the above variables ([0x7000] = [0x5000] or [0x5001]<<10) 0x7400-0x7fff are useless, as non-variables. This part of the fix is to use that area as Variables. The first part saved the area for us to use, so you can simply write with the "WriteByteTooOffeset" command to use it as savable pool of data. If you wish to keep the old variable system intact, ignore this last part. "Fixing" the Variables: Needed: Var_decrypt.out, Var_loader.out, Var_store.out, ROM to apply Common to all ROMS 1. copy Var_decrypt.out content to a 4byte aligned free location (called loc_decrypt) 2. copy Var_loader.out content to a 4byte aligned free location (called loc_loader) 3. copy Var_store.out content to a 4byte aligned free location (called loc_store) For Emerald 4. at loc_decrypt + 0x44, place 9c 93 5. at 0x09D648 place 70 b5 5.2 at 0x09d64e place 0e 1c 5.4 at 0x09D682 place 10 47 5.6 at 0x09D688 place 70 bd 5.8 at 0x09D690 place (loc_decrypt+0x1 in reverse) 6. at 0x09d6a0 place 00 49 08 47 (loc_loader+0x1 in reverse) 7. at 0x09d6b0 30 b5 05 04 28 0c 7.5 at 0x09d6be 01 49 08 47 00 00 (loc_store+0x1 in reverse) For Fire Red 4. at 0x06e4f4 place 10 47 4.5 at 0x06e508 place (loc_decrypt+0x1 in reverse) 5. at 0x06e574 place 00 49 08 47 (loc_loader+0x1 in reverse) 6. at 0x06e584 30 b5 05 04 28 0c 6.5 at 0x06e592 01 49 08 47 00 00 (loc_store+0x1 in reverse) If, for some reason, you changed the RAM stored Address, fix it by placing the new address at (loc_decrypt + 0x48)