a507bb2837
The main "innovation" in this patch are two "virtual buttons" for the record switch on YH92x targets. When the switch state changes, a single BUTTON_REC_SW_ON or .._OFF button event will be generated. Thus keymap code can react on switching, but not on the actual state of the switch. Wherever sensible, the following user scheme is applied: - use PLAY as confirm button - use REW button or Long REW to exit - use REC (YH820) or FFWD (YH92X) as modifier key for button combos Change-Id: Ic8d1db9cc6869daed8dda98990dfdf7f6fd5d5a1
184 lines
8.5 KiB
TeX
184 lines
8.5 KiB
TeX
\subsection{Sokoban}
|
|
\screenshot{plugins/images/ss-sokoban}{Sokoban}{fig:sokoban}
|
|
|
|
The object of the game is to push boxes into their correct position in a
|
|
crowded warehouse with a minimal number of pushes and moves. The boxes
|
|
can only be pushed, never pulled, and only one can be pushed at a time.
|
|
|
|
Sokoban may be used as a viewer for viewing saved solutions and playing
|
|
external level sets with the \fname{.sok} extension. Level sets should be in
|
|
the standard Sokoban text format or RLE (Run Length Encoded). For more
|
|
information about the level format, see
|
|
\url{http://sokobano.de/wiki/index.php?title=Level_format}
|
|
|
|
\begin{btnmap}
|
|
\multicolumn{2}{c}{\textbf{In game}} \\
|
|
\hline
|
|
\opt{RECORDER_PAD,ARCHOS_AV300_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD%
|
|
,IAUDIO_X5_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_E200_PAD%
|
|
,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD%
|
|
,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}
|
|
{\ButtonUp, \ButtonDown, }%
|
|
\opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu, \ButtonPlay, }%
|
|
\opt{IRIVER_H10_PAD}{\ButtonScrollUp, \ButtonScrollDown, }%
|
|
\opt{RECORDER_PAD,ARCHOS_AV300_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD%
|
|
,IAUDIO_X5_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_E200_PAD%
|
|
,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,IPOD_4G_PAD,IPOD_3G_PAD%
|
|
,IRIVER_H10_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD%
|
|
,SAMSUNG_YH820_PAD}
|
|
{\ButtonLeft, \ButtonRight}
|
|
\opt{COWON_D2_PAD}
|
|
{\TouchTopMiddle, \TouchBottomMiddle, \TouchMidLeft, \TouchMidRight}
|
|
\opt{MPIO_HD300_PAD}{\ButtonScrollUp, \ButtonScrollDown, \ButtonRew, \ButtonFF}
|
|
\opt{HAVEREMOTEKEYMAP}{& }
|
|
& Move the ``sokoban'' up, down, left, or right\\
|
|
\opt{RECORDER_PAD,ARCHOS_AV300_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff}
|
|
\opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu}
|
|
\opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,GIGABEAT_PAD,MROBE100_PAD,SANSA_E200_PAD,SANSA_C200_PAD%
|
|
,SANSA_CLIP_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower}
|
|
\opt{SANSA_FUZE_PAD}{Long \ButtonHome}
|
|
\opt{GIGABEAT_S_PAD,COWON_D2_PAD}{\ButtonMenu}
|
|
\opt{MPIO_HD300_PAD}{Long \ButtonMenu}
|
|
\opt{PBELL_VIBE500_PAD}{\ButtonRec}
|
|
\opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay}
|
|
\opt{HAVEREMOTEKEYMAP}{&
|
|
\opt{IRIVER_RC_H100_PAD}{\ButtonRCStop}
|
|
}
|
|
& Menu \\
|
|
\nopt{IAUDIO_X5_PAD}{
|
|
\opt{RECORDER_PAD,ARCHOS_AV300_PAD}{\ButtonFOne}
|
|
\opt{ONDIO_PAD}{\ButtonMenu+\ButtonLeft}
|
|
\opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonDown}
|
|
\opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonLeft}
|
|
\opt{IRIVER_H10_PAD}{\ButtonPlay+\ButtonScrollDown}
|
|
\opt{GIGABEAT_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_FUZEPLUS_PAD}{\ButtonVolDown}
|
|
\opt{MROBE10_PAD}{\ButtonDisplay}
|
|
\opt{SANSA_E200_PAD,SANSA_FUZE_PAD}{\ButtonSelect+\ButtonDown}
|
|
\opt{GIGABEAT_S_PAD}{\ButtonPrev}
|
|
\opt{COWON_D2_PAD}{\ButtonMinus}
|
|
\opt{PBELL_VIBE500_PAD}{\ButtonOK+\ButtonLeft}
|
|
\opt{MPIO_HD300_PAD}{\ButtonPlay+\ButtonRew}
|
|
\opt{SAMSUNG_YH92X_PAD}{\ButtonPlay+\ButtonDown}
|
|
\opt{SAMSUNG_YH820_PAD}{\ButtonRec+\ButtonDown}
|
|
\opt{HAVEREMOTEKEYMAP}{& }
|
|
& Back to previous level \\
|
|
}
|
|
\nopt{IPOD_4G_PAD,IPOD_3G_PAD}{
|
|
\opt{RECORDER_PAD,ARCHOS_AV300_PAD}{\ButtonFTwo}
|
|
\opt{ONDIO_PAD}{\ButtonMenu+\ButtonUp}
|
|
\opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn}
|
|
\opt{IAUDIO_X5_PAD}{\ButtonRec}
|
|
\opt{IRIVER_H10_PAD,SAMSUNG_YH92X_PAD}{\ButtonPlay+\ButtonRight}
|
|
\opt{SAMSUNG_YH820_PAD}{\ButtonRec+\ButtonRight}
|
|
\opt{GIGABEAT_PAD,MROBE100_PAD}{\ButtonMenu}
|
|
\opt{SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}{\ButtonSelect+\ButtonRight}
|
|
\opt{GIGABEAT_S_PAD}{\ButtonPlay}
|
|
\opt{COWON_D2_PAD}{\TouchTopRight}
|
|
\opt{PBELL_VIBE500_PAD}{\ButtonOK+\ButtonCancel}
|
|
\opt{MPIO_HD300_PAD}{\ButtonPlay+\ButtonEnter}
|
|
\opt{SANSA_FUZEPLUS_PAD}{\ButtonBack}
|
|
\opt{HAVEREMOTEKEYMAP}{& }
|
|
& Restart level \\
|
|
}
|
|
\nopt{IAUDIO_X5_PAD}{
|
|
\opt{RECORDER_PAD,ARCHOS_AV300_PAD}{\ButtonFThree}
|
|
\opt{ONDIO_PAD}{\ButtonMenu+\ButtonRight}
|
|
\opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonUp}
|
|
\opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonRight}
|
|
\opt{IRIVER_H10_PAD}{\ButtonPlay+\ButtonScrollUp}
|
|
\opt{GIGABEAT_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_FUZEPLUS_PAD}{\ButtonVolUp}
|
|
\opt{GIGABEAT_S_PAD}{\ButtonNext}
|
|
\opt{MROBE100_PAD}{\ButtonPlay}
|
|
\opt{SANSA_E200_PAD,SANSA_FUZE_PAD}{\ButtonSelect+\ButtonUp}
|
|
\opt{COWON_D2_PAD}{\ButtonPlus}
|
|
\opt{PBELL_VIBE500_PAD}{\ButtonOK+\ButtonRight}
|
|
\opt{MPIO_HD300_PAD}{\ButtonPlay+\ButtonFF}
|
|
\opt{SAMSUNG_YH92X_PAD}{\ButtonPlay+\ButtonUp}
|
|
\opt{SAMSUNG_YH820_PAD}{\ButtonRec+\ButtonUp}
|
|
\opt{HAVEREMOTEKEYMAP}{& }
|
|
& Go to next level \\
|
|
}
|
|
\opt{RECORDER_PAD,ARCHOS_AV300_PAD}{\ButtonOn}
|
|
\opt{ONDIO_PAD}{\ButtonMenu}
|
|
\opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonRec}
|
|
\opt{IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD,GIGABEAT_PAD,MROBE100_PAD%
|
|
,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}{\ButtonSelect}
|
|
\opt{IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonRew}
|
|
\opt{GIGABEAT_S_PAD}{\ButtonVolUp}
|
|
\opt{COWON_D2_PAD}{\TouchTopRight}
|
|
\opt{SANSA_FUZEPLUS_PAD}{\ButtonBottomLeft}
|
|
\opt{PBELL_VIBE500_PAD}{\ButtonCancel}
|
|
\opt{MPIO_HD300_PAD}{\ButtonRec}
|
|
\opt{HAVEREMOTEKEYMAP}{& }
|
|
& Undo last movement \\
|
|
|
|
\opt{RECORDER_PAD,ARCHOS_AV300_PAD,IAUDIO_X5_PAD}{\ButtonPlay}
|
|
\opt{ONDIO_PAD}{\ButtonMenu+\ButtonDown}
|
|
\opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode}
|
|
\opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonPlay}
|
|
\opt{IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonFF}
|
|
\opt{GIGABEAT_PAD}{\ButtonA}
|
|
\opt{GIGABEAT_S_PAD}{\ButtonVolDown}
|
|
\opt{MROBE100_PAD}{\ButtonDisplay}
|
|
\opt{SANSA_E200_PAD,SANSA_C200_PAD}{\ButtonRec}
|
|
\opt{SANSA_CLIP_PAD}{\ButtonHome}
|
|
\opt{SANSA_FUZE_PAD}{\ButtonSelect+\ButtonLeft}
|
|
\opt{COWON_D2_PAD}{\TouchBottomLeft}
|
|
\opt{SANSA_FUZEPLUS_PAD}{\ButtonBottomRight}
|
|
\opt{PBELL_VIBE500_PAD}{\ButtonOK}
|
|
\opt{MPIO_HD300_PAD}{\ButtonPlay}
|
|
\opt{HAVEREMOTEKEYMAP}{& }
|
|
& Redo previously undone move \\
|
|
\hline
|
|
\multicolumn{2}{c}{\textbf{Solution playback}} \\
|
|
\hline
|
|
\opt{RECORDER_PAD,ARCHOS_AV300_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD%
|
|
,MPIO_HD300_PAD,SANSA_FUZEPLUS_PAD,PBELL_VIBE500_PAD,SAMSUNG_YH92X_PAD%
|
|
,SAMSUNG_YH820_PAD}{\ButtonPlay}
|
|
\opt{ONDIO_PAD}{\ButtonMenu}
|
|
\opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn}
|
|
\opt{IPOD_4G_PAD,IPOD_3G_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD%
|
|
,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}{\ButtonSelect}
|
|
\opt{COWON_D2_PAD}{\TouchCenter}
|
|
\opt{HAVEREMOTEKEYMAP}{& }
|
|
& Pause/resume \\
|
|
\opt{RECORDER_PAD,ARCHOS_AV300_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD%
|
|
,IAUDIO_X5_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_E200_PAD%
|
|
,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_FUZEPLUS_PAD%
|
|
,PBELL_VIBE500_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}
|
|
{\ButtonUp/\ButtonDown}
|
|
\opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu/\ButtonPlay}
|
|
\opt{IRIVER_H10_PAD,MPIO_HD300_PAD}{\ButtonScrollUp/\ButtonScrollDown}
|
|
\opt{COWON_D2_PAD}{\TouchTopMiddle/\TouchBottomMiddle}
|
|
\opt{HAVEREMOTEKEYMAP}{& }
|
|
& Increase/decrease playback speed \\
|
|
\opt{RECORDER_PAD,ARCHOS_AV300_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD,ONDIO_PAD%
|
|
,IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD,IPOD_3G_PAD,GIGABEAT_PAD%
|
|
,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD%
|
|
,SANSA_CLIP_PAD,SANSA_FUZEPLUS_PAD,PBELL_VIBE500_PAD,SAMSUNG_YH92X_PAD%
|
|
,SAMSUNG_YH820_PAD}
|
|
{\ButtonLeft/\ButtonRight}
|
|
\opt{COWON_D2_PAD}{\TouchMidLeft/\TouchMidRight}
|
|
\opt{MPIO_HD300_PAD}{\ButtonRew/\ButtonFF}
|
|
\opt{HAVEREMOTEKEYMAP}{& }
|
|
& Go backward/forward (while paused) \\
|
|
\opt{RECORDER_PAD,ARCHOS_AV300_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff}
|
|
\opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu}
|
|
\opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,GIGABEAT_PAD,MROBE100_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD%
|
|
,SANSA_FUZEPLUS_PAD}{\ButtonPower}
|
|
\opt{SANSA_FUZE_PAD}{Long \ButtonHome}
|
|
\opt{GIGABEAT_S_PAD,COWON_D2_PAD}{\ButtonMenu}
|
|
\opt{MPIO_HD300_PAD}{Long \ButtonMenu}
|
|
\opt{PBELL_VIBE500_PAD}{\ButtonRec}
|
|
\opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonRew}
|
|
\opt{HAVEREMOTEKEYMAP}{& }
|
|
& Quit \\
|
|
\end{btnmap}
|
|
|
|
Some places where can you can find level sets:
|
|
\begin{itemize}
|
|
\item \url{http://www.sourcecode.se/sokoban/levels.php}
|
|
\item \url{http://sokobano.de/en/levels.php}
|
|
\end{itemize}
|
|
Note that some level sets may contain levels that are too large for this
|
|
version of Sokoban and are unplayable as a result.
|