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/loopgen.h | |
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/loopgen.h')
-rw-r--r-- | apps/plugins/puzzles/loopgen.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/apps/plugins/puzzles/loopgen.h b/apps/plugins/puzzles/loopgen.h new file mode 100644 index 0000000000..079c87c576 --- /dev/null +++ b/apps/plugins/puzzles/loopgen.h | |||
@@ -0,0 +1,35 @@ | |||
1 | /* | ||
2 | * loopgen.h: interface file for loop generation functions for grid.[ch]. | ||
3 | */ | ||
4 | |||
5 | #ifndef _LOOPGEN_H | ||
6 | #define _LOOPGEN_H | ||
7 | |||
8 | #include "puzzles.h" | ||
9 | #include "grid.h" | ||
10 | |||
11 | enum face_colour { FACE_WHITE, FACE_GREY, FACE_BLACK }; | ||
12 | |||
13 | /* face should be of type grid_face* here. */ | ||
14 | #define FACE_COLOUR(face) \ | ||
15 | ( (face) == NULL ? FACE_BLACK : \ | ||
16 | board[(face) - g->faces] ) | ||
17 | |||
18 | typedef int (*loopgen_bias_fn_t)(void *ctx, char *board, int face); | ||
19 | |||
20 | /* 'board' should be a char array whose length is the same as | ||
21 | * g->num_faces: this will be filled in with FACE_WHITE or FACE_BLACK | ||
22 | * after loop generation. | ||
23 | * | ||
24 | * If 'bias' is non-null, it should be a user-provided function which | ||
25 | * rates a half-finished board (i.e. may include some FACE_GREYs) for | ||
26 | * desirability; this will cause the loop generator to bias in favour | ||
27 | * of loops with a high return value from that function. The 'face' | ||
28 | * parameter to the bias function indicates which face of the grid has | ||
29 | * been modified since the last call; it is guaranteed that only one | ||
30 | * will have been (so that bias functions can work incrementally | ||
31 | * rather than re-scanning the whole grid on every call). */ | ||
32 | extern void generate_loop(grid *g, char *board, random_state *rs, | ||
33 | loopgen_bias_fn_t bias, void *biasctx); | ||
34 | |||
35 | #endif | ||