From 1a6a8b52f7aa4e2da6f4c34a0c743c760b8cfd99 Mon Sep 17 00:00:00 2001 From: Franklin Wei Date: Sun, 20 Nov 2016 15:16:41 -0500 Subject: 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 --- apps/plugins/puzzles/icons/Makefile | 153 ++++++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 apps/plugins/puzzles/icons/Makefile (limited to 'apps/plugins/puzzles/icons/Makefile') 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 @@ +# Makefile for Puzzles icons. + +PUZZLES = blackbox bridges cube dominosa fifteen filling flip flood \ + galaxies guess inertia keen lightup loopy magnets map mines \ + net netslide palisade pattern pearl pegs range rect \ + samegame signpost singles sixteen slant solo tents towers \ + twiddle tracks undead unequal unruly untangle + +BASE = $(patsubst %,%-base.png,$(PUZZLES)) +WEB = $(patsubst %,%-web.png,$(PUZZLES)) + +IBASE = $(patsubst %,%-ibase.png,$(PUZZLES)) +IBASE4 = $(patsubst %,%-ibase4.png,$(PUZZLES)) +P48D24 = $(patsubst %,%-48d24.png,$(PUZZLES)) +P48D8 = $(patsubst %,%-48d8.png,$(PUZZLES)) +P48D4 = $(patsubst %,%-48d4.png,$(PUZZLES)) +P32D24 = $(patsubst %,%-32d24.png,$(PUZZLES)) +P32D8 = $(patsubst %,%-32d8.png,$(PUZZLES)) +P32D4 = $(patsubst %,%-32d4.png,$(PUZZLES)) +P16D24 = $(patsubst %,%-16d24.png,$(PUZZLES)) +P16D8 = $(patsubst %,%-16d8.png,$(PUZZLES)) +P16D4 = $(patsubst %,%-16d4.png,$(PUZZLES)) +ICONS = $(patsubst %,%.ico,$(PUZZLES)) +CICONS = $(patsubst %,%-icon.c,$(PUZZLES)) +RC = $(patsubst %,%.rc,$(PUZZLES)) + +BIN = ../ +PIC = ./ + +# Work around newer ImageMagick unilaterally distorting colours when +# converting to PNG. +CSP = -set colorspace RGB + +base: $(BASE) +web: $(WEB) +pngicons: $(P48D24) $(P32D24) $(P16D24) +winicons: $(ICONS) $(RC) +gtkicons: $(CICONS) +all: base web pngicons winicons gtkicons + +# Build the base puzzle screenshots from which all the other images +# are derived. Some of them involve showing a move animation +# part-way through. +fifteen-base.png : override REDO=0.3 +flip-base.png : override REDO=0.3 +netslide-base.png : override REDO=0.3 +sixteen-base.png : override REDO=0.3 +twiddle-base.png : override REDO=0.3 +$(BASE): %-base.png: $(BIN)% $(PIC)%.sav + $(PIC)screenshot.sh $(BIN)$* $(PIC)$*.sav $@ $(REDO) + +# Build the screenshots for the web, by scaling the original base +# images to a uniform size. +$(WEB): %-web.png: %-base.png + $(PIC)square.pl 150 5 $^ $@ + +# Build the base _icon_ images, by careful cropping of the base +# images: icons are very small so it's often necessary to zoom in +# on a smaller portion of the screenshot. +blackbox-ibase.png : override CROP=352x352 144x144+0+208 +bridges-ibase.png : override CROP=264x264 107x107+157+157 +dominosa-ibase.png : override CROP=304x272 152x152+152+0 +fifteen-ibase.png : override CROP=240x240 120x120+0+120 +filling-ibase.png : override CROP=256x256 133x133+14+78 +flip-ibase.png : override CROP=288x288 145x145+120+72 +galaxies-ibase.png : override CROP=288x288 165x165+0+0 +guess-ibase.png : override CROP=263x420 178x178+75+17 +inertia-ibase.png : override CROP=321x321 128x128+193+0 +keen-ibase.png : override CROP=288x288 96x96+24+120 +lightup-ibase.png : override CROP=256x256 112x112+144+0 +loopy-ibase.png : override CROP=257x257 113x113+0+0 +magnets-ibase.png : override CROP=264x232 96x96+36+100 +mines-ibase.png : override CROP=240x240 110x110+130+130 +net-ibase.png : override CROP=193x193 113x113+0+80 +netslide-ibase.png : override CROP=289x289 144x144+0+0 +palisade-ibase.png : override CROP=288x288 192x192+0+0 +pattern-ibase.png : override CROP=384x384 223x223+0+0 +pearl-ibase.png : override CROP=216x216 94x94+108+15 +pegs-ibase.png : override CROP=263x263 147x147+116+0 +range-ibase.png : override CROP=256x256 98x98+111+15 +rect-ibase.png : override CROP=205x205 115x115+90+0 +signpost-ibase.png : override CROP=240x240 98x98+23+23 +singles-ibase.png : override CROP=224x224 98x98+15+15 +sixteen-ibase.png : override CROP=288x288 144x144+144+144 +slant-ibase.png : override CROP=321x321 160x160+160+160 +solo-ibase.png : override CROP=481x481 145x145+24+24 +tents-ibase.png : override CROP=320x320 165x165+142+0 +towers-ibase.png : override CROP=300x300 102x102+151+6 +tracks-ibase.png : override CROP=246x246 118x118+6+6 +twiddle-ibase.png : override CROP=192x192 102x102+69+21 +undead-ibase.png : override CROP=416x480 192x192+16+80 +unequal-ibase.png : override CROP=208x208 104x104+104+104 +untangle-ibase.png : override CROP=320x320 164x164+3+116 +$(IBASE): %-ibase.png: %-base.png + $(PIC)crop.sh $^ $@ $(CROP) + +# Convert the full-size icon images to 4-bit colour, because that +# seems to work better than reducing it in 24 bits and then +# dithering. +$(IBASE4): %-ibase4.png: %-ibase.png + convert -colors 16 +dither $(CSP) -map $(PIC)win16pal.xpm $^ $@ + +# Build the 24-bit PNGs for the icons, at three sizes. +$(P48D24): %-48d24.png: %-ibase.png + $(PIC)square.pl 48 4 $^ $@ +$(P32D24): %-32d24.png: %-ibase.png + $(PIC)square.pl 32 2 $^ $@ +$(P16D24): %-16d24.png: %-ibase.png + $(PIC)square.pl 16 1 $^ $@ + +# The 8-bit icon PNGs are just custom-paletted quantisations of the +# 24-bit ones. +$(P48D8) $(P32D8) $(P16D8): %d8.png: %d24.png + convert -colors 256 $^ $@ + +# But the depth-4 images work better if we re-shrink from the +# ibase4 versions of the images, and then normalise the colours +# again afterwards. (They're still not very good, but my hope is +# that on most modern Windows machines this won't matter too +# much...) +$(P48D4): %-48d4.png: %-ibase4.png + $(PIC)square.pl 48 1 $^ $@-tmp2.png + convert -colors 16 $(CSP) -map $(PIC)win16pal.xpm $@-tmp2.png $@ + rm -f $@-tmp2.png +$(P32D4): %-32d4.png: %-ibase.png + $(PIC)square.pl 32 1 $^ $@-tmp2.png + convert -colors 16 $(CSP) -map $(PIC)win16pal.xpm $@-tmp2.png $@ + rm -f $@-tmp2.png +$(P16D4): %-16d4.png: %-ibase.png + $(PIC)square.pl 16 1 $^ $@-tmp2.png + convert -colors 16 $(CSP) -map $(PIC)win16pal.xpm $@-tmp2.png $@ + rm -f $@-tmp2.png + +# Build the actual Windows icons themselves, by feeding all those +# PNGs to my icon builder script. +$(ICONS): %.ico: %-48d24.png %-48d8.png %-48d4.png \ + %-32d24.png %-32d8.png %-32d4.png \ + %-16d24.png %-16d8.png %-16d4.png + $(PIC)icon.pl -24 $*-48d24.png $*-32d24.png $*-16d24.png \ + -8 $*-48d8.png $*-32d8.png $*-16d8.png \ + -4 $*-48d4.png $*-32d4.png $*-16d4.png > $@ + +# Build the .RC files which bind the icons into the applications. +$(RC): %.rc: + echo '#include "puzzles.rc2"' > $@ + echo '200 ICON "$*.ico"' >> $@ + +# Build the GTK icon source files. +$(CICONS): %-icon.c: %-16d24.png %-32d24.png %-48d24.png + $(PIC)cicon.pl $^ > $@ + +clean: + rm -f *.png *.ico *.rc *-icon.c -- cgit v1.2.3