diff options
author | Franklin Wei <frankhwei536@gmail.com> | 2016-11-20 15:16:41 -0500 |
---|---|---|
committer | Franklin Wei <me@fwei.tk> | 2016-12-18 18:13:22 +0100 |
commit | 1a6a8b52f7aa4e2da6f4c34a0c743c760b8cfd99 (patch) | |
tree | 8e7f2d6b0cbdb5d15c13457b2c3e1de69f598440 /apps/plugins/puzzles/icons | |
parent | 3ee79724f6fb033d50e26ef37b33d3f8cedf0c5b (diff) | |
download | rockbox-1a6a8b52f7aa4e2da6f4c34a0c743c760b8cfd99.tar.gz rockbox-1a6a8b52f7aa4e2da6f4c34a0c743c760b8cfd99.zip |
Port of Simon Tatham's Puzzle Collection
Original revision: 5123b1bf68777ffa86e651f178046b26a87cf2d9
MIT Licensed. Some games still crash and others are unplayable due to
issues with controls. Still need a "real" polygon filling algorithm.
Currently builds one plugin per puzzle (about 40 in total, around 100K
each on ARM), but can easily be made to build a single monolithic
overlay (800K or so on ARM).
The following games are at least partially broken for various reasons,
and have been disabled on this commit:
Cube: failed assertion with "Icosahedron" setting
Keen: input issues
Mines: weird stuff happens on target
Palisade: input issues
Solo: input issues, occasional crash on target
Towers: input issues
Undead: input issues
Unequal: input and drawing issues (concave polys)
Untangle: input issues
Features left to do:
- In-game help system
- Figure out the weird bugs
Change-Id: I7c69b6860ab115f973c8d76799502e9bb3d52368
Diffstat (limited to 'apps/plugins/puzzles/icons')
46 files changed, 2079 insertions, 0 deletions
diff --git a/apps/plugins/puzzles/icons/Makefile b/apps/plugins/puzzles/icons/Makefile new file mode 100644 index 0000000000..00dae1f841 --- /dev/null +++ b/apps/plugins/puzzles/icons/Makefile | |||
@@ -0,0 +1,153 @@ | |||
1 | # Makefile for Puzzles icons. | ||
2 | |||
3 | PUZZLES = blackbox bridges cube dominosa fifteen filling flip flood \ | ||
4 | galaxies guess inertia keen lightup loopy magnets map mines \ | ||
5 | net netslide palisade pattern pearl pegs range rect \ | ||
6 | samegame signpost singles sixteen slant solo tents towers \ | ||
7 | twiddle tracks undead unequal unruly untangle | ||
8 | |||
9 | BASE = $(patsubst %,%-base.png,$(PUZZLES)) | ||
10 | WEB = $(patsubst %,%-web.png,$(PUZZLES)) | ||
11 | |||
12 | IBASE = $(patsubst %,%-ibase.png,$(PUZZLES)) | ||
13 | IBASE4 = $(patsubst %,%-ibase4.png,$(PUZZLES)) | ||
14 | P48D24 = $(patsubst %,%-48d24.png,$(PUZZLES)) | ||
15 | P48D8 = $(patsubst %,%-48d8.png,$(PUZZLES)) | ||
16 | P48D4 = $(patsubst %,%-48d4.png,$(PUZZLES)) | ||
17 | P32D24 = $(patsubst %,%-32d24.png,$(PUZZLES)) | ||
18 | P32D8 = $(patsubst %,%-32d8.png,$(PUZZLES)) | ||
19 | P32D4 = $(patsubst %,%-32d4.png,$(PUZZLES)) | ||
20 | P16D24 = $(patsubst %,%-16d24.png,$(PUZZLES)) | ||
21 | P16D8 = $(patsubst %,%-16d8.png,$(PUZZLES)) | ||
22 | P16D4 = $(patsubst %,%-16d4.png,$(PUZZLES)) | ||
23 | ICONS = $(patsubst %,%.ico,$(PUZZLES)) | ||
24 | CICONS = $(patsubst %,%-icon.c,$(PUZZLES)) | ||
25 | RC = $(patsubst %,%.rc,$(PUZZLES)) | ||
26 | |||
27 | BIN = ../ | ||
28 | PIC = ./ | ||
29 | |||
30 | # Work around newer ImageMagick unilaterally distorting colours when | ||
31 | # converting to PNG. | ||
32 | CSP = -set colorspace RGB | ||
33 | |||
34 | base: $(BASE) | ||
35 | web: $(WEB) | ||
36 | pngicons: $(P48D24) $(P32D24) $(P16D24) | ||
37 | winicons: $(ICONS) $(RC) | ||
38 | gtkicons: $(CICONS) | ||
39 | all: base web pngicons winicons gtkicons | ||
40 | |||
41 | # Build the base puzzle screenshots from which all the other images | ||
42 | # are derived. Some of them involve showing a move animation | ||
43 | # part-way through. | ||
44 | fifteen-base.png : override REDO=0.3 | ||
45 | flip-base.png : override REDO=0.3 | ||
46 | netslide-base.png : override REDO=0.3 | ||
47 | sixteen-base.png : override REDO=0.3 | ||
48 | twiddle-base.png : override REDO=0.3 | ||
49 | $(BASE): %-base.png: $(BIN)% $(PIC)%.sav | ||
50 | $(PIC)screenshot.sh $(BIN)$* $(PIC)$*.sav $@ $(REDO) | ||
51 | |||
52 | # Build the screenshots for the web, by scaling the original base | ||
53 | # images to a uniform size. | ||
54 | $(WEB): %-web.png: %-base.png | ||
55 | $(PIC)square.pl 150 5 $^ $@ | ||
56 | |||
57 | # Build the base _icon_ images, by careful cropping of the base | ||
58 | # images: icons are very small so it's often necessary to zoom in | ||
59 | # on a smaller portion of the screenshot. | ||
60 | blackbox-ibase.png : override CROP=352x352 144x144+0+208 | ||
61 | bridges-ibase.png : override CROP=264x264 107x107+157+157 | ||
62 | dominosa-ibase.png : override CROP=304x272 152x152+152+0 | ||
63 | fifteen-ibase.png : override CROP=240x240 120x120+0+120 | ||
64 | filling-ibase.png : override CROP=256x256 133x133+14+78 | ||
65 | flip-ibase.png : override CROP=288x288 145x145+120+72 | ||
66 | galaxies-ibase.png : override CROP=288x288 165x165+0+0 | ||
67 | guess-ibase.png : override CROP=263x420 178x178+75+17 | ||
68 | inertia-ibase.png : override CROP=321x321 128x128+193+0 | ||
69 | keen-ibase.png : override CROP=288x288 96x96+24+120 | ||
70 | lightup-ibase.png : override CROP=256x256 112x112+144+0 | ||
71 | loopy-ibase.png : override CROP=257x257 113x113+0+0 | ||
72 | magnets-ibase.png : override CROP=264x232 96x96+36+100 | ||
73 | mines-ibase.png : override CROP=240x240 110x110+130+130 | ||
74 | net-ibase.png : override CROP=193x193 113x113+0+80 | ||
75 | netslide-ibase.png : override CROP=289x289 144x144+0+0 | ||
76 | palisade-ibase.png : override CROP=288x288 192x192+0+0 | ||
77 | pattern-ibase.png : override CROP=384x384 223x223+0+0 | ||
78 | pearl-ibase.png : override CROP=216x216 94x94+108+15 | ||
79 | pegs-ibase.png : override CROP=263x263 147x147+116+0 | ||
80 | range-ibase.png : override CROP=256x256 98x98+111+15 | ||
81 | rect-ibase.png : override CROP=205x205 115x115+90+0 | ||
82 | signpost-ibase.png : override CROP=240x240 98x98+23+23 | ||
83 | singles-ibase.png : override CROP=224x224 98x98+15+15 | ||
84 | sixteen-ibase.png : override CROP=288x288 144x144+144+144 | ||
85 | slant-ibase.png : override CROP=321x321 160x160+160+160 | ||
86 | solo-ibase.png : override CROP=481x481 145x145+24+24 | ||
87 | tents-ibase.png : override CROP=320x320 165x165+142+0 | ||
88 | towers-ibase.png : override CROP=300x300 102x102+151+6 | ||
89 | tracks-ibase.png : override CROP=246x246 118x118+6+6 | ||
90 | twiddle-ibase.png : override CROP=192x192 102x102+69+21 | ||
91 | undead-ibase.png : override CROP=416x480 192x192+16+80 | ||
92 | unequal-ibase.png : override CROP=208x208 104x104+104+104 | ||
93 | untangle-ibase.png : override CROP=320x320 164x164+3+116 | ||
94 | $(IBASE): %-ibase.png: %-base.png | ||
95 | $(PIC)crop.sh $^ $@ $(CROP) | ||
96 | |||
97 | # Convert the full-size icon images to 4-bit colour, because that | ||
98 | # seems to work better than reducing it in 24 bits and then | ||
99 | # dithering. | ||
100 | $(IBASE4): %-ibase4.png: %-ibase.png | ||
101 | convert -colors 16 +dither $(CSP) -map $(PIC)win16pal.xpm $^ $@ | ||
102 | |||
103 | # Build the 24-bit PNGs for the icons, at three sizes. | ||
104 | $(P48D24): %-48d24.png: %-ibase.png | ||
105 | $(PIC)square.pl 48 4 $^ $@ | ||
106 | $(P32D24): %-32d24.png: %-ibase.png | ||
107 | $(PIC)square.pl 32 2 $^ $@ | ||
108 | $(P16D24): %-16d24.png: %-ibase.png | ||
109 | $(PIC)square.pl 16 1 $^ $@ | ||
110 | |||
111 | # The 8-bit icon PNGs are just custom-paletted quantisations of the | ||
112 | # 24-bit ones. | ||
113 | $(P48D8) $(P32D8) $(P16D8): %d8.png: %d24.png | ||
114 | convert -colors 256 $^ $@ | ||
115 | |||
116 | # But the depth-4 images work better if we re-shrink from the | ||
117 | # ibase4 versions of the images, and then normalise the colours | ||
118 | # again afterwards. (They're still not very good, but my hope is | ||
119 | # that on most modern Windows machines this won't matter too | ||
120 | # much...) | ||
121 | $(P48D4): %-48d4.png: %-ibase4.png | ||
122 | $(PIC)square.pl 48 1 $^ $@-tmp2.png | ||
123 | convert -colors 16 $(CSP) -map $(PIC)win16pal.xpm $@-tmp2.png $@ | ||
124 | rm -f $@-tmp2.png | ||
125 | $(P32D4): %-32d4.png: %-ibase.png | ||
126 | $(PIC)square.pl 32 1 $^ $@-tmp2.png | ||
127 | convert -colors 16 $(CSP) -map $(PIC)win16pal.xpm $@-tmp2.png $@ | ||
128 | rm -f $@-tmp2.png | ||
129 | $(P16D4): %-16d4.png: %-ibase.png | ||
130 | $(PIC)square.pl 16 1 $^ $@-tmp2.png | ||
131 | convert -colors 16 $(CSP) -map $(PIC)win16pal.xpm $@-tmp2.png $@ | ||
132 | rm -f $@-tmp2.png | ||
133 | |||
134 | # Build the actual Windows icons themselves, by feeding all those | ||
135 | # PNGs to my icon builder script. | ||
136 | $(ICONS): %.ico: %-48d24.png %-48d8.png %-48d4.png \ | ||
137 | %-32d24.png %-32d8.png %-32d4.png \ | ||
138 | %-16d24.png %-16d8.png %-16d4.png | ||
139 | $(PIC)icon.pl -24 $*-48d24.png $*-32d24.png $*-16d24.png \ | ||
140 | -8 $*-48d8.png $*-32d8.png $*-16d8.png \ | ||
141 | -4 $*-48d4.png $*-32d4.png $*-16d4.png > $@ | ||
142 | |||
143 | # Build the .RC files which bind the icons into the applications. | ||
144 | $(RC): %.rc: | ||
145 | echo '#include "puzzles.rc2"' > $@ | ||
146 | echo '200 ICON "$*.ico"' >> $@ | ||
147 | |||
148 | # Build the GTK icon source files. | ||
149 | $(CICONS): %-icon.c: %-16d24.png %-32d24.png %-48d24.png | ||
150 | $(PIC)cicon.pl $^ > $@ | ||
151 | |||
152 | clean: | ||
153 | rm -f *.png *.ico *.rc *-icon.c | ||
diff --git a/apps/plugins/puzzles/icons/blackbox.sav b/apps/plugins/puzzles/icons/blackbox.sav new file mode 100644 index 0000000000..4483f3c81a --- /dev/null +++ b/apps/plugins/puzzles/icons/blackbox.sav | |||
@@ -0,0 +1,27 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :9:Black Box | ||
4 | PARAMS :8:w8h8m5M5 | ||
5 | CPARAMS :8:w8h8m5M5 | ||
6 | SEED :15:999785320716678 | ||
7 | DESC :24:c8b9f8528193756b9a2fd24d | ||
8 | UI :2:E0 | ||
9 | NSTATES :2:18 | ||
10 | STATEPOS:2:13 | ||
11 | MOVE :2:F2 | ||
12 | MOVE :2:F4 | ||
13 | MOVE :2:F5 | ||
14 | MOVE :3:F25 | ||
15 | MOVE :3:F26 | ||
16 | MOVE :3:F11 | ||
17 | MOVE :3:F12 | ||
18 | MOVE :3:F15 | ||
19 | MOVE :4:T7,7 | ||
20 | MOVE :4:T7,4 | ||
21 | MOVE :4:T1,7 | ||
22 | MOVE :2:F3 | ||
23 | MOVE :2:F9 | ||
24 | MOVE :3:F27 | ||
25 | MOVE :4:T5,7 | ||
26 | MOVE :4:T1,8 | ||
27 | MOVE :1:R | ||
diff --git a/apps/plugins/puzzles/icons/bridges.sav b/apps/plugins/puzzles/icons/bridges.sav new file mode 100644 index 0000000000..ddae7085cd --- /dev/null +++ b/apps/plugins/puzzles/icons/bridges.sav | |||
@@ -0,0 +1,72 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :7:Bridges | ||
4 | PARAMS :15:10x10i30e10m2d2 | ||
5 | CPARAMS :15:10x10i30e10m2d2 | ||
6 | SEED :15:944199396008454 | ||
7 | DESC :49:a1a4a4b4k4b6b2a4b2b2b1e2e1a4b4c3j25d2a1f2c3a4d4c3 | ||
8 | AUXINFO :838:bd75eb5f7b129109b5cdcff0925c77ca5c0a135365002b93b44c5013c7a307b9504affcfb8ad934263196fc3e6d0b023abe48d254d46d29520e50a5e423c0fb1bc01ccc51cad61045c439e7c2bb8e5788bc7f3622aaa3a8125ebde11c9cd69b6f2393246fd094ad91e81ae58cd557b73bd1c9839cfad5835c8519e44298204eaca58dfd79289546959bfbabdc5f3cb7a27b8d3fb2d0b062bd5c2e469493c19f8c89989df73d8a3ab02d9afcbfedf245306d15881a01d153122f8374c7526abecc90919f99ff62e9789cabc402249af095ceb14c8c59c0d9ffbcdd731d50114e7c30c31ef0638f4d352abbfd04b4315d368d65bbfe005b6586245bc5244e5050098cf4c1b6986120f40d5ce038c10a3f309286f950cdc287e495aa13c70ab0c1f113a135556d7ce895fd8244afcbad43fe51f275837f223a1cb95151de8a158cb0add7fa8c9f1fa0e09a1ce842136c1679144cead56b164c4ef1a09ed36fd9704ba191b5957bc3d5bb97d8a1f7451d357a6638ac320b0beb0cd35aa404c8f1621c6d400960aa97bf6ce3a944339d7e401c4d98c31773b2a8881352d5653fdb5e8f7c04b | ||
9 | NSTATES :2:63 | ||
10 | STATEPOS:2:41 | ||
11 | MOVE :10:L8,0,5,0,1 | ||
12 | MOVE :10:L8,0,5,0,2 | ||
13 | MOVE :10:L8,0,8,2,1 | ||
14 | MOVE :10:L8,0,8,2,2 | ||
15 | MOVE :4:M8,0 | ||
16 | MOVE :10:L0,2,3,2,1 | ||
17 | MOVE :10:L0,2,3,2,2 | ||
18 | MOVE :10:L0,2,0,7,1 | ||
19 | MOVE :10:L0,2,0,7,2 | ||
20 | MOVE :4:M0,2 | ||
21 | MOVE :10:L1,0,3,0,1 | ||
22 | MOVE :4:M1,0 | ||
23 | MOVE :10:L3,0,5,0,1 | ||
24 | MOVE :10:L3,0,3,2,1 | ||
25 | MOVE :10:L1,3,1,5,1 | ||
26 | MOVE :10:L0,7,5,7,1 | ||
27 | MOVE :10:L0,7,0,9,1 | ||
28 | MOVE :10:L0,9,5,9,1 | ||
29 | MOVE :10:L0,9,5,9,2 | ||
30 | MOVE :10:L0,9,0,7,2 | ||
31 | MOVE :4:M0,9 | ||
32 | MOVE :4:M0,7 | ||
33 | MOVE :10:L4,8,8,8,1 | ||
34 | MOVE :10:L4,8,8,8,2 | ||
35 | MOVE :4:M4,8 | ||
36 | MOVE :10:L5,9,9,9,1 | ||
37 | MOVE :10:L5,9,9,9,2 | ||
38 | MOVE :4:M5,9 | ||
39 | MOVE :10:L9,9,9,6,1 | ||
40 | MOVE :4:M9,9 | ||
41 | MOVE :10:L8,8,8,5,1 | ||
42 | MOVE :4:M8,8 | ||
43 | MOVE :10:L9,6,9,4,1 | ||
44 | MOVE :4:M9,6 | ||
45 | MOVE :4:M9,4 | ||
46 | MOVE :10:L1,5,4,5,1 | ||
47 | MOVE :10:L1,5,4,5,2 | ||
48 | MOVE :10:L1,5,1,3,2 | ||
49 | MOVE :4:M1,3 | ||
50 | MOVE :4:M1,5 | ||
51 | MOVE :10:L3,4,3,2,1 | ||
52 | MOVE :10:L3,4,3,2,2 | ||
53 | MOVE :4:M3,4 | ||
54 | MOVE :10:L4,5,8,5,1 | ||
55 | MOVE :10:L7,7,5,7,1 | ||
56 | MOVE :4:M5,7 | ||
57 | MOVE :4:M7,7 | ||
58 | MOVE :10:L7,3,4,3,1 | ||
59 | MOVE :4:M7,3 | ||
60 | MOVE :10:L5,0,3,0,2 | ||
61 | MOVE :4:M5,0 | ||
62 | MOVE :4:M3,0 | ||
63 | MOVE :10:L3,2,6,2,1 | ||
64 | MOVE :4:M3,2 | ||
65 | MOVE :10:L6,2,8,2,1 | ||
66 | MOVE :4:M6,2 | ||
67 | MOVE :10:L8,2,8,5,1 | ||
68 | MOVE :4:M8,2 | ||
69 | MOVE :4:M8,5 | ||
70 | MOVE :10:L4,5,4,3,1 | ||
71 | MOVE :4:M4,3 | ||
72 | MOVE :4:M4,5 | ||
diff --git a/apps/plugins/puzzles/icons/cicon.pl b/apps/plugins/puzzles/icons/cicon.pl new file mode 100755 index 0000000000..3578bd33fe --- /dev/null +++ b/apps/plugins/puzzles/icons/cicon.pl | |||
@@ -0,0 +1,27 @@ | |||
1 | #!/usr/bin/perl | ||
2 | |||
3 | # Given a list of input PNGs, create a C source file file | ||
4 | # containing a const array of XPMs, under the name `xpm_icon'. | ||
5 | |||
6 | $k = 0; | ||
7 | @xpms = (); | ||
8 | foreach $f (@ARGV) { | ||
9 | # XPM format is generated directly by ImageMagick, so that's easy | ||
10 | # enough. We just have to adjust the declaration line so that it | ||
11 | # has the right name, linkage and storage class. | ||
12 | @lines = (); | ||
13 | open XPM, "convert $f xpm:- |"; | ||
14 | push @lines, $_ while <XPM>; | ||
15 | close XPM; | ||
16 | die "XPM from $f in unexpected format\n" unless $lines[1] =~ /^static.*\{$/; | ||
17 | $lines[1] = "static const char *const xpm_icon_$k"."[] = {\n"; | ||
18 | $k++; | ||
19 | push @xpms, @lines, "\n"; | ||
20 | } | ||
21 | |||
22 | # Now output. | ||
23 | foreach $line (@xpms) { print $line; } | ||
24 | print "const char *const *const xpm_icons[] = {\n"; | ||
25 | for ($i = 0; $i < $k; $i++) { print " xpm_icon_$i,\n"; } | ||
26 | print "};\n"; | ||
27 | print "const int n_xpm_icons = $k;\n"; | ||
diff --git a/apps/plugins/puzzles/icons/crop.sh b/apps/plugins/puzzles/icons/crop.sh new file mode 100755 index 0000000000..0d15d3c9b9 --- /dev/null +++ b/apps/plugins/puzzles/icons/crop.sh | |||
@@ -0,0 +1,37 @@ | |||
1 | #!/bin/sh | ||
2 | |||
3 | # Crop one image into another, after first checking that the source | ||
4 | # image has the expected size in pixels. | ||
5 | # | ||
6 | # This is used in the Puzzles icon build scripts to construct icons | ||
7 | # which are zoomed in on a particular sub-area of the puzzle's | ||
8 | # basic screenshot. This way I can define crop areas in pixels, | ||
9 | # while not having to worry too much that if I adjust the source | ||
10 | # puzzle so as to alter the layout the crop area might start | ||
11 | # hitting the wrong bit of picture. Most layout changes I can | ||
12 | # conveniently imagine will also alter the overall image size, so | ||
13 | # this script will give a build error and alert me to the fact that | ||
14 | # I need to fiddle with the icon makefile. | ||
15 | |||
16 | infile="$1" | ||
17 | outfile="$2" | ||
18 | insize="$3" | ||
19 | crop="$4" | ||
20 | |||
21 | # Special case: if no input size or crop parameter was specified at | ||
22 | # all, we just copy the input to the output file. | ||
23 | |||
24 | if test $# -lt 3; then | ||
25 | cp "$infile" "$outfile" | ||
26 | exit 0 | ||
27 | fi | ||
28 | |||
29 | # Check the input image size. | ||
30 | realsize=`identify -format %wx%h "$infile"` | ||
31 | if test "x$insize" != "x$realsize"; then | ||
32 | echo "crop.sh: '$infile' has wrong initial size: $realsize != $insize" >&2 | ||
33 | exit 1 | ||
34 | fi | ||
35 | |||
36 | # And crop. | ||
37 | convert -crop "$crop" "$infile" "$outfile" | ||
diff --git a/apps/plugins/puzzles/icons/cube.sav b/apps/plugins/puzzles/icons/cube.sav new file mode 100644 index 0000000000..bb123f4e74 --- /dev/null +++ b/apps/plugins/puzzles/icons/cube.sav | |||
@@ -0,0 +1,22 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :4:Cube | ||
4 | PARAMS :4:c4x4 | ||
5 | CPARAMS :4:c4x4 | ||
6 | SEED :15:125146248070163 | ||
7 | DESC :6:C461,3 | ||
8 | NSTATES :2:14 | ||
9 | STATEPOS:1:5 | ||
10 | MOVE :1:D | ||
11 | MOVE :1:D | ||
12 | MOVE :1:D | ||
13 | MOVE :1:U | ||
14 | MOVE :1:L | ||
15 | MOVE :1:L | ||
16 | MOVE :1:D | ||
17 | MOVE :1:U | ||
18 | MOVE :1:D | ||
19 | MOVE :1:U | ||
20 | MOVE :1:U | ||
21 | MOVE :1:U | ||
22 | MOVE :1:L | ||
diff --git a/apps/plugins/puzzles/icons/dominosa.sav b/apps/plugins/puzzles/icons/dominosa.sav new file mode 100644 index 0000000000..5991f3e57e --- /dev/null +++ b/apps/plugins/puzzles/icons/dominosa.sav | |||
@@ -0,0 +1,53 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :8:Dominosa | ||
4 | PARAMS :1:6 | ||
5 | CPARAMS :1:6 | ||
6 | DESC :56:55521461210004364611033535444421636022603153156422620503 | ||
7 | NSTATES :2:46 | ||
8 | STATEPOS:2:33 | ||
9 | MOVE :6:D18,19 | ||
10 | MOVE :6:E22,23 | ||
11 | MOVE :6:E22,30 | ||
12 | MOVE :5:E9,17 | ||
13 | MOVE :6:D38,46 | ||
14 | MOVE :6:E14,15 | ||
15 | MOVE :5:E6,14 | ||
16 | MOVE :6:E33,34 | ||
17 | MOVE :6:E34,42 | ||
18 | MOVE :6:E26,34 | ||
19 | MOVE :6:D34,35 | ||
20 | MOVE :6:E42,50 | ||
21 | MOVE :6:E16,24 | ||
22 | MOVE :4:D4,5 | ||
23 | MOVE :4:D6,7 | ||
24 | MOVE :6:D15,23 | ||
25 | MOVE :6:E17,25 | ||
26 | MOVE :6:D16,17 | ||
27 | MOVE :6:E11,12 | ||
28 | MOVE :6:D51,52 | ||
29 | MOVE :5:E3,11 | ||
30 | MOVE :6:D10,11 | ||
31 | MOVE :4:D2,3 | ||
32 | MOVE :6:E37,45 | ||
33 | MOVE :6:D49,50 | ||
34 | MOVE :6:D40,48 | ||
35 | MOVE :6:D25,26 | ||
36 | MOVE :6:D24,32 | ||
37 | MOVE :6:D33,41 | ||
38 | MOVE :6:D42,43 | ||
39 | MOVE :6:D27,28 | ||
40 | MOVE :6:E21,29 | ||
41 | MOVE :6:D31,39 | ||
42 | MOVE :6:D47,55 | ||
43 | MOVE :6:E13,21 | ||
44 | MOVE :6:E13,14 | ||
45 | MOVE :6:D12,13 | ||
46 | MOVE :6:D20,21 | ||
47 | MOVE :6:D14,22 | ||
48 | MOVE :6:D29,30 | ||
49 | MOVE :6:D36,37 | ||
50 | MOVE :6:D44,45 | ||
51 | MOVE :6:D53,54 | ||
52 | MOVE :4:D0,1 | ||
53 | MOVE :4:D8,9 | ||
diff --git a/apps/plugins/puzzles/icons/fifteen.sav b/apps/plugins/puzzles/icons/fifteen.sav new file mode 100644 index 0000000000..d81345a7d8 --- /dev/null +++ b/apps/plugins/puzzles/icons/fifteen.sav | |||
@@ -0,0 +1,74 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :7:Fifteen | ||
4 | PARAMS :3:4x4 | ||
5 | CPARAMS :3:4x4 | ||
6 | SEED :15:307905346810973 | ||
7 | DESC :37:8,11,3,6,14,13,4,2,0,9,12,10,5,1,7,15 | ||
8 | NSTATES :2:66 | ||
9 | STATEPOS:2:47 | ||
10 | MOVE :4:M1,2 | ||
11 | MOVE :4:M1,3 | ||
12 | MOVE :4:M0,3 | ||
13 | MOVE :4:M0,1 | ||
14 | MOVE :4:M1,1 | ||
15 | MOVE :4:M1,2 | ||
16 | MOVE :4:M0,2 | ||
17 | MOVE :4:M0,0 | ||
18 | MOVE :4:M1,0 | ||
19 | MOVE :4:M1,1 | ||
20 | MOVE :4:M0,1 | ||
21 | MOVE :4:M0,0 | ||
22 | MOVE :4:M1,0 | ||
23 | MOVE :4:M3,0 | ||
24 | MOVE :4:M3,1 | ||
25 | MOVE :4:M1,1 | ||
26 | MOVE :4:M1,0 | ||
27 | MOVE :4:M3,0 | ||
28 | MOVE :4:M3,1 | ||
29 | MOVE :4:M1,1 | ||
30 | MOVE :4:M1,0 | ||
31 | MOVE :4:M2,0 | ||
32 | MOVE :4:M2,1 | ||
33 | MOVE :4:M1,1 | ||
34 | MOVE :4:M1,3 | ||
35 | MOVE :4:M0,3 | ||
36 | MOVE :4:M0,1 | ||
37 | MOVE :4:M1,1 | ||
38 | MOVE :4:M1,2 | ||
39 | MOVE :4:M0,2 | ||
40 | MOVE :4:M0,1 | ||
41 | MOVE :4:M2,1 | ||
42 | MOVE :4:M3,1 | ||
43 | MOVE :4:M3,2 | ||
44 | MOVE :4:M2,2 | ||
45 | MOVE :4:M2,3 | ||
46 | MOVE :4:M3,3 | ||
47 | MOVE :4:M3,1 | ||
48 | MOVE :4:M2,1 | ||
49 | MOVE :4:M2,2 | ||
50 | MOVE :4:M1,2 | ||
51 | MOVE :4:M1,3 | ||
52 | MOVE :4:M2,3 | ||
53 | MOVE :4:M2,2 | ||
54 | MOVE :4:M1,2 | ||
55 | MOVE :4:M0,2 | ||
56 | MOVE :4:M0,3 | ||
57 | MOVE :4:M1,3 | ||
58 | MOVE :4:M1,2 | ||
59 | MOVE :4:M2,2 | ||
60 | MOVE :4:M2,3 | ||
61 | MOVE :4:M0,3 | ||
62 | MOVE :4:M0,2 | ||
63 | MOVE :4:M1,2 | ||
64 | MOVE :4:M2,2 | ||
65 | MOVE :4:M2,3 | ||
66 | MOVE :4:M1,3 | ||
67 | MOVE :4:M1,2 | ||
68 | MOVE :4:M3,2 | ||
69 | MOVE :4:M3,3 | ||
70 | MOVE :4:M1,3 | ||
71 | MOVE :4:M1,2 | ||
72 | MOVE :4:M2,2 | ||
73 | MOVE :4:M2,3 | ||
74 | MOVE :4:M3,3 | ||
diff --git a/apps/plugins/puzzles/icons/filling.sav b/apps/plugins/puzzles/icons/filling.sav new file mode 100644 index 0000000000..caf0bb2d4c --- /dev/null +++ b/apps/plugins/puzzles/icons/filling.sav | |||
@@ -0,0 +1,38 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :7:Filling | ||
4 | PARAMS :3:7x7 | ||
5 | CPARAMS :3:7x7 | ||
6 | SEED :15:279172739852696 | ||
7 | DESC :49:0000000031051240010004000001106171000400001013105 | ||
8 | NSTATES :2:30 | ||
9 | STATEPOS:2:13 | ||
10 | MOVE :4:38_3 | ||
11 | MOVE :4:39_3 | ||
12 | MOVE :4:36_4 | ||
13 | MOVE :4:43_4 | ||
14 | MOVE :4:35_4 | ||
15 | MOVE :4:47_5 | ||
16 | MOVE :4:40_5 | ||
17 | MOVE :4:34_5 | ||
18 | MOVE :4:41_5 | ||
19 | MOVE :4:25_7 | ||
20 | MOVE :4:23_6 | ||
21 | MOVE :4:16_6 | ||
22 | MOVE :4:18_7 | ||
23 | MOVE :4:19_7 | ||
24 | MOVE :4:20_7 | ||
25 | MOVE :4:26_7 | ||
26 | MOVE :4:24_7 | ||
27 | MOVE :4:29_6 | ||
28 | MOVE :4:22_6 | ||
29 | MOVE :4:15_6 | ||
30 | MOVE :3:7_4 | ||
31 | MOVE :3:0_4 | ||
32 | MOVE :3:1_3 | ||
33 | MOVE :3:2_3 | ||
34 | MOVE :3:6_2 | ||
35 | MOVE :3:5_5 | ||
36 | MOVE :3:4_5 | ||
37 | MOVE :3:3_5 | ||
38 | MOVE :4:10_5 | ||
diff --git a/apps/plugins/puzzles/icons/flip.sav b/apps/plugins/puzzles/icons/flip.sav new file mode 100644 index 0000000000..82b4c49357 --- /dev/null +++ b/apps/plugins/puzzles/icons/flip.sav | |||
@@ -0,0 +1,20 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :4:Flip | ||
4 | PARAMS :4:5x5c | ||
5 | CPARAMS :4:5x5c | ||
6 | SEED :15:158897339725978 | ||
7 | DESC :165:c400007100001c4000071000018400043100011c400047100011c400046100010c400047100011c4000471000118400043100011c400047100011c400046100010c000047000011c0000470000118,5c18b48 | ||
8 | NSTATES :2:12 | ||
9 | STATEPOS:1:4 | ||
10 | MOVE :4:M4,3 | ||
11 | MOVE :4:M3,0 | ||
12 | MOVE :4:M2,2 | ||
13 | MOVE :4:M3,2 | ||
14 | MOVE :4:M2,3 | ||
15 | MOVE :4:M0,2 | ||
16 | MOVE :4:M0,3 | ||
17 | MOVE :4:M1,4 | ||
18 | MOVE :4:M0,0 | ||
19 | MOVE :4:M1,0 | ||
20 | MOVE :4:M1,1 | ||
diff --git a/apps/plugins/puzzles/icons/flood.sav b/apps/plugins/puzzles/icons/flood.sav new file mode 100644 index 0000000000..ac4adf7020 --- /dev/null +++ b/apps/plugins/puzzles/icons/flood.sav | |||
@@ -0,0 +1,14 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :5:Flood | ||
4 | PARAMS :7:6x6c6m5 | ||
5 | CPARAMS :7:6x6c6m5 | ||
6 | SEED :15:967543368167853 | ||
7 | DESC :39:032242034203340350204502505323231342,17 | ||
8 | NSTATES :1:6 | ||
9 | STATEPOS:1:6 | ||
10 | MOVE :2:M3 | ||
11 | MOVE :2:M2 | ||
12 | MOVE :2:M0 | ||
13 | MOVE :2:M5 | ||
14 | MOVE :2:M3 | ||
diff --git a/apps/plugins/puzzles/icons/galaxies.sav b/apps/plugins/puzzles/icons/galaxies.sav new file mode 100644 index 0000000000..42d18bc335 --- /dev/null +++ b/apps/plugins/puzzles/icons/galaxies.sav | |||
@@ -0,0 +1,51 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :8:Galaxies | ||
4 | PARAMS :5:7x7dh | ||
5 | CPARAMS :5:7x7dh | ||
6 | SEED :15:483644862786314 | ||
7 | DESC :13:ikrqfedzljjsp | ||
8 | NSTATES :2:43 | ||
9 | STATEPOS:2:37 | ||
10 | MOVE :5:E12,9 | ||
11 | MOVE :5:E8,11 | ||
12 | MOVE :5:E5,12 | ||
13 | MOVE :5:E7,12 | ||
14 | MOVE :5:E4,13 | ||
15 | MOVE :5:E2,11 | ||
16 | MOVE :5:E3,10 | ||
17 | MOVE :4:E2,5 | ||
18 | MOVE :4:E4,5 | ||
19 | MOVE :4:E6,7 | ||
20 | MOVE :4:E8,1 | ||
21 | MOVE :5:E10,1 | ||
22 | MOVE :4:E9,2 | ||
23 | MOVE :4:E6,3 | ||
24 | MOVE :4:E7,4 | ||
25 | MOVE :5:E10,3 | ||
26 | MOVE :5:E10,5 | ||
27 | MOVE :5:E11,6 | ||
28 | MOVE :5:E13,6 | ||
29 | MOVE :5:E8,13 | ||
30 | MOVE :5:E12,7 | ||
31 | MOVE :6:E12,11 | ||
32 | MOVE :6:E13,12 | ||
33 | MOVE :4:E8,9 | ||
34 | MOVE :4:E7,8 | ||
35 | MOVE :4:E7,6 | ||
36 | MOVE :4:E9,6 | ||
37 | MOVE :4:E8,5 | ||
38 | MOVE :4:E9,4 | ||
39 | MOVE :4:E5,2 | ||
40 | MOVE :4:E4,1 | ||
41 | MOVE :4:E3,6 | ||
42 | MOVE :4:E2,7 | ||
43 | MOVE :4:E3,8 | ||
44 | MOVE :4:E3,4 | ||
45 | MOVE :4:E4,9 | ||
46 | MOVE :4:E2,9 | ||
47 | MOVE :5:E5,10 | ||
48 | MOVE :5:E6,11 | ||
49 | MOVE :4:E2,3 | ||
50 | MOVE :4:E2,1 | ||
51 | MOVE :5:E1,12 | ||
diff --git a/apps/plugins/puzzles/icons/guess.sav b/apps/plugins/puzzles/icons/guess.sav new file mode 100644 index 0000000000..69852bf769 --- /dev/null +++ b/apps/plugins/puzzles/icons/guess.sav | |||
@@ -0,0 +1,15 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :5:Guess | ||
4 | PARAMS :9:c6p4g10Bm | ||
5 | CPARAMS :9:c6p4g10Bm | ||
6 | SEED :15:313100730915729 | ||
7 | DESC :8:b5f3faed | ||
8 | UI :7:0,0,0,0 | ||
9 | NSTATES :1:6 | ||
10 | STATEPOS:1:6 | ||
11 | MOVE :8:G1,1,2,2 | ||
12 | MOVE :8:G4,3,1,1 | ||
13 | MOVE :8:G5,5,1,1 | ||
14 | MOVE :8:G4,2,1,6 | ||
15 | MOVE :8:G2,3,1,6 | ||
diff --git a/apps/plugins/puzzles/icons/icon.pl b/apps/plugins/puzzles/icons/icon.pl new file mode 100755 index 0000000000..fcb1aa3e2c --- /dev/null +++ b/apps/plugins/puzzles/icons/icon.pl | |||
@@ -0,0 +1,270 @@ | |||
1 | #!/usr/bin/perl | ||
2 | |||
3 | # Take a collection of input image files and convert them into a | ||
4 | # multi-resolution Windows .ICO icon file. | ||
5 | # | ||
6 | # The input images can be treated as having four different colour | ||
7 | # depths: | ||
8 | # | ||
9 | # - 24-bit true colour | ||
10 | # - 8-bit with custom palette | ||
11 | # - 4-bit using the Windows 16-colour palette (see comment below | ||
12 | # for details) | ||
13 | # - 1-bit using black and white only. | ||
14 | # | ||
15 | # The images can be supplied in any input format acceptable to | ||
16 | # ImageMagick, but their actual colour usage must already be | ||
17 | # appropriate for the specified mode; this script will not do any | ||
18 | # substantive conversion. So if an image intended to be used in 4- | ||
19 | # or 1-bit mode contains any colour not in the appropriate fixed | ||
20 | # palette, that's a fatal error; if an image to be used in 8-bit | ||
21 | # mode contains more than 256 distinct colours, that's also a fatal | ||
22 | # error. | ||
23 | # | ||
24 | # Command-line syntax is: | ||
25 | # | ||
26 | # icon.pl -depth imagefile [imagefile...] [-depth imagefile [imagefile...]] | ||
27 | # | ||
28 | # where `-depth' is one of `-24', `-8', `-4' or `-1', and tells the | ||
29 | # script how to treat all the image files given after that option | ||
30 | # until the next depth option. For example, you might execute | ||
31 | # | ||
32 | # icon.pl -24 48x48x24.png 32x32x24.png -8 32x32x8.png -1 monochrome.png | ||
33 | # | ||
34 | # to build an icon file containing two differently sized 24-bit | ||
35 | # images, one 8-bit image and one black and white image. | ||
36 | # | ||
37 | # Windows .ICO files support a 1-bit alpha channel on all these | ||
38 | # image types. That is, any pixel can be either opaque or fully | ||
39 | # transparent, but not partially transparent. The alpha channel is | ||
40 | # separate from the main image data, meaning that `transparent' is | ||
41 | # not required to take up a palette entry. (So an 8-bit image can | ||
42 | # have 256 distinct _opaque_ colours, plus transparent pixels as | ||
43 | # well.) If the input images have alpha channels, they will be used | ||
44 | # to determine which pixels of the icon are transparent, by simple | ||
45 | # quantisation half way up (e.g. in a PNG image with an 8-bit alpha | ||
46 | # channel, alpha values of 00-7F will be mapped to transparent | ||
47 | # pixels, and 80-FF will become opaque). | ||
48 | |||
49 | # The Windows 16-colour palette consists of: | ||
50 | # - the eight corners of the colour cube (000000, 0000FF, 00FF00, | ||
51 | # 00FFFF, FF0000, FF00FF, FFFF00, FFFFFF) | ||
52 | # - dim versions of the seven non-black corners, at 128/255 of the | ||
53 | # brightness (000080, 008000, 008080, 800000, 800080, 808000, | ||
54 | # 808080) | ||
55 | # - light grey at 192/255 of full brightness (C0C0C0). | ||
56 | %win16pal = ( | ||
57 | "\x00\x00\x00\x00" => 0, | ||
58 | "\x00\x00\x80\x00" => 1, | ||
59 | "\x00\x80\x00\x00" => 2, | ||
60 | "\x00\x80\x80\x00" => 3, | ||
61 | "\x80\x00\x00\x00" => 4, | ||
62 | "\x80\x00\x80\x00" => 5, | ||
63 | "\x80\x80\x00\x00" => 6, | ||
64 | "\xC0\xC0\xC0\x00" => 7, | ||
65 | "\x80\x80\x80\x00" => 8, | ||
66 | "\x00\x00\xFF\x00" => 9, | ||
67 | "\x00\xFF\x00\x00" => 10, | ||
68 | "\x00\xFF\xFF\x00" => 11, | ||
69 | "\xFF\x00\x00\x00" => 12, | ||
70 | "\xFF\x00\xFF\x00" => 13, | ||
71 | "\xFF\xFF\x00\x00" => 14, | ||
72 | "\xFF\xFF\xFF\x00" => 15, | ||
73 | ); | ||
74 | @win16pal = sort { $win16pal{$a} <=> $win16pal{$b} } keys %win16pal; | ||
75 | |||
76 | # The black and white palette consists of black (000000) and white | ||
77 | # (FFFFFF), obviously. | ||
78 | %win2pal = ( | ||
79 | "\x00\x00\x00\x00" => 0, | ||
80 | "\xFF\xFF\xFF\x00" => 1, | ||
81 | ); | ||
82 | @win2pal = sort { $win16pal{$a} <=> $win2pal{$b} } keys %win2pal; | ||
83 | |||
84 | @hdr = (); | ||
85 | @dat = (); | ||
86 | |||
87 | $depth = undef; | ||
88 | foreach $_ (@ARGV) { | ||
89 | if (/^-(24|8|4|1)$/) { | ||
90 | $depth = $1; | ||
91 | } elsif (defined $depth) { | ||
92 | &readicon($_, $depth); | ||
93 | } else { | ||
94 | $usage = 1; | ||
95 | } | ||
96 | } | ||
97 | if ($usage || length @hdr == 0) { | ||
98 | print "usage: icon.pl ( -24 | -8 | -4 | -1 ) image [image...]\n"; | ||
99 | print " [ ( -24 | -8 | -4 | -1 ) image [image...] ...]\n"; | ||
100 | exit 0; | ||
101 | } | ||
102 | |||
103 | # Now write out the output icon file. | ||
104 | print pack "vvv", 0, 1, scalar @hdr; # file-level header | ||
105 | $filepos = 6 + 16 * scalar @hdr; | ||
106 | for ($i = 0; $i < scalar @hdr; $i++) { | ||
107 | print $hdr[$i]; | ||
108 | print pack "V", $filepos; | ||
109 | $filepos += length($dat[$i]); | ||
110 | } | ||
111 | for ($i = 0; $i < scalar @hdr; $i++) { | ||
112 | print $dat[$i]; | ||
113 | } | ||
114 | |||
115 | sub readicon { | ||
116 | my $filename = shift @_; | ||
117 | my $depth = shift @_; | ||
118 | my $pix; | ||
119 | my $i; | ||
120 | my %pal; | ||
121 | |||
122 | # Determine the icon's width and height. | ||
123 | my $w = `identify -format %w $filename`; | ||
124 | my $h = `identify -format %h $filename`; | ||
125 | |||
126 | # Read the file in as RGBA data. We flip vertically at this | ||
127 | # point, to avoid having to do it ourselves (.BMP and hence | ||
128 | # .ICO are bottom-up). | ||
129 | my $data = []; | ||
130 | open IDATA, "convert -set colorspace sRGB -flip -depth 8 $filename rgba:- |"; | ||
131 | push @$data, $rgb while (read IDATA,$rgb,4,0) == 4; | ||
132 | close IDATA; | ||
133 | # Check we have the right amount of data. | ||
134 | $xl = $w * $h; | ||
135 | $al = scalar @$data; | ||
136 | die "wrong amount of image data ($al, expected $xl) from $filename\n" | ||
137 | unless $al == $xl; | ||
138 | |||
139 | # Build the alpha channel now, so we can exclude transparent | ||
140 | # pixels from the palette analysis. We replace transparent | ||
141 | # pixels with undef in the data array. | ||
142 | # | ||
143 | # We quantise the alpha channel half way up, so that alpha of | ||
144 | # 0x80 or more is taken to be fully opaque and 0x7F or less is | ||
145 | # fully transparent. Nasty, but the best we can do without | ||
146 | # dithering (and don't even suggest we do that!). | ||
147 | my $x; | ||
148 | my $y; | ||
149 | my $alpha = ""; | ||
150 | |||
151 | for ($y = 0; $y < $h; $y++) { | ||
152 | my $currbyte = 0, $currbits = 0; | ||
153 | for ($x = 0; $x < (($w+31)|31)-31; $x++) { | ||
154 | $pix = ($x < $w ? $data->[$y*$w+$x] : "\x00\x00\x00\xFF"); | ||
155 | my @rgba = unpack "CCCC", $pix; | ||
156 | $currbyte <<= 1; | ||
157 | $currbits++; | ||
158 | if ($rgba[3] < 0x80) { | ||
159 | if ($x < $w) { | ||
160 | $data->[$y*$w+$x] = undef; | ||
161 | } | ||
162 | $currbyte |= 1; # MS has the alpha channel inverted :-) | ||
163 | } else { | ||
164 | # Might as well flip RGBA into BGR0 while we're here. | ||
165 | if ($x < $w) { | ||
166 | $data->[$y*$w+$x] = pack "CCCC", | ||
167 | $rgba[2], $rgba[1], $rgba[0], 0; | ||
168 | } | ||
169 | } | ||
170 | if ($currbits >= 8) { | ||
171 | $alpha .= pack "C", $currbyte; | ||
172 | $currbits -= 8; | ||
173 | } | ||
174 | } | ||
175 | } | ||
176 | |||
177 | # For an 8-bit image, check we have at most 256 distinct | ||
178 | # colours, and build the palette. | ||
179 | %pal = (); | ||
180 | if ($depth == 8) { | ||
181 | my $palindex = 0; | ||
182 | foreach $pix (@$data) { | ||
183 | next unless defined $pix; | ||
184 | $pal{$pix} = $palindex++ unless defined $pal{$pix}; | ||
185 | } | ||
186 | die "too many colours in 8-bit image $filename\n" unless $palindex <= 256; | ||
187 | } elsif ($depth == 4) { | ||
188 | %pal = %win16pal; | ||
189 | } elsif ($depth == 1) { | ||
190 | %pal = %win2pal; | ||
191 | } | ||
192 | |||
193 | my $raster = ""; | ||
194 | if ($depth < 24) { | ||
195 | # For a non-24-bit image, flatten the image into one palette | ||
196 | # index per pixel. | ||
197 | $pad = 32 / $depth; # number of pixels to pad scanline to 4-byte align | ||
198 | $pmask = $pad-1; | ||
199 | for ($y = 0; $y < $h; $y++) { | ||
200 | my $currbyte = 0, $currbits = 0; | ||
201 | for ($x = 0; $x < (($w+$pmask)|$pmask)-$pmask; $x++) { | ||
202 | $currbyte <<= $depth; | ||
203 | $currbits += $depth; | ||
204 | if ($x < $w && defined ($pix = $data->[$y*$w+$x])) { | ||
205 | if (!defined $pal{$pix}) { | ||
206 | my $pixprintable = unpack "H*", $pix; | ||
207 | die "illegal colour value $pixprintable at pixel ($x,$y) in $filename\n"; | ||
208 | } | ||
209 | $currbyte |= $pal{$pix}; | ||
210 | } | ||
211 | if ($currbits >= 8) { | ||
212 | $raster .= pack "C", $currbyte; | ||
213 | $currbits -= 8; | ||
214 | } | ||
215 | } | ||
216 | } | ||
217 | } else { | ||
218 | # For a 24-bit image, reverse the order of the R,G,B values | ||
219 | # and stick a padding zero on the end. | ||
220 | # | ||
221 | # (In this loop we don't need to bother padding the | ||
222 | # scanline out to a multiple of four bytes, because every | ||
223 | # pixel takes four whole bytes anyway.) | ||
224 | for ($i = 0; $i < scalar @$data; $i++) { | ||
225 | if (defined $data->[$i]) { | ||
226 | $raster .= $data->[$i]; | ||
227 | } else { | ||
228 | $raster .= "\x00\x00\x00\x00"; | ||
229 | } | ||
230 | } | ||
231 | $depth = 32; # and adjust this | ||
232 | } | ||
233 | |||
234 | # Prepare the icon data. First the header... | ||
235 | my $data = pack "VVVvvVVVVVV", | ||
236 | 40, # size of bitmap info header | ||
237 | $w, # icon width | ||
238 | $h*2, # icon height (x2 to indicate the subsequent alpha channel) | ||
239 | 1, # 1 plane (common to all MS image formats) | ||
240 | $depth, # bits per pixel | ||
241 | 0, # no compression | ||
242 | length $raster, # image size | ||
243 | 0, 0, 0, 0; # resolution, colours used, colours important (ignored) | ||
244 | # ... then the palette ... | ||
245 | if ($depth <= 8) { | ||
246 | my $ncols = (1 << $depth); | ||
247 | my $palette = "\x00\x00\x00\x00" x $ncols; | ||
248 | foreach $i (keys %pal) { | ||
249 | substr($palette, $pal{$i}*4, 4) = $i; | ||
250 | } | ||
251 | $data .= $palette; | ||
252 | } | ||
253 | # ... the raster data we already had ready ... | ||
254 | $data .= $raster; | ||
255 | # ... and the alpha channel we already had as well. | ||
256 | $data .= $alpha; | ||
257 | |||
258 | # Prepare the header which will represent this image in the | ||
259 | # icon file. | ||
260 | my $header = pack "CCCCvvV", | ||
261 | $w, $h, # width and height (this time the real height) | ||
262 | 1 << $depth, # number of colours, if less than 256 | ||
263 | 0, # reserved | ||
264 | 1, # planes | ||
265 | $depth, # bits per pixel | ||
266 | length $data; # size of real icon data | ||
267 | |||
268 | push @hdr, $header; | ||
269 | push @dat, $data; | ||
270 | } | ||
diff --git a/apps/plugins/puzzles/icons/inertia.sav b/apps/plugins/puzzles/icons/inertia.sav new file mode 100644 index 0000000000..a6d6faed1b --- /dev/null +++ b/apps/plugins/puzzles/icons/inertia.sav | |||
@@ -0,0 +1,30 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :7:Inertia | ||
4 | PARAMS :3:8x8 | ||
5 | CPARAMS :3:8x8 | ||
6 | SEED :15:739970145068932 | ||
7 | DESC :64:sbgwsmswwgggwggmmbwgwbssbwbsbwbbwsSmgbbsbbmsgbmssgmggbmmwmbmmwsw | ||
8 | UI :2:D0 | ||
9 | NSTATES :2:21 | ||
10 | STATEPOS:1:5 | ||
11 | MOVE :1:6 | ||
12 | MOVE :1:5 | ||
13 | MOVE :1:3 | ||
14 | MOVE :1:1 | ||
15 | MOVE :1:6 | ||
16 | MOVE :1:0 | ||
17 | MOVE :1:5 | ||
18 | MOVE :1:7 | ||
19 | MOVE :1:5 | ||
20 | MOVE :1:6 | ||
21 | MOVE :1:1 | ||
22 | MOVE :1:3 | ||
23 | MOVE :1:4 | ||
24 | MOVE :1:2 | ||
25 | MOVE :1:6 | ||
26 | MOVE :1:5 | ||
27 | MOVE :1:3 | ||
28 | MOVE :1:1 | ||
29 | MOVE :1:5 | ||
30 | MOVE :1:3 | ||
diff --git a/apps/plugins/puzzles/icons/keen.sav b/apps/plugins/puzzles/icons/keen.sav new file mode 100644 index 0000000000..4adbd42d17 --- /dev/null +++ b/apps/plugins/puzzles/icons/keen.sav | |||
@@ -0,0 +1,62 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :4:Keen | ||
4 | PARAMS :3:5de | ||
5 | CPARAMS :3:5de | ||
6 | SEED :15:846699649745236 | ||
7 | DESC :48:a__a_3a_5a_a_a_3b_bac_,a5m15a7a10s2s2d2s3m40m2s2 | ||
8 | AUXINFO :52:6105af67c6ebc8de056b59ebc9a463aa54e75f647055c0a6c1bd | ||
9 | NSTATES :2:53 | ||
10 | STATEPOS:2:39 | ||
11 | MOVE :6:P0,4,2 | ||
12 | MOVE :6:P0,4,4 | ||
13 | MOVE :6:P0,4,5 | ||
14 | MOVE :6:P1,4,2 | ||
15 | MOVE :6:P1,4,4 | ||
16 | MOVE :6:P1,4,5 | ||
17 | MOVE :6:P1,3,2 | ||
18 | MOVE :6:P1,3,4 | ||
19 | MOVE :6:P1,3,5 | ||
20 | MOVE :6:R2,2,4 | ||
21 | MOVE :6:R1,2,2 | ||
22 | MOVE :6:P1,3,2 | ||
23 | MOVE :6:P1,4,2 | ||
24 | MOVE :6:R0,4,2 | ||
25 | MOVE :6:R2,3,2 | ||
26 | MOVE :6:R2,4,1 | ||
27 | MOVE :6:R1,4,4 | ||
28 | MOVE :6:R1,3,5 | ||
29 | MOVE :6:P3,4,3 | ||
30 | MOVE :6:P3,4,5 | ||
31 | MOVE :6:P4,4,3 | ||
32 | MOVE :6:P4,4,5 | ||
33 | MOVE :6:R4,4,5 | ||
34 | MOVE :6:R3,4,3 | ||
35 | MOVE :6:P3,1,2 | ||
36 | MOVE :6:P3,1,5 | ||
37 | MOVE :6:P3,0,2 | ||
38 | MOVE :6:P3,0,5 | ||
39 | MOVE :6:R3,2,1 | ||
40 | MOVE :6:R3,3,4 | ||
41 | MOVE :6:P2,0,3 | ||
42 | MOVE :6:P2,0,5 | ||
43 | MOVE :6:P2,1,3 | ||
44 | MOVE :6:P2,1,5 | ||
45 | MOVE :6:P0,1,1 | ||
46 | MOVE :6:P0,1,3 | ||
47 | MOVE :6:P1,1,1 | ||
48 | MOVE :6:P1,1,3 | ||
49 | MOVE :6:R2,0,3 | ||
50 | MOVE :6:R2,1,5 | ||
51 | MOVE :6:R3,0,5 | ||
52 | MOVE :6:R3,1,2 | ||
53 | MOVE :6:R4,1,4 | ||
54 | MOVE :6:R4,2,3 | ||
55 | MOVE :6:R4,0,2 | ||
56 | MOVE :6:R4,3,1 | ||
57 | MOVE :6:R0,2,5 | ||
58 | MOVE :6:R0,3,3 | ||
59 | MOVE :6:R1,1,3 | ||
60 | MOVE :6:R0,1,1 | ||
61 | MOVE :6:R1,0,1 | ||
62 | MOVE :6:R0,0,4 | ||
diff --git a/apps/plugins/puzzles/icons/lightup.sav b/apps/plugins/puzzles/icons/lightup.sav new file mode 100644 index 0000000000..21b59bdec4 --- /dev/null +++ b/apps/plugins/puzzles/icons/lightup.sav | |||
@@ -0,0 +1,24 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :8:Light Up | ||
4 | PARAMS :10:7x7b20s4d1 | ||
5 | CPARAMS :10:7x7b25s4d1 | ||
6 | SEED :15:538922615851330 | ||
7 | DESC :25:b3gB0c0dBaBaBa1aBd1c01g0b | ||
8 | NSTATES :2:16 | ||
9 | STATEPOS:2:16 | ||
10 | MOVE :4:L1,0 | ||
11 | MOVE :4:L2,1 | ||
12 | MOVE :4:L3,0 | ||
13 | MOVE :4:L0,3 | ||
14 | MOVE :4:L6,1 | ||
15 | MOVE :4:L3,4 | ||
16 | MOVE :4:I6,5 | ||
17 | MOVE :4:I1,5 | ||
18 | MOVE :4:I2,6 | ||
19 | MOVE :4:I3,6 | ||
20 | MOVE :4:I4,5 | ||
21 | MOVE :4:I5,6 | ||
22 | MOVE :4:L5,5 | ||
23 | MOVE :4:I6,4 | ||
24 | MOVE :4:I4,2 | ||
diff --git a/apps/plugins/puzzles/icons/loopy.sav b/apps/plugins/puzzles/icons/loopy.sav new file mode 100644 index 0000000000..11611818af --- /dev/null +++ b/apps/plugins/puzzles/icons/loopy.sav | |||
@@ -0,0 +1,120 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :5:Loopy | ||
4 | PARAMS :7:7x7t0de | ||
5 | CPARAMS :7:7x7t0de | ||
6 | DESC :31:02g222b3b2e2a2b322b2a2a3a2a1d1b | ||
7 | NSTATES :3:113 | ||
8 | STATEPOS:2:75 | ||
9 | MOVE :2:3n | ||
10 | MOVE :2:0n | ||
11 | MOVE :2:1n | ||
12 | MOVE :2:2n | ||
13 | MOVE :2:4n | ||
14 | MOVE :2:6y | ||
15 | MOVE :2:5y | ||
16 | MOVE :3:25n | ||
17 | MOVE :2:9n | ||
18 | MOVE :3:28y | ||
19 | MOVE :3:27y | ||
20 | MOVE :3:42n | ||
21 | MOVE :3:30n | ||
22 | MOVE :3:45y | ||
23 | MOVE :3:44y | ||
24 | MOVE :3:59n | ||
25 | MOVE :3:47n | ||
26 | MOVE :3:62y | ||
27 | MOVE :3:61y | ||
28 | MOVE :3:76n | ||
29 | MOVE :3:64n | ||
30 | MOVE :3:79y | ||
31 | MOVE :3:78y | ||
32 | MOVE :3:93n | ||
33 | MOVE :3:81n | ||
34 | MOVE :4:110y | ||
35 | MOVE :4:111y | ||
36 | MOVE :3:99y | ||
37 | MOVE :3:98y | ||
38 | MOVE :3:24n | ||
39 | MOVE :3:39y | ||
40 | MOVE :3:23y | ||
41 | MOVE :3:22y | ||
42 | MOVE :3:26n | ||
43 | MOVE :3:37n | ||
44 | MOVE :3:38y | ||
45 | MOVE :3:54n | ||
46 | MOVE :3:69y | ||
47 | MOVE :3:53y | ||
48 | MOVE :3:40y | ||
49 | MOVE :2:7y | ||
50 | MOVE :3:88y | ||
51 | MOVE :3:87y | ||
52 | MOVE :4:102n | ||
53 | MOVE :3:90n | ||
54 | MOVE :3:52n | ||
55 | MOVE :3:41y | ||
56 | MOVE :3:55n | ||
57 | MOVE :3:43n | ||
58 | MOVE :2:8n | ||
59 | MOVE :3:10y | ||
60 | MOVE :3:12y | ||
61 | MOVE :3:11n | ||
62 | MOVE :3:13y | ||
63 | MOVE :3:29n | ||
64 | MOVE :3:15y | ||
65 | MOVE :3:14n | ||
66 | MOVE :3:16y | ||
67 | MOVE :3:32y | ||
68 | MOVE :3:31n | ||
69 | MOVE :3:18y | ||
70 | MOVE :3:17n | ||
71 | MOVE :3:19y | ||
72 | MOVE :3:20y | ||
73 | MOVE :3:21n | ||
74 | MOVE :3:33y | ||
75 | MOVE :3:35y | ||
76 | MOVE :3:36n | ||
77 | MOVE :3:50y | ||
78 | MOVE :3:57y | ||
79 | MOVE :3:58y | ||
80 | MOVE :3:72n | ||
81 | MOVE :3:60n | ||
82 | MOVE :3:74y | ||
83 | MOVE :4:104y | ||
84 | MOVE :4:107n | ||
85 | MOVE :4:106n | ||
86 | MOVE :3:92n | ||
87 | MOVE :4:109n | ||
88 | MOVE :3:89y | ||
89 | MOVE :3:77n | ||
90 | MOVE :3:75n | ||
91 | MOVE :3:73y | ||
92 | MOVE :3:85n | ||
93 | MOVE :3:70n | ||
94 | MOVE :3:56y | ||
95 | MOVE :3:67n | ||
96 | MOVE :3:71y | ||
97 | MOVE :3:68y | ||
98 | MOVE :3:84n | ||
99 | MOVE :3:82n | ||
100 | MOVE :3:83y | ||
101 | MOVE :3:97n | ||
102 | MOVE :3:86y | ||
103 | MOVE :4:101y | ||
104 | MOVE :4:100n | ||
105 | MOVE :4:103y | ||
106 | MOVE :4:105y | ||
107 | MOVE :4:108y | ||
108 | MOVE :3:96n | ||
109 | MOVE :3:95y | ||
110 | MOVE :3:94y | ||
111 | MOVE :3:91y | ||
112 | MOVE :3:80y | ||
113 | MOVE :3:66n | ||
114 | MOVE :3:65y | ||
115 | MOVE :3:63y | ||
116 | MOVE :3:51n | ||
117 | MOVE :3:46n | ||
118 | MOVE :3:34y | ||
119 | MOVE :3:48n | ||
120 | MOVE :3:49y | ||
diff --git a/apps/plugins/puzzles/icons/magnets.sav b/apps/plugins/puzzles/icons/magnets.sav new file mode 100644 index 0000000000..3c317b70ce --- /dev/null +++ b/apps/plugins/puzzles/icons/magnets.sav | |||
@@ -0,0 +1,33 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :7:Magnets | ||
4 | PARAMS :6:6x5dtS | ||
5 | CPARAMS :6:6x5dtS | ||
6 | SEED :15:705856238774945 | ||
7 | DESC :56:2.2..1,.3.2.,2.21..,2..0.,TLRTLRBLRBTTLRLRBBLRTTTTLRBBBB | ||
8 | AUXINFO :60:ebae280db3eec279c628b6cfe4aca5a03ba24d7eba91169f1bdf275fce3f | ||
9 | NSTATES :2:24 | ||
10 | STATEPOS:2:15 | ||
11 | MOVE :4:.1,3 | ||
12 | MOVE :4:.0,1 | ||
13 | MOVE :4:?0,1 | ||
14 | MOVE :4:.2,1 | ||
15 | MOVE :4:?2,1 | ||
16 | MOVE :4:.2,4 | ||
17 | MOVE :4:?2,4 | ||
18 | MOVE :4:+2,3 | ||
19 | MOVE :4:.3,3 | ||
20 | MOVE :4:.0,2 | ||
21 | MOVE :4:?0,2 | ||
22 | MOVE :4:+1,4 | ||
23 | MOVE :4:+0,2 | ||
24 | MOVE :4:+0,0 | ||
25 | MOVE :4:+1,1 | ||
26 | MOVE :4:.2,2 | ||
27 | MOVE :4:+2,0 | ||
28 | MOVE :4:+3,1 | ||
29 | MOVE :4:.4,0 | ||
30 | MOVE :4:+5,1 | ||
31 | MOVE :4:.5,3 | ||
32 | MOVE :4:+4,3 | ||
33 | MOVE :4:.4,2 | ||
diff --git a/apps/plugins/puzzles/icons/map.sav b/apps/plugins/puzzles/icons/map.sav new file mode 100644 index 0000000000..33863e1eeb --- /dev/null +++ b/apps/plugins/puzzles/icons/map.sav | |||
@@ -0,0 +1,27 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :3:Map | ||
4 | PARAMS :10:20x20n30dn | ||
5 | CPARAMS :10:20x20n30dn | ||
6 | SEED :15:794003990129265 | ||
7 | DESC :264:dcbakatgcaaedaccabfabadbaaaagaiaaaeaiadcaaaafabccbdcaaecabggedfaebqbadgbngcblabdaadaaaeagabaaaacaacacbcaebabaabaebaafaaakabdhcdanaaceagakacbbajaaadbacbaaccbcbicdafbadgbaccbkcdaafbacbcaaabcddacaaaaddbabcdbbacabbhagajabbobcdjaecaafabahaaaffead,23a01c3c1a3d2a20b01a3a | ||
8 | AUXINFO :282:738e7a68c5d32445002968f3726646962b3604ef27a3657e0fdc0fd8180d5b747febd4619487bbc8bec5a48c709b154eb8da39c9b49be1e312a381fc2394e53126714079bd82e8444dad92419429635d1c816c53774b8c77b4ce03884c94d12bfb757cd93b5600471cb9726b3f2afe74d9932abeaa2efd6a496cad793ce5b221f943d620e883794f9d56741908 | ||
9 | NSTATES :2:18 | ||
10 | STATEPOS:2:12 | ||
11 | MOVE :4:3:20 | ||
12 | MOVE :4:0:24 | ||
13 | MOVE :4:3:10 | ||
14 | MOVE :4:1:18 | ||
15 | MOVE :4:2:11 | ||
16 | MOVE :4:3:17 | ||
17 | MOVE :4:1:23 | ||
18 | MOVE :4:3:27 | ||
19 | MOVE :4:1:29 | ||
20 | MOVE :4:0:16 | ||
21 | MOVE :4:2:13 | ||
22 | MOVE :3:1:6 | ||
23 | MOVE :3:2:2 | ||
24 | MOVE :3:0:7 | ||
25 | MOVE :3:2:9 | ||
26 | MOVE :4:0:15 | ||
27 | MOVE :3:3:5 | ||
diff --git a/apps/plugins/puzzles/icons/mines.sav b/apps/plugins/puzzles/icons/mines.sav new file mode 100644 index 0000000000..a827541163 --- /dev/null +++ b/apps/plugins/puzzles/icons/mines.sav | |||
@@ -0,0 +1,67 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :5:Mines | ||
4 | PARAMS :6:9x9n35 | ||
5 | CPARAMS :6:9x9n35 | ||
6 | SEED :15:698938038698621 | ||
7 | DESC :26:0,0,me0691ca8a278f3c371688 | ||
8 | PRIVDESC:22:me0691ca8a278f3c371688 | ||
9 | UI :3:D0C | ||
10 | TIME :7:75.2958 | ||
11 | NSTATES :2:56 | ||
12 | STATEPOS:2:41 | ||
13 | MOVE :4:O0,0 | ||
14 | MOVE :4:F1,2 | ||
15 | MOVE :4:F0,2 | ||
16 | MOVE :4:O2,2 | ||
17 | MOVE :4:F2,1 | ||
18 | MOVE :4:F3,1 | ||
19 | MOVE :4:F3,2 | ||
20 | MOVE :4:F3,3 | ||
21 | MOVE :4:F1,3 | ||
22 | MOVE :4:F2,3 | ||
23 | MOVE :4:C1,0 | ||
24 | MOVE :4:C2,0 | ||
25 | MOVE :4:C3,0 | ||
26 | MOVE :4:F5,0 | ||
27 | MOVE :4:F5,1 | ||
28 | MOVE :4:C4,1 | ||
29 | MOVE :4:O6,1 | ||
30 | MOVE :4:O6,2 | ||
31 | MOVE :4:O6,3 | ||
32 | MOVE :4:F7,1 | ||
33 | MOVE :4:O7,4 | ||
34 | MOVE :4:O5,4 | ||
35 | MOVE :4:F5,3 | ||
36 | MOVE :4:F5,5 | ||
37 | MOVE :4:F6,6 | ||
38 | MOVE :4:C6,5 | ||
39 | MOVE :4:F8,6 | ||
40 | MOVE :4:C6,3 | ||
41 | MOVE :4:F8,2 | ||
42 | MOVE :4:C7,2 | ||
43 | MOVE :4:F8,0 | ||
44 | MOVE :4:F7,0 | ||
45 | MOVE :4:F6,0 | ||
46 | MOVE :4:C4,2 | ||
47 | MOVE :4:F4,4 | ||
48 | MOVE :4:F4,5 | ||
49 | MOVE :4:F3,4 | ||
50 | MOVE :4:C5,6 | ||
51 | MOVE :4:F7,7 | ||
52 | MOVE :4:F8,7 | ||
53 | MOVE :4:F7,8 | ||
54 | MOVE :4:O4,8 | ||
55 | MOVE :4:F3,6 | ||
56 | MOVE :4:C4,6 | ||
57 | MOVE :4:F3,8 | ||
58 | MOVE :4:F5,8 | ||
59 | MOVE :4:C6,7 | ||
60 | MOVE :4:C3,7 | ||
61 | MOVE :4:F2,5 | ||
62 | MOVE :4:F2,4 | ||
63 | MOVE :4:F1,8 | ||
64 | MOVE :4:F1,7 | ||
65 | MOVE :4:C2,7 | ||
66 | MOVE :4:C2,6 | ||
67 | MOVE :4:C1,6 | ||
diff --git a/apps/plugins/puzzles/icons/net.sav b/apps/plugins/puzzles/icons/net.sav new file mode 100644 index 0000000000..06a5426280 --- /dev/null +++ b/apps/plugins/puzzles/icons/net.sav | |||
@@ -0,0 +1,53 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :3:Net | ||
4 | PARAMS :3:5x5 | ||
5 | CPARAMS :3:5x5 | ||
6 | DESC :25:1115337157375775157135131 | ||
7 | UI :9:O0,0;C2,2 | ||
8 | NSTATES :2:45 | ||
9 | STATEPOS:2:45 | ||
10 | MOVE :4:C0,0 | ||
11 | MOVE :4:L0,0 | ||
12 | MOVE :4:L0,1 | ||
13 | MOVE :4:C0,2 | ||
14 | MOVE :4:L0,2 | ||
15 | MOVE :4:A0,3 | ||
16 | MOVE :4:L0,3 | ||
17 | MOVE :4:L0,4 | ||
18 | MOVE :4:L1,4 | ||
19 | MOVE :4:A2,4 | ||
20 | MOVE :4:A2,4 | ||
21 | MOVE :4:L2,4 | ||
22 | MOVE :4:C1,0 | ||
23 | MOVE :4:L1,0 | ||
24 | MOVE :4:L3,0 | ||
25 | MOVE :4:L2,0 | ||
26 | MOVE :4:A4,0 | ||
27 | MOVE :4:A4,0 | ||
28 | MOVE :4:L4,0 | ||
29 | MOVE :4:A4,1 | ||
30 | MOVE :4:L4,1 | ||
31 | MOVE :4:L3,1 | ||
32 | MOVE :4:A3,2 | ||
33 | MOVE :4:A3,2 | ||
34 | MOVE :4:L3,2 | ||
35 | MOVE :4:L2,2 | ||
36 | MOVE :4:A2,1 | ||
37 | MOVE :4:A2,1 | ||
38 | MOVE :4:A1,1 | ||
39 | MOVE :4:A1,1 | ||
40 | MOVE :4:A1,1 | ||
41 | MOVE :4:A1,1 | ||
42 | MOVE :4:A1,1 | ||
43 | MOVE :4:A1,1 | ||
44 | MOVE :4:A1,2 | ||
45 | MOVE :4:A1,2 | ||
46 | MOVE :4:A1,3 | ||
47 | MOVE :4:C2,3 | ||
48 | MOVE :4:A3,3 | ||
49 | MOVE :4:A4,4 | ||
50 | MOVE :4:A4,4 | ||
51 | MOVE :4:A4,3 | ||
52 | MOVE :4:A4,2 | ||
53 | MOVE :4:A4,2 | ||
diff --git a/apps/plugins/puzzles/icons/netslide.sav b/apps/plugins/puzzles/icons/netslide.sav new file mode 100644 index 0000000000..f37178ee0c --- /dev/null +++ b/apps/plugins/puzzles/icons/netslide.sav | |||
@@ -0,0 +1,47 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :8:Netslide | ||
4 | PARAMS :3:4x4 | ||
5 | CPARAMS :3:4x4 | ||
6 | SEED :15:344208514520242 | ||
7 | DESC :16:49b59aca247714b4 | ||
8 | AUXINFO :34:60d28a22f68cdb6078d67a4d6069b9ff54 | ||
9 | NSTATES :2:38 | ||
10 | STATEPOS:2:31 | ||
11 | MOVE :4:R0,1 | ||
12 | MOVE :4:C1,1 | ||
13 | MOVE :4:R1,1 | ||
14 | MOVE :4:R1,1 | ||
15 | MOVE :4:C3,1 | ||
16 | MOVE :4:C1,1 | ||
17 | MOVE :4:R1,1 | ||
18 | MOVE :4:R1,1 | ||
19 | MOVE :4:R3,1 | ||
20 | MOVE :4:R0,1 | ||
21 | MOVE :4:C1,1 | ||
22 | MOVE :5:R3,-1 | ||
23 | MOVE :5:R0,-1 | ||
24 | MOVE :4:R0,1 | ||
25 | MOVE :4:R0,1 | ||
26 | MOVE :4:C0,1 | ||
27 | MOVE :5:R0,-1 | ||
28 | MOVE :5:R0,-1 | ||
29 | MOVE :5:C1,-1 | ||
30 | MOVE :4:R1,1 | ||
31 | MOVE :4:C1,1 | ||
32 | MOVE :5:R1,-1 | ||
33 | MOVE :5:C0,-1 | ||
34 | MOVE :5:C0,-1 | ||
35 | MOVE :4:R3,1 | ||
36 | MOVE :4:C0,1 | ||
37 | MOVE :4:C0,1 | ||
38 | MOVE :5:R3,-1 | ||
39 | MOVE :4:C0,1 | ||
40 | MOVE :5:R3,-1 | ||
41 | MOVE :5:C1,-1 | ||
42 | MOVE :4:R0,1 | ||
43 | MOVE :4:C0,1 | ||
44 | MOVE :5:R0,-1 | ||
45 | MOVE :5:C0,-1 | ||
46 | MOVE :4:C1,1 | ||
47 | MOVE :4:R3,1 | ||
diff --git a/apps/plugins/puzzles/icons/palisade.sav b/apps/plugins/puzzles/icons/palisade.sav new file mode 100644 index 0000000000..a935e890bb --- /dev/null +++ b/apps/plugins/puzzles/icons/palisade.sav | |||
@@ -0,0 +1,50 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :8:Palisade | ||
4 | PARAMS :5:5x5n5 | ||
5 | CPARAMS :5:5x5n5 | ||
6 | SEED :15:930059588777257 | ||
7 | DESC :13:2d23c33e2c1b2 | ||
8 | AUXINFO :52:14a191be1282597737537139d11d87fb4f21ad4a8f31e67b4441 | ||
9 | NSTATES :2:41 | ||
10 | STATEPOS:2:27 | ||
11 | MOVE :14:F0,1,16F0,0,64 | ||
12 | MOVE :15:F0,0,32F1,0,128 | ||
13 | MOVE :12:F1,1,8F0,1,2 | ||
14 | MOVE :12:F1,0,4F1,1,1 | ||
15 | MOVE :14:F0,2,16F0,1,64 | ||
16 | MOVE :12:F1,2,8F0,2,2 | ||
17 | MOVE :12:F0,3,1F0,2,4 | ||
18 | MOVE :15:F2,0,128F1,0,32 | ||
19 | MOVE :12:F2,0,4F2,1,1 | ||
20 | MOVE :12:F3,0,8F2,0,2 | ||
21 | MOVE :15:F1,4,128F0,4,32 | ||
22 | MOVE :14:F1,4,16F1,3,64 | ||
23 | MOVE :15:F2,4,128F1,4,32 | ||
24 | MOVE :14:F0,3,64F0,4,16 | ||
25 | MOVE :15:F1,3,128F0,3,32 | ||
26 | MOVE :12:F1,3,1F1,2,4 | ||
27 | MOVE :15:F4,4,128F3,4,32 | ||
28 | MOVE :14:F4,4,16F4,3,64 | ||
29 | MOVE :12:F3,4,8F2,4,2 | ||
30 | MOVE :12:F2,4,1F2,3,4 | ||
31 | MOVE :12:F2,3,8F1,3,2 | ||
32 | MOVE :14:F2,2,64F2,3,16 | ||
33 | MOVE :15:F2,3,32F3,3,128 | ||
34 | MOVE :12:F3,3,4F3,4,1 | ||
35 | MOVE :12:F4,3,8F3,3,2 | ||
36 | MOVE :14:F4,3,16F4,2,64 | ||
37 | MOVE :12:F1,2,1F1,1,4 | ||
38 | MOVE :15:F2,1,128F1,1,32 | ||
39 | MOVE :15:F2,2,128F1,2,32 | ||
40 | MOVE :12:F2,2,1F2,1,4 | ||
41 | MOVE :15:F3,2,128F2,2,32 | ||
42 | MOVE :14:F3,2,64F3,3,16 | ||
43 | MOVE :12:F4,2,8F3,2,2 | ||
44 | MOVE :12:F3,2,1F3,1,4 | ||
45 | MOVE :15:F2,1,32F3,1,128 | ||
46 | MOVE :14:F4,2,16F4,1,64 | ||
47 | MOVE :12:F4,1,8F3,1,2 | ||
48 | MOVE :14:F3,0,64F3,1,16 | ||
49 | MOVE :15:F4,0,128F3,0,32 | ||
50 | MOVE :12:F4,1,1F4,0,4 | ||
diff --git a/apps/plugins/puzzles/icons/pattern.sav b/apps/plugins/puzzles/icons/pattern.sav new file mode 100644 index 0000000000..97c2396052 --- /dev/null +++ b/apps/plugins/puzzles/icons/pattern.sav | |||
@@ -0,0 +1,29 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :7:Pattern | ||
4 | PARAMS :5:10x10 | ||
5 | CPARAMS :5:10x10 | ||
6 | DESC :67:3.4/2.2/4.1/2.3/2.3.2/4/6/6/3.1/1/5/5/1.1/4/5/6/2.3/3.3/1.1.3/1.1.4 | ||
7 | NSTATES :2:22 | ||
8 | STATEPOS:2:22 | ||
9 | MOVE :8:F6,4,1,2 | ||
10 | MOVE :8:F7,4,1,2 | ||
11 | MOVE :8:F4,5,2,1 | ||
12 | MOVE :8:F5,4,1,1 | ||
13 | MOVE :8:E0,5,2,1 | ||
14 | MOVE :8:E0,4,3,1 | ||
15 | MOVE :8:F0,6,1,4 | ||
16 | MOVE :8:F0,1,1,2 | ||
17 | MOVE :8:F0,1,5,1 | ||
18 | MOVE :8:E1,2,1,1 | ||
19 | MOVE :8:F2,0,1,4 | ||
20 | MOVE :8:E3,2,1,1 | ||
21 | MOVE :8:F3,0,1,1 | ||
22 | MOVE :8:F4,0,1,1 | ||
23 | MOVE :8:F3,3,1,1 | ||
24 | MOVE :8:E6,3,4,1 | ||
25 | MOVE :8:F6,6,1,4 | ||
26 | MOVE :8:F7,6,1,4 | ||
27 | MOVE :8:E6,0,1,4 | ||
28 | MOVE :8:E7,0,1,3 | ||
29 | MOVE :8:E5,1,1,1 | ||
diff --git a/apps/plugins/puzzles/icons/pearl.sav b/apps/plugins/puzzles/icons/pearl.sav new file mode 100644 index 0000000000..730ca85149 --- /dev/null +++ b/apps/plugins/puzzles/icons/pearl.sav | |||
@@ -0,0 +1,23 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :5:Pearl | ||
4 | PARAMS :5:6x6dt | ||
5 | CPARAMS :5:6x6dt | ||
6 | SEED :15:901944054393278 | ||
7 | DESC :17:BbBfWcWbWBaBeWgWa | ||
8 | AUXINFO :72:f8bbe71b9be753d5fa143df207d7797ba62a9b3996eb8b8889487e1a2bd659d91a5e73e1 | ||
9 | NSTATES :2:14 | ||
10 | STATEPOS:1:7 | ||
11 | MOVE :55:F4,2,0;F1,1,0;F4,1,0;F1,0,0;F8,0,0;F2,0,1;F8,0,1;F2,0,2 | ||
12 | MOVE :27:F1,0,3;F4,1,3;F1,1,3;F4,2,3 | ||
13 | MOVE :27:F8,3,0;F2,3,1;F8,3,1;F2,3,2 | ||
14 | MOVE :97:F2,4,2;F8,4,1;F2,4,1;F8,4,0;F1,4,0;F4,5,0;F8,5,0;F2,5,1;F8,5,1;F2,5,2;F8,5,2;F2,5,3;F4,5,3;F1,4,3 | ||
15 | MOVE :13:F4,4,2;F1,3,2 | ||
16 | MOVE :13:F4,3,0;F1,2,0 | ||
17 | MOVE :69:F2,2,3;F8,2,2;F2,2,2;F8,2,1;F4,2,1;F1,1,1;F8,1,1;F2,1,2;F4,1,2;F1,0,2 | ||
18 | MOVE :41:F8,0,3;F2,0,4;F8,0,4;F2,0,5;F1,0,5;F4,1,5 | ||
19 | MOVE :27:F1,1,4;F4,2,4;F1,2,4;F4,3,4 | ||
20 | MOVE :13:F8,1,4;F2,1,5 | ||
21 | MOVE :55:F1,3,5;F4,4,5;F1,4,5;F4,5,5;F2,5,5;F8,5,4;F4,5,4;F1,4,4 | ||
22 | MOVE :13:F2,3,5;F8,3,4 | ||
23 | MOVE :13:F2,4,4;F8,4,3 | ||
diff --git a/apps/plugins/puzzles/icons/pegs.sav b/apps/plugins/puzzles/icons/pegs.sav new file mode 100644 index 0000000000..22b8a0d82f --- /dev/null +++ b/apps/plugins/puzzles/icons/pegs.sav | |||
@@ -0,0 +1,16 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :4:Pegs | ||
4 | PARAMS :8:7x7cross | ||
5 | CPARAMS :8:7x7cross | ||
6 | SEED :15:103342250484448 | ||
7 | DESC :49:OOPPPOOOOPPPOOPPPPPPPPPPHPPPPPPPPPPOOPPPOOOOPPPOO | ||
8 | NSTATES :1:8 | ||
9 | STATEPOS:1:8 | ||
10 | MOVE :7:3,1-3,3 | ||
11 | MOVE :7:5,2-3,2 | ||
12 | MOVE :7:5,4-5,2 | ||
13 | MOVE :7:3,4-5,4 | ||
14 | MOVE :7:6,4-4,4 | ||
15 | MOVE :7:4,0-4,2 | ||
16 | MOVE :7:2,0-4,0 | ||
diff --git a/apps/plugins/puzzles/icons/range.sav b/apps/plugins/puzzles/icons/range.sav new file mode 100644 index 0000000000..708e7db248 --- /dev/null +++ b/apps/plugins/puzzles/icons/range.sav | |||
@@ -0,0 +1,36 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :5:Range | ||
4 | PARAMS :3:7x7 | ||
5 | CPARAMS :3:7x7 | ||
6 | SEED :15:989032078841515 | ||
7 | DESC :22:d7b3e8e5c7a7c13e4e8b4d | ||
8 | UI :1:0 | ||
9 | NSTATES :2:27 | ||
10 | STATEPOS:2:27 | ||
11 | MOVE :5:W,4,2 | ||
12 | MOVE :5:W,4,3 | ||
13 | MOVE :5:W,4,4 | ||
14 | MOVE :5:W,4,5 | ||
15 | MOVE :5:W,4,6 | ||
16 | MOVE :5:W,4,0 | ||
17 | MOVE :5:W,3,1 | ||
18 | MOVE :5:W,2,1 | ||
19 | MOVE :5:W,1,1 | ||
20 | MOVE :5:W,0,1 | ||
21 | MOVE :5:W,6,1 | ||
22 | MOVE :5:W,5,1 | ||
23 | MOVE :5:W,5,5 | ||
24 | MOVE :5:W,1,5 | ||
25 | MOVE :5:B,5,2 | ||
26 | MOVE :5:W,5,3 | ||
27 | MOVE :5:W,6,3 | ||
28 | MOVE :5:W,3,6 | ||
29 | MOVE :5:W,2,6 | ||
30 | MOVE :5:B,3,5 | ||
31 | MOVE :5:W,2,4 | ||
32 | MOVE :5:W,2,2 | ||
33 | MOVE :5:B,2,3 | ||
34 | MOVE :5:W,1,3 | ||
35 | MOVE :5:W,3,3 | ||
36 | MOVE :5:W,0,5 | ||
diff --git a/apps/plugins/puzzles/icons/rect.sav b/apps/plugins/puzzles/icons/rect.sav new file mode 100644 index 0000000000..17264daeeb --- /dev/null +++ b/apps/plugins/puzzles/icons/rect.sav | |||
@@ -0,0 +1,17 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :10:Rectangles | ||
4 | PARAMS :3:7x7 | ||
5 | CPARAMS :3:7x7 | ||
6 | DESC :33:a3d2b2a3_2a4a8h2a3c4_2b2c3a3_3c3b | ||
7 | NSTATES :2:10 | ||
8 | STATEPOS:2:10 | ||
9 | MOVE :8:R0,6,3,1 | ||
10 | MOVE :8:R6,4,1,3 | ||
11 | MOVE :8:R3,6,3,1 | ||
12 | MOVE :8:R4,4,2,1 | ||
13 | MOVE :8:R3,5,3,1 | ||
14 | MOVE :8:R6,1,1,3 | ||
15 | MOVE :8:R5,0,2,1 | ||
16 | MOVE :8:R5,1,1,2 | ||
17 | MOVE :8:R4,3,2,1 | ||
diff --git a/apps/plugins/puzzles/icons/samegame.sav b/apps/plugins/puzzles/icons/samegame.sav new file mode 100644 index 0000000000..f92b52d1b6 --- /dev/null +++ b/apps/plugins/puzzles/icons/samegame.sav | |||
@@ -0,0 +1,34 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :9:Same Game | ||
4 | PARAMS :9:10x10c3s2 | ||
5 | CPARAMS :9:10x10c3s2 | ||
6 | SEED :15:785412408200083 | ||
7 | DESC :199:1,1,3,1,2,2,1,2,3,2,2,2,3,3,2,1,1,1,3,2,3,3,2,3,1,3,2,1,1,3,1,2,2,2,3,2,3,2,3,2,1,3,1,2,1,2,3,2,1,3,2,3,1,1,3,3,1,3,3,3,1,1,3,2,2,1,1,2,1,2,2,2,3,1,3,2,2,1,2,3,3,1,2,3,1,3,3,2,1,3,3,1,3,1,2,2,1,3,1,2 | ||
8 | NSTATES :2:26 | ||
9 | STATEPOS:2:13 | ||
10 | MOVE :6:M94,95 | ||
11 | MOVE :6:M83,84 | ||
12 | MOVE :9:M83,93,94 | ||
13 | MOVE :6:M93,94 | ||
14 | MOVE :6:M20,21 | ||
15 | MOVE :15:M20,21,22,31,32 | ||
16 | MOVE :6:M70,71 | ||
17 | MOVE :6:M80,90 | ||
18 | MOVE :9:M73,82,83 | ||
19 | MOVE :18:M72,73,74,82,83,92 | ||
20 | MOVE :12:M51,61,62,72 | ||
21 | MOVE :9:M35,36,46 | ||
22 | MOVE :12:M49,57,58,59 | ||
23 | MOVE :6:M59,69 | ||
24 | MOVE :9:M69,79,89 | ||
25 | MOVE :12:M78,79,89,99 | ||
26 | MOVE :24:M45,46,47,54,55,57,64,67 | ||
27 | MOVE :36:M36,46,55,56,57,66,67,68,77,78,88,98 | ||
28 | MOVE :9:M76,77,87 | ||
29 | MOVE :6:M97,98 | ||
30 | MOVE :6:M94,95 | ||
31 | MOVE :45:M50,60,61,70,71,81,82,83,84,85,90,91,92,93,94 | ||
32 | MOVE :12:M73,81,82,83 | ||
33 | MOVE :6:M92,93 | ||
34 | MOVE :9:M81,90,91 | ||
diff --git a/apps/plugins/puzzles/icons/screenshot.sh b/apps/plugins/puzzles/icons/screenshot.sh new file mode 100755 index 0000000000..0e2a06eea7 --- /dev/null +++ b/apps/plugins/puzzles/icons/screenshot.sh | |||
@@ -0,0 +1,25 @@ | |||
1 | #!/bin/sh | ||
2 | |||
3 | # Generate a screenshot from a puzzle save file. Takes the | ||
4 | # following arguments, in order: | ||
5 | # | ||
6 | # - the name of the puzzle binary | ||
7 | # - the name of the save file | ||
8 | # - the name of the output image file | ||
9 | # - (optionally) the proportion of the next move to redo before | ||
10 | # taking the screenshot. | ||
11 | # | ||
12 | # This script requires access to an X server in order to run, but | ||
13 | # seems to work fine under xvfb-run if you haven't got a real one | ||
14 | # available (or if you don't want to use it for some reason). | ||
15 | |||
16 | binary="$1" | ||
17 | save="$2" | ||
18 | image="$3" | ||
19 | if test "x$4" != "x"; then | ||
20 | redo="--redo $4" | ||
21 | else | ||
22 | redo= | ||
23 | fi | ||
24 | |||
25 | "$binary" $redo --screenshot "$image" --load "$save" | ||
diff --git a/apps/plugins/puzzles/icons/signpost.sav b/apps/plugins/puzzles/icons/signpost.sav new file mode 100644 index 0000000000..9ad1958ddf --- /dev/null +++ b/apps/plugins/puzzles/icons/signpost.sav | |||
@@ -0,0 +1,23 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :8:Signpost | ||
4 | PARAMS :4:4x4c | ||
5 | CPARAMS :4:4x4c | ||
6 | SEED :15:230468784719861 | ||
7 | DESC :19:1eceebecfbfhgcaa16a | ||
8 | NSTATES :2:15 | ||
9 | STATEPOS:2:11 | ||
10 | MOVE :8:L2,1-3,1 | ||
11 | MOVE :8:L0,1-1,0 | ||
12 | MOVE :8:L2,2-1,1 | ||
13 | MOVE :8:L1,2-0,3 | ||
14 | MOVE :8:L0,2-2,0 | ||
15 | MOVE :8:L1,3-1,2 | ||
16 | MOVE :8:L1,1-1,3 | ||
17 | MOVE :8:L1,0-3,0 | ||
18 | MOVE :8:L0,0-0,1 | ||
19 | MOVE :8:L3,0-3,2 | ||
20 | MOVE :8:L3,2-0,2 | ||
21 | MOVE :8:L3,1-2,2 | ||
22 | MOVE :8:L2,3-2,1 | ||
23 | MOVE :8:L2,0-2,3 | ||
diff --git a/apps/plugins/puzzles/icons/singles.sav b/apps/plugins/puzzles/icons/singles.sav new file mode 100644 index 0000000000..260fd1f2b3 --- /dev/null +++ b/apps/plugins/puzzles/icons/singles.sav | |||
@@ -0,0 +1,45 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :7:Singles | ||
4 | PARAMS :5:6x6dk | ||
5 | CPARAMS :5:6x6dk | ||
6 | SEED :15:781273601054598 | ||
7 | DESC :36:361566412253452144234115163346553461 | ||
8 | NSTATES :2:37 | ||
9 | STATEPOS:2:22 | ||
10 | MOVE :4:B1,0 | ||
11 | MOVE :4:C0,0 | ||
12 | MOVE :4:C1,1 | ||
13 | MOVE :4:C2,0 | ||
14 | MOVE :4:C0,1 | ||
15 | MOVE :4:B0,2 | ||
16 | MOVE :4:C0,3 | ||
17 | MOVE :4:C1,2 | ||
18 | MOVE :4:C4,3 | ||
19 | MOVE :4:B3,3 | ||
20 | MOVE :4:C3,2 | ||
21 | MOVE :4:C2,3 | ||
22 | MOVE :4:C3,4 | ||
23 | MOVE :4:B2,4 | ||
24 | MOVE :4:C1,4 | ||
25 | MOVE :4:C2,5 | ||
26 | MOVE :4:B1,5 | ||
27 | MOVE :4:C0,5 | ||
28 | MOVE :4:C0,4 | ||
29 | MOVE :4:C1,3 | ||
30 | MOVE :4:C3,5 | ||
31 | MOVE :4:B5,4 | ||
32 | MOVE :4:C4,4 | ||
33 | MOVE :4:C5,5 | ||
34 | MOVE :4:C5,3 | ||
35 | MOVE :4:C4,5 | ||
36 | MOVE :4:B4,0 | ||
37 | MOVE :4:C3,0 | ||
38 | MOVE :4:C4,1 | ||
39 | MOVE :4:C5,0 | ||
40 | MOVE :4:C5,1 | ||
41 | MOVE :4:B4,2 | ||
42 | MOVE :4:C5,2 | ||
43 | MOVE :4:C3,1 | ||
44 | MOVE :4:B2,1 | ||
45 | MOVE :4:C2,2 | ||
diff --git a/apps/plugins/puzzles/icons/sixteen.sav b/apps/plugins/puzzles/icons/sixteen.sav new file mode 100644 index 0000000000..076b1fbd4d --- /dev/null +++ b/apps/plugins/puzzles/icons/sixteen.sav | |||
@@ -0,0 +1,39 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :7:Sixteen | ||
4 | PARAMS :3:4x4 | ||
5 | CPARAMS :3:4x4 | ||
6 | SEED :15:601798566229573 | ||
7 | DESC :38:2,16,3,10,13,8,7,4,9,14,12,11,15,1,5,6 | ||
8 | NSTATES :2:31 | ||
9 | STATEPOS:2:24 | ||
10 | MOVE :5:C3,-1 | ||
11 | MOVE :4:R0,1 | ||
12 | MOVE :4:C1,1 | ||
13 | MOVE :5:R0,-1 | ||
14 | MOVE :5:C1,-1 | ||
15 | MOVE :5:C3,-1 | ||
16 | MOVE :4:R2,1 | ||
17 | MOVE :4:R2,1 | ||
18 | MOVE :4:C3,1 | ||
19 | MOVE :5:C2,-1 | ||
20 | MOVE :5:C2,-1 | ||
21 | MOVE :4:R1,1 | ||
22 | MOVE :4:R1,1 | ||
23 | MOVE :4:C2,1 | ||
24 | MOVE :4:C2,1 | ||
25 | MOVE :4:R3,1 | ||
26 | MOVE :4:R3,1 | ||
27 | MOVE :4:C1,1 | ||
28 | MOVE :5:R2,-1 | ||
29 | MOVE :5:R2,-1 | ||
30 | MOVE :5:C1,-1 | ||
31 | MOVE :4:R2,1 | ||
32 | MOVE :4:C0,1 | ||
33 | MOVE :4:R3,1 | ||
34 | MOVE :5:R2,-1 | ||
35 | MOVE :5:C1,-1 | ||
36 | MOVE :4:R2,1 | ||
37 | MOVE :4:C1,1 | ||
38 | MOVE :5:R3,-1 | ||
39 | MOVE :5:C0,-1 | ||
diff --git a/apps/plugins/puzzles/icons/slant.sav b/apps/plugins/puzzles/icons/slant.sav new file mode 100644 index 0000000000..02017e5d48 --- /dev/null +++ b/apps/plugins/puzzles/icons/slant.sav | |||
@@ -0,0 +1,51 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :5:Slant | ||
4 | PARAMS :5:8x8de | ||
5 | CPARAMS :5:8x8de | ||
6 | DESC :47:a10h23a32a02b22e3a2c1g3a20d32a0c221a210i0a101b0 | ||
7 | NSTATES :2:44 | ||
8 | STATEPOS:2:44 | ||
9 | MOVE :4:/7,0 | ||
10 | MOVE :4:\7,1 | ||
11 | MOVE :4:\1,0 | ||
12 | MOVE :4:/2,0 | ||
13 | MOVE :4:\0,4 | ||
14 | MOVE :4:/0,5 | ||
15 | MOVE :4:\0,6 | ||
16 | MOVE :4:/0,7 | ||
17 | MOVE :4:\1,7 | ||
18 | MOVE :4:/7,7 | ||
19 | MOVE :4:/3,7 | ||
20 | MOVE :4:\4,7 | ||
21 | MOVE :4:\5,7 | ||
22 | MOVE :4:/2,7 | ||
23 | MOVE :4:/7,4 | ||
24 | MOVE :4:\7,5 | ||
25 | MOVE :4:\7,3 | ||
26 | MOVE :4:\7,2 | ||
27 | MOVE :4:/6,2 | ||
28 | MOVE :4:\6,3 | ||
29 | MOVE :4:\7,6 | ||
30 | MOVE :4:/3,0 | ||
31 | MOVE :4:/2,1 | ||
32 | MOVE :4:\3,1 | ||
33 | MOVE :4:/2,2 | ||
34 | MOVE :4:\3,2 | ||
35 | MOVE :4:/2,3 | ||
36 | MOVE :4:\3,3 | ||
37 | MOVE :4:\1,1 | ||
38 | MOVE :4:/0,1 | ||
39 | MOVE :4:\0,2 | ||
40 | MOVE :4:\1,2 | ||
41 | MOVE :4:\1,3 | ||
42 | MOVE :4:/0,3 | ||
43 | MOVE :4:\1,4 | ||
44 | MOVE :4:\0,0 | ||
45 | MOVE :4:\5,3 | ||
46 | MOVE :4:\6,4 | ||
47 | MOVE :4:/5,4 | ||
48 | MOVE :4:/5,5 | ||
49 | MOVE :4:\6,5 | ||
50 | MOVE :4:/4,5 | ||
51 | MOVE :4:\4,6 | ||
diff --git a/apps/plugins/puzzles/icons/solo.sav b/apps/plugins/puzzles/icons/solo.sav new file mode 100644 index 0000000000..385cc68fe5 --- /dev/null +++ b/apps/plugins/puzzles/icons/solo.sav | |||
@@ -0,0 +1,36 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :4:Solo | ||
4 | PARAMS :3:3x3 | ||
5 | CPARAMS :3:3x3 | ||
6 | DESC :73:a2e9a5b6a2b3_7a1_4a9_6a2b4_1a7_2b1_7e6_9b2_5a8_1b6a5_9a3_8a7_2b8a6b1a1e4a | ||
7 | NSTATES :2:29 | ||
8 | STATEPOS:2:29 | ||
9 | MOVE :6:R7,1,1 | ||
10 | MOVE :6:R4,6,1 | ||
11 | MOVE :6:R5,0,1 | ||
12 | MOVE :6:R0,0,4 | ||
13 | MOVE :6:R2,0,6 | ||
14 | MOVE :6:R1,2,3 | ||
15 | MOVE :6:R0,3,9 | ||
16 | MOVE :6:R1,3,5 | ||
17 | MOVE :6:R2,4,8 | ||
18 | MOVE :6:R0,5,3 | ||
19 | MOVE :6:R1,5,6 | ||
20 | MOVE :6:R1,6,4 | ||
21 | MOVE :6:R4,7,4 | ||
22 | MOVE :6:R7,6,2 | ||
23 | MOVE :6:R7,7,5 | ||
24 | MOVE :6:R8,8,6 | ||
25 | MOVE :6:R7,3,3 | ||
26 | MOVE :6:R8,3,7 | ||
27 | MOVE :6:R8,3,8 | ||
28 | MOVE :6:R6,4,5 | ||
29 | MOVE :6:R7,5,7 | ||
30 | MOVE :6:R8,5,4 | ||
31 | MOVE :6:R7,2,8 | ||
32 | MOVE :6:R8,0,5 | ||
33 | MOVE :6:R4,2,5 | ||
34 | MOVE :6:R4,3,6 | ||
35 | MOVE :6:R5,4,4 | ||
36 | MOVE :6:R4,5,9 | ||
diff --git a/apps/plugins/puzzles/icons/square.pl b/apps/plugins/puzzles/icons/square.pl new file mode 100755 index 0000000000..815b94b532 --- /dev/null +++ b/apps/plugins/puzzles/icons/square.pl | |||
@@ -0,0 +1,95 @@ | |||
1 | #!/usr/bin/perl | ||
2 | |||
3 | # Read an input image, crop its border to a standard width, and | ||
4 | # convert it into a square output image. Parameters are: | ||
5 | # | ||
6 | # - the required total image size | ||
7 | # - the output border thickness | ||
8 | # - the input image file name | ||
9 | # - the output image file name. | ||
10 | |||
11 | ($osize, $oborder, $infile, $outfile) = @ARGV; | ||
12 | |||
13 | # Determine the input image's size. | ||
14 | $ident = `identify -format "%w %h" $infile`; | ||
15 | $ident =~ /(\d+) (\d+)/ or die "unable to get size for $infile\n"; | ||
16 | ($w, $h) = ($1, $2); | ||
17 | |||
18 | # Read the input image data. | ||
19 | $data = []; | ||
20 | open IDATA, "convert -depth 8 $infile rgb:- |"; | ||
21 | push @$data, $rgb while (read IDATA,$rgb,3,0) == 3; | ||
22 | close IDATA; | ||
23 | # Check we have the right amount of data. | ||
24 | $xl = $w * $h; | ||
25 | $al = scalar @$data; | ||
26 | die "wrong amount of image data ($al, expected $xl) from $infile\n" | ||
27 | unless $al == $xl; | ||
28 | |||
29 | # Find the background colour, by looking around the entire border | ||
30 | # and finding the most popular pixel colour. | ||
31 | for ($i = 0; $i < $w; $i++) { | ||
32 | $pcount{$data->[$i]}++; # top row | ||
33 | $pcount{$data->[($h-1)*$w+$i]}++; # bottom row | ||
34 | } | ||
35 | for ($i = 1; $i < $h-1; $i++) { | ||
36 | $pcount{$data->[$i*$w]}++; # left column | ||
37 | $pcount{$data->[$i*$w+$w-1]}++; # right column | ||
38 | } | ||
39 | @plist = sort { $pcount{$b} <=> $pcount{$a} } keys %pcount; | ||
40 | $back = $plist[0]; | ||
41 | |||
42 | # Crop rows and columns off the image to find the central rectangle | ||
43 | # of non-background stuff. | ||
44 | $ystart = 0; | ||
45 | $ystart++ while $ystart < $h and scalar(grep { $_ ne $back } map { $data->[$ystart*$w+$_] } 0 .. ($w-1)) == 0; | ||
46 | $yend = $h-1; | ||
47 | $yend-- while $yend >= $ystart and scalar(grep { $_ ne $back } map { $data->[$yend*$w+$_] } 0 .. ($w-1)) == 0; | ||
48 | $xstart = 0; | ||
49 | $xstart++ while $xstart < $w and scalar(grep { $_ ne $back } map { $data->[$_*$w+$xstart] } 0 .. ($h-1)) == 0; | ||
50 | $xend = $w-1; | ||
51 | $xend-- while $xend >= $xstart and scalar(grep { $_ ne $back } map { $data->[$_*$w+$xend] } 0 .. ($h-1)) == 0; | ||
52 | |||
53 | # Decide how much border we're going to put back on to make the | ||
54 | # image perfectly square. | ||
55 | $hexpand = ($yend-$ystart) - ($xend-$xstart); | ||
56 | if ($hexpand > 0) { | ||
57 | $left = int($hexpand / 2); | ||
58 | $xstart -= $left; | ||
59 | $xend += $hexpand - $left; | ||
60 | } elsif ($hexpand < 0) { | ||
61 | $vexpand = -$hexpand; | ||
62 | $top = int($vexpand / 2); | ||
63 | $ystart -= $top; | ||
64 | $yend += $vexpand - $top; | ||
65 | } | ||
66 | $ow = $xend - $xstart + 1; | ||
67 | $oh = $yend - $ystart + 1; | ||
68 | die "internal computation problem" if $ow != $oh; # should be square | ||
69 | |||
70 | # And decide how much _more_ border goes on to add the bit around | ||
71 | # the edge. | ||
72 | $realow = int($ow * ($osize / ($osize - 2*$oborder))); | ||
73 | $extra = $realow - $ow; | ||
74 | $left = int($extra / 2); | ||
75 | $xstart -= $left; | ||
76 | $xend += $extra - $left; | ||
77 | $top = int($extra / 2); | ||
78 | $ystart -= $top; | ||
79 | $yend += $extra - $top; | ||
80 | $ow = $xend - $xstart + 1; | ||
81 | $oh = $yend - $ystart + 1; | ||
82 | die "internal computation problem" if $ow != $oh; # should be square | ||
83 | |||
84 | # Now write out the resulting image, and resize it appropriately. | ||
85 | open IDATA, "| convert -size ${ow}x${oh} -depth 8 -resize ${osize}x${osize}! rgb:- $outfile"; | ||
86 | for ($y = $ystart; $y <= $yend; $y++) { | ||
87 | for ($x = $xstart; $x <= $xend; $x++) { | ||
88 | if ($x >= 0 && $x < $w && $y >= 0 && $y < $h) { | ||
89 | print IDATA $data->[$y*$w+$x]; | ||
90 | } else { | ||
91 | print IDATA $back; | ||
92 | } | ||
93 | } | ||
94 | } | ||
95 | close IDATA; | ||
diff --git a/apps/plugins/puzzles/icons/tents.sav b/apps/plugins/puzzles/icons/tents.sav new file mode 100644 index 0000000000..292c2d2d75 --- /dev/null +++ b/apps/plugins/puzzles/icons/tents.sav | |||
@@ -0,0 +1,32 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :5:Tents | ||
4 | PARAMS :5:8x8de | ||
5 | CPARAMS :5:8x8de | ||
6 | DESC :45:ea_ddidfaabkd,3,0,2,1,2,2,1,1,3,1,1,1,1,1,3,1 | ||
7 | NSTATES :2:25 | ||
8 | STATEPOS:2:25 | ||
9 | MOVE :9:N5,6;N6,6 | ||
10 | MOVE :14:N5,7;N6,7;N7,7 | ||
11 | MOVE :9:N0,7;N1,7 | ||
12 | MOVE :4:N1,6 | ||
13 | MOVE :14:N6,2;N6,3;N6,4 | ||
14 | MOVE :9:N7,2;N7,3 | ||
15 | MOVE :14:N1,0;N2,0;N3,0 | ||
16 | MOVE :4:N3,1 | ||
17 | MOVE :4:N0,3 | ||
18 | MOVE :4:N3,4 | ||
19 | MOVE :4:N5,4 | ||
20 | MOVE :4:T6,0 | ||
21 | MOVE :4:T4,0 | ||
22 | MOVE :4:T0,0 | ||
23 | MOVE :4:N1,1 | ||
24 | MOVE :4:N4,1 | ||
25 | MOVE :9:N6,1;N7,1 | ||
26 | MOVE :4:T2,1 | ||
27 | MOVE :9:N1,2;N3,2 | ||
28 | MOVE :4:T5,2 | ||
29 | MOVE :4:N4,2 | ||
30 | MOVE :4:N5,3 | ||
31 | MOVE :4:N0,2 | ||
32 | MOVE :9:N1,3;N1,5 | ||
diff --git a/apps/plugins/puzzles/icons/towers.sav b/apps/plugins/puzzles/icons/towers.sav new file mode 100644 index 0000000000..351d473a63 --- /dev/null +++ b/apps/plugins/puzzles/icons/towers.sav | |||
@@ -0,0 +1,26 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :6:Towers | ||
4 | PARAMS :3:4de | ||
5 | CPARAMS :3:4de | ||
6 | SEED :15:888431554483015 | ||
7 | DESC :31:2/2/1/3/2/2/3/1/3/1/2/2/2/3/2/1 | ||
8 | AUXINFO :34:297d7a2fcf9e14403a74c976fe0fefd306 | ||
9 | NSTATES :2:17 | ||
10 | STATEPOS:2:10 | ||
11 | MOVE :6:R2,0,4 | ||
12 | MOVE :6:R0,1,4 | ||
13 | MOVE :6:R3,3,4 | ||
14 | MOVE :6:R1,2,4 | ||
15 | MOVE :6:R0,3,3 | ||
16 | MOVE :6:R1,0,3 | ||
17 | MOVE :6:R3,2,3 | ||
18 | MOVE :6:R2,1,3 | ||
19 | MOVE :6:R3,0,2 | ||
20 | MOVE :6:R3,1,1 | ||
21 | MOVE :6:R1,1,2 | ||
22 | MOVE :6:R1,3,1 | ||
23 | MOVE :6:R2,3,2 | ||
24 | MOVE :6:R2,2,1 | ||
25 | MOVE :6:R0,2,2 | ||
26 | MOVE :6:R0,0,1 | ||
diff --git a/apps/plugins/puzzles/icons/tracks.sav b/apps/plugins/puzzles/icons/tracks.sav new file mode 100644 index 0000000000..ca30644506 --- /dev/null +++ b/apps/plugins/puzzles/icons/tracks.sav | |||
@@ -0,0 +1,31 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :12:Train Tracks | ||
4 | PARAMS :5:6x6dt | ||
5 | CPARAMS :5:6x6dt | ||
6 | SEED :15:145870397370785 | ||
7 | DESC :31:l6t9b,3,2,1,S4,5,4,2,6,S3,2,3,3 | ||
8 | NSTATES :2:23 | ||
9 | STATEPOS:2:20 | ||
10 | MOVE :5:TD0,0 | ||
11 | MOVE :5:TR0,0 | ||
12 | MOVE :5:TL5,5 | ||
13 | MOVE :5:TU5,5 | ||
14 | MOVE :29:TS1,1;TS2,1;TS3,1;TS4,1;TS5,1 | ||
15 | MOVE :29:NS2,0;NS2,2;NS2,3;NS2,4;NS2,5 | ||
16 | MOVE :5:TU1,1 | ||
17 | MOVE :17:NS0,3;NS0,4;NS0,5 | ||
18 | MOVE :23:NS1,2;NS1,3;NS1,4;NS1,5 | ||
19 | MOVE :5:TL2,1 | ||
20 | MOVE :5:TL3,1 | ||
21 | MOVE :5:TS4,4 | ||
22 | MOVE :5:TS3,4 | ||
23 | MOVE :17:NS3,0;NS4,0;NS5,0 | ||
24 | MOVE :5:TS4,2 | ||
25 | MOVE :5:TS4,3 | ||
26 | MOVE :5:TU3,4 | ||
27 | MOVE :5:TL4,4 | ||
28 | MOVE :5:TL5,1 | ||
29 | MOVE :5:TU5,2 | ||
30 | MOVE :5:NS5,3 | ||
31 | MOVE :5:NS3,2 | ||
diff --git a/apps/plugins/puzzles/icons/twiddle.sav b/apps/plugins/puzzles/icons/twiddle.sav new file mode 100644 index 0000000000..2863033f99 --- /dev/null +++ b/apps/plugins/puzzles/icons/twiddle.sav | |||
@@ -0,0 +1,35 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :7:Twiddle | ||
4 | PARAMS :5:3x3n2 | ||
5 | CPARAMS :5:3x3n2 | ||
6 | SEED :15:635499951462226 | ||
7 | DESC :17:3,7,2,6,5,1,8,4,9 | ||
8 | NSTATES :2:27 | ||
9 | STATEPOS:2:22 | ||
10 | MOVE :7:M0,0,-1 | ||
11 | MOVE :7:M1,0,-1 | ||
12 | MOVE :6:M1,1,1 | ||
13 | MOVE :6:M0,1,1 | ||
14 | MOVE :6:M0,0,1 | ||
15 | MOVE :6:M0,0,1 | ||
16 | MOVE :7:M1,1,-1 | ||
17 | MOVE :7:M0,1,-1 | ||
18 | MOVE :7:M0,1,-1 | ||
19 | MOVE :7:M1,1,-1 | ||
20 | MOVE :6:M0,1,1 | ||
21 | MOVE :7:M0,1,-1 | ||
22 | MOVE :6:M1,1,1 | ||
23 | MOVE :6:M1,1,1 | ||
24 | MOVE :6:M0,1,1 | ||
25 | MOVE :6:M0,1,1 | ||
26 | MOVE :7:M0,1,-1 | ||
27 | MOVE :7:M1,1,-1 | ||
28 | MOVE :7:M0,1,-1 | ||
29 | MOVE :7:M1,1,-1 | ||
30 | MOVE :6:M0,1,1 | ||
31 | MOVE :7:M1,0,-1 | ||
32 | MOVE :7:M0,1,-1 | ||
33 | MOVE :6:M1,0,1 | ||
34 | MOVE :6:M1,1,1 | ||
35 | MOVE :6:M1,1,1 | ||
diff --git a/apps/plugins/puzzles/icons/undead.sav b/apps/plugins/puzzles/icons/undead.sav new file mode 100644 index 0000000000..3c314dde8a --- /dev/null +++ b/apps/plugins/puzzles/icons/undead.sav | |||
@@ -0,0 +1,14 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :6:Undead | ||
4 | PARAMS :6:4x4de2 | ||
5 | CPARAMS :6:4x4de2 | ||
6 | DESC :48:5,2,2,aRLgLLaLRL,2,0,1,2,1,1,2,5,0,0,0,2,1,3,1,1 | ||
7 | NSTATES :1:7 | ||
8 | STATEPOS:1:7 | ||
9 | MOVE :2:G0 | ||
10 | MOVE :2:V0 | ||
11 | MOVE :2:G2 | ||
12 | MOVE :2:G3 | ||
13 | MOVE :2:V3 | ||
14 | MOVE :2:Z3 | ||
diff --git a/apps/plugins/puzzles/icons/unequal.sav b/apps/plugins/puzzles/icons/unequal.sav new file mode 100644 index 0000000000..c414513a22 --- /dev/null +++ b/apps/plugins/puzzles/icons/unequal.sav | |||
@@ -0,0 +1,25 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :7:Unequal | ||
4 | PARAMS :3:4de | ||
5 | CPARAMS :3:4de | ||
6 | SEED :15:143029490219212 | ||
7 | DESC :37:0D,0,0L,0,0,0,0,0,0D,0U,0R,0,0,0,0,4, | ||
8 | AUXINFO :34:f51274dc41e0a39caa38942fc525ed0108 | ||
9 | NSTATES :2:16 | ||
10 | STATEPOS:1:6 | ||
11 | MOVE :6:R2,1,4 | ||
12 | MOVE :6:R1,2,4 | ||
13 | MOVE :6:R0,0,4 | ||
14 | MOVE :6:R2,3,1 | ||
15 | MOVE :6:R3,2,1 | ||
16 | MOVE :6:R0,2,3 | ||
17 | MOVE :6:R2,2,2 | ||
18 | MOVE :6:R0,3,2 | ||
19 | MOVE :6:R1,3,3 | ||
20 | MOVE :6:R0,1,1 | ||
21 | MOVE :6:R1,1,2 | ||
22 | MOVE :6:R3,1,3 | ||
23 | MOVE :6:R3,0,2 | ||
24 | MOVE :6:R2,0,3 | ||
25 | MOVE :6:R1,0,1 | ||
diff --git a/apps/plugins/puzzles/icons/unruly.sav b/apps/plugins/puzzles/icons/unruly.sav new file mode 100644 index 0000000000..0f7ca1b9dd --- /dev/null +++ b/apps/plugins/puzzles/icons/unruly.sav | |||
@@ -0,0 +1,22 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :6:Unruly | ||
4 | PARAMS :5:6x6de | ||
5 | CPARAMS :5:6x6de | ||
6 | DESC :10:faCADAJeBd | ||
7 | NSTATES :2:15 | ||
8 | STATEPOS:2:15 | ||
9 | MOVE :6:P0,1,2 | ||
10 | MOVE :6:P0,4,2 | ||
11 | MOVE :6:P0,3,3 | ||
12 | MOVE :6:P0,3,0 | ||
13 | MOVE :6:P0,5,1 | ||
14 | MOVE :6:P0,2,1 | ||
15 | MOVE :6:P1,4,0 | ||
16 | MOVE :6:P1,1,1 | ||
17 | MOVE :6:P1,5,2 | ||
18 | MOVE :6:P0,0,2 | ||
19 | MOVE :6:P1,0,3 | ||
20 | MOVE :6:P1,0,0 | ||
21 | MOVE :6:P1,0,4 | ||
22 | MOVE :6:P0,2,4 | ||
diff --git a/apps/plugins/puzzles/icons/untangle.sav b/apps/plugins/puzzles/icons/untangle.sav new file mode 100644 index 0000000000..016318a521 --- /dev/null +++ b/apps/plugins/puzzles/icons/untangle.sav | |||
@@ -0,0 +1,16 @@ | |||
1 | SAVEFILE:41:Simon Tatham's Portable Puzzle Collection | ||
2 | VERSION :1:1 | ||
3 | GAME :8:Untangle | ||
4 | PARAMS :2:10 | ||
5 | CPARAMS :2:10 | ||
6 | SEED :15:761628688787632 | ||
7 | DESC :63:0-1,0-5,0-8,0-9,1-4,1-8,2-6,2-7,3-5,3-6,3-9,4-5,4-7,5-7,6-7,8-9 | ||
8 | AUXINFO :182:01bee8258e3164fe966f294b2837b6584b965b8d8e97571ba48f26c9bc0a91ac4b49fb4652bfaa5c340c82c57afbaa4620f2f6d49d7a7b330a66594d2b88c499d57c4093379b7dc322f2afa1ebab81004585751c39c19f8f9930c4 | ||
9 | NSTATES :1:7 | ||
10 | STATEPOS:1:6 | ||
11 | MOVE :12:P8:168,16/64 | ||
12 | MOVE :12:P0:186,85/64 | ||
13 | MOVE :12:P2:47,254/64 | ||
14 | MOVE :13:P5:131,153/64 | ||
15 | MOVE :12:P3:75,126/64 | ||
16 | MOVE :12:P7:93,303/64 | ||
diff --git a/apps/plugins/puzzles/icons/win16pal.xpm b/apps/plugins/puzzles/icons/win16pal.xpm new file mode 100644 index 0000000000..66fd60a480 --- /dev/null +++ b/apps/plugins/puzzles/icons/win16pal.xpm | |||
@@ -0,0 +1,23 @@ | |||
1 | /* XPM */ | ||
2 | static char *win16pal[] = { | ||
3 | /* columns rows colors chars-per-pixel */ | ||
4 | "16 1 16 1", | ||
5 | " c #000000", | ||
6 | ". c #800000", | ||
7 | "X c #008000", | ||
8 | "o c #808000", | ||
9 | "O c #000080", | ||
10 | "+ c #800080", | ||
11 | "@ c #008080", | ||
12 | "# c #C0C0C0", | ||
13 | "$ c #808080", | ||
14 | "% c #FF0000", | ||
15 | "& c #00FF00", | ||
16 | "* c #FFFF00", | ||
17 | "= c #0000FF", | ||
18 | "- c #FF00FF", | ||
19 | "; c #00FFFF", | ||
20 | ": c #FFFFFF", | ||
21 | /* pixels */ | ||
22 | " .XoO+@#$%&*=-;:" | ||
23 | }; | ||