summaryrefslogtreecommitdiffstats
path: root/doc/ksokoban/index.docbook
blob: b6a439c23af236cab15ab4dd49c0f3717e85c6ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
  <!ENTITY kappname "&ksokoban;">
  <!ENTITY package "tdegames">
  <!ENTITY % English "INCLUDE" > <!-- change language only here -->
  <!ENTITY % addindex "IGNORE">
]>
	
<book lang="&language;">
<bookinfo>
<title>The &ksokoban; Handbook</title>

<authorgroup>
<author>
<firstname>Anders</firstname>
<surname>Widell</surname>
<affiliation>
<address>&Anders.Widell.mail;</address>
</affiliation>
</author>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
</authorgroup>

<copyright>
<year>2000</year>
<holder>&Anders.Widell;</holder>
</copyright>

<legalnotice>&FDLNotice;</legalnotice>

<date>2006-06-19</date>
<releaseinfo>0.4.2</releaseinfo>

<abstract>
<para>
&ksokoban; is a &kde; implementation of the Japanese warehouse keeper
game <quote>sokoban</quote>.
</para>
</abstract>

<keywordset>
<keyword>KDE</keyword>
<keyword>tdegames</keyword>
<keyword>game</keyword>
<keyword>sokoban</keyword>
<keyword>ksokoban</keyword>
</keywordset>
</bookinfo>

<chapter id="introduction">
<title>Introduction</title>

<para>
The first sokoban game was created in 1982 by Hiroyuki Imabayashi at
the Japanese company Thinking Rabbit, Inc.  <quote>Sokoban</quote> is
japanese for <quote>warehouse keeper</quote>.  The idea is that you
are a warehouse keeper trying to push crates to their proper locations
in a warehouse.
</para>

<para>
The problem is that you cannot pull the crates or step over them. If
you are not careful, some of the crates can get stuck in wrong places
and/or block your way.
</para>

<para>
It can be rather difficult just to solve a level. But if you want to
make it even harder, you can try to minimize the number of moves
and/or pushes you use to solve the level.
</para>

<para>
To make the game more fun for small kids (below 10 years or so), some
collections with easier levels are also included in &ksokoban;. These
are marked <emphasis>(easy)</emphasis> in the level collection menu.
Of course, these levels can be fun for adults too, for example if you
don't want to expose yourself to too much mental strain.
</para>
</chapter>

<chapter id="how-to-play">
<title>The Game</title>

<para>
The objective of the game is to push all the red gems to the goal
squares, which are marked with green glassy round things on the floor.
</para>

<para>
Use the cursor keys or the mouse to move about. If you move onto a gem
using the cursor keys or the <mousebutton>middle</mousebutton> mouse
button, and there is nothing blocking it on the opposite side, then you
will push the gem.  It isn't possible to pull the gems, so if you push
a gem into a corner it will be stuck there. You cannot step over the
gems either, so you can also get trapped in a part of the maze by
blocking the way with gems.  Also note that it isn't possible to push
more than one gem at a time.
</para>

<para>
If you notice that you have moved the gems in such a way that the
level is impossible to solve, then you can always use the undo feature
to go back to a position where the mistake has not yet been made. You
can of course also restart the level from the very beginning.
</para>

<sect1 id="controls">
<title>Controls</title>

<para>
<informaltable>
<tgroup cols="2">
<thead>
<row><entry>Key</entry><entry>Action</entry></row>
</thead>

<tbody>
<row><entry>Cursor keys </entry><entry>Move one square in a direction </entry></row>
<row><entry><keycombo action="simul">&Ctrl;<keycap>Cursor</keycap></keycombo> keys </entry><entry>Move as far as possible in a direction without pushing any gems </entry></row>
<row><entry><keycombo action="simul">&Shift;<keycap>Cursor</keycap></keycombo> keys </entry><entry>Move as far as possible in a direction, pushing any gem in the way </entry></row>
<row><entry><mousebutton>Left</mousebutton> mouse button </entry><entry>Move to any place in the maze that can be reached without pushing any gems </entry></row>
<row><entry><mousebutton>Middle</mousebutton> mouse button or <keycombo action="simul">&Ctrl;<keycap>Z</keycap></keycombo></entry><entry>Undo the last move </entry></row>
<row><entry><mousebutton>Right</mousebutton> mouse button </entry><entry>Move up/down/left/right in a straight line, pushing any gem in the way </entry></row>
<row><entry><mousebutton>Mouse wheel</mousebutton></entry><entry>Traverse the history </entry></row>
<row><entry><keycombo action="simul">&Ctrl;&Shift;<keycap>Z</keycap></keycombo></entry><entry>Redo the last undone move </entry></row>
<row><entry><keycap>N</keycap> </entry><entry>Go to the next level in the current level collection </entry></row>
<row><entry><keycap>P</keycap> </entry><entry>Go to the previous level in the current level collection </entry></row>
<row><entry>&Esc; </entry><entry>Restart the current level </entry></row>
<row><entry><keycombo action="simul">&Ctrl;<keycap>Q</keycap></keycombo></entry><entry>Quit the game </entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
</sect1>

