X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/9b265feb3378c6f2b36a52dffabe8110e3c77566..b182e5d58190f834c2dc49e777cdc12e38a60c00:/lightup.c diff --git a/lightup.c b/lightup.c index 7af44e3..4f4f569 100644 --- a/lightup.c +++ b/lightup.c @@ -1824,11 +1824,13 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds, int x, int y, int button) { enum { NONE, FLIP_LIGHT, FLIP_IMPOSSIBLE } action = NONE; - int cx = -1, cy = -1, cv = ui->cur_visible; + int cx = -1, cy = -1; unsigned int flags; - char buf[80], *nullret, *empty = "", c; + char buf[80], *nullret = NULL, *empty = "", c; if (button == LEFT_BUTTON || button == RIGHT_BUTTON) { + if (ui->cur_visible) + nullret = empty; ui->cur_visible = 0; cx = FROMCOORD(x); cy = FROMCOORD(y); @@ -1855,13 +1857,9 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds, ui->cur_x = min(max(ui->cur_x, 0), state->w - 1); ui->cur_y = min(max(ui->cur_y, 0), state->h - 1); ui->cur_visible = 1; - } - - /* Always redraw if the cursor is on, or if it's just been - * removed. */ - if (ui->cur_visible) nullret = empty; - else if (cv) nullret = empty; - else nullret = NULL; + nullret = empty; + } else + return NULL; switch (action) { case FLIP_LIGHT: @@ -1958,7 +1956,7 @@ static void game_set_size(drawing *dr, game_drawstate *ds, ds->crad = 3*(tilesize-1)/8; } -static float *game_colours(frontend *fe, game_state *state, int *ncolours) +static float *game_colours(frontend *fe, int *ncolours) { float *ret = snewn(3 * NCOLOURS, float); int i; @@ -2079,10 +2077,19 @@ static void tile_redraw(drawing *dr, game_drawstate *ds, game_state *state, int lcol = (ds_flags & DF_OVERLAP) ? COL_ERROR : COL_LIGHT; draw_circle(dr, dx + TILE_SIZE/2, dy + TILE_SIZE/2, TILE_RADIUS, lcol, COL_BLACK); - } else if (ds_flags & DF_IMPOSSIBLE) { - int rlen = TILE_SIZE / 4; - draw_rect(dr, dx + TILE_SIZE/2 - rlen/2, dy + TILE_SIZE/2 - rlen/2, - rlen, rlen, COL_BLACK); + } else if ((ds_flags & DF_IMPOSSIBLE)) { + static int draw_blobs_when_lit = -1; + if (draw_blobs_when_lit < 0) { + char *env = getenv("LIGHTUP_LIT_BLOBS"); + draw_blobs_when_lit = (!env || (env[0] == 'y' || + env[0] == 'Y')); + } + if (!(ds_flags & DF_LIT) || draw_blobs_when_lit) { + int rlen = TILE_SIZE / 4; + draw_rect(dr, dx + TILE_SIZE/2 - rlen/2, + dy + TILE_SIZE/2 - rlen/2, + rlen, rlen, COL_BLACK); + } } } @@ -2146,11 +2153,6 @@ static float game_flash_length(game_state *oldstate, game_state *newstate, return 0.0F; } -static int game_wants_statusbar(void) -{ - return FALSE; -} - static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; @@ -2177,8 +2179,7 @@ static void game_print(drawing *dr, game_state *state, int tilesize) /* Ick: fake up `ds->tilesize' for macro expansion purposes */ game_drawstate ads, *ds = &ads; - ads.tilesize = tilesize; - ds->crad = 3*(tilesize-1)/8; + game_set_size(dr, ds, NULL, tilesize); /* * Border. @@ -2224,7 +2225,7 @@ static void game_print(drawing *dr, game_state *state, int tilesize) #endif const struct game thegame = { - "Light Up", "games.lightup", + "Light Up", "games.lightup", "lightup", default_params, game_fetch_preset, decode_params, @@ -2255,9 +2256,9 @@ const struct game thegame = { game_anim_length, game_flash_length, TRUE, FALSE, game_print_size, game_print, - game_wants_statusbar, + FALSE, /* wants_statusbar */ FALSE, game_timing_state, - 0, /* mouse_priorities */ + 0, /* flags */ }; #ifdef STANDALONE_SOLVER @@ -2306,6 +2307,7 @@ int main(int argc, char **argv) /* Run the solvers easiest to hardest until we find one that * can solve our puzzle. If it's soluble we know that the * hardest (recursive) solver will always find the solution. */ + nsol = sflags = 0; for (diff = 0; diff <= DIFFCOUNT; diff++) { printf("\nSolving with difficulty %d.\n", diff); sflags = flags_from_difficulty(diff);