diff options
| -rw-r--r-- | cube.c | 2 | ||||
| -rw-r--r-- | fifteen.c | 2 | ||||
| -rw-r--r-- | flip.c | 2 | ||||
| -rw-r--r-- | guess.c | 2 | ||||
| -rw-r--r-- | midend.c | 5 | ||||
| -rw-r--r-- | mines.c | 19 | ||||
| -rw-r--r-- | net.c | 2 | ||||
| -rw-r--r-- | netslide.c | 2 | ||||
| -rw-r--r-- | nullgame.c | 2 | ||||
| -rw-r--r-- | pattern.c | 2 | ||||
| -rw-r--r-- | pegs.c | 2 | ||||
| -rw-r--r-- | puzzles.h | 2 | ||||
| -rw-r--r-- | rect.c | 2 | ||||
| -rw-r--r-- | samegame.c | 2 | ||||
| -rw-r--r-- | sixteen.c | 2 | ||||
| -rw-r--r-- | solo.c | 2 | ||||
| -rw-r--r-- | twiddle.c | 2 |
17 files changed, 32 insertions, 22 deletions
@@ -1687,7 +1687,7 @@ static int game_wants_statusbar(void) return TRUE; } -static int game_timing_state(game_state *state) +static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; } @@ -832,7 +832,7 @@ static int game_wants_statusbar(void) return TRUE; } -static int game_timing_state(game_state *state) +static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; } @@ -1239,7 +1239,7 @@ static int game_wants_statusbar(void) return TRUE; } -static int game_timing_state(game_state *state) +static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; } @@ -1262,7 +1262,7 @@ static int game_wants_statusbar(void) return FALSE; } -static int game_timing_state(game_state *state) +static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; } @@ -237,7 +237,8 @@ void midend_set_params(midend_data *me, game_params *params) static void midend_set_timer(midend_data *me) { me->timing = (me->ourgame->is_timed && - me->ourgame->timing_state(me->states[me->statepos-1].state)); + me->ourgame->timing_state(me->states[me->statepos-1].state, + me->ui)); if (me->timing || me->flash_time || me->anim_time) activate_timer(me->frontend); else @@ -311,10 +312,10 @@ void midend_new_game(midend_data *me) me->drawstate = me->ourgame->new_drawstate(me->states[0].state); midend_size_new_drawstate(me); me->elapsed = 0.0F; - midend_set_timer(me); if (me->ui) me->ourgame->free_ui(me->ui); me->ui = me->ourgame->new_ui(me->states[0].state); + midend_set_timer(me); me->pressed_mouse_button = 0; } @@ -2336,7 +2336,7 @@ struct game_ui { int hx, hy, hradius; /* for mouse-down highlights */ int validradius; int flash_is_death; - int deaths; + int deaths, completed; }; static game_ui *new_ui(game_state *state) @@ -2345,6 +2345,7 @@ static game_ui *new_ui(game_state *state) ui->hx = ui->hy = -1; ui->hradius = ui->validradius = 0; ui->deaths = 0; + ui->completed = FALSE; ui->flash_is_death = FALSE; /* *shrug* */ return ui; } @@ -2358,20 +2359,28 @@ static char *encode_ui(game_ui *ui) { char buf[80]; /* - * The deaths counter needs preserving across a serialisation. + * The deaths counter and completion status need preserving + * across a serialisation. */ sprintf(buf, "D%d", ui->deaths); + if (ui->completed) + strcat(buf, "C"); return dupstr(buf); } static void decode_ui(game_ui *ui, char *encoding) { - sscanf(encoding, "D%d", &ui->deaths); + int p; + sscanf(encoding, "D%d%n", &ui->deaths, &p); + if (encoding[p] == 'C') + ui->completed = TRUE; } static void game_changed_state(game_ui *ui, game_state *oldstate, game_state *newstate) { + if (newstate->won) + ui->completed = TRUE; } struct game_drawstate { @@ -3015,9 +3024,9 @@ static int game_wants_statusbar(void) return TRUE; } -static int game_timing_state(game_state *state) +static int game_timing_state(game_state *state, game_ui *ui) { - if (state->dead || state->won || !state->layout->mines) + if (state->dead || state->won || ui->completed || !state->layout->mines) return FALSE; return TRUE; } @@ -2723,7 +2723,7 @@ static int game_wants_statusbar(void) return TRUE; } -static int game_timing_state(game_state *state) +static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; } @@ -1776,7 +1776,7 @@ static int game_wants_statusbar(void) return TRUE; } -static int game_timing_state(game_state *state) +static int game_timing_state(game_state *state, game_ui *ui) { return FALSE; } @@ -238,7 +238,7 @@ static int game_wants_statusbar(void) return FALSE; } -static int game_timing_state(game_state *state) +static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; } @@ -1159,7 +1159,7 @@ static int game_wants_statusbar(void) return FALSE; } -static int game_timing_state(game_state *state) +static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; } @@ -1174,7 +1174,7 @@ static int game_wants_statusbar(void) return FALSE; } -static int game_timing_state(game_state *state) +static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; } @@ -305,7 +305,7 @@ struct game { 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; }; @@ -2758,7 +2758,7 @@ static int game_wants_statusbar(void) return TRUE; } -static int game_timing_state(game_state *state) +static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; } @@ -947,7 +947,7 @@ static int game_wants_statusbar(void) return TRUE; } -static int game_timing_state(game_state *state) +static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; } @@ -1008,7 +1008,7 @@ static int game_wants_statusbar(void) return TRUE; } -static int game_timing_state(game_state *state) +static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; } @@ -2599,7 +2599,7 @@ static int game_wants_statusbar(void) return FALSE; } -static int game_timing_state(game_state *state) +static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; } @@ -1175,7 +1175,7 @@ static int game_wants_statusbar(void) return TRUE; } -static int game_timing_state(game_state *state) +static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; } |