Neat idea from Gareth: if you put a % on the end of the mine count
[sgt/puzzles] / midend.c
index ce0a315..6ae10f9 100644 (file)
--- a/midend.c
+++ b/midend.c
@@ -135,11 +135,16 @@ void midend_new_game(midend_data *me)
             /*
              * Generate a new random seed. 15 digits comes to about
              * 48 bits, which should be more than enough.
+             * 
+             * I'll avoid putting a leading zero on the number,
+             * just in case it confuses anybody who thinks it's
+             * processed as an integer rather than a string.
              */
             char newseed[16];
             int i;
             newseed[15] = '\0';
-            for (i = 0; i < 15; i++)
+            newseed[0] = '1' + random_upto(me->random, 9);
+            for (i = 1; i < 15; i++)
                 newseed[i] = '0' + random_upto(me->random, 10);
             sfree(me->seedstr);
             me->seedstr = dupstr(newseed);
@@ -207,7 +212,8 @@ static void midend_finish_move(midend_data *me)
        flashtime = me->ourgame->flash_length(me->oldstate ? me->oldstate :
                                              me->states[me->statepos-2].state,
                                              me->states[me->statepos-1].state,
-                                             me->oldstate ? me->dir : +1);
+                                             me->oldstate ? me->dir : +1,
+                                             me->ui);
        if (flashtime > 0) {
            me->flash_pos = 0.0F;
            me->flash_time = flashtime;
@@ -328,7 +334,7 @@ static int midend_really_process_key(midend_data *me, int x, int y, int button)
     } else {
         anim_time = me->ourgame->anim_length(oldstate,
                                              me->states[me->statepos-1].state,
-                                             me->dir);
+                                             me->dir, me->ui);
     }
 
     me->oldstate = oldstate;
@@ -748,18 +754,23 @@ static char *midend_game_id_int(midend_data *me, char *id, int defmode)
         if (seed || desc) {
             char *tmpstr = me->ourgame->encode_params(tmpparams, FALSE);
             me->ourgame->decode_params(me->params, tmpstr);
+            sfree(tmpstr);
         } else {
             me->ourgame->free_params(me->params);
             me->params = me->ourgame->dup_params(tmpparams);
         }
     }
 
+    sfree(me->desc);
+    me->desc = NULL;
+    sfree(me->seedstr);
+    me->seedstr = NULL;
+
     if (desc) {
         error = me->ourgame->validate_desc(me->params, desc);
         if (error)
             return error;
 
-        sfree(me->desc);
         me->desc = dupstr(desc);
         me->genmode = GOT_DESC;
        if (me->aux_info)
@@ -768,7 +779,6 @@ static char *midend_game_id_int(midend_data *me, char *id, int defmode)
     }
 
     if (seed) {
-        sfree(me->seedstr);
         me->seedstr = dupstr(seed);
         me->genmode = GOT_SEED;
     }