Sok format

From Sokoban Wiki

(Difference between revisions)
Jump to: navigation, search
(Header added to the level files by the program "Sokoban YASC")
(Implementation of the file format)
Line 240: Line 240:
= Implementation of the sok format =
= Implementation of the sok format =
-
 
-
= Implementation of the file format =
 

Revision as of 18:18, 28 July 2010


Contents

Header added to the level files by the program "Sokoban YASC"

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::         Sokoban (c) by Falcon Co., Ltd., Japan         ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::                    File Format 0.14                    ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::                                                        ::
:: File Header                                            ::
::   Raw File Notes                            Optional   ::
::   File Notes                                Optional   ::
::   Game Type                                 Optional   ::
::   Macros                                    Optional   ::
:: Level 1                                     Required   ::
::    Title                                    Optional*  ::
::    Board                                    See legend ::
::    Level Notes                              Optional   ::
::    Game 1                                   Optional   ::
::      Title                                  Optional*  ::
::      Moves                                  See legend ::
::      Game Notes                             Optional   ::
::    Game 2                                   Optional   ::
::    ... (more games)                                    ::
:: Level 2                                     Optional   ::
:: ... (more levels)                                      ::
::                                                        ::
:: Remarks:                                               ::
::                                                        ::
:: File Header                                            ::
::   The different types of information may be written in ::
::   any order.                                           ::
::                                                        ::
:: Raw File Notes                                         ::
::   Raw file notes are only intended for someone looking ::
::   at the raw file in a text editor. These lines begin  ::
::   with "::".                                           ::
::                                                        ::
:: File Notes                                             ::
::   File notes are the remaining lines when all other    ::
::   information is removed from the file header, e.g.,   ::
::   raw file notes and macros.                           ::
::                                                        ::
::   As an example, file notes can contain general        ::
::   properties written as key/value pairs, such as       ::
::   "Author: Name".                                      ::
::                                                        ::
::   The optional but recommended property                ::
::   "Collection: Name" assigns a name to the puzzle      ::
::   collection. When a collection is copied  from a      ::
::   website or e-mail and pasted into a Sokoban program, ::
::   this information allows the collection to be saved   ::
::   with the proper name.                                ::
::                                                        ::
:: Game Type                                              ::
::   The type applies to all levels in the file. If it is ::
::   not specified, the default value is "Sokoban".       ::
::                                                        ::
::   The type is written as "Game: X" or "Game=X".        ::
::   An example: "Game: Hexoban".                         ::
::                                                        ::
:: Macros                                                 ::
::   Macros are key/value pairs separated by "=".         ::
::   An example: "Copyright=These levels are (c) by NN".  ::
::                                                        ::
::   The value of a key/value pair can be inserted in     ::
::   level notes and game notes by writing the key        ::
::   enclosed by "<#" ... "#/>". This applies to both     ::
::   types of key/value pairs, ":" and "=", but in        ::
::   contrast to ":" pairs, macros are not considered     ::
::   a part of the file notes.                            ::
::                                                        ::
::   An example of macro usage: "<#Copyright#/>".         ::
::   The use of key/value pairs is case-insensitive.      ::
::                                                        ::
::   Macro-definitions are single-lined. To insert a      ::
::   line-break in the expanded text, write "\n".         ::
::                                                        ::
:: Titles                                                 ::
::   A title line is the last non-blank text line before  ::
::   a level or a game, 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 level, game, or file      ::
::   header can be mistaken for a title line.             ::
::                                                        ::
:: Level Notes                                            ::
::   Two special key/value pairs are supported in level   ::
::   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............: .  o :............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. A board cannot    ::
::   have empty rows.                                     ::
::                                                        ::
::   Boards may be run-length encoded (RLE), e.g.,        ::
::   "###----@.#" may be encoded as "3#4-@.#", and        ::
::   "#-#-#-##-#-#-#" may be encoded as "2(3(#-)#)".      ::
::   A row cannot be split over multiple physical lines.  ::
::                                                        ::
::   Rows may be combined on a single physical line by    ::
::   using "|" as a row separator, e.g.,                  ::
::   "--3#|3#-#|#@$.#|5#". A "|" at the end of a physical ::
::   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 ::
:: Jump start.............: [  ] :...............Jump end ::
:: Current position.......: *  * :.......Current position ::
::                                                        ::
:: Remarks:                                               ::
::                                                        ::
::   Moves may be run-length encoded, e.g., "3r3U" means  ::
::   "rrrUU", 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 games.         ::
::                                                        ::
::   Reverse mode games must start with a jump, even if   ::
::   it is empty. An example: "[]UU[ddlll]DDllR".         ::
::                                                        ::
::   Current position is optional and defaults to the     ::
::   position after the last move.                        ::
::                                                        ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Date Created:
Date of Last Change: 2010-01-26  17:44:01
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Macros

The macro feature allows levels to share a common
text such as a copyright notice. An example:

Copyright=Copyright (c) 3642 by xyz@paris.mars


Demo Level 01

########
#      #
#@ $   #
#   $  #
# . .  #
########

This demo level is trivial, but it suffices to demonstrate
the file-format.
A Sokoban program can add key/value pairs within the notes,
such as:
Author: nn
Website: http://www.nn.net

Solution/Moves
(rurrdD)(uLulDD)

The title of a snapshot does not bear any special meaning.
This snapshot just happens to be the best solution found
(so far). The demo-program automatically saves best solutions.

Snapshot 7/0
urrrrdd

This is an example of a snapshot saved by the user.
Later he/she can continue work on this path.

Snapshot 9/2
urrrrddLL*ruulDD

Another snapshot saved by the user. The '*' indicates
current position, i.e., the last moves were taken back,
but are still available for the "redo" function.


Demo Level 02

########
#     .#
#@ $   #
#   $  #
# . *  #
########

Just another trivial demo level. The number of levels in a
file is limited by available memory only.

A macro example, inserting the text defined in the copyright-macro:
<#Copyright#/>

Solution/Moves
(rRRR)(drU)(dlLLulD)

Reverse Mode Snapshot 13/6
[rrrd]UU(rLLL)(drD)

This is an example of a reverse mode snapshot.

Reverse mode snapshots always have a leading jump-sequence,
even if it is empty. An example: "[]Ulld...".


Demo Level 03

########
#      #
#  $   #
#   $  #
# + .  #
########

Solution/Moves
(rrruul)(Lr)(Duull)(DD)

Implementation of the sok format

Personal tools