shithub: puzzles

Download patch

ref: 7e57366a576831d80d28d0426ff07ad7d8ee0359
parent: dd175e490a197026210ba4432eec6236971c6173
author: Simon Tatham <anakin@pobox.com>
date: Mon Oct 10 13:22:33 EDT 2005

r6384 didn't go quite far enough. In fact, a grid square which
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]

--- a/flip.c
+++ b/flip.c
@@ -1193,7 +1193,6 @@
 	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 @@
 		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;