:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Sokoban (c) by Falcon Co., Ltd., Japan :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: File Format 0.17 :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: :: File Notes Optional :: :: Puzzle 1 Required :: :: Title Optional* :: :: Board See legend :: :: Puzzle Notes Optional :: :: Saved Game or Solution 1 Optional :: :: Title Optional* :: :: Moves See legend :: :: Notes Optional :: :: Saved Game or Solution 2 Optional :: :: ... (more saved games and solutions) :: :: Puzzle 2 Optional :: :: ... (more puzzles) :: :: :: :: Remarks: :: :: :: :: File Notes :: :: File notes consist of unstructured text and :: :: key/value properties, such as "Author: Name". Lines :: :: beginning with "::" are comments meant to be read :: :: only by a person examining the file in a text :: :: editor, and should not be displayed by the Sokoban :: :: program. :: :: :: :: The optional but recommended property :: :: "Collection: Name" assigns a name to the puzzle :: :: collection. When a collection is copied from the :: :: internet, for example, and pasted into a Sokoban :: :: program, this information allows the collection to :: :: be saved with the proper name. :: :: :: :: Titles :: :: A title line is the last non-blank text line before :: :: a board, a saved game, or a solution, provided the :: :: line is preceded by a blank line or it is the only :: :: text line at this position in the file. :: :: :: :: Title lines are optional unless a single or a last :: :: text line from a preceding puzzle, saved game, :: :: solution, or file header can be mistaken for a title :: :: line. :: :: :: :: Puzzle Notes :: :: Two special key/value pairs are supported in puzzle :: :: notes: "Title" and "Author", hence, titles can :: :: either come from a title line or from a key/value :: :: pair. :: :: :: ::::::::::::::::::::::::::: Board :::::::::::::::::::::::::: :: Legend.................: :.................Legend :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Wall...................: # # :...................Wall :: :: Pusher.................: p @ :.................Pusher :: :: Pusher on goal square..: P + :..Pusher on goal square :: :: Box....................: b $ :....................Box :: :: Box on goal square.....: B * :.....Box on goal square :: :: Goal square............: . . :............Goal square :: :: Floor..................: :..................Floor :: :: Floor..................: - _ :..................Floor :: :: :: :: Remarks: :: :: :: :: The first and the last non-empty square in each row :: :: must be a wall or a box on a goal. An empty interior :: :: row is written with at least one "-" or "_". :: :: :: :: Boards may be run-length encoded (RLE), e.g., :: :: "###----p.#" may be encoded as "3#4-p.#", and :: :: "#-#-#-##-#-#-#" may be encoded as "2(3(#-)#)". :: :: A row cannot be split over multiple lines. :: :: :: :: Rows may be combined on a single line by using "|" :: :: as a row separator, e.g., "--3#|3#-#|#pb.#|5#". :: :: A "|" at the end of a line is optional and may be :: :: omitted. :: :: :: ::::::::::::::::::::::::::: Moves :::::::::::::::::::::::::: :: Legend.................: :.................Legend :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Move pusher up.........: u U :.......Push/pull box up :: :: Move pusher down.......: d D :.....Push/pull box down :: :: Move pusher left.......: l L :.....Push/pull box left :: :: Move pusher right......: r R :....Push/pull box right :: :: Begin jump.............: [ ] :...............End jump :: :: Begin pusher change....: { } :......End pusher change :: :: Current position.......: * * :.......Current position :: :: :: :: Remarks: :: :: :: :: Moves may be run-length encoded, e.g., "3r4U" means :: :: "rrrUUUU", and "2(3(dr)R)" means "drdrdrRdrdrdrR". :: :: Each line must, however, have at least one proper :: :: non-digit character. Spaces between moves are :: :: allowed. :: :: :: :: Jumps and pulls: Only in reverse mode saved games :: :: and solutions. :: :: :: :: Reverse mode saved games and solutions must begin :: :: with a jump, even if it is empty. An example: :: :: "[]U[rr]d". :: :: :: :: Pusher changes: Only in puzzles with multiple :: :: pushers, e.g., Multiban. Moves inside the braces :: :: depict the relative movement to get from the :: :: currently active pusher to the next active pusher. :: :: At game start, a "{...}" sequence activates the :: :: pusher relative to the top-left pusher. An example: :: :: "{rddd}Urr{uul}uLU". If the top-left pusher is the :: :: first active pusher, then the empty "{}" can be :: :: omitted. :: :: :: :: The current position is optional and defaults to the :: :: position after the last move. :: :: :: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::