I thought about doing a grid editor but don’t really have the time right now. Anyone else is welcome to take a shot at it.
The way I would do it would be to change the Up and Down buttons to not just simply toggle the sound but bring up a menu instead. The menu would allow you to toggle sound, as before, but also have options for starting an editor, perhaps saving games, etc.
My idea for an editor would be to have the D-pad move a cursor. An auto-repeat when the movement buttons were held down would be nice. The A button would toggle pixels to their opposite state and could be held down and used with the D-pad to draw lines. The B button would exit the editor.
The only problem I see is that the screen is so tiny that some may have difficulty drawing specific patterns.
I’ve also thought about being able to upload grids using USB serial (although if you have a computer that can edit grids for upload, you could probably play the game on it, making the Arduboy redundant). For upload I would have the main loop check for serial data when in pause mode. If a 0xFF was received it would signal start of data. The grid data would just be pairs of bytes containing the X and Y coordinates of each pixel, in binary. Another 0xFF would signal the end of data. The grid would be cleared and the uploaded pixels would be set. If a timeout occurred before the ending 0xFF was received, all data would be discarded. If you wanted to get fancy, you could include some kind of a checksum with the data and have the Arduboy send an ACK or NAK.
Note that because of the way the restart function is currently implemented, it couldn’t be used with the edit or upload functions.
About saving games: There obviously wouldn’t be space to save actual grid patterns, but the pseudo-random starting pattern for a game is determined by the seed passed to the genGrid() function. You could save a desired game, for retrieval and replay, by just saving the 4 byte seed, which is stored in the randSeed variable.