in procgen/src/games/maze.cpp [55:97]
void game_reset() override {
BasicAbstractGame::game_reset();
grid_step = true;
maze_dim = rand_gen.randn((world_dim - 1) / 2) * 2 + 3;
int margin = (world_dim - maze_dim) / 2;
std::shared_ptr<MazeGen> _maze_gen(new MazeGen(&rand_gen, maze_dim));
maze_gen = _maze_gen;
options.center_agent = options.distribution_mode == MemoryMode;
agent->rx = .5;
agent->ry = .5;
agent->x = margin + .5;
agent->y = margin + .5;
maze_gen->generate_maze();
maze_gen->place_objects(GOAL, 1);
for (int i = 0; i < grid_size; i++) {
set_obj(i, WALL_OBJ);
}
for (int i = 0; i < maze_dim; i++) {
for (int j = 0; j < maze_dim; j++) {
int type = maze_gen->grid.get(i + MAZE_OFFSET, j + MAZE_OFFSET);
set_obj(margin + i, margin + j, type);
}
}
if (margin > 0) {
for (int i = 0; i < maze_dim + 2; i++) {
set_obj(margin - 1, margin + i - 1, WALL_OBJ);
set_obj(margin + maze_dim, margin + i - 1, WALL_OBJ);
set_obj(margin + i - 1, margin - 1, WALL_OBJ);
set_obj(margin + i - 1, margin + maze_dim, WALL_OBJ);
}
}
}