I would also suggest saving $PokemonTemp, $game_temp, $game_system and $PokemonSystem to the savestate file, as these contain important information that will otherwise be reset upon loading the savestate. For instance, flash sprites, fly data, surf data, whether the save is or isn't a new game...