From 5e1c335eea905ee031e440399f7a575c5c7a1ad3 Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Mon, 13 Jul 2015 19:06:53 +0100 Subject: [PATCH] Solo, Undead: support 'm' to fill in all pencils. Keen, Towers and Unequal (and Group) already have this feature in common: pressing m while no square is selected, causes a full set of pencil marks to be filled in for every square without a real number/ letter/whatever in it. Solo and Undead share the basic UI principles (left-click to select a square then type a thing to go in it, vs right-click to select a square then type things to pencil-mark in it), but did not have that same feature. Now they do. --- solo.c | 18 ++++++++++++++++++ undead.c | 16 ++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/solo.c b/solo.c index 789d68f..631d335 100644 --- a/solo.c +++ b/solo.c @@ -4614,6 +4614,9 @@ static char *interpret_move(const game_state *state, game_ui *ui, return dupstr(buf); } + if (button == 'M' || button == 'm') + return dupstr("M"); + return NULL; } @@ -4665,6 +4668,21 @@ static game_state *execute_move(const game_state *from, const char *move) } } return ret; + } else if (move[0] == 'M') { + /* + * Fill in absolutely all pencil marks in unfilled squares, + * for those who like to play by the rigorous approach of + * starting off in that state and eliminating things. + */ + ret = dup_game(from); + for (y = 0; y < cr; y++) { + for (x = 0; x < cr; x++) { + if (!ret->grid[y*cr+x]) { + memset(ret->pencil + (y*cr+x)*cr, 1, cr); + } + } + } + return ret; } else return NULL; /* couldn't parse move string */ } diff --git a/undead.c b/undead.c index fe5954f..fc03fe8 100644 --- a/undead.c +++ b/undead.c @@ -1727,6 +1727,10 @@ static char *interpret_move(const game_state *state, game_ui *ui, ui->ascii = !ui->ascii; return ""; } + + if (button == 'm' || button == 'M') { + return dupstr("M"); + } if (ui->hshow == 1 && ui->hpencil == 0) { xi = state->common->xinfo[ui->hx + ui->hy*(state->common->params.w+2)]; @@ -2020,6 +2024,18 @@ static game_state *execute_move(const game_state *state, const char *move) ret->hints_done[clue_index(ret, x, y)] ^= 1; move += n + 1; } + if (c == 'M') { + /* + * Fill in absolutely all pencil marks in unfilled + * squares, for those who like to play by the rigorous + * approach of starting off in that state and eliminating + * things. + */ + for (i = 0; i < ret->common->wh; i++) + if (ret->guess[i] == 7) + ret->pencils[i] = 7; + move++; + } if (*move == ';') move++; }