X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/ac9f41c4c8ccbf9364a5d351e4cb134812a9926b..6f745fb1eef3e1792321e9b893574c8b147b6bff:/lightup.c diff --git a/lightup.c b/lightup.c index f1d9cc7..ceda07f 100644 --- a/lightup.c +++ b/lightup.c @@ -764,7 +764,7 @@ static int try_solve_light(game_state *state, int ox, int oy, unsigned int flags, int lights) { ll_data lld; - int sx,sy,n = 0; + int sx = 0, sy = 0, n = 0; if (lights > 0) return 0; if (flags & F_BLACK) return 0; @@ -1016,9 +1016,9 @@ static void try_rule_out(game_state *state, int x, int y, get_surrounds(state, x, y, &s); for (i = 0; i < s.npoints; i++) { - if (!GRID(state,flags,s.points[i].x,s.points[i].y) & F_NUMBERED) + if (!(GRID(state,flags,s.points[i].x,s.points[i].y) & F_NUMBERED)) continue; - /* we have an adjacent clue square; find /it's/ surrounds + /* we have an adjacent clue square; find /its/ surrounds * and count the remaining lights it needs. */ get_surrounds(state,s.points[i].x,s.points[i].y,&ss); curr_lights = 0; @@ -1705,6 +1705,11 @@ done: return move; } +static int game_can_format_as_text_now(game_params *params) +{ + return TRUE; +} + /* 'borrowed' from slant.c, mainly. I could have printed it one * character per cell (like debug_state) but that comes out tiny. * 'L' is used for 'light here' because 'O' looks too much like '0' @@ -1835,13 +1840,13 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds, cx = FROMCOORD(x); cy = FROMCOORD(y); action = (button == LEFT_BUTTON) ? FLIP_LIGHT : FLIP_IMPOSSIBLE; - } else if (button == CURSOR_SELECT || + } else if (button == CURSOR_SELECT || button == CURSOR_SELECT2 || button == 'i' || button == 'I' || button == ' ' || button == '\r' || button == '\n') { ui->cur_visible = 1; cx = ui->cur_x; cy = ui->cur_y; - action = (button == 'i' || button == 'I') ? + action = (button == 'i' || button == 'I' || button == CURSOR_SELECT2) ? FLIP_IMPOSSIBLE : FLIP_LIGHT; } else if (button == CURSOR_UP || button == CURSOR_DOWN || button == CURSOR_RIGHT || button == CURSOR_LEFT) { @@ -2077,10 +2082,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); + } } } @@ -2157,8 +2171,8 @@ static void game_print_size(game_params *params, float *x, float *y) * I'll use 6mm squares by default. */ game_compute_size(params, 600, &pw, &ph); - *x = pw / 100.0; - *y = ph / 100.0; + *x = pw / 100.0F; + *y = ph / 100.0F; } static void game_print(drawing *dr, game_state *state, int tilesize) @@ -2216,7 +2230,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, @@ -2231,7 +2245,7 @@ const struct game thegame = { dup_game, free_game, TRUE, solve_game, - TRUE, game_text_format, + TRUE, game_can_format_as_text_now, game_text_format, new_ui, free_ui, encode_ui,