X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/ef059e59daf05c1addd7bdb2e60047fe24b83880..0551ee6ba20cfc716603b49ba4238aea7f0dfb8b:/twiddle.c diff --git a/twiddle.c b/twiddle.c index d67dc40..7585239 100644 --- a/twiddle.c +++ b/twiddle.c @@ -317,7 +317,7 @@ static char *new_game_seed(game_params *params, random_state *rs, * and simply shuffle the grid by making a long sequence of * randomly chosen moves. */ - total_moves = w*h*n*n*2; + total_moves = w*h*n*n*2 + random_upto(rs, 1); for (i = 0; i < total_moves; i++) { int x, y; @@ -492,7 +492,7 @@ static game_state *solve_game(game_state *state, game_aux_info *aux, for (i = 0; i < ret->w*ret->h; i++) ret->grid[i] &= ~3; ret->used_solve = ret->just_used_solve = TRUE; - ret->completed = ret->movecount; + ret->completed = ret->movecount = 1; return ret; } @@ -521,7 +521,7 @@ static char *game_text_format(game_state *state) */ maxlen = state->h * state->w * (col+o+1); - ret = snewn(maxlen, char); + ret = snewn(maxlen+1, char); p = ret; for (y = 0; y < state->h; y++) { @@ -693,6 +693,16 @@ static void draw_tile(frontend *fe, game_state *state, int x, int y, int coords[8]; char str[40]; + /* + * If we've been passed a rotation region but we're drawing a + * tile which is outside it, we must draw it normally. This can + * occur if we're cleaning up after a completion flash while a + * new move is also being made. + */ + if (rot && (x < rot->cx || y < rot->cy || + x >= rot->cx+rot->cw || y > rot->cy+rot->ch)) + rot = NULL; + if (rot) clip(fe, rot->cx, rot->cy, rot->cw, rot->ch); @@ -763,7 +773,7 @@ static void draw_tile(frontend *fe, game_state *state, int x, int y, } /* - * Next, the colour bars for orientation. + * Next, the triangles for orientation. */ if (state->orientable) { int xdx, xdy, ydx, ydy;