chiark / gitweb /
r6384 didn't go quite far enough. In fact, a grid square which
authorSimon Tatham <anakin@pobox.com>
Mon, 10 Oct 2005 17:22:33 +0000 (17:22 +0000)
committerSimon Tatham <anakin@pobox.com>
Mon, 10 Oct 2005 17:22:33 +0000 (17:22 +0000)
differs between oldstate and state in only the hint bit should not
have a flip animation even if hints_active is TRUE. Flip animations
should only happen for tiles which are changing their primary state.
(Put like that, it seems so obvious.)

Test case which demonstrates this fix to be right and r6384 to be
wrong: 3x3:101000000000000000000,300 . Hit Solve immediately and
then click on the red-highlighted squares.

[originally from svn r6385]
[r6384 == dd175e490a197026210ba4432eec6236971c6173]

flip.c

diff --git a/flip.c b/flip.c
index 44fcf15fdf033b87248ebf635e2e481fd4d3aa58..bcd2ed0779d1b1f096d7e0e9080e1fb2d818b537 100644 (file)
--- a/flip.c
+++ b/flip.c
@@ -1193,7 +1193,6 @@ static void game_redraw(drawing *dr, game_drawstate *ds, game_state *oldstate,
        int fx, fy, fd;
        int v = state->grid[i];
        int vv;
-        int hintmask = (state->hints_active ? ~0 : ~2);
 
        if (flashframe >= 0) {
            fx = (w+1)/2 - min(x+1, w-x);
@@ -1205,11 +1204,12 @@ static void game_redraw(drawing *dr, game_drawstate *ds, game_state *oldstate,
                v &= ~1;
        }
 
-        v &= hintmask;
+       if (!state->hints_active)
+           v &= ~2;
         if (ui->cdraw && ui->cx == x && ui->cy == y)
             v |= 4;
 
-       if (oldstate && ((state->grid[i] ^ oldstate->grid[i]) & hintmask))
+       if (oldstate && ((state->grid[i] ^ oldstate->grid[i]) &~ 2))
            vv = 255;                  /* means `animated' */
        else
            vv = v;