<sect1 id="loading-external-levels">
<title>Loading external levels</title>

<para>
&ksokoban; has the ability to load external sokoban levels from text
files.  You can load levels using the menu entry
<menuchoice><guimenu>Game</guimenu> <guimenuitem>Load
Levels...</guimenuitem> </menuchoice>, or by specifying the level file
&URL; as a command line argument when starting &ksokoban; from a
shell.
</para>

<para>
The external levels must be defined using the standard characters
shown in the table below. If the file contains more than one level,
the levels should be separated by blank lines. The file may also
contain text between the levels.
</para>

<informaltable>
<tgroup cols="2">
<thead>
<row><entry>Character</entry><entry>Meaning</entry></row>
</thead>

<tbody>
<row><entry><literal>#</literal></entry><entry>Wall</entry></row>
<row><entry><emphasis>(space)</emphasis></entry><entry>Empty square</entry></row>
<row><entry><literal>.</literal></entry><entry>Goal square</entry></row>
<row><entry><literal>$</literal></entry><entry>Object on an empty square</entry></row>
<row><entry><literal>*</literal></entry><entry>Object on a goal square</entry></row>
<row><entry><literal>@</literal></entry><entry>Start position on an empty square</entry></row>
<row><entry><literal>+</literal></entry><entry>Start position on a goal square</entry></row>
</tbody>
</tgroup>
</informaltable>

<para>
As an example, below is a text representation of the first level in the
<emphasis>Microban</emphasis> level collection:
</para>

<para>
<screen>
####
# .#
#  ###
#*@  #
#  $ #
#  ###
####
</screen>
</para>
</sect1>
</chapter>

<chapter id="menu-reference">
<title>Menu Reference</title>

<para>This is a complete guide to the menus of &ksokoban;.</para>

<sect1 id="game-menu">
<title>The <guimenu>Game</guimenu> Menu</title>

<variablelist>
<varlistentry>
<term><menuchoice>
<guimenu>Game</guimenu>
<guimenuitem>Load Levels...</guimenuitem>
</menuchoice></term>
<listitem>
<para><action>Load an external level.</action> See the section <link
linkend="loading-external-levels">Loading External Levels</link> for
more information.</para>
</listitem>
</varlistentry>

<varlistentry>
<term><menuchoice>
<shortcut><keycap>N</keycap></shortcut>
<guimenu>Game</guimenu>
<guimenuitem>Next Level</guimenuitem>
</menuchoice></term>
<listitem>
<para><action>Load the next level.</action></para>
</listitem>
</varlistentry>

<varlistentry>
<term><menuchoice>
<shortcut><keycap>P</keycap></shortcut>
<guimenu>Game</guimenu>
<guimenuitem>Previous Level</guimenuitem>
</menuchoice></term>
<listitem>
<para><action>Go back to the previous level.</action></para>
</listitem>
</varlistentry>

<varlistentry>
<term><menuchoice>
<shortcut>&Esc;</shortcut>
<guimenu>Game</guimenu>
<guimenuitem>Restart Level</guimenuitem>
</menuchoice></term>
<listitem>
<para><action>Restart the current level.</action></para>
</listitem>
</varlistentry>

<varlistentry>
<term><menuchoice>
<guimenu>Game</guimenu>
<guisubmenu>Level Collection</guisubmenu>
</menuchoice></term>
<listitem>
<para><action>Change to a different set of levels.</action> &ksokoban;
comes with several level sets, and you can load more that you can find
on the internet.</para>
</listitem>
</varlistentry>

<varlistentry>
<term><menuchoice>
<shortcut><keycombo action="simul">&Ctrl;<keycap>Z</keycap></keycombo></shortcut>
<guimenu>Game</guimenu>
<guimenuitem>Undo</guimenuitem>
</menuchoice></term>
<listitem>
<para><action>Undo the last move</action></para>
</listitem>
</varlistentry>

