Example #1
0
void replay_stage_sync_player_state(ReplayStage *stg, Player *plr) {
	plr->points = stg->plr_points;
	plr->continues_used = stg->plr_continues_used;
	plr->mode = plrmode_find(stg->plr_char, stg->plr_shot);
	plr->pos = stg->plr_pos_x + I * stg->plr_pos_y;
	plr->focus = stg->plr_focus;
	plr->lives = stg->plr_lives;
	plr->life_fragments = stg->plr_life_fragments;
	plr->bombs = stg->plr_bombs;
	plr->bomb_fragments = stg->plr_bomb_fragments;
	plr->power = stg->plr_power;
	plr->inputflags = stg->plr_inputflags;
}
Example #2
0
void replay_play(Replay *rpy, int firstidx) {
	if(rpy != &global.replay) {
		replay_copy(&global.replay, rpy, true);
	}

	if(firstidx >= global.replay.numstages || firstidx < 0) {
		log_warn("No stage #%i in the replay", firstidx);
		return;
	}

	global.replaymode = REPLAY_PLAY;

	for(int i = firstidx; i < global.replay.numstages; ++i) {
		ReplayStage *rstg = global.replay_stage = global.replay.stages+i;
		StageInfo *gstg = stage_get(rstg->stage);

		if(!gstg) {
			log_warn("Invalid stage %x in replay at %i skipped.", rstg->stage, i);
			continue;
		}

		global.plr.mode = plrmode_find(rstg->plr_char, rstg->plr_shot);
		stage_loop(gstg);

		if(global.game_over == GAMEOVER_ABORT) {
			break;
		}

		if(global.game_over == GAMEOVER_RESTART) {
			--i;
		}

		global.game_over = 0;
	}

	global.game_over = 0;
	global.replaymode = REPLAY_RECORD;
	replay_destroy(&global.replay);
	global.replay_stage = NULL;
	free_resources(false);
}
Example #3
0
PlayerMode* plrmode_parse(const char *name) {
	CharacterID char_id = (CharacterID)-1;
	ShotModeID shot_id = (ShotModeID)-1;
	char buf[strlen(name) + 1];
	strcpy(buf, name);

	for(int i = 0; i < sizeof(buf); ++i) {
		buf[i] = tolower(buf[i]);
	}

	if(!*buf) {
		log_debug("Got an empty string");
		return NULL;
	}

	char shot = buf[sizeof(buf) - 2];

	if(shot < 'a' || shot >= 'a' + NUM_SHOT_MODES_PER_CHARACTER) {
		log_debug("Got invalid shotmode: %c", shot);
		return NULL;
	}

	shot_id = shot - 'a';
	buf[sizeof(buf) - 2] = 0;

	for(int i = 0; i < NUM_CHARACTERS; ++i) {
		PlayerCharacter *chr = player_characters[i];

		if(!strcmp(buf, chr->lower_name)) {
			char_id = chr->id;
		}
	}

	if(char_id == (CharacterID)-1) {
		log_debug("Got invalid character: %s", buf);
		return NULL;
	}

	return plrmode_find(char_id, shot_id);
}