~mdw
/
sgt
/
puzzles
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
If you paste in a random seed with different ephemeral parameters
[sgt/puzzles]
/
midend.c
diff --git
a/midend.c
b/midend.c
index
192d7e5
..
ce0a315
100644
(file)
--- a/
midend.c
+++ b/
midend.c
@@
-34,7
+34,7
@@
struct midend_data {
char **preset_names;
int npresets, presetsize;
char **preset_names;
int npresets, presetsize;
- game_params *params, *
tmp
params;
+ game_params *params, *
cur
params;
struct midend_state_entry *states;
game_drawstate *drawstate;
game_state *oldstate;
struct midend_state_entry *states;
game_drawstate *drawstate;
game_state *oldstate;
@@
-68,7
+68,7
@@
midend_data *midend_new(frontend *fe, const game *ourgame)
me->nstates = me->statesize = me->statepos = 0;
me->states = NULL;
me->params = ourgame->default_params();
me->nstates = me->statesize = me->statepos = 0;
me->states = NULL;
me->params = ourgame->default_params();
- me->
tmp
params = NULL;
+ me->
cur
params = NULL;
me->desc = NULL;
me->seedstr = NULL;
me->aux_info = NULL;
me->desc = NULL;
me->seedstr = NULL;
me->aux_info = NULL;
@@
-98,8
+98,8
@@
void midend_free(midend_data *me)
if (me->aux_info)
me->ourgame->free_aux_info(me->aux_info);
me->ourgame->free_params(me->params);
if (me->aux_info)
me->ourgame->free_aux_info(me->aux_info);
me->ourgame->free_params(me->params);
- if (me->
tmp
params)
- me->ourgame->free_params(me->
tmp
params);
+ if (me->
cur
params)
+ me->ourgame->free_params(me->
cur
params);
sfree(me);
}
sfree(me);
}
@@
-143,6
+143,10
@@
void midend_new_game(midend_data *me)
newseed[i] = '0' + random_upto(me->random, 10);
sfree(me->seedstr);
me->seedstr = dupstr(newseed);
newseed[i] = '0' + random_upto(me->random, 10);
sfree(me->seedstr);
me->seedstr = dupstr(newseed);
+
+ if (me->curparams)
+ me->ourgame->free_params(me->curparams);
+ me->curparams = me->ourgame->dup_params(me->params);
}
sfree(me->desc);
}
sfree(me->desc);
@@
-151,14
+155,8
@@
void midend_new_game(midend_data *me)
me->aux_info = NULL;
rs = random_init(me->seedstr, strlen(me->seedstr));
me->aux_info = NULL;
rs = random_init(me->seedstr, strlen(me->seedstr));
- me->desc = me->ourgame->new_desc
- (me->tmpparams ? me->tmpparams : me->params, rs, &me->aux_info);
+ me->desc = me->ourgame->new_desc(me->curparams, rs, &me->aux_info);
random_free(rs);
random_free(rs);
-
- if (me->tmpparams) {
- me->ourgame->free_params(me->tmpparams);
- me->tmpparams = NULL;
- }
}
ensure(me);
}
ensure(me);
@@
-585,6
+583,12
@@
int midend_num_presets(midend_data *me)
preset = me->ourgame->default_params();
me->ourgame->decode_params(preset, val);
preset = me->ourgame->default_params();
me->ourgame->decode_params(preset, val);
+ if (me->ourgame->validate_params(preset)) {
+ /* Drop this one from the list. */
+ me->ourgame->free_params(preset);
+ continue;
+ }
+
if (me->presetsize <= me->npresets) {
me->presetsize = me->npresets + 10;
me->presets = sresize(me->presets, me->presetsize,
if (me->presetsize <= me->npresets) {
me->presetsize = me->npresets + 10;
me->presets = sresize(me->presets, me->presetsize,
@@
-651,7
+655,7
@@
config_item *midend_get_config(midend_data *me, int which, char **wintitle)
* the former is likely to persist across many code
* changes).
*/
* the former is likely to persist across many code
* changes).
*/
- parstr = me->ourgame->encode_params(me->params, which == CFG_SEED);
+ parstr = me->ourgame->encode_params(me->
cur
params, which == CFG_SEED);
if (which == CFG_DESC) {
ret[0].sval = snewn(strlen(parstr) + strlen(me->desc) + 2, char);
sprintf(ret[0].sval, "%s:%s", parstr, me->desc);
if (which == CFG_DESC) {
ret[0].sval = snewn(strlen(parstr) + strlen(me->desc) + 2, char);
sprintf(ret[0].sval, "%s:%s", parstr, me->desc);
@@
-731,9
+735,9
@@
static char *midend_game_id_int(midend_data *me, char *id, int defmode)
me->ourgame->free_params(tmpparams);
return error;
}
me->ourgame->free_params(tmpparams);
return error;
}
- if (me->
tmp
params)
- me->ourgame->free_params(me->
tmp
params);
- me->
tmp
params = tmpparams;
+ if (me->
cur
params)
+ me->ourgame->free_params(me->
cur
params);
+ me->
cur
params = tmpparams;
/*
* Now filter only the persistent parts of this state into
/*
* Now filter only the persistent parts of this state into