summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2017-05-09 22:10:59 -0400
committerFranklin Wei <git@fwei.tk>2017-05-16 16:45:39 -0400
commit001860ce7856e20b890d8adf425c899540a5d5d3 (patch)
tree61df98408207d85a05e29cfca1edb91ec6cb4d4a
parent7482b821753ac226806439fecec4f9ff504c0e90 (diff)
downloadrockbox-001860ce7856e20b890d8adf425c899540a5d5d3.tar.gz
rockbox-001860ce7856e20b890d8adf425c899540a5d5d3.tar.bz2
rockbox-001860ce7856e20b890d8adf425c899540a5d5d3.zip
puzzles: full help system
- embeds the upstream halibut documentation for plugin use - currently every plugin has a copy of the help text, but in the future a centralized system using overlays might be better Change-Id: Idb6eb9accc2fa786a4c6bc2b704e7cf5fd3f78dd
-rw-r--r--apps/plugins/puzzles/SOURCES3
-rwxr-xr-xapps/plugins/puzzles/genhelp.sh52
-rw-r--r--apps/plugins/puzzles/help.c48
-rw-r--r--apps/plugins/puzzles/help.h7
-rw-r--r--apps/plugins/puzzles/helpcontent.c2767
-rw-r--r--apps/plugins/puzzles/rockbox.c17
6 files changed, 2879 insertions, 15 deletions
diff --git a/apps/plugins/puzzles/SOURCES b/apps/plugins/puzzles/SOURCES
index 1d58ff5723..1e3264ec37 100644
--- a/apps/plugins/puzzles/SOURCES
+++ b/apps/plugins/puzzles/SOURCES
@@ -1,6 +1,9 @@
rockbox.c
rbwrappers.c
rbmalloc.c
+help.c
+helpcontent.c
+
src/combi.c
src/divvy.c
src/drawing.c
diff --git a/apps/plugins/puzzles/genhelp.sh b/apps/plugins/puzzles/genhelp.sh
new file mode 100755
index 0000000000..f243a1d5f6
--- /dev/null
+++ b/apps/plugins/puzzles/genhelp.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+# usage: ./genhelp.sh > helpcontent.sh
+#
+# expects halibut to be installed in $PATH:
+# http://www.chiark.greenend.org.uk/~sgtatham/halibut
+
+halibut --text src/puzzles.but
+
+# preprocess the input
+
+# strip leading whitespace
+cat puzzles.txt | awk '{$1=$1; print}' > puzzles.txt.tmp
+
+# cut at "Appendix A"
+cat puzzles.txt.tmp | awk 'BEGIN { a=1; } /Appendix A/ { a = 0; } a==1' > puzzles.txt
+
+rm puzzles.txt.tmp
+
+cat <<EOF
+/* auto-generated by genhelp.sh */
+/* DO NOT EDIT! */
+const int help_chapteroffsets[] = {
+EOF
+
+# generate chapter offset list
+cat puzzles.txt | awk 'BEGIN { x = -1; n = 0; } /#Chapter/ { if($0 !~ / 1:/ && $0 !~ / 2:/) { if( x == -1 ) { x = n; } print n - x","; }} {n += length($0) + 1; if(x >= 0 && $0 !~ /Chapter/ && substr($0, 1, 1) == "#") n += 1;}'
+
+cat <<EOF
+};
+
+const char help_text[] =
+EOF
+
+# get starting byte offset
+start=`cat puzzles.txt | awk 'BEGIN { x = -1; n = 0; } /#Chapter/ { if($0 !~ / 1:/ && $0 !~ / 2:/) { if( x == -1 ) { x = n; print x + 1; } print n - x","; }} {n += length($0) + 1; if(x >= 0 && $0 !~ /Chapter/ && substr($0, 1, 1) == "#") n += 1;}' | head -n 1`
+
+# generate content
+cat puzzles.txt | tail -c +$start | awk '{gsub(/\\/,"\\\\"); if($0 !~ /Chapter/ && substr($0, 1, 1) == "#") begin = "\\n"; else begin = ""; last = substr($0, length($0), 1); if(length($0) == 0 || last == "|" || last == "-" || (term == "\\n" && last == "3")) term="\\n"; else term = " "; print "\"" begin $0 term "\"";}'
+
+cat <<EOF
+;
+
+EOF
+
+# length of longest chapter (not including null)
+maxlen=`cat puzzles.txt | awk 'BEGIN { x = -1; n = 0; } /#Chapter/ { if($0 !~ / 1:/ && $0 !~ / 2:/) { if( x == -1 ) { x = n; } print n - x","; }} {n += length($0) + 1; if(x >= 0 && $0 !~ /Chapter/ && substr($0, 1, 1) == "#") n += 1;}' | awk 'BEGIN { max = 0; last = 0; } { if($0 - last > max) max = $0 - last; last = $0; } END { print max }'`
+
+# remember number of chapters
+num=`cat puzzles.txt | awk 'BEGIN { x = -1; n = 0; } /#Chapter/ { if($0 !~ / 1:/ && $0 !~ / 2:/) { if( x == -1 ) { x = n; } print n - x","; }} {n += length($0) + 1; if(x >= 0 && $0 !~ /Chapter/ && substr($0, 1, 1) == "#") n += 1;}' | wc -l`
+
+echo "const int help_maxlen = "$maxlen";"
+echo "const int help_numchapters = "$num";"
diff --git a/apps/plugins/puzzles/help.c b/apps/plugins/puzzles/help.c
new file mode 100644
index 0000000000..13ca7eaa8a
--- /dev/null
+++ b/apps/plugins/puzzles/help.c
@@ -0,0 +1,48 @@
+#include "help.h"
+#include "lib/simple_viewer.h"
+
+void full_help(const char *name)
+{
+ int ch_num = -1;
+ /* search the help text for a chapter with this name */
+ for(int ch = 0; ch < help_numchapters; ++ch)
+ {
+ char *str = help_text + help_chapteroffsets[ch];
+ char *ptr = strchr(str, ':') + 1;
+ const char *namep = name;
+ if(*ptr++ != ' ')
+ continue;
+
+ while(*ptr == *namep && *ptr && *namep)
+ {
+ ptr++;
+ namep++;
+ }
+ if(*namep == '\0' && (*ptr == '\n' || *ptr == ' ')) /* full match */
+ {
+ ch_num = ch;
+ break;
+ }
+ }
+ if(ch_num < 0)
+ {
+ rb->splashf(HZ * 2, "No topic found for `%s' (REPORT ME!)", name);
+ return;
+ }
+ char *buf = smalloc(help_maxlen + 1);
+ rb->memset(buf, 0, help_maxlen + 1);
+ if(ch_num < help_numchapters - 1)
+ {
+ /* safe to look ahead */
+ memcpy(buf, help_text + help_chapteroffsets[ch_num], help_chapteroffsets[ch_num + 1] - help_chapteroffsets[ch_num]);
+ }
+ else
+ rb->strlcpy(buf, help_text + help_chapteroffsets[ch_num], help_maxlen + 1);
+
+ rb->lcd_set_foreground(LCD_WHITE);
+ unsigned old_bg = rb->lcd_get_background();
+ rb->lcd_set_background(LCD_BLACK);
+ view_text(name, buf);
+ rb->lcd_set_background(old_bg);
+ sfree(buf);
+}
diff --git a/apps/plugins/puzzles/help.h b/apps/plugins/puzzles/help.h
new file mode 100644
index 0000000000..e97fe870bf
--- /dev/null
+++ b/apps/plugins/puzzles/help.h
@@ -0,0 +1,7 @@
+/* defined in helpcontent.c */
+
+extern int help_chapteroffsets[], help_maxlen, help_numchapters;
+extern const char help_text[];
+
+/* in help.c */
+void full_help(const char *name);
diff --git a/apps/plugins/puzzles/helpcontent.c b/apps/plugins/puzzles/helpcontent.c
new file mode 100644
index 0000000000..cd2abbbe98
--- /dev/null
+++ b/apps/plugins/puzzles/helpcontent.c
@@ -0,0 +1,2767 @@
+/* auto-generated by genhelp.sh */
+/* DO NOT EDIT! */
+const int help_chapteroffsets[] = {
+0,
+3444,
+5494,
+6741,
+9273,
+12186,
+15719,
+16242,
+18364,
+24608,
+28403,
+30866,
+32386,
+35415,
+37100,
+39375,
+40121,
+45547,
+47920,
+50233,
+53696,
+55959,
+58223,
+60361,
+65571,
+69487,
+71990,
+73785,
+77720,
+81246,
+82630,
+85127,
+88171,
+90199,
+92763,
+96037,
+97720,
+100094,
+101951,
+};
+
+const char help_text[] =
+"#Chapter 3: Net "
+"\n"
+"(_Note:_ the Windows version of this game is called NETGAME.EXE to "
+"avoid clashing with Windows's own NET.EXE.) "
+"\n"
+"I originally saw this in the form of a Flash game called "
+"FreeNet [1], written by Pavils Jurjans; there are several other "
+"implementations under the name NetWalk. The computer prepares a "
+"network by connecting up the centres of squares in a grid, and then "
+"shuffles the network by rotating every tile randomly. Your job is "
+"to rotate it all back into place. The successful solution will be "
+"an entirely connected network, with no closed loops. As a visual "
+"aid, all tiles which are connected to the one in the middle are "
+"highlighted. "
+"\n"
+"[1] http://www.jurjans.lv/stuff/net/FreeNet.htm "
+"\n"
+"\n#3.1 Net controls "
+"\n"
+"This game can be played with either the keyboard or the mouse. The "
+"controls are: "
+"\n"
+"_Select tile_: mouse pointer, arrow keys "
+"\n"
+"_Rotate tile anticlockwise_: left mouse button, `A' key "
+"\n"
+"_Rotate tile clockwise_: right mouse button, `D' key "
+"\n"
+"_Rotate tile by 180 degrees_: `F' key "
+"\n"
+"_Lock (or unlock) tile_: middle mouse button, shift-click, `S' key "
+"\n"
+"You can lock a tile once you're sure of its orientation. You "
+"can also unlock it again, but while it's locked you can't "
+"accidentally turn it. "
+"\n"
+"The following controls are not necessary to complete the game, but "
+"may be useful: "
+"\n"
+"_Shift grid_: Shift + arrow keys "
+"\n"
+"On grids that wrap, you can move the origin of the grid, so "
+"that tiles that were on opposite sides of the grid can be seen "
+"together. "
+"\n"
+"_Move centre_: Ctrl + arrow keys "
+"\n"
+"You can change which tile is used as the source of highlighting. "
+"(It doesn't ultimately matter which tile this is, as every tile "
+"will be connected to every other tile in a correct solution, "
+"but it may be helpful in the intermediate stages of solving the "
+"puzzle.) "
+"\n"
+"_Jumble tiles_: `J' key "
+"\n"
+"This key turns all tiles that are not locked to random "
+"orientations. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#3.2 Net parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in tiles. "
+"\n"
+"_Walls wrap around_ "
+"\n"
+"If checked, flow can pass from the left edge to the right edge, "
+"and from top to bottom, and vice versa. "
+"\n"
+"_Barrier probability_ "
+"\n"
+"A number between 0.0 and 1.0 controlling whether an immovable "
+"barrier is placed between two tiles to prevent flow between "
+"them (a higher number gives more barriers). Since barriers "
+"are immovable, they act as constraints on the solution (i.e., "
+"hints). "
+"\n"
+"The grid generation in Net has been carefully arranged so that "
+"the barriers are independent of the rest of the grid. This "
+"means that if you note down the random seed used to generate "
+"the current puzzle (see section 2.2), change the _Barrier "
+"probability_ parameter, and then re-enter the same random seed, "
+"you should see exactly the same starting grid, with the only "
+"change being the number of barriers. So if you're stuck on a "
+"particular grid and need a hint, you could start up another "
+"instance of Net, set up the same parameters but a higher barrier "
+"probability, and enter the game seed from the original Net "
+"window. "
+"\n"
+"_Ensure unique solution_ "
+"\n"
+"Normally, Net will make sure that the puzzles it presents have "
+"only one solution. Puzzles with ambiguous sections can be more "
+"difficult and more subtle, so if you like you can turn off this "
+"feature and risk having ambiguous puzzles. (Also, finding _all_ "
+"the possible solutions can be an additional challenge for an "
+"advanced player.) "
+"\n"
+"#Chapter 4: Cube "
+"\n"
+"This is another one I originally saw as a web game. This one was a "
+"Java game [2], by Paul Scott. You have a grid of 16 squares, six of "
+"which are blue; on one square rests a cube. Your move is to use the "
+"arrow keys to roll the cube through 90 degrees so that it moves to "
+"an adjacent square. If you roll the cube on to a blue square, the "
+"blue square is picked up on one face of the cube; if you roll a blue "
+"face of the cube on to a non-blue square, the blueness is put down "
+"again. (In general, whenever you roll the cube, the two faces that "
+"come into contact swap colours.) Your job is to get all six blue "
+"squares on to the six faces of the cube at the same time. Count your "
+"moves and try to do it in as few as possible. "
+"\n"
+"Unlike the original Java game, my version has an additional feature: "
+"once you've mastered the game with a cube rolling on a square grid, "
+"you can change to a triangular grid and roll any of a tetrahedron, "
+"an octahedron or an icosahedron. "
+"\n"
+"[2] http://www3.sympatico.ca/paulscott/cube/cube.htm "
+"\n"
+"\n#4.1 Cube controls "
+"\n"
+"This game can be played with either the keyboard or the mouse. "
+"\n"
+"Left-clicking anywhere on the window will move the cube (or other "
+"solid) towards the mouse pointer. "
+"\n"
+"The arrow keys can also used to roll the cube on its square grid in "
+"the four cardinal directions. On the triangular grids, the mapping "
+"of arrow keys to directions is more approximate. Vertical movement "
+"is disallowed where it doesn't make sense. The four keys surrounding "
+"the arrow keys on the numeric keypad (`7', `9', `1', `3') can be "
+"used for diagonal movement. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#4.2 Cube parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Type of solid_ "
+"\n"
+"Selects the solid to roll (and hence the shape of the grid): "
+"tetrahedron, cube, octahedron, or icosahedron. "
+"\n"
+"_Width / top_, _Height / bottom_ "
+"\n"
+"On a square grid, horizontal and vertical dimensions. On a "
+"triangular grid, the number of triangles on the top and bottom "
+"rows respectively. "
+"\n"
+"#Chapter 5: Fifteen "
+"\n"
+"The old ones are the best: this is the good old `15-puzzle' with "
+"sliding tiles. You have a 4x4 square grid; 15 squares contain "
+"numbered tiles, and the sixteenth is empty. Your move is to choose a "
+"tile next to the empty space, and slide it into the space. The aim "
+"is to end up with the tiles in numerical order, with the space in "
+"the bottom right (so that the top row reads 1,2,3,4 and the bottom "
+"row reads 13,14,15,_space_). "
+"\n"
+"\n#5.1 Fifteen controls "
+"\n"
+"This game can be controlled with the mouse or the keyboard. "
+"\n"
+"A left-click with the mouse in the row or column containing the "
+"empty space will move as many tiles as necessary to move the space "
+"to the mouse pointer. "
+"\n"
+"The arrow keys will move a tile adjacent to the space in the "
+"direction indicated (moving the space in the _opposite_ direction). "
+"\n"
+"Pressing `h' will make a suggested move. Pressing `h' enough times "
+"will solve the game, but it may scramble your progress while doing "
+"so. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#5.2 Fifteen parameters "
+"\n"
+"The only options available from the `Custom...' option on the `Type' "
+"menu are _Width_ and _Height_, which are self-explanatory. (Once "
+"you've changed these, it's not a `15-puzzle' any more, of course!) "
+"\n"
+"#Chapter 6: Sixteen "
+"\n"
+"Another sliding tile puzzle, visually similar to Fifteen (see "
+"chapter 5) but with a different type of move. This time, there is no "
+"hole: all 16 squares on the grid contain numbered squares. Your move "
+"is to shift an entire row left or right, or shift an entire column "
+"up or down; every time you do that, the tile you shift off the grid "
+"re-appears at the other end of the same row, in the space you just "
+"vacated. To win, arrange the tiles into numerical order (1,2,3,4 on "
+"the top row, 13,14,15,16 on the bottom). When you've done that, try "
+"playing on different sizes of grid. "
+"\n"
+"I _might_ have invented this game myself, though only by accident "
+"if so (and I'm sure other people have independently invented it). I "
+"thought I was imitating a screensaver I'd seen, but I have a feeling "
+"that the screensaver might actually have been a Fifteen-type puzzle "
+"rather than this slightly different kind. So this might be the one "
+"thing in my puzzle collection which represents creativity on my part "
+"rather than just engineering. "
+"\n"
+"\n#6.1 Sixteen controls "
+"\n"
+"Left-clicking on an arrow will move the appropriate row or column in "
+"the direction indicated. Right-clicking will move it in the opposite "
+"direction. "
+"\n"
+"Alternatively, use the cursor keys to move the position indicator "
+"around the edge of the grid, and use the return key to move the "
+"row/column in the direction indicated. "
+"\n"
+"You can also move the tiles directly. Move the cursor onto a tile, "
+"hold Control and press an arrow key to move the tile under the "
+"cursor and move the cursor along with the tile. Or, hold Shift to "
+"move only the tile. Pressing Enter simulates holding down Control "
+"(press Enter again to release), while pressing Space simulates "
+"holding down shift. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#6.2 Sixteen parameters "
+"\n"
+"The parameters available from the `Custom...' option on the `Type' "
+"menu are: "
+"\n"
+"- _Width_ and _Height_, which are self-explanatory. "
+"\n"
+"- You can ask for a limited shuffling operation to be performed on "
+"the grid. By default, Sixteen will shuffle the grid in such a "
+"way that any arrangement is about as probable as any other. You "
+"can override this by requesting a precise number of shuffling "
+"moves to be performed. Typically your aim is then to determine "
+"the precise set of shuffling moves and invert them exactly, "
+"so that you answer (say) a four-move shuffle with a four-move "
+"solution. Note that the more moves you ask for, the more likely "
+"it is that solutions shorter than the target length will turn "
+"out to be possible. "
+"\n"
+"#Chapter 7: Twiddle "
+"\n"
+"Twiddle is a tile-rearrangement puzzle, visually similar to Sixteen "
+"(see chapter 6): you are given a grid of square tiles, each "
+"containing a number, and your aim is to arrange the numbers into "
+"ascending order. "
+"\n"
+"In basic Twiddle, your move is to rotate a square group of four "
+"tiles about their common centre. (Orientation is not significant "
+"in the basic puzzle, although you can select it.) On more advanced "
+"settings, you can rotate a larger square group of tiles. "
+"\n"
+"I first saw this type of puzzle in the GameCube game `Metroid "
+"Prime 2'. In the Main Gyro Chamber in that game, there is a puzzle "
+"you solve to unlock a door, which is a special case of Twiddle. I "
+"developed this game as a generalisation of that puzzle. "
+"\n"
+"\n#7.1 Twiddle controls "
+"\n"
+"To play Twiddle, click the mouse in the centre of the square group "
+"you wish to rotate. In the basic mode, you rotate a 2x2 square, "
+"which means you have to click at a corner point where four tiles "
+"meet. "
+"\n"
+"In more advanced modes you might be rotating 3x3 or even more at a "
+"time; if the size of the square is odd then you simply click in the "
+"centre tile of the square you want to rotate. "
+"\n"
+"Clicking with the left mouse button rotates the group anticlockwise. "
+"Clicking with the right button rotates it clockwise. "
+"\n"
+"You can also move an outline square around the grid with the cursor "
+"keys; the square is the size above (2x2 by default, or larger). "
+"Pressing the return key or space bar will rotate the current square "
+"anticlockwise or clockwise respectively. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#7.2 Twiddle parameters "
+"\n"
+"Twiddle provides several configuration options via the `Custom' "
+"option on the `Type' menu: "
+"\n"
+"- You can configure the width and height of the puzzle grid. "
+"\n"
+"- You can configure the size of square block that rotates at a "
+"time. "
+"\n"
+"- You can ask for every square in the grid to be distinguishable "
+"(the default), or you can ask for a simplified puzzle in which "
+"there are groups of identical numbers. In the simplified puzzle "
+"your aim is just to arrange all the 1s into the first row, all "
+"the 2s into the second row, and so on. "
+"\n"
+"- You can configure whether the orientation of tiles matters. If "
+"you ask for an orientable puzzle, each tile will have a triangle "
+"drawn in it. All the triangles must be pointing upwards to "
+"complete the puzzle. "
+"\n"
+"- You can ask for a limited shuffling operation to be performed "
+"on the grid. By default, Twiddle will shuffle the grid so much "
+"that any arrangement is about as probable as any other. You can "
+"override this by requesting a precise number of shuffling moves "
+"to be performed. Typically your aim is then to determine the "
+"precise set of shuffling moves and invert them exactly, so that "
+"you answer (say) a four-move shuffle with a four-move solution. "
+"Note that the more moves you ask for, the more likely it is that "
+"solutions shorter than the target length will turn out to be "
+"possible. "
+"\n"
+"#Chapter 8: Rectangles "
+"\n"
+"You have a grid of squares, with numbers written in some (but "
+"not all) of the squares. Your task is to subdivide the grid into "
+"rectangles of various sizes, such that (a) every rectangle contains "
+"exactly one numbered square, and (b) the area of each rectangle is "
+"equal to the number written in its numbered square. "
+"\n"
+"Credit for this game goes to the Japanese puzzle magazine Nikoli [3] "
+"; I've also seen a Palm implementation at Puzzle Palace [4]. Unlike "
+"Puzzle Palace's implementation, my version automatically generates "
+"random grids of any size you like. The quality of puzzle design is "
+"therefore not quite as good as hand-crafted puzzles would be, but on "
+"the plus side you get an inexhaustible supply of puzzles tailored to "
+"your own specification. "
+"\n"
+"[3] http://www.nikoli.co.jp/en/puzzles/shikaku.html (beware of "
+"Flash) "
+"\n"
+"[4] "
+"https://web.archive.org/web/20041024001459/http://www.puzzle.gr.jp/puzzle/sikaku/palm/index.html.en "
+"\n"
+"\n#8.1 Rectangles controls "
+"\n"
+"This game is played with the mouse or cursor keys. "
+"\n"
+"Left-click any edge to toggle it on or off, or left-click and "
+"drag to draw an entire rectangle (or line) on the grid in one go "
+"(removing any existing edges within that rectangle). Right-clicking "
+"and dragging will allow you to erase the contents of a rectangle "
+"without affecting its edges. "
+"\n"
+"Alternatively, use the cursor keys to move the position indicator "
+"around the board. Pressing the return key then allows you to use the "
+"cursor keys to drag a rectangle out from that position, and pressing "
+"the return key again completes the rectangle. Using the space bar "
+"instead of the return key allows you to erase the contents of a "
+"rectangle without affecting its edges, as above. Pressing escape "
+"cancels a drag. "
+"\n"
+"When a rectangle of the correct size is completed, it will be "
+"shaded. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#8.2 Rectangles parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid, in squares. "
+"\n"
+"_Expansion factor_ "
+"\n"
+"This is a mechanism for changing the type of grids generated by "
+"the program. Some people prefer a grid containing a few large "
+"rectangles to one containing many small ones. So you can ask "
+"Rectangles to essentially generate a _smaller_ grid than the "
+"size you specified, and then to expand it by adding rows and "
+"columns. "
+"\n"
+"The default expansion factor of zero means that Rectangles will "
+"simply generate a grid of the size you ask for, and do nothing "
+"further. If you set an expansion factor of (say) 0.5, it means "
+"that each dimension of the grid will be expanded to half again "
+"as big after generation. In other words, the initial grid will "
+"be 2/3 the size in each dimension, and will be expanded to its "
+"full size without adding any more rectangles. "
+"\n"
+"Setting an expansion factor of around 0.5 tends to make the "
+"game more difficult, and also (in my experience) rewards a "
+"less deductive and more intuitive playing style. If you set it "
+"_too_ high, though, the game simply cannot generate more than a "
+"few rectangles to cover the entire grid, and the game becomes "
+"trivial. "
+"\n"
+"_Ensure unique solution_ "
+"\n"
+"Normally, Rectangles will make sure that the puzzles it presents "
+"have only one solution. Puzzles with ambiguous sections can be "
+"more difficult and more subtle, so if you like you can turn off "
+"this feature and risk having ambiguous puzzles. Also, finding "
+"_all_ the possible solutions can be an additional challenge for "
+"an advanced player. Turning off this option can also speed up "
+"puzzle generation. "
+"\n"
+"#Chapter 9: Netslide "
+"\n"
+"This game combines the grid generation of Net (see chapter 3) with "
+"the movement of Sixteen (see chapter 6): you have a Net grid, but "
+"instead of rotating tiles back into place you have to slide them "
+"into place by moving a whole row at a time. "
+"\n"
+"As in Sixteen, control is with the mouse or cursor keys. See section "
+"6.1. "
+"\n"
+"The available game parameters have similar meanings to those in Net "
+"(see section 3.2) and Sixteen (see section 6.2). "
+"\n"
+"Netslide was contributed to this collection by Richard Boulton. "
+"\n"
+"#Chapter 10: Pattern "
+"\n"
+"You have a grid of squares, which must all be filled in either black "
+"or white. Beside each row of the grid are listed the lengths of the "
+"runs of black squares on that row; above each column are listed the "
+"lengths of the runs of black squares in that column. Your aim is to "
+"fill in the entire grid black or white. "
+"\n"
+"I first saw this puzzle form around 1995, under the name "
+"`nonograms'. I've seen it in various places since then, under "
+"different names. "
+"\n"
+"Normally, puzzles of this type turn out to be a meaningful picture "
+"of something once you've solved them. However, since this version "
+"generates the puzzles automatically, they will just look like random "
+"groupings of squares. (One user has suggested that this is actually "
+"a _good_ thing, since it prevents you from guessing the colour of "
+"squares based on the picture, and forces you to use logic instead.) "
+"The advantage, though, is that you never run out of them. "
+"\n"
+"\n#10.1 Pattern controls "
+"\n"
+"This game is played with the mouse. "
+"\n"
+"Left-click in a square to colour it black. Right-click to colour it "
+"white. If you make a mistake, you can middle-click, or hold down "
+"Shift while clicking with any button, to colour the square in the "
+"default grey (meaning `undecided') again. "
+"\n"
+"You can click and drag with the left or right mouse button to colour "
+"a vertical or horizontal line of squares black or white at a time "
+"(respectively). If you click and drag with the middle button, or "
+"with Shift held down, you can colour a whole rectangle of squares "
+"grey. "
+"\n"
+"You can also move around the grid with the cursor keys. Pressing the "
+"return key will cycle the current cell through empty, then black, "
+"then white, then empty, and the space bar does the same cycle in "
+"reverse. "
+"\n"
+"Moving the cursor while holding Control will colour the moved-over "
+"squares black. Holding Shift will colour the moved-over squares "
+"white, and holding both will colour them grey. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#10.2 Pattern parameters "
+"\n"
+"The only options available from the `Custom...' option on the `Type' "
+"menu are _Width_ and _Height_, which are self-explanatory. "
+"\n"
+"#Chapter 11: Solo "
+"\n"
+"You have a square grid, which is divided into as many equally sized "
+"sub-blocks as the grid has rows. Each square must be filled in with "
+"a digit from 1 to the size of the grid, in such a way that "
+"\n"
+"- every row contains only one occurrence of each digit "
+"\n"
+"- every column contains only one occurrence of each digit "
+"\n"
+"- every block contains only one occurrence of each digit. "
+"\n"
+"- (optionally, by default off) each of the square's two main "
+"diagonals contains only one occurrence of each digit. "
+"\n"
+"You are given some of the numbers as clues; your aim is to place the "
+"rest of the numbers correctly. "
+"\n"
+"Under the default settings, the sub-blocks are square or "
+"rectangular. The default puzzle size is 3x3 (a 9x9 actual grid, "
+"divided into nine 3x3 blocks). You can also select sizes with "
+"rectangular blocks instead of square ones, such as 2x3 (a 6x6 grid "
+"divided into six 3x2 blocks). Alternatively, you can select `jigsaw' "
+"mode, in which the sub-blocks are arbitrary shapes which differ "
+"between individual puzzles. "
+"\n"
+"Another available mode is `killer'. In this mode, clues are not "
+"given in the form of filled-in squares; instead, the grid is divided "
+"into `cages' by coloured lines, and for each cage the game tells "
+"you what the sum of all the digits in that cage should be. Also, "
+"no digit may appear more than once within a cage, even if the cage "
+"crosses the boundaries of existing regions. "
+"\n"
+"If you select a puzzle size which requires more than 9 digits, the "
+"additional digits will be letters of the alphabet. For example, if "
+"you select 3x4 then the digits which go in your grid will be 1 to 9, "
+"plus `a', `b' and `c'. This cannot be selected for killer puzzles. "
+"\n"
+"I first saw this puzzle in Nikoli [5], although it's also been "
+"popularised by various newspapers under the name `Sudoku' or `Su "
+"Doku'. Howard Garns is considered the inventor of the modern form of "
+"the puzzle, and it was first published in _Dell Pencil Puzzles and "
+"Word Games_. A more elaborate treatment of the history of the puzzle "
+"can be found on Wikipedia [6]. "
+"\n"
+"[5] http://www.nikoli.co.jp/en/puzzles/sudoku.html (beware of Flash) "
+"\n"
+"[6] http://en.wikipedia.org/wiki/Sudoku "
+"\n"
+"\n#11.1 Solo controls "
+"\n"
+"To play Solo, simply click the mouse in any empty square and then "
+"type a digit or letter on the keyboard to fill that square. If you "
+"make a mistake, click the mouse in the incorrect square and press "
+"Space to clear it again (or use the Undo feature). "
+"\n"
+"If you _right_-click in a square and then type a number, that "
+"number will be entered in the square as a `pencil mark'. You can "
+"have pencil marks for multiple numbers in the same square. Squares "
+"containing filled-in numbers cannot also contain pencil marks. "
+"\n"
+"The game pays no attention to pencil marks, so exactly what you "
+"use them for is up to you: you can use them as reminders that a "
+"particular square needs to be re-examined once you know more about "
+"a particular number, or you can use them as lists of the possible "
+"numbers in a given square, or anything else you feel like. "
+"\n"
+"To erase a single pencil mark, right-click in the square and type "
+"the same number again. "
+"\n"
+"All pencil marks in a square are erased when you left-click and type "
+"a number, or when you left-click and press space. Right-clicking and "
+"pressing space will also erase pencil marks. "
+"\n"
+"Alternatively, use the cursor keys to move the mark around the grid. "
+"Pressing the return key toggles the mark (from a normal mark to a "
+"pencil mark), and typing a number in is entered in the square in the "
+"appropriate way; typing in a 0 or using the space bar will clear a "
+"filled square. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#11.2 Solo parameters "
+"\n"
+"Solo allows you to configure two separate dimensions of the puzzle "
+"grid on the `Type' menu: the number of columns, and the number of "
+"rows, into which the main grid is divided. (The size of a block is "
+"the inverse of this: for example, if you select 2 columns and 3 "
+"rows, each actual block will have 3 columns and 2 rows.) "
+"\n"
+"If you tick the `X' checkbox, Solo will apply the optional extra "
+"constraint that the two main diagonals of the grid also contain "
+"one of every digit. (This is sometimes known as `Sudoku-X' in "
+"newspapers.) In this mode, the squares on the two main diagonals "
+"will be shaded slightly so that you know it's enabled. "
+"\n"
+"If you tick the `Jigsaw' checkbox, Solo will generate randomly "
+"shaped sub-blocks. In this mode, the actual grid size will be taken "
+"to be the product of the numbers entered in the `Columns' and `Rows' "
+"boxes. There is no reason why you have to enter a number greater "
+"than 1 in both boxes; Jigsaw mode has no constraint on the grid "
+"size, and it can even be a prime number if you feel like it. "
+"\n"
+"If you tick the `Killer' checkbox, Solo will generate a set of "
+"of cages, which are randomly shaped and drawn in an outline of a "
+"different colour. Each of these regions contains a smaller clue "
+"which shows the digit sum of all the squares in this region. "
+"\n"
+"You can also configure the type of symmetry shown in the generated "
+"puzzles. More symmetry makes the puzzles look prettier but may also "
+"make them easier, since the symmetry constraints can force more "
+"clues than necessary to be present. Completely asymmetric puzzles "
+"have the freedom to contain as few clues as possible. "
+"\n"
+"Finally, you can configure the difficulty of the generated puzzles. "
+"Difficulty levels are judged by the complexity of the techniques "
+"of deduction required to solve the puzzle: each level requires a "
+"mode of reasoning which was not necessary in the previous one. In "
+"particular, on difficulty levels `Trivial' and `Basic' there will be "
+"a square you can fill in with a single number at all times, whereas "
+"at `Intermediate' level and beyond you will have to make partial "
+"deductions about the _set_ of squares a number could be in (or the "
+"set of numbers that could be in a square). At `Unreasonable' level, "
+"even this is not enough, and you will eventually have to make a "
+"guess, and then backtrack if it turns out to be wrong. "
+"\n"
+"Generating difficult puzzles is itself difficult: if you select one "
+"of the higher difficulty levels, Solo may have to make many attempts "
+"at generating a puzzle before it finds one hard enough for you. Be "
+"prepared to wait, especially if you have also configured a large "
+"puzzle size. "
+"\n"
+"#Chapter 12: Mines "
+"\n"
+"You have a grid of covered squares, some of which contain mines, but "
+"you don't know which. Your job is to uncover every square which does "
+"_not_ contain a mine. If you uncover a square containing a mine, you "
+"lose. If you uncover a square which does not contain a mine, you "
+"are told how many mines are contained within the eight surrounding "
+"squares. "
+"\n"
+"This game needs no introduction; popularised by Windows, it is "
+"perhaps the single best known desktop puzzle game in existence. "
+"\n"
+"This version of it has an unusual property. By default, it will "
+"generate its mine positions in such a way as to ensure that you "
+"never need to _guess_ where a mine is: you will always be able "
+"to deduce it somehow. So you will never, as can happen in other "
+"versions, get to the last four squares and discover that there are "
+"two mines left but you have no way of knowing for sure where they "
+"are. "
+"\n"
+"\n#12.1 Mines controls "
+"\n"
+"This game is played with the mouse. "
+"\n"
+"If you left-click in a covered square, it will be uncovered. "
+"\n"
+"If you right-click in a covered square, it will place a flag which "
+"indicates that the square is believed to be a mine. Left-clicking in "
+"a marked square will not uncover it, for safety. You can right-click "
+"again to remove a mark placed in error. "
+"\n"
+"If you left-click in an _uncovered_ square, it will `clear around' "
+"the square. This means: if the square has exactly as many flags "
+"surrounding it as it should have mines, then all the covered squares "
+"next to it which are _not_ flagged will be uncovered. So once you "
+"think you know the location of all the mines around a square, you "
+"can use this function as a shortcut to avoid having to click on each "
+"of the remaining squares one by one. "
+"\n"
+"If you uncover a square which has _no_ mines in the surrounding "
+"eight squares, then it is obviously safe to uncover those squares in "
+"turn, and so on if any of them also has no surrounding mines. This "
+"will be done for you automatically; so sometimes when you uncover a "
+"square, a whole new area will open up to be explored. "
+"\n"
+"You can also use the cursor keys to move around the minefield. "
+"Pressing the return key in a covered square uncovers it, and in "
+"an uncovered square will clear around it (so it acts as the left "
+"button), pressing the space bar in a covered square will place a "
+"flag (similarly, it acts as the right button). "
+"\n"
+"All the actions described in section 2.1 are also available. "
+"\n"
+"Even Undo is available, although you might consider it cheating to "
+"use it. If you step on a mine, the program will only reveal the mine "
+"in question (unlike most other implementations, which reveal all of "
+"them). You can then Undo your fatal move and continue playing if you "
+"like. The program will track the number of times you died (and Undo "
+"will not reduce that counter), so when you get to the end of the "
+"game you know whether or not you did it without making any errors. "
+"\n"
+"(If you really want to know the full layout of the grid, which other "
+"implementations will show you after you die, you can always use the "
+"Solve menu option.) "
+"\n"
+"\n#12.2 Mines parameters "
+"\n"
+"The options available from the `Custom...' option on the `Type' menu "
+"are: "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. "
+"\n"
+"_Mines_ "
+"\n"
+"Number of mines in the grid. You can enter this as an absolute "
+"mine count, or alternatively you can put a % sign on the end "
+"in which case the game will arrange for that proportion of the "
+"squares in the grid to be mines. "
+"\n"
+"Beware of setting the mine count too high. At very high "
+"densities, the program may spend forever searching for a "
+"solvable grid. "
+"\n"
+"_Ensure solubility_ "
+"\n"
+"When this option is enabled (as it is by default), Mines will "
+"ensure that the entire grid can be fully deduced starting "
+"from the initial open space. If you prefer the riskier grids "
+"generated by other implementations, you can switch off this "
+"option. "
+"\n"
+"#Chapter 13: Same Game "
+"\n"
+"You have a grid of coloured squares, which you have to clear by "
+"highlighting contiguous regions of more than one coloured square; "
+"the larger the region you highlight, the more points you get (and "
+"the faster you clear the arena). "
+"\n"
+"If you clear the grid you win. If you end up with nothing but single "
+"squares (i.e., there are no more clickable regions left) you lose. "
+"\n"
+"Removing a region causes the rest of the grid to shuffle up: blocks "
+"that are suspended will fall down (first), and then empty columns "
+"are filled from the right. "
+"\n"
+"Same Game was contributed to this collection by James Harvey. "
+"\n"
+"\n#13.1 Same Game controls "
+"\n"
+"This game can be played with either the keyboard or the mouse. "
+"\n"
+"If you left-click an unselected region, it becomes selected "
+"(possibly clearing the current selection). "
+"\n"
+"If you left-click the selected region, it will be removed (and the "
+"rest of the grid shuffled immediately). "
+"\n"
+"If you right-click the selected region, it will be unselected. "
+"\n"
+"The cursor keys move a cursor around the grid. Pressing the Space or "
+"Enter keys while the cursor is in an unselected region selects it; "
+"pressing Space or Enter again removes it as above. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#13.2 Same Game parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. "
+"\n"
+"_No. of colours_ "
+"\n"
+"Number of different colours used to fill the grid; the more "
+"colours, the fewer large regions of colour and thus the more "
+"difficult it is to successfully clear the grid. "
+"\n"
+"_Scoring system_ "
+"\n"
+"Controls the precise mechanism used for scoring. With the "
+"default system, `(n-2)^2', only regions of three squares or more "
+"will score any points at all. With the alternative `(n-1)^2' "
+"system, regions of two squares score a point each, and larger "
+"regions score relatively more points. "
+"\n"
+"_Ensure solubility_ "
+"\n"
+"If this option is ticked (the default state), generated grids "
+"will be guaranteed to have at least one solution. "
+"\n"
+"If you turn it off, the game generator will not try to guarantee "
+"soluble grids; it will, however, still ensure that there are at "
+"least 2 squares of each colour on the grid at the start (since a "
+"grid with exactly one square of a given colour is _definitely_ "
+"insoluble). Grids generated with this option disabled may "
+"contain more large areas of contiguous colour, leading to "
+"opportunities for higher scores; they can also take less time to "
+"generate. "
+"\n"
+"#Chapter 14: Flip "
+"\n"
+"You have a grid of squares, some light and some dark. Your aim is to "
+"light all the squares up at the same time. You can choose any square "
+"and flip its state from light to dark or dark to light, but when you "
+"do so, other squares around it change state as well. "
+"\n"
+"Each square contains a small diagram showing which other squares "
+"change when you flip it. "
+"\n"
+"\n#14.1 Flip controls "
+"\n"
+"This game can be played with either the keyboard or the mouse. "
+"\n"
+"Left-click in a square to flip it and its associated squares, or use "
+"the cursor keys to choose a square and the space bar or Enter key to "
+"flip. "
+"\n"
+"If you use the `Solve' function on this game, it will mark some of "
+"the squares in red. If you click once in every square with a red "
+"mark, the game should be solved. (If you click in a square _without_ "
+"a red mark, a red mark will appear in it to indicate that you will "
+"need to reverse that operation to reach the solution.) "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#14.2 Flip parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. "
+"\n"
+"_Shape type_ "
+"\n"
+"This control determines the shape of the region which is flipped "
+"by clicking in any given square. The default setting, `Crosses', "
+"causes every square to flip itself and its four immediate "
+"neighbours (or three or two if it's at an edge or corner). The "
+"other setting, `Random', causes a random shape to be chosen for "
+"every square, so the game is different every time. "
+"\n"
+"#Chapter 15: Guess "
+"\n"
+"You have a set of coloured pegs, and have to reproduce a "
+"predetermined sequence of them (chosen by the computer) within a "
+"certain number of guesses. "
+"\n"
+"Each guess gets marked with the number of correctly-coloured pegs "
+"in the correct places (in black), and also the number of correctly-\n"
+"coloured pegs in the wrong places (in white). "
+"\n"
+"This game is also known (and marketed, by Hasbro, mainly) as a board "
+"game `Mastermind', with 6 colours, 4 pegs per row, and 10 guesses. "
+"However, this version allows custom settings of number of colours "
+"(up to 10), number of pegs per row, and number of guesses. "
+"\n"
+"Guess was contributed to this collection by James Harvey. "
+"\n"
+"\n#15.1 Guess controls "
+"\n"
+"This game can be played with either the keyboard or the mouse. "
+"\n"
+"With the mouse, drag a coloured peg from the tray on the left-hand "
+"side to its required position in the current guess; pegs may also "
+"be dragged from current and past guesses to copy them elsewhere. To "
+"remove a peg, drag it off its current position to somewhere invalid. "
+"\n"
+"Right-clicking in the current guess adds a `hold' marker; pegs that "
+"have hold markers will be automatically added to the next guess "
+"after marking. "
+"\n"
+"Alternatively, with the keyboard, the up and down cursor keys can "
+"be used to select a peg colour, the left and right keys to select a "
+"peg position, and the space bar or Enter key to place a peg of the "
+"selected colour in the chosen position. `D' or Backspace removes a "
+"peg, and Space adds a hold marker. "
+"\n"
+"Pressing `h' or `?' will fill the current guess with a suggested "
+"guess. Using this is not recommended for 10 or more pegs as it is "
+"slow. "
+"\n"
+"When the guess is complete, the smaller feedback pegs will be "
+"highlighted; clicking on these (or moving the peg cursor to them "
+"with the arrow keys and pressing the space bar or Enter key) will "
+"mark the current guess, copy any held pegs to the next guess, and "
+"move the `current guess' marker. "
+"\n"
+"If you correctly position all the pegs the solution will be "
+"displayed below; if you run out of guesses (or select `Solve...') "
+"the solution will also be revealed. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#15.2 Guess parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. The default game matches the parameters for the board "
+"game `Mastermind'. "
+"\n"
+"_Colours_ "
+"\n"
+"Number of colours the solution is chosen from; from 2 to 10 "
+"(more is harder). "
+"\n"
+"_Pegs per guess_ "
+"\n"
+"Number of pegs per guess (more is harder). "
+"\n"
+"_Guesses_ "
+"\n"
+"Number of guesses you have to find the solution in (fewer is "
+"harder). "
+"\n"
+"_Allow blanks_ "
+"\n"
+"Allows blank pegs to be given as part of a guess (makes it "
+"easier, because you know that those will never be counted as "
+"part of the solution). This is turned off by default. "
+"\n"
+"Note that this doesn't allow blank pegs in the solution; if you "
+"really wanted that, use one extra colour. "
+"\n"
+"_Allow duplicates_ "
+"\n"
+"Allows the solution (and the guesses) to contain colours more "
+"than once; this increases the search space (making things "
+"harder), and is turned on by default. "
+"\n"
+"#Chapter 16: Pegs "
+"\n"
+"A number of pegs are placed in holes on a board. You can remove a "
+"peg by jumping an adjacent peg over it (horizontally or vertically) "
+"to a vacant hole on the other side. Your aim is to remove all but "
+"one of the pegs initially present. "
+"\n"
+"This game, best known as `Peg Solitaire', is possibly one of the "
+"oldest puzzle games still commonly known. "
+"\n"
+"\n#16.1 Pegs controls "
+"\n"
+"To move a peg, drag it with the mouse from its current position to "
+"its final position. If the final position is exactly two holes away "
+"from the initial position, is currently unoccupied by a peg, and "
+"there is a peg in the intervening square, the move will be permitted "
+"and the intervening peg will be removed. "
+"\n"
+"Vacant spaces which you can move a peg into are marked with holes. A "
+"space with no peg and no hole is not available for moving at all: it "
+"is an obstacle which you must work around. "
+"\n"
+"You can also use the cursor keys to move a position indicator around "
+"the board. Pressing the return key while over a peg, followed by a "
+"cursor key, will jump the peg in that direction (if that is a legal "
+"move). "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#16.2 Pegs parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in holes. "
+"\n"
+"_Board type_ "
+"\n"
+"Controls whether you are given a board of a standard shape or "
+"a randomly generated shape. The two standard shapes currently "
+"supported are `Cross' and `Octagon' (also commonly known as the "
+"English and European traditional board layouts respectively). "
+"Selecting `Random' will give you a different board shape every "
+"time (but always one that is known to have a solution). "
+"\n"
+"#Chapter 17: Dominosa "
+"\n"
+"A normal set of dominoes - that is, one instance of every "
+"(unordered) pair of numbers from 0 to 6 - has been arranged "
+"irregularly into a rectangle; then the number in each square has "
+"been written down and the dominoes themselves removed. Your task is "
+"to reconstruct the pattern by arranging the set of dominoes to match "
+"the provided array of numbers. "
+"\n"
+"This puzzle is widely credited to O. S. Adler, and takes part of its "
+"name from those initials. "
+"\n"
+"\n#17.1 Dominosa controls "
+"\n"
+"Left-clicking between any two adjacent numbers places a domino "
+"covering them, or removes one if it is already present. Trying to "
+"place a domino which overlaps existing dominoes will remove the ones "
+"it overlaps. "
+"\n"
+"Right-clicking between two adjacent numbers draws a line between "
+"them, which you can use to remind yourself that you know those two "
+"numbers are _not_ covered by a single domino. Right-clicking again "
+"removes the line. "
+"\n"
+"You can also use the cursor keys to move a cursor around the grid. "
+"When the cursor is half way between two adjacent numbers, pressing "
+"the return key will place a domino covering those numbers, or "
+"pressing the space bar will lay a line between the two squares. "
+"Repeating either action removes the domino or line. "
+"\n"
+"Pressing a number key will highlight all occurrences of that number. "
+"Pressing that number again will clear the highlighting. Up to two "
+"different numbers can be highlighted at any given time. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#17.2 Dominosa parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Maximum number on dominoes_ "
+"\n"
+"Controls the size of the puzzle, by controlling the size of the "
+"set of dominoes used to make it. Dominoes with numbers going "
+"up to N will give rise to an (N+2) x (N+1) rectangle; so, in "
+"particular, the default value of 6 gives an 8x7 grid. "
+"\n"
+"_Ensure unique solution_ "
+"\n"
+"Normally, Dominosa will make sure that the puzzles it presents "
+"have only one solution. Puzzles with ambiguous sections can be "
+"more difficult and sometimes more subtle, so if you like you "
+"can turn off this feature. Also, finding _all_ the possible "
+"solutions can be an additional challenge for an advanced player. "
+"Turning off this option can also speed up puzzle generation. "
+"\n"
+"#Chapter 18: Untangle "
+"\n"
+"You are given a number of points, some of which have lines drawn "
+"between them. You can move the points about arbitrarily; your aim is "
+"to position the points so that no line crosses another. "
+"\n"
+"I originally saw this in the form of a Flash game called Planarity "
+"[7], written by John Tantalo. "
+"\n"
+"[7] http://planarity.net "
+"\n"
+"\n#18.1 Untangle controls "
+"\n"
+"To move a point, click on it with the left mouse button and drag it "
+"into a new position. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#18.2 Untangle parameters "
+"\n"
+"There is only one parameter available from the `Custom...' option on "
+"the `Type' menu: "
+"\n"
+"_Number of points_ "
+"\n"
+"Controls the size of the puzzle, by specifying the number of "
+"points in the generated graph. "
+"\n"
+"#Chapter 19: Black Box "
+"\n"
+"A number of balls are hidden in a rectangular arena. You have to "
+"deduce the positions of the balls by firing lasers positioned at the "
+"edges of the arena and observing how their beams are deflected. "
+"\n"
+"Beams will travel straight from their origin until they hit the "
+"opposite side of the arena (at which point they emerge), unless "
+"affected by balls in one of the following ways: "
+"\n"
+"- A beam that hits a ball head-on is absorbed and will never re-\n"
+"emerge. This includes beams that meet a ball on the first rank "
+"of the arena. "
+"\n"
+"- A beam with a ball in its front-left square and no ball ahead of "
+"it gets deflected 90 degrees to the right. "
+"\n"
+"- A beam with a ball in its front-right square and no ball ahead "
+"of it gets similarly deflected to the left. "
+"\n"
+"- A beam that would re-emerge from its entry location is "
+"considered to be `reflected'. "
+"\n"
+"- A beam which would get deflected before entering the arena by a "
+"ball to the front-left or front-right of its entry point is also "
+"considered to be `reflected'. "
+"\n"
+"Beams that are reflected appear as a `R'; beams that hit balls head-\n"
+"on appear as `H'. Otherwise, a number appears at the firing point "
+"and the location where the beam emerges (this number is unique to "
+"that shot). "
+"\n"
+"You can place guesses as to the location of the balls, based on the "
+"entry and exit patterns of the beams; once you have placed enough "
+"balls a button appears enabling you to have your guesses checked. "
+"\n"
+"Here is a diagram showing how the positions of balls can create each "
+"of the beam behaviours shown above: "
+"\n"
+"1RHR----\n"
+"|..O.O...|\n"
+"2........3\n"
+"|........|\n"
+"|........|\n"
+"3........|\n"
+"|......O.|\n"
+"H........|\n"
+"|.....O..|\n"
+"12-RR---\n"
+"\n"
+"As shown, it is possible for a beam to receive multiple reflections "
+"before re-emerging (see turn 3). Similarly, a beam may be reflected "
+"(possibly more than once) before receiving a hit (the `H' on the "
+"left side of the example). "
+"\n"
+"Note that any layout with more than 4 balls may have a non-unique "
+"solution. The following diagram illustrates this; if you know the "
+"board contains 5 balls, it is impossible to determine where the "
+"fifth ball is (possible positions marked with an x): "
+"\n"
+"--------\n"
+"|........|\n"
+"|........|\n"
+"|..O..O..|\n"
+"|...xx...|\n"
+"|...xx...|\n"
+"|..O..O..|\n"
+"|........|\n"
+"|........|\n"
+"--------\n"
+"\n"
+"For this reason, when you have your guesses checked, the game "
+"will check that your solution _produces the same results_ as the "
+"computer's, rather than that your solution is identical to the "
+"computer's. So in the above example, you could put the fifth ball at "
+"_any_ of the locations marked with an x, and you would still win. "
+"\n"
+"Black Box was contributed to this collection by James Harvey. "
+"\n"
+"\n#19.1 Black Box controls "
+"\n"
+"To fire a laser beam, left-click in a square around the edge of "
+"the arena. The results will be displayed immediately. Clicking or "
+"holding the left button on one of these squares will highlight the "
+"current go (or a previous go) to confirm the exit point for that "
+"laser, if applicable. "
+"\n"
+"To guess the location of a ball, left-click within the arena and a "
+"black circle will appear marking the guess; click again to remove "
+"the guessed ball. "
+"\n"
+"Locations in the arena may be locked against modification by right-\n"
+"clicking; whole rows and columns may be similarly locked by right-\n"
+"clicking in the laser square above/below that column, or to the "
+"left/right of that row. "
+"\n"
+"The cursor keys may also be used to move around the grid. Pressing "
+"the Enter key will fire a laser or add a new ball-location guess, "
+"and pressing Space will lock a cell, row, or column. "
+"\n"
+"When an appropriate number of balls have been guessed, a button will "
+"appear at the top-left corner of the grid; clicking that (with mouse "
+"or cursor) will check your guesses. "
+"\n"
+"If you click the `check' button and your guesses are not correct, "
+"the game will show you the minimum information necessary to "
+"demonstrate this to you, so you can try again. If your ball "
+"positions are not consistent with the beam paths you already know "
+"about, one beam path will be circled to indicate that it proves you "
+"wrong. If your positions match all the existing beam paths but are "
+"still wrong, one new beam path will be revealed (written in red) "
+"which is not consistent with your current guesses. "
+"\n"
+"If you decide to give up completely, you can select Solve to reveal "
+"the actual ball positions. At this point, correctly-placed balls "
+"will be displayed as filled black circles, incorrectly-placed balls "
+"as filled black circles with red crosses, and missing balls as "
+"filled red circles. In addition, a red circle marks any laser you "
+"had already fired which is not consistent with your ball layout "
+"(just as when you press the `check' button), and red text marks "
+"any laser you _could_ have fired in order to distinguish your ball "
+"layout from the correct one. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#19.2 Black Box parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. There are 2 x _Width_ x _Height_ lasers "
+"per grid, two per row and two per column. "
+"\n"
+"_No. of balls_ "
+"\n"
+"Number of balls to place in the grid. This can be a single "
+"number, or a range (separated with a hyphen, like `2-6'), "
+"and determines the number of balls to place on the grid. "
+"The `reveal' button is only enabled if you have guessed an "
+"appropriate number of balls; a guess using a different number "
+"to the original solution is still acceptable, if all the beam "
+"inputs and outputs match. "
+"\n"
+"#Chapter 20: Slant "
+"\n"
+"You have a grid of squares. Your aim is to draw a diagonal line "
+"through each square, and choose which way each line slants so that "
+"the following conditions are met: "
+"\n"
+"- The diagonal lines never form a loop. "
+"\n"
+"- Any point with a circled number has precisely that many lines "
+"meeting at it. (Thus, a 4 is the centre of a cross shape, "
+"whereas a zero is the centre of a diamond shape - or rather, a "
+"partial diamond shape, because a zero can never appear in the "
+"middle of the grid because that would immediately cause a loop.) "
+"\n"
+"Credit for this puzzle goes to Nikoli [8]. "
+"\n"
+"[8] http://www.nikoli.co.jp/ja/puzzles/gokigen_naname (in Japanese) "
+"\n"
+"\n#20.1 Slant controls "
+"\n"
+"Left-clicking in a blank square will place a \\ in it (a line leaning "
+"to the left, i.e. running from the top left of the square to the "
+"bottom right). Right-clicking in a blank square will place a / in it "
+"(leaning to the right, running from top right to bottom left). "
+"\n"
+"Continuing to click either button will cycle between the three "
+"possible square contents. Thus, if you left-click repeatedly in a "
+"blank square it will change from blank to \\ to / back to blank, and "
+"if you right-click repeatedly the square will change from blank to / "
+"to \\ back to blank. (Therefore, you can play the game entirely with "
+"one button if you need to.) "
+"\n"
+"You can also use the cursor keys to move around the grid. Pressing "
+"the return or space keys will place a \\ or a /, respectively, and "
+"will then cycle them as above. You can also press / or \\ to place a "
+"/ or \\, respectively, independent of what is already in the cursor "
+"square. Backspace removes any line from the cursor square. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#20.2 Slant parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. "
+"\n"
+"_Difficulty_ "
+"\n"
+"Controls the difficulty of the generated puzzle. At Hard "
+"level, you are required to do deductions based on knowledge of "
+"_relationships_ between squares rather than always being able to "
+"deduce the exact contents of one square at a time. (For example, "
+"you might know that two squares slant in the same direction, "
+"even if you don't yet know what that direction is, and this "
+"might enable you to deduce something about still other squares.) "
+"Even at Hard level, guesswork and backtracking should never be "
+"necessary. "
+"\n"
+"#Chapter 21: Light Up "
+"\n"
+"You have a grid of squares. Some are filled in black; some of the "
+"black squares are numbered. Your aim is to `light up' all the empty "
+"squares by placing light bulbs in some of them. "
+"\n"
+"Each light bulb illuminates the square it is on, plus all squares "
+"in line with it horizontally or vertically unless a black square is "
+"blocking the way. "
+"\n"
+"To win the game, you must satisfy the following conditions: "
+"\n"
+"- All non-black squares are lit. "
+"\n"
+"- No light is lit by another light. "
+"\n"
+"- All numbered black squares have exactly that number of lights "
+"adjacent to them (in the four squares above, below, and to the "
+"side). "
+"\n"
+"Non-numbered black squares may have any number of lights adjacent to "
+"them. "
+"\n"
+"Credit for this puzzle goes to Nikoli [9]. "
+"\n"
+"Light Up was contributed to this collection by James Harvey. "
+"\n"
+"[9] http://www.nikoli.co.jp/en/puzzles/akari.html (beware of Flash) "
+"\n"
+"\n#21.1 Light Up controls "
+"\n"
+"Left-clicking in a non-black square will toggle the presence of a "
+"light in that square. Right-clicking in a non-black square toggles a "
+"mark there to aid solving; it can be used to highlight squares that "
+"cannot be lit, for example. "
+"\n"
+"You may not place a light in a marked square, nor place a mark in a "
+"lit square. "
+"\n"
+"The game will highlight obvious errors in red. Lights lit by other "
+"lights are highlighted in this way, as are numbered squares which do "
+"not (or cannot) have the right number of lights next to them. "
+"\n"
+"Thus, the grid is solved when all non-black squares have yellow "
+"highlights and there are no red lights. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#21.2 Light Up parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. "
+"\n"
+"_%age of black squares_ "
+"\n"
+"Rough percentage of black squares in the grid. "
+"\n"
+"This is a hint rather than an instruction. If the grid generator "
+"is unable to generate a puzzle to this precise specification, it "
+"will increase the proportion of black squares until it can. "
+"\n"
+"_Symmetry_ "
+"\n"
+"Allows you to specify the required symmetry of the black squares "
+"in the grid. (This does not affect the difficulty of the puzzles "
+"noticeably.) "
+"\n"
+"_Difficulty_ "
+"\n"
+"`Easy' means that the puzzles should be soluble without "
+"backtracking or guessing, `Hard' means that some guesses will "
+"probably be necessary. "
+"\n"
+"#Chapter 22: Map "
+"\n"
+"You are given a map consisting of a number of regions. Your task is "
+"to colour each region with one of four colours, in such a way that "
+"no two regions sharing a boundary have the same colour. You are "
+"provided with some regions already coloured, sufficient to make the "
+"remainder of the solution unique. "
+"\n"
+"Only regions which share a length of border are required to be "
+"different colours. Two regions which meet at only one _point_ (i.e. "
+"are diagonally separated) may be the same colour. "
+"\n"
+"I believe this puzzle is original; I've never seen an implementation "
+"of it anywhere else. The concept of a four-colouring puzzle was "
+"suggested by Owen Dunn; credit must also go to Nikoli and to Verity "
+"Allan for inspiring the train of thought that led to me realising "
+"Owen's suggestion was a viable puzzle. Thanks also to Gareth Taylor "
+"for many detailed suggestions. "
+"\n"
+"\n#22.1 Map controls "
+"\n"
+"To colour a region, click the left mouse button on an existing "
+"region of the desired colour and drag that colour into the new "
+"region. "
+"\n"
+"(The program will always ensure the starting puzzle has at least one "
+"region of each colour, so that this is always possible!) "
+"\n"
+"If you need to clear a region, you can drag from an empty region, or "
+"from the puzzle boundary if there are no empty regions left. "
+"\n"
+"Dragging a colour using the _right_ mouse button will stipple the "
+"region in that colour, which you can use as a note to yourself that "
+"you think the region _might_ be that colour. A region can contain "
+"stipples in multiple colours at once. (This is often useful at the "
+"harder difficulty levels.) "
+"\n"
+"You can also use the cursor keys to move around the map: the colour "
+"of the cursor indicates the position of the colour you would drag "
+"(which is not obvious if you're on a region's boundary, since it "
+"depends on the direction from which you approached the boundary). "
+"Pressing the return key starts a drag of that colour, as above, "
+"which you control with the cursor keys; pressing the return key "
+"again finishes the drag. The space bar can be used similarly to "
+"create a stippled region. Double-pressing the return key (without "
+"moving the cursor) will clear the region, as a drag from an empty "
+"region does: this is useful with the cursor mode if you have filled "
+"the entire map in but need to correct the layout. "
+"\n"
+"If you press L during play, the game will toggle display of a number "
+"in each region of the map. This is useful if you want to discuss a "
+"particular puzzle instance with a friend - having an unambiguous "
+"name for each region is much easier than trying to refer to them all "
+"by names such as `the one down and right of the brown one on the top "
+"border'. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#22.2 Map parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. "
+"\n"
+"_Regions_ "
+"\n"
+"Number of regions in the generated map. "
+"\n"
+"_Difficulty_ "
+"\n"
+"In `Easy' mode, there should always be at least one region whose "
+"colour can be determined trivially. In `Normal' and `Hard' "
+"modes, you will have to use increasingly complex logic to deduce "
+"the colour of some regions. However, it will always be possible "
+"without having to guess or backtrack. "
+"\n"
+"In `Unreasonable' mode, the program will feel free to generate "
+"puzzles which are as hard as it can possibly make them: the "
+"only constraint is that they should still have a unique "
+"solution. Solving Unreasonable puzzles may require guessing and "
+"backtracking. "
+"\n"
+"#Chapter 23: Loopy "
+"\n"
+"You are given a grid of dots, marked with yellow lines to indicate "
+"which dots you are allowed to connect directly together. Your aim is "
+"to use some subset of those yellow lines to draw a single unbroken "
+"loop from dot to dot within the grid. "
+"\n"
+"Some of the spaces between the lines contain numbers. These numbers "
+"indicate how many of the lines around that space form part of the "
+"loop. The loop you draw must correctly satisfy all of these clues to "
+"be considered a correct solution. "
+"\n"
+"In the default mode, the dots are arranged in a grid of squares; "
+"however, you can also play on triangular or hexagonal grids, or even "
+"more exotic ones. "
+"\n"
+"Credit for the basic puzzle idea goes to Nikoli [10]. "
+"\n"
+"Loopy was originally contributed to this collection by Mike Pinna, "
+"and subsequently enhanced to handle various types of non-square grid "
+"by Lambros Lambrou. "
+"\n"
+"[10] http://www.nikoli.co.jp/en/puzzles/slitherlink.html (beware of "
+"Flash) "
+"\n"
+"\n#23.1 Loopy controls "
+"\n"
+"Click the left mouse button on a yellow line to turn it black, "
+"indicating that you think it is part of the loop. Click again to "
+"turn the line yellow again (meaning you aren't sure yet). "
+"\n"
+"If you are sure that a particular line segment is _not_ part of the "
+"loop, you can click the right mouse button to remove it completely. "
+"Again, clicking a second time will turn the line back to yellow. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#23.2 Loopy parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid, measured in number of regions across and down. For "
+"square grids, it's clear how this is counted; for other types of "
+"grid you may have to think a bit to see how the dimensions are "
+"measured. "
+"\n"
+"_Grid type_ "
+"\n"
+"Allows you to choose between a selection of types of tiling. "
+"Some have all the faces the same but may have multiple different "
+"types of vertex (e.g. the _Cairo_ or _Kites_ mode); others "
+"have all the vertices the same but may have different types of "
+"face (e.g. the _Great Hexagonal_). The square, triangular and "
+"honeycomb grids are fully regular, and have all their vertices "
+"_and_ faces the same; this makes them the least confusing to "
+"play. "
+"\n"
+"_Difficulty_ "
+"\n"
+"Controls the difficulty of the generated puzzle. "
+"\n"
+"#Chapter 24: Inertia "
+"\n"
+"You are a small green ball sitting in a grid full of obstacles. Your "
+"aim is to collect all the gems without running into any mines. "
+"\n"
+"You can move the ball in any orthogonal _or diagonal_ direction. "
+"Once the ball starts moving, it will continue until something stops "
+"it. A wall directly in its path will stop it (but if it is moving "
+"diagonally, it will move through a diagonal gap between two other "
+"walls without stopping). Also, some of the squares are `stops'; when "
+"the ball moves on to a stop, it will stop moving no matter what "
+"direction it was going in. Gems do _not_ stop the ball; it picks "
+"them up and keeps on going. "
+"\n"
+"Running into a mine is fatal. Even if you picked up the last gem in "
+"the same move which then hit a mine, the game will count you as dead "
+"rather than victorious. "
+"\n"
+"This game was originally implemented for Windows by Ben Olmstead "
+"[11], who was kind enough to release his source code on request so "
+"that it could be re-implemented for this collection. "
+"\n"
+"[11] http://xn13.com/ "
+"\n"
+"\n#24.1 Inertia controls "
+"\n"
+"You can move the ball in any of the eight directions using the "
+"numeric keypad. Alternatively, if you click the left mouse button "
+"on the grid, the ball will begin a move in the general direction of "
+"where you clicked. "
+"\n"
+"If you use the `Solve' function on this game, the program will "
+"compute a path through the grid which collects all the remaining "
+"gems and returns to the current position. A hint arrow will appear "
+"on the ball indicating the direction in which you should move to "
+"begin on this path. If you then move in that direction, the arrow "
+"will update to indicate the next direction on the path. You can "
+"also press Space to automatically move in the direction of the hint "
+"arrow. If you move in a different direction from the one shown "
+"by the arrow, arrows will be shown only if the puzzle is still "
+"solvable. "
+"\n"
+"All the actions described in section 2.1 are also available. In "
+"particular, if you do run into a mine and die, you can use the Undo "
+"function and resume playing from before the fatal move. The game "
+"will keep track of the number of times you have done this. "
+"\n"
+"\n#24.2 Inertia parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. "
+"\n"
+"#Chapter 25: Tents "
+"\n"
+"You have a grid of squares, some of which contain trees. Your aim is "
+"to place tents in some of the remaining squares, in such a way that "
+"the following conditions are met: "
+"\n"
+"- There are exactly as many tents as trees. "
+"\n"
+"- The tents and trees can be matched up in such a way that each "
+"tent is directly adjacent (horizontally or vertically, but not "
+"diagonally) to its own tree. However, a tent may be adjacent to "
+"other trees as well as its own. "
+"\n"
+"- No two tents are adjacent horizontally, vertically _or "
+"diagonally_. "
+"\n"
+"- The number of tents in each row, and in each column, matches the "
+"numbers given round the sides of the grid. "
+"\n"
+"This puzzle can be found in several places on the Internet, and was "
+"brought to my attention by e-mail. I don't know who I should credit "
+"for inventing it. "
+"\n"
+"\n#25.1 Tents controls "
+"\n"
+"Left-clicking in a blank square will place a tent in it. Right-\n"
+"clicking in a blank square will colour it green, indicating that you "
+"are sure it _isn't_ a tent. Clicking either button in an occupied "
+"square will clear it. "
+"\n"
+"If you _drag_ with the right button along a row or column, every "
+"blank square in the region you cover will be turned green, and no "
+"other squares will be affected. (This is useful for clearing the "
+"remainder of a row once you have placed all its tents.) "
+"\n"
+"You can also use the cursor keys to move around the grid. Pressing "
+"the return key over an empty square will place a tent, and pressing "
+"the space bar over an empty square will colour it green; either key "
+"will clear an occupied square. Holding Shift and pressing the cursor "
+"keys will colour empty squares green. Holding Control and pressing "
+"the cursor keys will colour green both empty squares and squares "
+"with tents. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#25.2 Tents parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. "
+"\n"
+"_Difficulty_ "
+"\n"
+"Controls the difficulty of the generated puzzle. More difficult "
+"puzzles require more complex deductions, but at present none "
+"of the available difficulty levels requires guesswork or "
+"backtracking. "
+"\n"
+"#Chapter 26: Bridges "
+"\n"
+"You have a set of islands distributed across the playing area. "
+"Each island contains a number. Your aim is to connect the islands "
+"together with bridges, in such a way that: "
+"\n"
+"- Bridges run horizontally or vertically. "
+"\n"
+"- The number of bridges terminating at any island is equal to the "
+"number written in that island. "
+"\n"
+"- Two bridges may run in parallel between the same two islands, "
+"but no more than two may do so. "
+"\n"
+"- No bridge crosses another bridge. "
+"\n"
+"- All the islands are connected together. "
+"\n"
+"There are some configurable alternative modes, which involve "
+"changing the parallel-bridge limit to something other than 2, and "
+"introducing the additional constraint that no sequence of bridges "
+"may form a loop from one island back to the same island. The rules "
+"stated above are the default ones. "
+"\n"
+"Credit for this puzzle goes to Nikoli [12]. "
+"\n"
+"Bridges was contributed to this collection by James Harvey. "
+"\n"
+"[12] http://www.nikoli.co.jp/en/puzzles/hashiwokakero.html (beware "
+"of Flash) "
+"\n"
+"\n#26.1 Bridges controls "
+"\n"
+"To place a bridge between two islands, click the mouse down on one "
+"island and drag it towards the other. You do not need to drag all "
+"the way to the other island; you only need to move the mouse far "
+"enough for the intended bridge direction to be unambiguous. (So you "
+"can keep the mouse near the starting island and conveniently throw "
+"bridges out from it in many directions.) "
+"\n"
+"Doing this again when a bridge is already present will add another "
+"parallel bridge. If there are already as many bridges between the "
+"two islands as permitted by the current game rules (i.e. two by "
+"default), the same dragging action will remove all of them. "
+"\n"
+"If you want to remind yourself that two islands definitely _do not_ "
+"have a bridge between them, you can right-drag between them in the "
+"same way to draw a `non-bridge' marker. "
+"\n"
+"If you think you have finished with an island (i.e. you have placed "
+"all its bridges and are confident that they are in the right "
+"places), you can mark the island as finished by left-clicking on it. "
+"This will highlight it and all the bridges connected to it, and you "
+"will be prevented from accidentally modifying any of those bridges "
+"in future. Left-clicking again on a highlighted island will unmark "
+"it and restore your ability to modify it. "
+"\n"
+"You can also use the cursor keys to move around the grid: if "
+"possible the cursor will always move orthogonally, otherwise it "
+"will move towards the nearest island to the indicated direction. "
+"Holding Control and pressing a cursor key will lay a bridge in that "
+"direction (if available); Shift and a cursor key will lay a `non-\n"
+"bridge' marker. Pressing the return key followed by a cursor key "
+"will also lay a bridge in that direction. "
+"\n"
+"You can mark an island as finished by pressing the space bar or by "
+"pressing the return key twice. "
+"\n"
+"By pressing a number key, you can jump to the nearest island with "
+"that number. Letters `a', ..., `f' count as 10, ..., 15 and `0' as "
+"16. "
+"\n"
+"Violations of the puzzle rules will be marked in red: "
+"\n"
+"- An island with too many bridges will be highlighted in red. "
+"\n"
+"- An island with too few bridges will be highlighted in red if it "
+"is definitely an error (as opposed to merely not being finished "
+"yet): if adding enough bridges would involve having to cross "
+"another bridge or remove a non-bridge marker, or if the island "
+"has been highlighted as complete. "
+"\n"
+"- A group of islands and bridges may be highlighted in red if it "
+"is a closed subset of the puzzle with no way to connect it to "
+"the rest of the islands. For example, if you directly connect "
+"two 1s together with a bridge and they are not the only two "
+"islands on the grid, they will light up red to indicate that "
+"such a group cannot be contained in any valid solution. "
+"\n"
+"- If you have selected the (non-default) option to disallow loops "
+"in the solution, a group of bridges which forms a loop will be "
+"highlighted. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#26.2 Bridges parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. "
+"\n"
+"_Difficulty_ "
+"\n"
+"Difficulty level of puzzle. "
+"\n"
+"_Allow loops_ "
+"\n"
+"This is set by default. If cleared, puzzles will be generated in "
+"such a way that they are always soluble without creating a loop, "
+"and solutions which do involve a loop will be disallowed. "
+"\n"
+"_Max. bridges per direction_ "
+"\n"
+"Maximum number of bridges in any particular direction. The "
+"default is 2, but you can change it to 1, 3 or 4. In general, "
+"fewer is easier. "
+"\n"
+"_%age of island squares_ "
+"\n"
+"Gives a rough percentage of islands the generator will try and "
+"lay before finishing the puzzle. Certain layouts will not manage "
+"to lay enough islands; this is an upper bound. "
+"\n"
+"_Expansion factor (%age)_ "
+"\n"
+"The grid generator works by picking an existing island at random "
+"(after first creating an initial island somewhere). It then "
+"decides on a direction (at random), and then works out how far "
+"it could extend before creating another island. This parameter "
+"determines how likely it is to extend as far as it can, rather "
+"than choosing somewhere closer. "
+"\n"
+"High expansion factors usually mean easier puzzles with fewer "
+"possible islands; low expansion factors can create lots of "
+"tightly-packed islands. "
+"\n"
+"#Chapter 27: Unequal "
+"\n"
+"You have a square grid; each square may contain a digit from 1 to "
+"the size of the grid, and some squares have clue signs between them. "
+"Your aim is to fully populate the grid with numbers such that: "
+"\n"
+"- Each row contains only one occurrence of each digit "
+"\n"
+"- Each column contains only one occurrence of each digit "
+"\n"
+"- All the clue signs are satisfied. "
+"\n"
+"There are two modes for this game, `Unequal' and `Adjacent'. "
+"\n"
+"In `Unequal' mode, the clue signs are greater-than symbols "
+"indicating one square's value is greater than its neighbour's. In "
+"this mode not all clues may be visible, particularly at higher "
+"difficulty levels. "
+"\n"
+"In `Adjacent' mode, the clue signs are bars indicating one square's "
+"value is numerically adjacent (i.e. one higher or one lower) than "
+"its neighbour. In this mode all clues are always visible: absence of "
+"a bar thus means that a square's value is definitely not numerically "
+"adjacent to that neighbour's. "
+"\n"
+"In `Trivial' difficulty level (available via the `Custom' game type "
+"selector), there are no greater-than signs in `Unequal' mode; the "
+"puzzle is to solve the Latin square only. "
+"\n"
+"At the time of writing, the `Unequal' mode of this puzzle is "
+"appearing in the Guardian weekly under the name `Futoshiki'. "
+"\n"
+"Unequal was contributed to this collection by James Harvey. "
+"\n"
+"\n#27.1 Unequal controls "
+"\n"
+"Unequal shares much of its control system with Solo. "
+"\n"
+"To play Unequal, simply click the mouse in any empty square and then "
+"type a digit or letter on the keyboard to fill that square. If you "
+"make a mistake, click the mouse in the incorrect square and press "
+"Space to clear it again (or use the Undo feature). "
+"\n"
+"If you _right_-click in a square and then type a number, that "
+"number will be entered in the square as a `pencil mark'. You can "
+"have pencil marks for multiple numbers in the same square. Squares "
+"containing filled-in numbers cannot also contain pencil marks. "
+"\n"
+"The game pays no attention to pencil marks, so exactly what you "
+"use them for is up to you: you can use them as reminders that a "
+"particular square needs to be re-examined once you know more about "
+"a particular number, or you can use them as lists of the possible "
+"numbers in a given square, or anything else you feel like. "
+"\n"
+"To erase a single pencil mark, right-click in the square and type "
+"the same number again. "
+"\n"
+"All pencil marks in a square are erased when you left-click and type "
+"a number, or when you left-click and press space. Right-clicking and "
+"pressing space will also erase pencil marks. "
+"\n"
+"As for Solo, the cursor keys can be used in conjunction with the "
+"digit keys to set numbers or pencil marks. You can also use the `M' "
+"key to auto-fill every numeric hint, ready for removal as required, "
+"or the `H' key to do the same but also to remove all obvious hints. "
+"\n"
+"Alternatively, use the cursor keys to move the mark around the grid. "
+"Pressing the return key toggles the mark (from a normal mark to a "
+"pencil mark), and typing a number in is entered in the square in the "
+"appropriate way; typing in a 0 or using the space bar will clear a "
+"filled square. "
+"\n"
+"Left-clicking a clue will mark it as done (grey it out), or unmark "
+"it if it is already marked. Holding Control or Shift and pressing "
+"an arrow key likewise marks any clue adjacent to the cursor in the "
+"given direction. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#27.2 Unequal parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Mode_ "
+"\n"
+"Mode of the puzzle (`Unequal' or `Adjacent') "
+"\n"
+"_Size (s*s)_ "
+"\n"
+"Size of grid. "
+"\n"
+"_Difficulty_ "
+"\n"
+"Controls the difficulty of the generated puzzle. At Trivial "
+"level, there are no greater-than signs; the puzzle is to solve "
+"the Latin square only. At Recursive level (only available via "
+"the `Custom' game type selector) backtracking will be required, "
+"but the solution should still be unique. The levels in between "
+"require increasingly complex reasoning to avoid having to "
+"backtrack. "
+"\n"
+"#Chapter 28: Galaxies "
+"\n"
+"You have a rectangular grid containing a number of dots. Your aim is "
+"to draw edges along the grid lines which divide the rectangle into "
+"regions in such a way that every region is 180-degree rotationally "
+"symmetric, and contains exactly one dot which is located at its "
+"centre of symmetry. "
+"\n"
+"This puzzle was invented by Nikoli [13], under the name `Tentai "
+"Show'; its name is commonly translated into English as `Spiral "
+"Galaxies'. "
+"\n"
+"Galaxies was contributed to this collection by James Harvey. "
+"\n"
+"[13] http://www.nikoli.co.jp/en/puzzles/astronomical_show.html "
+"\n"
+"\n#28.1 Galaxies controls "
+"\n"
+"Left-click on any grid line to draw an edge if there isn't one "
+"already, or to remove one if there is. When you create a valid "
+"region (one which is closed, contains exactly one dot, is 180-degree "
+"symmetric about that dot, and contains no extraneous edges inside "
+"it) it will be highlighted automatically; so your aim is to have the "
+"whole grid highlighted in that way. "
+"\n"
+"During solving, you might know that a particular grid square belongs "
+"to a specific dot, but not be sure of where the edges go and which "
+"other squares are connected to the dot. In order to mark this so you "
+"don't forget, you can right-click on the dot and drag, which will "
+"create an arrow marker pointing at the dot. Drop that in a square of "
+"your choice and it will remind you which dot it's associated with. "
+"You can also right-click on existing arrows to pick them up and move "
+"them, or destroy them by dropping them off the edge of the grid. "
+"(Also, if you're not sure which dot an arrow is pointing at, you can "
+"pick it up and move it around to make it clearer. It will swivel "
+"constantly as you drag it, to stay pointed at its parent dot.) "
+"\n"
+"You can also use the cursor keys to move around the grid squares and "
+"lines. Pressing the return key when over a grid line will draw or "
+"clear its edge, as above. Pressing the return key when over a dot "
+"will pick up an arrow, to be dropped the next time the return key "
+"is pressed; this can also be used to move existing arrows around, "
+"removing them by dropping them on a dot or another arrow. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#28.2 Galaxies parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. "
+"\n"
+"_Difficulty_ "
+"\n"
+"Controls the difficulty of the generated puzzle. More difficult "
+"puzzles require more complex deductions, and the `Unreasonable' "
+"difficulty level may require backtracking. "
+"\n"
+"#Chapter 29: Filling "
+"\n"
+"You have a grid of squares, some of which contain digits, and the "
+"rest of which are empty. Your job is to fill in digits in the empty "
+"squares, in such a way that each connected region of squares all "
+"containing the same digit has an area equal to that digit. "
+"\n"
+"(`Connected region', for the purposes of this game, does not count "
+"diagonally separated squares as adjacent.) "
+"\n"
+"For example, it follows that no square can contain a zero, and that "
+"two adjacent squares can not both contain a one. No region has an "
+"area greater than 9 (because then its area would not be a single "
+"digit). "
+"\n"
+"Credit for this puzzle goes to Nikoli [14]. "
+"\n"
+"Filling was contributed to this collection by Jonas Koelker. "
+"\n"
+"[14] http://www.nikoli.co.jp/en/puzzles/fillomino.html "
+"\n"
+"\n#29.1 Filling controls "
+"\n"
+"To play Filling, simply click the mouse in any empty square and "
+"then type a digit on the keyboard to fill that square. By dragging "
+"the mouse, you can select multiple squares to fill with a single "
+"keypress. If you make a mistake, click the mouse in the incorrect "
+"square and press 0, Space, Backspace or Enter to clear it again (or "
+"use the Undo feature). "
+"\n"
+"You can also move around the grid with the cursor keys; typing a "
+"digit will fill the square containing the cursor with that number; "
+"typing 0 will clear it. You can also select multiple squares for "
+"numbering or clearing with the return and arrow keys, before typing "
+"a digit to fill or clear the highlighted squares (as above). The "
+"space bar adds and removes single squares to and from the selection. "
+"Backspace and escape remove all squares from the selection. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#29.2 Filling parameters "
+"\n"
+"Filling allows you to configure the number of rows and columns of "
+"the grid, through the `Type' menu. "
+"\n"
+"#Chapter 30: Keen "
+"\n"
+"You have a square grid; each square may contain a digit from 1 to "
+"the size of the grid. The grid is divided into blocks of varying "
+"shape and size, with arithmetic clues written in them. Your aim is "
+"to fully populate the grid with digits such that: "
+"\n"
+"- Each row contains only one occurrence of each digit "
+"\n"
+"- Each column contains only one occurrence of each digit "
+"\n"
+"- The digits in each block can be combined to form the number "
+"stated in the clue, using the arithmetic operation given in the "
+"clue. That is: "
+"\n"
+"- An addition clue means that the sum of the digits in the "
+"block must be the given number. For example, `15+' means the "
+"contents of the block adds up to fifteen. "
+"\n"
+"- A multiplication clue (e.g. `60*'), similarly, means that "
+"the product of the digits in the block must be the given "
+"number. "
+"\n"
+"- A subtraction clue will always be written in a block of "
+"size two, and it means that one of the digits in the block "
+"is greater than the other by the given amount. For example, "
+"`2-' means that one of the digits in the block is 2 more "
+"than the other, or equivalently that one digit minus the "
+"other one is 2. The two digits could be either way round, "
+"though. "
+"\n"
+"- A division clue (e.g. `3/'), similarly, is always in a block "
+"of size two and means that one digit divided by the other is "
+"equal to the given amount. "
+"\n"
+"Note that a block may contain the same digit more than once "
+"(provided the identical ones are not in the same row and "
+"column). This rule is precisely the opposite of the rule in "
+"Solo's `Killer' mode (see chapter 11). "
+"\n"
+"This puzzle appears in the Times under the name `KenKen'. "
+"\n"
+"\n#30.1 Keen controls "
+"\n"
+"Keen shares much of its control system with Solo (and Unequal). "
+"\n"
+"To play Keen, simply click the mouse in any empty square and then "
+"type a digit on the keyboard to fill that square. If you make a "
+"mistake, click the mouse in the incorrect square and press Space to "
+"clear it again (or use the Undo feature). "
+"\n"
+"If you _right_-click in a square and then type a number, that "
+"number will be entered in the square as a `pencil mark'. You can "
+"have pencil marks for multiple numbers in the same square. Squares "
+"containing filled-in numbers cannot also contain pencil marks. "
+"\n"
+"The game pays no attention to pencil marks, so exactly what you "
+"use them for is up to you: you can use them as reminders that a "
+"particular square needs to be re-examined once you know more about "
+"a particular number, or you can use them as lists of the possible "
+"numbers in a given square, or anything else you feel like. "
+"\n"
+"To erase a single pencil mark, right-click in the square and type "
+"the same number again. "
+"\n"
+"All pencil marks in a square are erased when you left-click and type "
+"a number, or when you left-click and press space. Right-clicking and "
+"pressing space will also erase pencil marks. "
+"\n"
+"As for Solo, the cursor keys can be used in conjunction with the "
+"digit keys to set numbers or pencil marks. Use the cursor keys to "
+"move a highlight around the grid, and type a digit to enter it in "
+"the highlighted square. Pressing return toggles the highlight into a "
+"mode in which you can enter or remove pencil marks. "
+"\n"
+"Pressing M will fill in a full set of pencil marks in every square "
+"that does not have a main digit in it. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#30.2 Keen parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Grid size_ "
+"\n"
+"Specifies the size of the grid. Lower limit is 3; upper limit is "
+"9 (because the user interface would become more difficult with "
+"`digits' bigger than 9!). "
+"\n"
+"_Difficulty_ "
+"\n"
+"Controls the difficulty of the generated puzzle. At Unreasonable "
+"level, some backtracking will be required, but the solution "
+"should still be unique. The remaining levels require "
+"increasingly complex reasoning to avoid having to backtrack. "
+"\n"
+"_Multiplication only_ "
+"\n"
+"If this is enabled, all boxes will be multiplication boxes. With "
+"this rule, the puzzle is known as `Inshi No Heya'. "
+"\n"
+"#Chapter 31: Towers "
+"\n"
+"You have a square grid. On each square of the grid you can build "
+"a tower, with its height ranging from 1 to the size of the grid. "
+"Around the edge of the grid are some numeric clues. "
+"\n"
+"Your task is to build a tower on every square, in such a way that: "
+"\n"
+"- Each row contains every possible height of tower once "
+"\n"
+"- Each column contains every possible height of tower once "
+"\n"
+"- Each numeric clue describes the number of towers that can be "
+"seen if you look into the square from that direction, assuming "
+"that shorter towers are hidden behind taller ones. For example, "
+"in a 5x5 grid, a clue marked `5' indicates that the five tower "
+"heights must appear in increasing order (otherwise you would "
+"not be able to see all five towers), whereas a clue marked `1' "
+"indicates that the tallest tower (the one marked 5) must come "
+"first. "
+"\n"
+"In harder or larger puzzles, some towers will be specified for you "
+"as well as the clues round the edge, and some edge clues may be "
+"missing. "
+"\n"
+"This puzzle appears on the web under various names, particularly "
+"`Skyscrapers', but I don't know who first invented it. "
+"\n"
+"\n#31.1 Towers controls "
+"\n"
+"Towers shares much of its control system with Solo, Unequal and "
+"Keen. "
+"\n"
+"To play Towers, simply click the mouse in any empty square and then "
+"type a digit on the keyboard to fill that square with a tower of "
+"the given height. If you make a mistake, click the mouse in the "
+"incorrect square and press Space to clear it again (or use the Undo "
+"feature). "
+"\n"
+"If you _right_-click in a square and then type a number, that "
+"number will be entered in the square as a `pencil mark'. You can "
+"have pencil marks for multiple numbers in the same square. A square "
+"containing a tower cannot also contain pencil marks. "
+"\n"
+"The game pays no attention to pencil marks, so exactly what you "
+"use them for is up to you: you can use them as reminders that a "
+"particular square needs to be re-examined once you know more about "
+"a particular number, or you can use them as lists of the possible "
+"numbers in a given square, or anything else you feel like. "
+"\n"
+"To erase a single pencil mark, right-click in the square and type "
+"the same number again. "
+"\n"
+"All pencil marks in a square are erased when you left-click and type "
+"a number, or when you left-click and press space. Right-clicking and "
+"pressing space will also erase pencil marks. "
+"\n"
+"As for Solo, the cursor keys can be used in conjunction with the "
+"digit keys to set numbers or pencil marks. Use the cursor keys to "
+"move a highlight around the grid, and type a digit to enter it in "
+"the highlighted square. Pressing return toggles the highlight into a "
+"mode in which you can enter or remove pencil marks. "
+"\n"
+"Pressing M will fill in a full set of pencil marks in every square "
+"that does not have a main digit in it. "
+"\n"
+"Left-clicking a clue will mark it as done (grey it out), or unmark "
+"it if it is already marked. Holding Control or Shift and pressing an "
+"arrow key likewise marks any clue in the given direction. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#31.2 Towers parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Grid size_ "
+"\n"
+"Specifies the size of the grid. Lower limit is 3; upper limit is "
+"9 (because the user interface would become more difficult with "
+"`digits' bigger than 9!). "
+"\n"
+"_Difficulty_ "
+"\n"
+"Controls the difficulty of the generated puzzle. At Unreasonable "
+"level, some backtracking will be required, but the solution "
+"should still be unique. The remaining levels require "
+"increasingly complex reasoning to avoid having to backtrack. "
+"\n"
+"#Chapter 32: Singles "
+"\n"
+"You have a grid of white squares, all of which contain numbers. Your "
+"task is to colour some of the squares black (removing the number) so "
+"as to satisfy all of the following conditions: "
+"\n"
+"- No number occurs more than once in any row or column. "
+"\n"
+"- No black square is horizontally or vertically adjacent to any "
+"other black square. "
+"\n"
+"- The remaining white squares must all form one contiguous region "
+"(connected by edges, not just touching at corners). "
+"\n"
+"Credit for this puzzle goes to Nikoli [15] who call it Hitori. "
+"\n"
+"Singles was contributed to this collection by James Harvey. "
+"\n"
+"[15] http://www.nikoli.com/en/puzzles/hitori.html (beware of Flash) "
+"\n"
+"\n#32.1 Singles controls "
+"\n"
+"Left-clicking on an empty square will colour it black; left-clicking "
+"again will restore the number. Right-clicking will add a circle "
+"(useful for indicating that a cell is definitely not black). "
+"\n"
+"You can also use the cursor keys to move around the grid. Pressing "
+"the return or space keys will turn a square black or add a circle "
+"respectively, and pressing the key again will restore the number or "
+"remove the circle. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#32.2 Singles parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. "
+"\n"
+"_Difficulty_ "
+"\n"
+"Controls the difficulty of the generated puzzle. "
+"\n"
+"#Chapter 33: Magnets "
+"\n"
+"A rectangular grid has been filled with a mixture of magnets (that "
+"is, dominoes with one positive end and one negative end) and blank "
+"dominoes (that is, dominoes with two neutral poles). These dominoes "
+"are initially only seen in silhouette. Around the grid are placed a "
+"number of clues indicating the number of positive and negative poles "
+"contained in certain columns and rows. "
+"\n"
+"Your aim is to correctly place the magnets and blank dominoes such "
+"that all the clues are satisfied, with the additional constraint "
+"that no two similar magnetic poles may be orthogonally adjacent "
+"(since they repel). Neutral poles do not repel, and can be adjacent "
+"to any other pole. "
+"\n"
+"Credit for this puzzle goes to Janko [16]. "
+"\n"
+"Magnets was contributed to this collection by James Harvey. "
+"\n"
+"[16] http://www.janko.at/Raetsel/Magnete/index.htm "
+"\n"
+"\n#33.1 Magnets controls "
+"\n"
+"Left-clicking on an empty square places a magnet at that position "
+"with the positive pole on the square and the negative pole on the "
+"other half of the magnet; left-clicking again reverses the polarity, "
+"and a third click removes the magnet. "
+"\n"
+"Right-clicking on an empty square places a blank domino there. "
+"Right-clicking again places two question marks on the domino, "
+"signifying `this cannot be blank' (which can be useful to note "
+"deductions while solving), and right-clicking again empties the "
+"domino. "
+"\n"
+"Left-clicking a clue will mark it as done (grey it out), or unmark "
+"it if it is already marked. "
+"\n"
+"You can also use the cursor keys to move a cursor around the grid. "
+"Pressing the return key will lay a domino with a positive pole at "
+"that position; pressing again reverses the polarity and then removes "
+"the domino, as with left-clicking. Using the space bar allows "
+"placement of blank dominoes and cannot-be-blank hints, as for right-\n"
+"clicking. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#33.2 Magnets parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. There will be half _Width_ x _Height_ "
+"dominoes in the grid: if this number is odd then one square will "
+"be blank. "
+"\n"
+"(Grids with at least one odd dimension tend to be easier to "
+"solve.) "
+"\n"
+"_Difficulty_ "
+"\n"
+"Controls the difficulty of the generated puzzle. At Tricky "
+"level, you are required to make more deductions about empty "
+"dominoes and row/column counts. "
+"\n"
+"_Strip clues_ "
+"\n"
+"If true, some of the clues around the grid are removed at "
+"generation time, making the puzzle more difficult. "
+"\n"
+"#Chapter 34: Signpost "
+"\n"
+"You have a grid of squares; each square (except the last one) "
+"contains an arrow, and some squares also contain numbers. Your job "
+"is to connect the squares to form a continuous list of numbers "
+"starting at 1 and linked in the direction of the arrows - so the "
+"arrow inside the square with the number 1 will point to the square "
+"containing the number 2, which will point to the square containing "
+"the number 3, etc. Each square can be any distance away from the "
+"previous one, as long as it is somewhere in the direction of the "
+"arrow. "
+"\n"
+"By convention the first and last numbers are shown; one or more "
+"interim numbers may also appear at the beginning. "
+"\n"
+"Credit for this puzzle goes to Janko [17], who call it `Pfeilpfad' "
+"(`arrow path'). "
+"\n"
+"Signpost was contributed to this collection by James Harvey. "
+"\n"
+"[17] http://janko.at/Raetsel/Pfeilpfad/index.htm "
+"\n"
+"\n#34.1 Signpost controls "
+"\n"
+"To play Signpost, you connect squares together by dragging from "
+"one square to another, indicating that they are adjacent in the "
+"sequence. Drag with the left button from a square to its successor, "
+"or with the right button from a square to its predecessor. "
+"\n"
+"If you connect together two squares in this way and one of them has "
+"a number in it, the appropriate number will appear in the other "
+"square. If you connect two non-numbered squares, they will be "
+"assigned temporary algebraic labels: on the first occasion, they "
+"will be labelled `a' and `a+1', and then `b' and `b+1', and so on. "
+"Connecting more squares on to the ends of such a chain will cause "
+"them all to be labelled with the same letter. "
+"\n"
+"When you left-click or right-click in a square, the legal squares to "
+"connect it to will be shown. "
+"\n"
+"The arrow in each square starts off black, and goes grey once you "
+"connect the square to its successor. Also, each square which needs "
+"a predecessor has a small dot in the bottom left corner, which "
+"vanishes once you link a square to it. So your aim is always to "
+"connect a square with a black arrow to a square with a dot. "
+"\n"
+"To remove any links for a particular square (both incoming and "
+"outgoing), left-drag it off the grid. To remove a whole chain, "
+"right-drag any square in the chain off the grid. "
+"\n"
+"You can also use the cursor keys to move around the grid squares "
+"and lines. Pressing the return key when over a square starts a link "
+"operation, and pressing the return key again over a square will "
+"finish the link, if allowable. Pressing the space bar over a square "
+"will show the other squares pointing to it, and allow you to form a "
+"backward link, and pressing the space bar again cancels this. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#34.2 Signpost parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. "
+"\n"
+"_Force start/end to corners_ "
+"\n"
+"If true, the start and end squares are always placed in opposite "
+"corners (the start at the top left, and the end at the bottom "
+"right). If false the start and end squares are placed randomly "
+"(although always both shown). "
+"\n"
+"#Chapter 35: Range "
+"\n"
+"You have a grid of squares; some squares contain numbers. Your job "
+"is to colour some of the squares black, such that several criteria "
+"are satisfied: "
+"\n"
+"- no square with a number is coloured black. "
+"\n"
+"- no two black squares are adjacent (horizontally or vertically). "
+"\n"
+"- for any two white squares, there is a path between them using "
+"only white squares. "
+"\n"
+"- for each square with a number, that number denotes the total "
+"number of white squares reachable from that square going in a "
+"straight line in any horizontal or vertical direction until "
+"hitting a wall or a black square; the square with the number is "
+"included in the total (once). "
+"\n"
+"For instance, a square containing the number one must have four "
+"black squares as its neighbours by the last criterion; but then it's "
+"impossible for it to be connected to any outside white square, which "
+"violates the second to last criterion. So no square will contain the "
+"number one. "
+"\n"
+"Credit for this puzzle goes to Nikoli, who have variously called it "
+"`Kurodoko', `Kuromasu' or `Where is Black Cells'. [18]. "
+"\n"
+"Range was contributed to this collection by Jonas Koelker. "
+"\n"
+"[18] http://www.nikoli.co.jp/en/puzzles/where_is_black_cells.html "
+"\n"
+"\n#35.1 Range controls "
+"\n"
+"Click with the left button to paint a square black, or with the "
+"right button to mark a square with a dot to indicate that you are "
+"sure it should _not_ be painted black. Repeated clicking with either "
+"button will cycle the square through the three possible states "
+"(filled, dotted or empty) in opposite directions. "
+"\n"
+"You can also use the cursor keys to move around the grid squares. "
+"Pressing Return does the same as clicking with the left button, "
+"while pressing Space does the same as a right button click. Moving "
+"with the cursor keys while holding Shift will place dots in all "
+"squares that are moved through. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#35.2 Range parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. "
+"\n"
+"#Chapter 36: Pearl "
+"\n"
+"You have a grid of squares. Your job is to draw lines between the "
+"centres of horizontally or vertically adjacent squares, so that the "
+"lines form a single closed loop. In the resulting grid, some of the "
+"squares that the loop passes through will contain corners, and some "
+"will be straight horizontal or vertical lines. (And some squares can "
+"be completely empty - the loop doesn't have to pass through every "
+"square.) "
+"\n"
+"Some of the squares contain black and white circles, which are clues "
+"that the loop must satisfy. "
+"\n"
+"A black circle in a square indicates that that square is a corner, "
+"but neither of the squares adjacent to it in the loop is also a "
+"corner. "
+"\n"
+"A white circle indicates that the square is a straight edge, but _at "
+"least one_ of the squares adjacent to it in the loop is a corner. "
+"\n"
+"(In both cases, the clue only constrains the two squares adjacent "
+"_in the loop_, that is, the squares that the loop passes into after "
+"leaving the clue square. The squares that are only adjacent _in the "
+"grid_ are not constrained.) "
+"\n"
+"Credit for this puzzle goes to Nikoli, who call it `Masyu'. [19] "
+"\n"
+"Thanks to James Harvey for assistance with the implementation. "
+"\n"
+"[19] http://www.nikoli.co.jp/en/puzzles/masyu.html (beware of Flash) "
+"\n"
+"\n#36.1 Pearl controls "
+"\n"
+"Click with the left button on a grid edge to draw a segment of the "
+"loop through that edge, or to remove a segment once it is drawn. "
+"\n"
+"Drag with the left button through a series of squares to draw more "
+"than one segment of the loop in one go. Alternatively, drag over an "
+"existing part of the loop to undraw it, or to undraw part of it and "
+"then go in a different direction. "
+"\n"
+"Click with the right button on a grid edge to mark it with a cross, "
+"indicating that you are sure the loop does not go through that edge. "
+"(For instance, if you have decided which of the squares adjacent "
+"to a white clue has to be a corner, but don't yet know which way "
+"the corner turns, you might mark the one way it _can't_ go with a "
+"cross.) "
+"\n"
+"Alternatively, use the cursor keys to move the cursor. Use the Enter "
+"key to begin and end keyboard `drag' operations. Use the Space, "
+"Escape or Backspace keys to cancel the drag. Or, hold Control while "
+"dragging with the cursor keys to toggle segments as you move between "
+"squares. "
+"\n"
+"Pressing Control-Shift-arrowkey or Shift-arrowkey simulates a left "
+"or right click, respectively, on the edge in the direction of the "
+"key. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#36.2 Pearl parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"#Chapter 37: Undead "
+"\n"
+"You are given a grid of squares, some of which contain diagonal "
+"mirrors. Every square which is not a mirror must be filled with one "
+"of three types of undead monster: a ghost, a vampire, or a zombie. "
+"\n"
+"Vampires can be seen directly, but are invisible when reflected in "
+"mirrors. Ghosts are the opposite way round: they can be seen in "
+"mirrors, but are invisible when looked at directly. Zombies are "
+"visible by any means. "
+"\n"
+"You are also told the total number of each type of monster in the "
+"grid. Also around the edge of the grid are written numbers, which "
+"indicate how many monsters can be seen if you look into the grid "
+"along a row or column starting from that position. (The diagonal "
+"mirrors are reflective on both sides. If your reflected line of "
+"sight crosses the same monster more than once, the number will count "
+"it each time it is visible, not just once.) "
+"\n"
+"This puzzle type was invented by David Millar, under the name "
+"`Haunted Mirror Maze'. See [20] for more details. "
+"\n"
+"Undead was contributed to this collection by Steffen Bauer. "
+"\n"
+"[20] http://www.janko.at/Raetsel/Spukschloss/index.htm "
+"\n"
+"\n#37.1 Undead controls "
+"\n"
+"Undead has a similar control system to Solo, Unequal and Keen. "
+"\n"
+"To play Undead, click the mouse in any empty square and then type "
+"a letter on the keyboard indicating the type of monster: `G' for "
+"a ghost, `V' for a vampire, or `Z' for a zombie. If you make a "
+"mistake, click the mouse in the incorrect square and press Space to "
+"clear it again (or use the Undo feature). "
+"\n"
+"If you _right_-click in a square and then type a letter, the "
+"corresponding monster will be shown in reduced size in that square, "
+"as a `pencil mark'. You can have pencil marks for multiple monsters "
+"in the same square. A square containing a full-size monster cannot "
+"also contain pencil marks. "
+"\n"
+"The game pays no attention to pencil marks, so exactly what you "
+"use them for is up to you: you can use them as reminders that a "
+"particular square needs to be re-examined once you know more about "
+"a particular monster, or you can use them as lists of the possible "
+"monster in a given square, or anything else you feel like. "
+"\n"
+"To erase a single pencil mark, right-click in the square and type "
+"the same letter again. "
+"\n"
+"All pencil marks in a square are erased when you left-click and type "
+"a monster letter, or when you left-click and press Space. Right-\n"
+"clicking and pressing space will also erase pencil marks. "
+"\n"
+"As for Solo, the cursor keys can be used in conjunction with the "
+"letter keys to place monsters or pencil marks. Use the cursor keys "
+"to move a highlight around the grid, and type a monster letter to "
+"enter it in the highlighted square. Pressing return toggles the "
+"highlight into a mode in which you can enter or remove pencil marks. "
+"\n"
+"If you prefer plain letters of the alphabet to cute monster "
+"pictures, you can press `A' to toggle between showing the monsters "
+"as monsters or showing them as letters. "
+"\n"
+"Left-clicking a clue will mark it as done (grey it out), or unmark "
+"it if it is already marked. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#37.2 Undead parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. "
+"\n"
+"_Difficulty_ "
+"\n"
+"Controls the difficulty of the generated puzzle. "
+"\n"
+"#Chapter 38: Unruly "
+"\n"
+"You are given a grid of squares, which you must colour either black "
+"or white. Some squares are provided as clues; the rest are left for "
+"you to fill in. Each row and column must contain the same number "
+"of black and white squares, and no row or column may contain three "
+"consecutive squares of the same colour. "
+"\n"
+"This puzzle type was invented by Adolfo Zanellati, under the name "
+"`Tohu wa Vohu'. See [21] for more details. "
+"\n"
+"Unruly was contributed to this collection by Lennard Sprong. "
+"\n"
+"[21] http://www.janko.at/Raetsel/Tohu-Wa-Vohu/index.htm "
+"\n"
+"\n#38.1 Unruly controls "
+"\n"
+"To play Unruly, click the mouse in a square to change its colour. "
+"Left-clicking an empty square will turn it black, and right-clicking "
+"will turn it white. Keep clicking the same button to cycle through "
+"the three possible states for the square. If you middle-click in a "
+"square it will be reset to empty. "
+"\n"
+"You can also use the cursor keys to move around the grid. Pressing "
+"the return or space keys will turn an empty square black or white "
+"respectively (and then cycle the colours in the same way as the "
+"mouse buttons), and pressing Backspace will reset a square to empty. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#38.2 Unruly parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. (Note that the rules of the game "
+"require both the width and height to be even numbers.) "
+"\n"
+"_Difficulty_ "
+"\n"
+"Controls the difficulty of the generated puzzle. "
+"\n"
+"_Unique rows and columns_ "
+"\n"
+"If enabled, no two rows are permitted to have exactly the same "
+"pattern, and likewise columns. (A row and a column can match, "
+"though.) "
+"\n"
+"#Chapter 39: Flood "
+"\n"
+"You are given a grid of squares, coloured at random in multiple "
+"colours. In each move, you can flood-fill the top left square in a "
+"colour of your choice (i.e. every square reachable from the starting "
+"square by an orthogonally connected path of squares all the same "
+"colour will be filled in the new colour). As you do this, more and "
+"more of the grid becomes connected to the starting square. "
+"\n"
+"Your aim is to make the whole grid the same colour, in as few moves "
+"as possible. The game will set a limit on the number of moves, based "
+"on running its own internal solver. You win if you can make the "
+"whole grid the same colour in that many moves or fewer. "
+"\n"
+"I saw this game (with a fixed grid size, fixed number of colours, "
+"and fixed move limit) at http://floodit.appspot.com (no longer "
+"accessible). "
+"\n"
+"\n#39.1 Flood controls "
+"\n"
+"To play Flood, click the mouse in a square. The top left corner and "
+"everything connected to it will be flood-filled with the colour of "
+"the square you clicked. Clicking a square the same colour as the top "
+"left corner has no effect, and therefore does not count as a move. "
+"\n"
+"You can also use the cursor keys to move a cursor (outline black "
+"square) around the grid. Pressing the return key will fill the top "
+"left corner in the colour of the square under the cursor. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#39.2 Flood parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of the grid, in squares. "
+"\n"
+"_Colours_ "
+"\n"
+"Number of colours used to fill the grid. Must be at least 3\n"
+"(with two colours there would only be one legal move at any "
+"stage, hence no choice to make at all), and at most 10. "
+"\n"
+"_Extra moves permitted_ "
+"\n"
+"Controls the difficulty of the puzzle, by increasing the move "
+"limit. In each new grid, Flood will run an internal solver to "
+"generate its own solution, and then the value in this field "
+"will be added to the length of Flood's solution to generate the "
+"game's move limit. So a value of 0 requires you to be just as "
+"efficient as Flood's automated solver, and a larger value makes "
+"it easier. "
+"\n"
+"(Note that Flood's internal solver will not necessarily find the "
+"shortest possible solution, though I believe it's pretty close. "
+"For a real challenge, set this value to 0 and then try to solve "
+"a grid in _strictly fewer_ moves than the limit you're given!) "
+"\n"
+"#Chapter 40: Tracks "
+"\n"
+"You are given a grid of squares, some of which are filled with train "
+"tracks. You need to complete the track from A to B so that the "
+"rows and columns contain the same number of track segments as are "
+"indicated in the clues to the top and right of the grid. "
+"\n"
+"There are only straight and 90 degree curved rails, and the track "
+"may not cross itself. "
+"\n"
+"Tracks was contributed to this collection by James Harvey. "
+"\n"
+"\n#40.1 Tracks controls "
+"\n"
+"Left-clicking on an edge between two squares adds a track segment "
+"between the two squares. Right-clicking on an edge adds a cross on "
+"the edge, indicating no track is possible there. "
+"\n"
+"Left-clicking in a square adds a colour indicator showing that "
+"you know the square must contain a track, even if you don't know "
+"which edges it crosses yet. Right-clicking in a square adds a cross "
+"indicating it contains no track segment. "
+"\n"
+"Left- or right-dragging between squares allows you to lay a straight "
+"line of is-track or is-not-track indicators, useful for filling in "
+"rows or columns to match the clue. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#40.2 Tracks parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of the grid, in squares. "
+"\n"
+"_Difficulty_ "
+"\n"
+"Controls the difficulty of the generated puzzle: at Tricky "
+"level, you are required to make more deductions regarding "
+"disregarding moves that would lead to impossible crossings "
+"later. "
+"\n"
+"_Disallow consecutive 1 clues_ "
+"\n"
+"Controls whether the Tracks game generation permits two adjacent "
+"rows or columns to have a 1 clue, or permits the row or column "
+"of the track's endpoint to have a 1 clue. By default this is "
+"not permitted, to avoid long straight boring segments of track "
+"and make the games more twiddly and interesting. If you want to "
+"restore the possibility, turn this option off. "
+"\n"
+"#Chapter 41: Palisade "
+"\n"
+"You're given a grid of squares, some of which contain numbers. Your "
+"goal is to subdivide the grid into contiguous regions, all of the "
+"same (given) size, such that each square containing a number is "
+"adjacent to exactly that many edges (including those between the "
+"inside and the outside of the grid). "
+"\n"
+"Credit for this puzzle goes to Nikoli, who call it `Five Cells'. "
+"[22]. "
+"\n"
+"Palisade was contributed to this collection by Jonas Koelker. "
+"\n"
+"[22] http://nikoli.co.jp/en/puzzles/five_cells.html "
+"\n"
+"\n#41.1 Palisade controls "
+"\n"
+"Left-click to place an edge. Right-click to indicate `no edge'. "
+"Alternatively, the arrow keys will move a keyboard cursor. Holding "
+"Control while pressing an arrow key will place an edge. Press Shift-\n"
+"arrowkey to switch off an edge. Repeat an action to perform its "
+"inverse. "
+"\n"
+"(All the actions described in section 2.1 are also available.) "
+"\n"
+"\n#41.2 Palisade parameters "
+"\n"
+"These parameters are available from the `Custom...' option on the "
+"`Type' menu. "
+"\n"
+"_Width_, _Height_ "
+"\n"
+"Size of grid in squares. "
+"\n"
+"_Region size_ "
+"\n"
+"The size of the regions into which the grid must be subdivided. "
+"\n"
+;
+
+const int help_maxlen = 6244;
+const int help_numchapters = 39;
diff --git a/apps/plugins/puzzles/rockbox.c b/apps/plugins/puzzles/rockbox.c
index 43afb62e40..7a784ba97c 100644
--- a/apps/plugins/puzzles/rockbox.c
+++ b/apps/plugins/puzzles/rockbox.c
@@ -1099,11 +1099,6 @@ static void quick_help(void)
}
}
-static void full_help(void)
-{
- /* TODO */
-}
-
static void init_default_settings(void)
{
settings.slowmo_factor = 1;
@@ -1219,11 +1214,7 @@ static int pausemenu_cb(int action, const struct menu_item_ex *this_item)
return ACTION_EXIT_MENUITEM;
break;
case 7:
-#ifdef FOR_REAL
- return ACTION_EXIT_MENUITEM;
-#else
break;
-#endif
case 8:
#ifdef COMBINED
/* audio buf is used, so no playback */
@@ -1354,7 +1345,7 @@ static int pause_menu(void)
quick_help();
break;
case 7:
- full_help();
+ full_help(midend_which_game(me)->name);
break;
case 8:
playback_control(NULL);
@@ -1815,11 +1806,7 @@ static int mainmenu_cb(int action, const struct menu_item_ex *this_item)
return ACTION_EXIT_MENUITEM;
break;
case 3:
-#ifdef FOR_REAL
- return ACTION_EXIT_MENUITEM;
-#else
break;
-#endif
case 4:
#ifdef COMBINED
/* audio buf is used, so no playback */
@@ -1934,7 +1921,7 @@ enum plugin_status plugin_start(const void *param)
quick_help();
break;
case 3:
- full_help();
+ full_help(midend_which_game(me)->name);
break;
case 4:
playback_control(NULL);