Octoban - a Sokoban variant Copyright (C)2004 Malcolm Tyrrell malcoh0l at yahoo dot ie Introduction: ============= Sokoban is a elegant puzzle game created in 1982 by Thinking Rabbit, Inc. You play a warehouse keeper ("Sokoban" is the Japanese for "warehouse keeper") and it is your job to move crates around the warehouse and place them in the correct positions. The rules can be summarised as follows: * The object of each level is to push the crates onto the designated areas. * You can only push one block at a time. * You cannot pull blocks. The original Sokoban was played on a square grid. Since then, several variants have been proposed, such as Hexoban (David W. Skinner) and Trioban (François Marques) which are played on hexagonal and triangular tilings respectively. Octoban is played on a tiling of alternating octagons and squares. When standing on an octagon, the player may walk or push in eight directions. When standing on a square, the player may walk or push only in four. The tiling looks like this: /--\ --/ \-- | | | | /--\ /--\ / \--/ \ | | | | \ /--\ / \--/ \--/ The .osb File Format: ===================== In order to allow Octoban levels to be easily created and stored, I have defined a simple file format based on the .xsb Sokoban file format. Lines in a .osb file should be one of: 1. a row making up a level - contiguous rows are thought to belong to the same level. 2. a blank line - which can be used to separate levels. 3. a comment - a line beginning with a ";". This will also separate levels if put between level lines. Rows: ===== Rows are lines consisting of the following characters only: # - the outer wall (space) - a space @ - the player's start position . - a goal $ - a crate + - the player's start position, if on a goal * - a crate, if on a goal The top-left-most character of a set of level lines is thought to be an octagon. This defines how the rest of the level must be tiled. Comments: ========= Any line beginning with a ";" is a comment. Comments beginning ";;" are thought to contain metadata. Four types of metadata are specified: ;;Title: ;;Author: <author of the following level(s)> ;;Comment: <comment about the following level(s)> Example: ======== ;;Title: Make Way ;;Author: Malcolm Tyrrell ;;Comment: Easy Octoban level. ### # # # *# ## # #. @#### ### $$ # #. ## #####