chiark / gitweb /
Solo, Undead: support 'm' to fill in all pencils.
authorSimon Tatham <anakin@pobox.com>
Mon, 13 Jul 2015 18:06:53 +0000 (19:06 +0100)
committerSimon Tatham <anakin@pobox.com>
Mon, 13 Jul 2015 18:06:53 +0000 (19:06 +0100)
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
undead.c

diff --git a/solo.c b/solo.c
index 789d68fd86afeeb0bcbc1fb6e04d6a34d6328de8..631d335622b87231e22c05b6d2bddba50b756d03 100644 (file)
--- 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 */
 }
index fe5954f2a8ea0ea554aac26539cbdd1ee03aae28..fc03fe8f1701d182fec0477b554cf17f23861b7e 100644 (file)
--- 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++;
     }