/* Bit flags indicating mouse button priorities */
#define BUTTON_BEATS(x,y) ( 1 << (((x)-LEFT_BUTTON)*3+(y)-LEFT_BUTTON) )
+/* Another random flag that goes in the mouse priorities section for want
+ * of a better place to put it */
+#define SOLVE_ANIMATES ( 1 << 9 )
+
#define IGNOREARG(x) ( (x) = (x) )
typedef struct frontend frontend;
typedef struct random_state random_state;
typedef struct game_params game_params;
typedef struct game_state game_state;
-typedef struct game_aux_info game_aux_info;
typedef struct game_ui game_ui;
typedef struct game_drawstate game_drawstate;
typedef struct game game;
void draw_rect(frontend *fe, int x, int y, int w, int h, int colour);
void draw_line(frontend *fe, int x1, int y1, int x2, int y2, int colour);
void draw_polygon(frontend *fe, int *coords, int npoints,
- int fill, int colour);
+ int fillcolour, int outlinecolour);
void draw_circle(frontend *fe, int cx, int cy, int radius,
- int fill, int colour);
+ int fillcolour, int outlinecolour);
void clip(frontend *fe, int x, int y, int w, int h);
void unclip(frontend *fe);
void start_draw(frontend *fe);
char *midend_solve(midend_data *me);
void midend_supersede_game_desc(midend_data *me, char *desc, char *privdesc);
char *midend_rewrite_statusbar(midend_data *me, char *text);
+void midend_serialise(midend_data *me,
+ void (*write)(void *ctx, void *buf, int len),
+ void *wctx);
+char *midend_deserialise(midend_data *me,
+ int (*read)(void *ctx, void *buf, int len),
+ void *rctx);
/*
* malloc.c
char *bin2hex(const unsigned char *in, int inlen);
unsigned char *hex2bin(const char *in, int outlen);
+/* Sets (and possibly dims) background from frontend default colour,
+ * and auto-generates highlight and lowlight colours too. */
+void game_mkhighlight(frontend *fe, float *ret,
+ int background, int highlight, int lowlight);
+
+/* Randomly shuffles an array of items. */
+void shuffle(void *array, int nelts, int eltsize, random_state *rs);
+
+/* Draw a rectangle outline, using the frontend's draw_line. */
+void draw_rect_outline(frontend *fe, int x, int y, int w, int h,
+ int colour);
+
+/*
+ * dsf.c
+ */
+int dsf_canonify(int *dsf, int val);
+void dsf_merge(int *dsf, int v1, int v2);
/*
* version.c
* random.c
*/
random_state *random_init(char *seed, int len);
+random_state *random_copy(random_state *tocopy);
unsigned long random_bits(random_state *state, int bits);
unsigned long random_upto(random_state *state, unsigned long limit);
void random_free(random_state *state);
int can_configure;
config_item *(*configure)(game_params *params);
game_params *(*custom_params)(config_item *cfg);
- char *(*validate_params)(game_params *params);
+ char *(*validate_params)(game_params *params, int full);
char *(*new_desc)(game_params *params, random_state *rs,
- game_aux_info **aux, int interactive);
- void (*free_aux_info)(game_aux_info *aux);
+ char **aux, int interactive);
char *(*validate_desc)(game_params *params, char *desc);
game_state *(*new_game)(midend_data *me, game_params *params, char *desc);
game_state *(*dup_game)(game_state *state);
void (*free_game)(game_state *state);
int can_solve;
char *(*solve)(game_state *orig, game_state *curr,
- game_aux_info *aux, char **error);
+ char *aux, char **error);
int can_format_as_text;
char *(*text_format)(game_state *state);
game_ui *(*new_ui)(game_state *state);
char *(*interpret_move)(game_state *state, game_ui *ui, game_drawstate *ds,
int x, int y, int button);
game_state *(*execute_move)(game_state *state, char *move);
- void (*size)(game_params *params, game_drawstate *ds, int *x, int *y,
- int expand);
+ int preferred_tilesize;
+ void (*compute_size)(game_params *params, int tilesize, int *x, int *y);
+ void (*set_size)(game_drawstate *ds, game_params *params, int tilesize);
float *(*colours)(frontend *fe, game_state *state, int *ncolours);
game_drawstate *(*new_drawstate)(game_state *state);
void (*free_drawstate)(game_drawstate *ds);
game_ui *ui);
int (*wants_statusbar)(void);
int is_timed;
- int (*timing_state)(game_state *state);
+ int (*timing_state)(game_state *state, game_ui *ui);
int mouse_priorities;
};