in coinrun/coinrun.cpp [1442:1492]
void state_reset(const std::shared_ptr<State>& state, int game_type)
{
assert(player_themesl.size() > 0 && "Please call init(threads) first");
int level_seed = 0;
if (USE_LEVEL_SET) {
int level_index = global_rand_gen.randint(0, NUM_LEVELS);
level_seed = LEVEL_SEEDS[level_index];
} else if (NUM_LEVELS > 0) {
level_seed = global_rand_gen.randint(0, NUM_LEVELS);
} else {
level_seed = global_rand_gen.randint();
}
RandomMazeGenerator maze_gen;
maze_gen.rand_gen.seed(level_seed);
int w = 64;
int h = 64;
state->maze.reset(new Maze(w, h, game_type));
maze_gen.maze = state->maze;
maze_gen.initial_floor_and_walls(game_type);
if (game_type==CoinRunPlatforms_v0) {
maze_gen.generate_coins_on_platforms();
} else if (game_type == CoinRunToTheRight_v0) {
maze_gen.generate_coin_to_the_right(game_type);
} else if (game_type == CoinRunMaze_v0) {
maze_gen.generate_coin_maze();
} else {
fprintf(stderr, "coinrun: unknown game type %i\n", game_type);
maze_gen.generate_test_level();
}
Agent &agent = state->agent;
float zoom = state->maze->default_zoom;
agent.maze = state->maze;
agent.zoom = zoom;
agent.target_zoom = zoom;
agent.theme_n = maze_gen.randn(player_themesl.size());
state->ground_n = maze_gen.randn(ground_themes.size());
state->bg_n = maze_gen.randn(bg_images.size());
agent.reset(0);
state->maze->is_terminated = false;
state->time = 0;
}