Fix MAME high scores not saving on Android
First determine whether the machine preserves scores in emulated NVRAM or needs MAME's hiscore support plugin. For plugin-supported games, confirm the port includes and enables the plugin, its hiscore.dat matches the MAME generation, homepath is writable, and a shortname.hi file appears after a score and clean exit. For native NVRAM, test the nvram path instead. Save states are not proof that either persistence path works.
Do this in order
- 01
Record the Android port, upstream MAME revision, machine short name, and whether the game historically stores scores in non-volatile memory.
- 02
Make one recognizable score, exit through MAME's normal quit path, cold-start the same machine, and avoid save states during this baseline.
- 03
For native persistence, inspect the configured nvram directory for a machine-specific write and verify the port can update it.
- 04
For a game that relies on the hiscore plugin, open Plugin Options, confirm Hiscore Support is present and enabled, and check whether Save scores is configured for exit or shortly after change.
- 05
Inspect homepath/plugin data for hiscore/shortname.hi and plugin.cfg; if no file appears, separate missing plugin support, an unwritable path, unsupported short name, and mismatched hiscore.dat.
- 06
Retest after changing exactly one layer, keep the last working data file, and do not copy score or state files between different MAME generations without a disposable backup.
Decision and diagnostic table
| Evidence | Persistence path | Next check |
|---|---|---|
| Machine writes its own retained score/settings | Emulated NVRAM | nvram directory, write access, clean exit |
| Hiscore plugin lists the machine | Plugin data | homepath, hiscore.dat generation, shortname.hi |
| Only a save state restores the score | Serialized whole-machine state | Do not treat it as NVRAM/plugin proof |
| No supported path is documented | Possibly no automatic persistence | Do not promise a plugin fix for every game |
Native NVRAM and the hiscore plugin solve different problems
Some machines store scores in non-volatile memory as part of the emulated hardware. MAME's hiscore plugin targets supported games that did not originally preserve scores that way and changes emulated memory directly.
A missing .hi file is expected when the game uses native NVRAM. Conversely, a writable nvram folder does not prove that the hiscore plugin is installed or supports the machine.
homepath owns plugin data
MAME documents that plugins save data below homepath. The hiscore plugin uses a hiscore folder, a shortname.hi score file, and plugin.cfg for its own settings.
Android ports often hide the working directory behind app storage. Use the port's displayed or documented path instead of guessing a public /sdcard folder.
Version and exit behavior are evidence
MAME warns that hiscore.dat must stay aligned when system definitions change. A copied database can list the wrong memory location for another release, and the plugin itself may change emulated behavior.
Test both a normal exit and the configured save timing. A force-stop, crash, Android task kill, or restored save state can bypass or obscure the persistence path you are trying to prove.
A high-score file, plugin, or save state does not grant rights to the underlying game data. Share only score/configuration data you are entitled to share, and never bundle commercial ROM, BIOS, CHD, artwork, or music with a fix.