~mdw
/
sgt
/
puzzles
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Environment-based configuration wasn't sensibly usable in games with
[sgt/puzzles]
/
mines.c
diff --git
a/mines.c
b/mines.c
index
cf32064
..
d17fdd6
100644
(file)
--- a/
mines.c
+++ b/
mines.c
@@
-2336,7
+2336,7
@@
struct game_ui {
int hx, hy, hradius; /* for mouse-down highlights */
int validradius;
int flash_is_death;
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)
};
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->hx = ui->hy = -1;
ui->hradius = ui->validradius = 0;
ui->deaths = 0;
+ ui->completed = FALSE;
ui->flash_is_death = FALSE; /* *shrug* */
return ui;
}
ui->flash_is_death = FALSE; /* *shrug* */
return ui;
}
@@
-2358,20
+2359,28
@@
static char *encode_ui(game_ui *ui)
{
char buf[80];
/*
{
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);
*/
sprintf(buf, "D%d", ui->deaths);
+ if (ui->completed)
+ strcat(buf, "C");
return dupstr(buf);
}
static void decode_ui(game_ui *ui, char *encoding)
{
return dupstr(buf);
}
static void decode_ui(game_ui *ui, char *encoding)
{
- sscanf(encoding, "D%d", &ui->deaths);
+ int p= 0;
+ 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)
{
}
static void game_changed_state(game_ui *ui, game_state *oldstate,
game_state *newstate)
{
+ if (newstate->won)
+ ui->completed = TRUE;
}
struct game_drawstate {
}
struct game_drawstate {
@@
-3015,9
+3024,9
@@
static int game_wants_statusbar(void)
return TRUE;
}
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;
}
return FALSE;
return TRUE;
}