void game_reset()

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;
    }