Minesweeper v2.0.0 (multiple languages available)


(Pharap) #1

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.

Menu

Playing

Losing

Winning

MineSweeper_ThemeSelect

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.


[WIP] #/Letter Pairs, a brain game
Dark&Under - A Dungeon Crawler
Arduboy colors?
Suggest to me some games
[idea] A website with all arduboy games, any interest?
(Simon) #2

Where is the .ino file?


Classes - variable reference to default value?
(Pharap) #3

Of all the things to forget…

I missed it because it was sandwiched betwen the hex files and some bookkeeping files.

Give me 5 minutes and that’ll be fixed.


(Stephane C) #4

Good Job!

EDIT: just delete the screenshots since they are now in the initial post.


(Simon) #5

I was going to slap up some pics but Stephane beat me to it.


(Pharap) #6

Here’s a challenge:
Who can take a screenshot of actually winning a game :P


(Stephane C) #7

Here you go!

ArduboyCapture


(Stephane C) #8

There’s a type there tho, it’s supposed to say Gagné, not ‘’ Gagneé "


(Pharap) #9

I’ll fix that.
In fact this gives me an excuse to make a v1.0.1.

(I’d have to do some crazy command line hackery to get the v1.0.0 tag pointing to the right commit, so I can fix that later now.)


(Pharap) #10

Fixed, took me a while because I put together a .arduboy file.


(Nicole Birgel) #11

If you want me to translate, you could send me a email with the original text.


(Boti Kis) #12

Damn, she was faster :sunglasses:


(Pharap) #13

@Nicole_Birgel & @Botisaurus,

To break the tie, we have several options:

  • Each of you does half of the translation
  • You both work on the translation together
  • You two decide between yourselves who is going to do it because I’m terrible at having to choose between people :P
  • We let @Nicole_Birgel do it because she was 9 minutes faster

Either way, the text strings are public:

Accented letters have to be handled specially.
Here’s the French and Spanish translations as examples.
(I did some macro hackery to make it a bit less scary looking for non-programmers.)


(Boti Kis) #14

The decision has been made. :wink: #avoidingWork :joy:


(Pharap) #15

Fair enough. I’ve PM-ed @Nicole_Birgel with details.

If anyone else wants to volunteer a language, I’d be grateful.
Every translator gets their name in the credits of the localisation they translate.
(I thought about putting all the names in all the credits, but I was worried it might get too big.)


(Nicole Birgel) #16

Did it and hope you’ll find it useful.


(Pharap) #17

Where did you post it?
I haven’t received a reply on the PM.


(Nicole Birgel) #18

I did answer in my email


(Pharap) #19

After much delay due to some unexpected bugs, one or two translation issues (mainly fitting the text on the screen) and time taken to handle all the bookkeeping, here’s a release with the save check screen actually present and a German localisation provided by @Nicole_Birgel.


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 8 bytes - 4 bytes for the checksum, 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”.


* 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.


(Nicole Birgel) #20

Have to try out, even though i never did play minesweeper more than a few seconds before.