shithub: puzzles

Download patch

ref: 40fcf516f40e10f23f5a9f6760bfffae206b2e49
parent: b44d75aa4e97e9264e585712a8ec5fa757b645ec
author: Simon Tatham <anakin@pobox.com>
date: Sat Oct 22 12:44:38 EDT 2005

Cleanup: remove the game_state parameter to game_colours(). No game
was actually using it, and also it wasn't being called again for
different game states or different game parameters, so it would have
been a mistake to depend on anything in that game state. Games are
now expected to commit in advance to a single fixed list of all the
colours they will ever need, which was the case in practice already
and simplifies any later port to a colour-poor platform. Also this
change has removed a lot of unnecessary faff from midend_colours().

[originally from svn r6416]

--- a/blackbox.c
+++ b/blackbox.c
@@ -1060,7 +1060,7 @@
     ds->rrad = (3*tilesize)/8;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
     int i;
--- a/bridges.c
+++ b/bridges.c
@@ -2230,7 +2230,7 @@
     ds->tilesize = tilesize;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
     int i;
--- a/cube.c
+++ b/cube.c
@@ -1476,7 +1476,7 @@
     ds->oy = (int)(-(bb.u - solids[params->solid]->border) * ds->gridscale);
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
 
--- a/devel.but
+++ b/devel.but
@@ -1104,7 +1104,7 @@
 
 \S{backend-colours} \cw{colours()}
 
-\c float *(*colours)(frontend *fe, game_state *state, int *ncolours);
+\c float *(*colours)(frontend *fe, int *ncolours);
 
 This function is responsible for telling the front end what colours
 the puzzle will need to draw itself.
@@ -1115,15 +1115,7 @@
 and blue components of each colour respectively as numbers in the
 range [0,1].
 
-It is passed a sample \c{game_state} in case it needs one, although
-currently no puzzle does need this. (In fact, colours are not
-reallocated when the game parameters change or a new game is
-started, so you can't reliably use this \c{game_state} to allocate a
-different number of colours depending on the game. It is probably
-actually a mistake to rely on this parameter at all. I ought to
-either remove it or fix it; probably the former.)
-
-The final parameter passed to this function is a front end handle.
+The second parameter passed to this function is a front end handle.
 The only things it is permitted to do with this handle are to call
 the front-end function called \cw{frontend_default_colour()} (see
 \k{frontend-default-colour}) or the utility function called
--- a/dominosa.c
+++ b/dominosa.c
@@ -1439,7 +1439,7 @@
     ds->tilesize = tilesize;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
 
--- a/fifteen.c
+++ b/fifteen.c
@@ -580,7 +580,7 @@
     ds->tilesize = tilesize;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
     int i;
--- a/flip.c
+++ b/flip.c
@@ -1019,7 +1019,7 @@
     ds->tilesize = tilesize;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
 
--- a/guess.c
+++ b/guess.c
@@ -864,7 +864,7 @@
     ds->blit_peg = blitter_new(dr, ds->pegsz, ds->pegsz);
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float), max;
     int i;
--- a/inertia.c
+++ b/inertia.c
@@ -1692,7 +1692,7 @@
     ds->player_background = blitter_new(dr, TILESIZE, TILESIZE);
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
     int i;
--- a/lightup.c
+++ b/lightup.c
@@ -1956,7 +1956,7 @@
     ds->crad = 3*(tilesize-1)/8;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
     int i;
--- a/loopy.c
+++ b/loopy.c
@@ -2363,7 +2363,7 @@
     ds->linewidth = max(1,tilesize/16);
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(4 * NCOLOURS, float);
 
--- a/map.c
+++ b/map.c
@@ -2527,7 +2527,7 @@
     HATCH_VERT, HATCH_SLASH, HATCH_HORIZ, HATCH_BACKSLASH
 };
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
 
--- a/midend.c
+++ b/midend.c
@@ -767,21 +767,10 @@
 
 float *midend_colours(midend *me, int *ncolours)
 {
-    game_state *state = NULL;
     float *ret;
 
-    if (me->nstates == 0) {
-	char *aux = NULL;
-        char *desc = me->ourgame->new_desc(me->params, me->random,
-					   &aux, TRUE);
-        state = me->ourgame->new_game(me, me->params, desc);
-        sfree(desc);
-        sfree(aux);
-    } else
-        state = me->states[0].state;
+    ret = me->ourgame->colours(me->frontend, ncolours);
 
-    ret = me->ourgame->colours(me->frontend, state, ncolours);
-
     {
         int i;
 
@@ -809,9 +798,6 @@
             }
         }
     }
-
-    if (me->nstates == 0)
-        me->ourgame->free_game(state);
 
     return ret;
 }
--- a/mines.c
+++ b/mines.c
@@ -2638,7 +2638,7 @@
     ds->tilesize = tilesize;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
 
--- a/net.c
+++ b/net.c
@@ -2138,7 +2138,7 @@
     ds->tilesize = tilesize;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret;
 
--- a/netslide.c
+++ b/netslide.c
@@ -1211,7 +1211,7 @@
     ds->tilesize = tilesize;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret;
 
--- a/nullgame.c
+++ b/nullgame.c
@@ -183,7 +183,7 @@
     ds->tilesize = tilesize;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
 
--- a/pattern.c
+++ b/pattern.c
@@ -963,7 +963,7 @@
     ds->tilesize = tilesize;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
 
--- a/pegs.c
+++ b/pegs.c
@@ -940,7 +940,7 @@
     ds->drag_background = blitter_new(dr, TILESIZE, TILESIZE);
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
 
--- a/puzzles.h
+++ b/puzzles.h
@@ -383,7 +383,7 @@
     void (*compute_size)(game_params *params, int tilesize, int *x, int *y);
     void (*set_size)(drawing *dr, game_drawstate *ds,
 		     game_params *params, int tilesize);
-    float *(*colours)(frontend *fe, game_state *state, int *ncolours);
+    float *(*colours)(frontend *fe, int *ncolours);
     game_drawstate *(*new_drawstate)(drawing *dr, game_state *state);
     void (*free_drawstate)(drawing *dr, game_drawstate *ds);
     void (*redraw)(drawing *dr, game_drawstate *ds, game_state *oldstate,
--- a/rect.c
+++ b/rect.c
@@ -2528,7 +2528,7 @@
     ds->tilesize = tilesize;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
 
--- a/samegame.c
+++ b/samegame.c
@@ -1362,7 +1362,7 @@
     *y = TILE_SIZE * params->h + 2 * BORDER - TILE_GAP;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
 
--- a/sixteen.c
+++ b/sixteen.c
@@ -702,7 +702,7 @@
     ds->tilesize = tilesize;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
     int i;
--- a/slant.c
+++ b/slant.c
@@ -1707,7 +1707,7 @@
     ds->tilesize = tilesize;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
 
--- a/solo.c
+++ b/solo.c
@@ -2712,7 +2712,7 @@
     ds->tilesize = tilesize;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
 
--- a/tents.c
+++ b/tents.c
@@ -1810,7 +1810,7 @@
     ds->tilesize = tilesize;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
 
--- a/twiddle.c
+++ b/twiddle.c
@@ -761,7 +761,7 @@
     ds->tilesize = tilesize;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);
     int i;
--- a/untangle.c
+++ b/untangle.c
@@ -1191,7 +1191,7 @@
     ds->tilesize = tilesize;
 }
 
-static float *game_colours(frontend *fe, game_state *state, int *ncolours)
+static float *game_colours(frontend *fe, int *ncolours)
 {
     float *ret = snewn(3 * NCOLOURS, float);