in procgen/src/roomgen.cpp [147:177]
void RoomGenerator::expand_room(std::set<int> &set, int n) {
std::set<int> curr_set;
curr_set.insert(set.begin(), set.end());
for (int loop = 0; loop < n; loop++) {
std::set<int> next;
for (int curr_idx : curr_set) {
if (game->get_obj(curr_idx) != SPACE)
continue;
int x, y;
game->to_grid_xy(curr_idx, &x, &y);
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
if (i != 0 || j != 0) {
int next_idx = game->to_grid_idx(x + i, y + j);
if (!set_contains(set, next_idx) && game->get_obj(next_idx) == SPACE) {
set.insert(next_idx);
next.insert(next_idx);
}
}
}
}
}
curr_set = next;
}
}