void start_replay(void *arg) { ReplayStage *rstg; StageInfo *gstg; int i; replay_copy(&global.replay, (Replay*)arg); global.replaymode = REPLAY_PLAY; if(global.replay.stgcount == 1) pickedstage = 0; init_player(&global.plr); for(i = pickedstage; i < global.replay.stgcount; ++i) { replay_select(&global.replay, i); rstg = global.replay.current; gstg = stage_get(rstg->stage); if(!gstg) { printf("start_replay(): Invalid stage %d in replay at %i skipped.\n", rstg->stage, i); continue; } gstg->loop(); if(global.game_over == GAMEOVER_ABORT) break; global.game_over = 0; } global.game_over = 0; global.replaymode = REPLAY_RECORD; replay_destroy(&global.replay); replayview->instantselect = False; }
ReplayStage* replay_init_stage(Replay *rpy, StageInfo *stage, int seed, Player *plr) { ReplayStage *s; rpy->stages = (ReplayStage*)realloc(rpy->stages, sizeof(ReplayStage) * (++rpy->stgcount)); s = &(rpy->stages[rpy->stgcount-1]); memset(s, 0, sizeof(ReplayStage)); s->capacity = REPLAY_ALLOC_INITIAL; s->events = (ReplayEvent*)malloc(sizeof(ReplayEvent) * s->capacity); s->stage = stage->id; s->seed = seed; s->diff = global.diff; s->points = global.points; s->plr_pos = plr->pos; s->plr_focus = plr->focus; s->plr_fire = plr->fire; s->plr_char = plr->cha; s->plr_shot = plr->shot; s->plr_lifes = plr->lifes; s->plr_bombs = plr->bombs; s->plr_power = plr->power; s->plr_mflags = plr->moveflags; printf("replay_init_stage(): created a new stage for writting\n"); replay_select(rpy, rpy->stgcount-1); return s; }