static void midend_set_timer(midend_data *me)
{
me->timing = (me->ourgame->is_timed &&
- me->ourgame->timing_state(me->states[me->statepos-1].state));
+ me->ourgame->timing_state(me->states[me->statepos-1].state,
+ me->ui));
if (me->timing || me->flash_time || me->anim_time)
activate_timer(me->frontend);
else
me->drawstate = me->ourgame->new_drawstate(me->states[0].state);
midend_size_new_drawstate(me);
me->elapsed = 0.0F;
- midend_set_timer(me);
if (me->ui)
me->ourgame->free_ui(me->ui);
me->ui = me->ourgame->new_ui(me->states[0].state);
+ midend_set_timer(me);
me->pressed_mouse_button = 0;
}
{
game_state *oldstate =
me->ourgame->dup_game(me->states[me->statepos - 1].state);
- int special = FALSE, gotspecial = FALSE, ret = 1;
+ int type = MOVE, gottype = FALSE, ret = 1;
float anim_time;
game_state *s;
char *movestr;
} else if (button == 'u' || button == 'u' ||
button == '\x1A' || button == '\x1F') {
midend_stop_anim(me);
- special = special(me->states[me->statepos-1].movetype);
- gotspecial = TRUE;
+ type = me->states[me->statepos-1].movetype;
+ gottype = TRUE;
if (!midend_undo(me))
goto done;
} else if (button == 'r' || button == 'R' ||
me->states[me->nstates].movetype = MOVE;
me->statepos = ++me->nstates;
me->dir = +1;
+ if (me->ui)
+ me->ourgame->changed_state(me->ui,
+ me->states[me->statepos-2].state,
+ me->states[me->statepos-1].state);
} else {
goto done;
}
}
- if (!gotspecial)
- special = special(me->states[me->statepos-1].movetype);
+ if (!gottype)
+ type = me->states[me->statepos-1].movetype;
/*
* See if this move requires an animation.
*/
- if (special) {
+ if (special(type) && !(type == SOLVE &&
+ (me->ourgame->mouse_priorities & SOLVE_ANIMATES))) {
anim_time = 0;
} else {
anim_time = me->ourgame->anim_length(oldstate,
me->ourgame->changed_state(me->ui,
me->states[me->statepos-2].state,
me->states[me->statepos-1].state);
- me->anim_time = 0.0;
- midend_finish_move(me);
+ me->dir = +1;
+ if (me->ourgame->mouse_priorities & SOLVE_ANIMATES) {
+ me->oldstate = me->ourgame->dup_game(me->states[me->statepos-2].state);
+ me->anim_time =
+ me->ourgame->anim_length(me->states[me->statepos-2].state,
+ me->states[me->statepos-1].state,
+ +1, me->ui);
+ me->anim_pos = 0.0;
+ } else {
+ me->anim_time = 0.0;
+ midend_finish_move(me);
+ }
midend_redraw(me);
midend_set_timer(me);
return NULL;
if (key[8] != ':') {
if (started)
ret = "Data was incorrectly formatted for a saved game file";
+ goto cleanup;
}
len = strcspn(key, ": ");
assert(len <= 8);