GP-YASC (Yet Another Sokoban Clone)
Written by Tommy Widenflycht
IRC: CMOTD on #gp32dev @ EFnet
Sokoban is a classic puzzle game invented in Japan by Thinking Rabbit. Sokoban is japanese for "Warehouse Guy" and the object is to push the boxes scattered around to their correct places. The objective is simple but the puzzles can be extremely hard to solve.
There are many different implementations avaliable for almost all computer systems, including another implementation for the GP32.
So why yet another Sokoban clone? Several years ago I used to write multi-platform software for a living and got the idea to make a portable object-oriented Sokoban engine in C++ as an exercise. That idea became YASC and a little by little the engine evolved. Today it contains almost all of the features I want, and I recently discovered the GamePark GP32 handheld device. The result? I am releasing a public version for the first time! Personally I think the GP32 is the perfect Sokoban device: Portable, big nice colour screen, storage possibilities & a fast enough processor.
This is released as HappiWare: If you like it remember to smile.
The YASC engine have unlimited undo/redo, import of text files with levels, path-finding, score file management including solution saving/loading in LuRd format etc. Really the only big feature missing is level solving... Maybe later ;-)
So far YASC have been ported by me to the classic MacOS, Windows, WinCE 2.11, PocketPC & GP32 (basically all computer systems I have owned). I never got around to publish any of these ports so please don't ask.
GP-YASC is developed on MacOS X, using the gcc C/C++ distribution from Mr. Spiv. Thanks! Mac rulez.
If you have any questions regarding C++ development on GP32 don't hesitate to ask.
Press any key on the title screen, select a skin and then select a level set/file. The goal is to push all the treasures into their correct places. Treasures can only be pushed and not dragged, only one treasure at a time can be pushed. Pushing is accomplished just by moving into a treasure.
Just copy the files to the corresponding directory on your GP32.
Joystick | Move/push |
A | Undo |
Right flipper + A | Redo |
B | Store/goto position (Teleport!) |
Left flipper + left/up/right/down | Move as far as possible without pushing. (Express move!) |
Right flipper + Left flipper | Restart level (with undo buffer still intact) |
Right flipper + Right | Go to next level |
Right flipper + Left | Go to previous level |
Right flipper + Up | Go to next unsolved level |
Right flipper + Down | Go to previous unsolved level |
Start | Main menu |
Select | Shows level status while hold down |
Pressing the left flipper stores the position of the man and when pressing left flipper a second time the game will try to move the man back to the saved position if possible. My pathfinding algorithm alwas finds the shortest path! A star in the top left corner indicates that a position is stored.
YASC saves the solutions in a file with the same name as the level file but in the SAVES directory. Both a best moves and a best pushes solution is saved. The solutions is stored in the LuRd format, se below.
When you load a solution the level is in solved state. Just press the undo button (A) and the solution will be played back to you backwards. Of cource you can restart the level and then redoing with (B).
A saved solution consists of a series of characters l, u, d & r. Each character denotes a move in the corresponding direction if lowercase otherwise a push. For example lUUruL means move left, push up, push up, move right, move up & finally push left.
Thanks goes to Mr. Spiv for the gcc distribution and the cruncher. Hi to clemmy and the other regulars on #gp32dev.
Tommy Widenflycht
Antibes, France, Europe in September 2002