I spent part of my Saturday on this issue where I’d make progress in a game and save it within the game, but upon powering down the raspberry pi and returning, the progress would be gone. The problem is if you’re not exiting the game “cleanly”, the the emulation station will not write the game progress to the SD card, even though you’ve saved it in the game. When you configure a controller with RetroPie, it does not present you with a button combination to exit the game, which will initiate a write to the SD card. You can manually add a button combination for your controller by logging into the terminal and going to /opt/retropie/emulators/RetroArch/configs/ , then selecting your controller config, and adding the below two lines:
input_enable_hotkey_btn = 8
input_exit_emulator_btn = 9
Within the config, you’ll see each button on your controller is assigned a number. On my NES controller the “select” button was 8 and the “start” button was 9. With these lines added to the config file, I now press select and start at the same time to exit the game cleanly (which saves progress to the SD card).
Also, you can configure an automatic write to the SD card at an interval. Edit your retroarch.cfg file and uncomment the line “autosave_interval” and set it’s value to an integer representing a number of seconds. For example
autosave_interval = 5
Will save your progress to the SD card every 5 seconds.