in procgen/src/games/fruitbot.cpp [197:250]
void game_reset() override {
BasicAbstractGame::game_reset();
last_fire_time = 0;
int min_sep = 4;
int num_walls = 10;
int object_group_size = 6;
int buf_h = 4;
float door_prob = .125;
float min_pct = .1;
if (options.distribution_mode == EasyMode) {
num_walls = 5;
object_group_size = 2;
door_prob = 0;
min_pct = .2;
}
std::vector<int> partition = rand_gen.partition(main_height - min_sep * num_walls - buf_h, num_walls);
int curr_h = 0;
for (int part : partition) {
int dy = min_sep + part;
curr_h += dy;
bool use_door = (dy > 5) && rand_gen.rand01() < door_prob;
add_walls(curr_h, use_door, min_pct);
}
agent->y = agent->ry;
int num_good = rand_gen.randn(10) + 10;
int num_bad = rand_gen.randn(10) + 10;
for (int i = 0; i < main_width; i++) {
auto present = add_entity_rxy(i + .5, main_height - .5, 0, 0, .5, .5, PRESENT);
choose_random_theme(present);
}
spawn_entities(num_good, .5, GOOD_OBJ, 0, 0, main_width, main_height);
spawn_entities(num_bad, .5, BAD_OBJ, 0, 0, main_width, main_height);
for (auto ent : entities) {
if (ent->type == GOOD_OBJ || ent->type == BAD_OBJ) {
ent->image_theme = rand_gen.randn(object_group_size);
fit_aspect_ratio(ent);
}
}
agent->rotation = -1 * PI / 2;
}