The cube was being drawn slightly differently on the top and left
[sgt/puzzles] / cube.c
diff --git a/cube.c b/cube.c
index 6fef4d1..e779068 100644 (file)
--- a/cube.c
+++ b/cube.c
@@ -559,7 +559,7 @@ char *new_game_seed(game_params *params)
     /*
      * Choose a non-blue square for the polyhedron.
      */
-    sprintf(p, ":%d", rand_upto(m));
+    sprintf(p, ":%d", data.gridptrs[0][rand_upto(m)]);
 
     sfree(data.gridptrs[0]);
     sfree(flags);
@@ -788,7 +788,7 @@ game_state *new_game(game_params *params, char *seed)
 
     state->previous = state->current;
     state->angle = 0.0;
-    state->completed = FALSE;
+    state->completed = 0;
     state->movecount = 0;
 
     return state;
@@ -1046,6 +1046,8 @@ game_state *make_move(game_state *from, int x, int y, int button)
         ret->facecolours = newcolours;
     }
 
+    ret->movecount++;
+
     /*
      * And finally, swap the colour between the bottom face of the
      * polyhedron and the face we've just landed on.
@@ -1068,7 +1070,7 @@ game_state *make_move(game_state *from, int x, int y, int button)
             if (ret->facecolours[i])
                 j++;
         if (j == ret->solid->nfaces)
-            ret->completed = TRUE;
+            ret->completed = ret->movecount;
     }
 
     sfree(poly);
@@ -1097,7 +1099,6 @@ game_state *make_move(game_state *from, int x, int y, int button)
     ret->sgkey[1] = skey[1];
     ret->previous = from->current;
     ret->angle = angle;
-    ret->movecount++;
 
     return ret;
 }
@@ -1293,8 +1294,8 @@ void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate,
         }
 
         for (j = 0; j < poly->order; j++) {
-            coords[j*2] = (int)(points[j*2] * GRID_SCALE) + ds->ox;
-            coords[j*2+1] = (int)(points[j*2+1] * GRID_SCALE) + ds->oy;
+            coords[j*2] = (int)floor(points[j*2] * GRID_SCALE) + ds->ox;
+            coords[j*2+1] = (int)floor(points[j*2+1] * GRID_SCALE) + ds->oy;
         }
 
         /*
@@ -1329,6 +1330,19 @@ void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate,
 
     draw_update(fe, 0, 0, (int)((bb.r-bb.l+2.0F) * GRID_SCALE),
                 (int)((bb.d-bb.u+2.0F) * GRID_SCALE));
+
+    /*
+     * Update the status bar.
+     */
+    {
+       char statusbuf[256];
+
+       sprintf(statusbuf, "%sMoves: %d",
+               (state->completed ? "COMPLETED! " : ""),
+               (state->completed ? state->completed : state->movecount));
+
+       status_bar(fe, statusbuf);
+    }
 }
 
 float game_anim_length(game_state *oldstate, game_state *newstate)
@@ -1340,3 +1354,8 @@ float game_flash_length(game_state *oldstate, game_state *newstate)
 {
     return 0.0F;
 }
+
+int game_wants_statusbar(void)
+{
+    return TRUE;
+}