Minesweeper.EN-GB.hex (59.5 KB)
I’m finally releasing it after lots of tangents, side-tracking and procrastination.
Source code
Releases
(Including .hex
files, .arduboy
file and a .hex
for Devkit (in English).)
Best of all, it can be compiled into several different languages thanks to some black magic.
Languages
- EN-GB (courtesy of @Pharap)
- FR-FR (courtesy of @vampirics)
- ES-CL (courtesy of @eried)
- DE-DE (courtesy of @Nicole_Birgel )
- EN-AU (courtesy of @filmote, intentionally humourous)
- EN-LCY* (courtesy of Phil Mitchell, Mick Carter and The Hitcher, also intentionally humourous)
I was going to have German as an option,
but I couldn’t decide whether to ask @Botisaurus or @Nicole_Birgel.
Screenshots
Screenshots courtesy of @Vampirics.
Information
A brief explanation of the save check screen:
Minesweeper saves a checksum along with its save data to detect when any part of the data is overwritten by accident.
If any of the data is damaged, including the checksum itself,
the game considers the save file to be nonexistant.
It is a custom made checksum, but tests** showed it had less clashes than some well known checksums (e.g. Fletcher-16).
Anyway, if you select ‘yes’ then the game will create a save slot for you at EEPROM address 512 (currently spanning 12 bytes - 4 bytes for the checksum, 2 for the data size, 1 for the theme select, 1 reserved, 2 for the win count, 2 for the loss count).
If you select ‘no’ then the game will play and count your stats,
but it won’t save your data.
This is so you can play a quick game of Minesweeper without upsetting other save data (e.g. Arduventure).
It also means you don’t have the worry of turning the game on and suddenly realising “oh no, this game has just overwritten the save data for another game”.
EEPROM Changes
v2.0.0 uses a slightly different save system that isn’t backwards compatible with older builds.
However, this new system is fully compatible in both directions, which means that versions after v2.0.0 will be able to reuse and extend save data from previous versions (up to v2.0.0) and if you go back a version for whatever reason, the data added by the later version will be properly retained and won’t be overwritten.
It took some pretty crazy fiddling to get this system to work, but time will tell if it was worth it.
FAQ
How do I play?
I’ll get back to that. Probably.
What’s the licence?
Apache 2.0 for code
CC BY-NC-SA for art (except the Pharap logo, that’s 100% copyrighted).
Is it on @eried’s repo?
Yes it is!
A PR has been made for v2.0.0
Is there a .arduboy
file?
Yes there is!
Easter Egg? What Easter Egg?
The easer egg has been promoted to a full feature as of v2.0.0
* EN-LCY isn’t a real iso code, LCY is an airport callsign
(I’m going to regret posting this one day before the jam… Oh well)
** For my testing I iterated the values from 0 to ((2 * N) - 1) for various values of N. I tested with all the values in the 2-byte range and all the values in the 3 byte range without encountering any clashes.
I tried to test the 4 byte range but got an out-of-memory exception in C# and the Haskell version chewed up so much RAM that my computer slowed to a crawl.