An open-source desktop app that reads a Pokémon party out of an emulator's RAM as you play and analyses it. Sharing it because a few of the design problems turned out more interesting than I expected.

The emulator script interprets nothing. A Lua script inside mGBA ships raw bytes and a game identity over TCP; all decoding happens on the C# side. Adding an emulator costs a script and zero lines of domain logic.

are keyed by game, not by generation. 42 of the 386 Gen 3 species learn a move at a different level in Ruby/Sapphire/Emerald than in FireRed/LeafGreen, so the usual merged dataset reports a level that is wrong for the game actually running.

No opaque scores. The team strength number is a list of attributed factors, each carrying the fact behind it and the Pokémon responsible.

Apple Silicon refuses unsigned binaries — the kernel kills them and Finder calls the app "damaged", which is not the Gatekeeper prompt it looks like. Cross-publishing macOS builds from a Linux runner cannot work.