static int make_rooms(dungeon_t *d) { uint32_t i; for (i = MIN_ROOMS; i < MAX_ROOMS && rand_under(6, 8); i++) ; d->num_rooms = i; d->rooms = (room_t *) malloc(sizeof (*d->rooms) * d->num_rooms); for (i = 0; i < d->num_rooms; i++) { d->rooms[i].size[dim_x] = ROOM_MIN_X; d->rooms[i].size[dim_y] = ROOM_MIN_Y; while (rand_under(3, 4) && d->rooms[i].size[dim_x] < ROOM_MAX_X) { d->rooms[i].size[dim_x]++; } while (rand_under(3, 4) && d->rooms[i].size[dim_y] < ROOM_MAX_Y) { d->rooms[i].size[dim_y]++; } /* Initially, every room is connected only to itself. */ d->rooms[i].connected = i; } return 0; }
static void place_stairs(dungeon_t *d) { pair_t p; do { while ((p[dim_y] = rand_range(1, DUNGEON_Y - 2)) && (p[dim_x] = rand_range(1, DUNGEON_X - 2)) && ((mappair(p) < ter_floor) || (mappair(p) > ter_stairs))) ; mappair(p) = ter_stairs_down; } while (rand_under(1, 3)); do { while ((p[dim_y] = rand_range(1, DUNGEON_Y - 2)) && (p[dim_x] = rand_range(1, DUNGEON_X - 2)) && ((mappair(p) < ter_floor) || (mappair(p) > ter_stairs))) ; mappair(p) = ter_stairs_up; } while (rand_under(1, 4)); }
static int make_rooms(dungeon_t *d) { uint32_t i; for (i = MIN_ROOMS; i < MAX_ROOMS && rand_under(6, 8); i++) ; d->num_rooms = i; d->rooms = (room_t *) malloc(sizeof (*d->rooms) * d->num_rooms); for (i = 0; i < d->num_rooms; i++) { d->rooms[i].size[dim_x] = ROOM_MIN_X; d->rooms[i].size[dim_y] = ROOM_MIN_Y; while (rand_under(3, 4) && d->rooms[i].size[dim_x] < ROOM_MAX_X) { d->rooms[i].size[dim_x]++; } while (rand_under(3, 4) && d->rooms[i].size[dim_y] < ROOM_MAX_Y) { d->rooms[i].size[dim_y]++; } } return 0; }
bool rand_bool(int pro) { return rand_under(total_probability) < pro; }