<varlistentry>
<term><menuchoice>
<shortcut><keycombo action="simul">&Ctrl;&Shift;<keycap>Z</keycap></keycombo></shortcut>
<guimenu>Game</guimenu>
<guimenuitem>Redo</guimenuitem>
</menuchoice></term>
<listitem>
<para><action>Redo the last move you undid with the menu item
above.</action></para>
</listitem>
</varlistentry>

<varlistentry>
<term><menuchoice>
<shortcut><keycombo action="simul">&Ctrl;<keycap>Q</keycap></keycombo></shortcut>
<guimenu>Game</guimenu>
<guimenuitem>Quit</guimenuitem>
</menuchoice></term>
<listitem>
<para><action>Exit</action> &ksokoban;.</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>

<sect1 id="animation-menu">
<title>The <guimenu>Animation</guimenu> Menu</title>

<para>
The <guimenu>Animation</guimenu> Menu allows you to specify the speed that movement replay animations are shown at.
</para>

<variablelist>
<varlistentry>
<term><menuchoice>
<guimenu>Animation</guimenu>
<guisubmenu>Slow</guisubmenu>
</menuchoice></term>
<listitem>
<para><action>Show replay animations at a slow pace</action>.</para>
</listitem>
</varlistentry>

<varlistentry>
<term><menuchoice>
<guimenu>Animation</guimenu>
<guisubmenu>Medium</guisubmenu>
</menuchoice></term>
<listitem>
<para>This is the default setting, and <action>shows replay animations at a slightly faster pace</action>.</para>
</listitem>
</varlistentry>

<varlistentry>
<term><menuchoice>
<guimenu>Animation</guimenu>
<guisubmenu>Fast</guisubmenu>
</menuchoice></term>
<listitem>
<para><action>Show replay animations at the fastest pace</action>.</para>
</listitem>
</varlistentry>

<varlistentry>
<term><menuchoice>
<guimenu>Animation</guimenu>
<guisubmenu>Off</guisubmenu>
</menuchoice></term>
<listitem>
<para><action>Do not animate replay animations</action>.</para>
</listitem>
</varlistentry>
</variablelist>

</sect1>


<sect1 id="bookmarks">
<title>The <guimenu>Bookmarks</guimenu> Menu</title>

<variablelist>
<varlistentry>
<term><menuchoice>
<guimenu>Bookmarks</guimenu>
<guisubmenu>Set Bookmark</guisubmenu>
</menuchoice></term>
<listitem>
<para>&ksokoban; allows you to <action>set bookmarks with a level at a
particular state.</action> You might use this to save yourself
repeating the same initial steps in a level.</para>
<para>You can have up to ten bookmarks at a time, and access them via the
hotkey <keycombo action="simul">&Ctrl;<keycap><replaceable>X</replaceable></keycap></keycombo>,
where <replaceable>X</replaceable> is any digit between 0 and 9.</para>
</listitem>
</varlistentry>

<varlistentry>
<term><menuchoice>
<guimenu>Bookmarks</guimenu>
<guisubmenu>Go to Bookmark</guisubmenu>
</menuchoice></term>
<listitem>
<para><action>Jump to a state you have previously saved as a
bookmark</action>.</para>
</listitem>
</varlistentry>
</variablelist>

</sect1>

<sect1 id="help-menu">
<title>The <guimenu>Help</guimenu> Menu</title>

&help.menu.documentation;

</sect1>
</chapter>

<chapter id="credits">
<title>Credits and License</title>

<para>
&ksokoban; is copyright &copy; 1998-2000 by &Anders.Widell;
&Anders.Widell.mail;.  For
the latest info on &ksokoban;, see the &ksokoban; home page at
<ulink url="http://hem.passagen.se/awl/ksokoban/">
http://hem.passagen.se/awl/ksokoban/</ulink>
</para>

<para>
The background graphics <quote>starfield</quote> was taken from the
<ulink url="http://www.gimp.org/">Gimp</ulink>. All other graphics
were created by &Anders.Widell; &Anders.Widell.mail; using
the <ulink url="http://www.povray.org/">Povray</ulink> ray tracer.
</para>

<para>
All the currently included sokoban levels were created by David W.
Skinner <email>sasquatch@bentonrea.com</email>. See his sokoban page
at <ulink url="http://users.bentonrea.com/~sasquatch/sokoban/">
http://users.bentonrea.com/~sasquatch/sokoban/</ulink>
</para>

<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL;
&underGPL;
</chapter>

<appendix id="installation">
<title>Installation</title>

&install.intro.documentation;

&install.compile.documentation;

</appendix>

&documentation.index; 
</book>