Exemplo n.º 1
0
int gen_dungeon(dungeon_t *d)
{
  /*
  pair_t p1, p2;

  p1[dim_x] = rand_range(1, 158);
  p1[dim_y] = rand_range(1, 94);
  p2[dim_x] = rand_range(1, 158);
  p2[dim_y] = rand_range(1, 94);
  */

  empty_dungeon(d);

  /*
  connect_two_points_recursive(d, p1, p2);
  return 0;
  */

  do {
    make_rooms(d);
  } while (place_rooms(d));
  connect_rooms(d);
  place_stairs(d);

  return 0;
}
Exemplo n.º 2
0
int gen_dungeon(dungeon_t *d)
{
  empty_dungeon(d);

  do {
    make_rooms(d);
  } while (place_rooms(d));
  connect_rooms(d);
  place_stairs(d);

  return 0;
}
int generate_dungeon(cell_t *cell_array, room_t *room_array,
		     int *number_of_rooms)
{ 
  *number_of_rooms = 0;
  
  generate_hardness(cell_array);
  
  generate_rooms(cell_array, room_array, number_of_rooms);

  connect_rooms(cell_array, room_array, *number_of_rooms);

  add_stairs(cell_array, room_array, *number_of_rooms);

  return 0;
}
Exemplo n.º 4
0
void
make_level(void)
{
    short i, j;
    short must_1, must_2, must_3;
    boolean big_room;

    must_2 = must_3 = 0;
    if (cur_level < LAST_DUNGEON) {
        cur_level++;
    }
    if (cur_level > max_level) {
        max_level = cur_level;
    }
    must_1 = get_rand(0, 5);

    switch(must_1) {
    case 0:
        must_1 = 0;
        must_2 = 1;
        must_3 = 2;
        break;
    case 1:
        must_1 = 3;
        must_2 = 4;
        must_3 = 5;
        break;
    case 2:
        must_1 = 6;
        must_2 = 7;
        must_3 = 8;
        break;
    case 3:
        must_1 = 0;
        must_2 = 3;
        must_3 = 6;
        break;
    case 4:
        must_1 = 1;
        must_2 = 4;
        must_3 = 7;
        break;
    case 5:
        must_1 = 2;
        must_2 = 5;
        must_3 = 8;
        break;
    }
    if (rand_percent(8)) {
        party_room = 0;
    }
    big_room = ((party_room != NO_ROOM) && rand_percent(1));
    if (big_room) {
        make_room(BIG_ROOM, 0, 0, 0);
    } else {
        for (i = 0; i < MAXROOMS; i++) {
            make_room(i, must_1, must_2, must_3);
        }
    }
    if (!big_room) {
        add_mazes();

        mix_random_rooms();

        for (j = 0; j < MAXROOMS; j++) {

            i = random_rooms[j];

            if (i < (MAXROOMS-1)) {
                (void)connect_rooms(i, i+1);
            }
            if (i < (MAXROOMS-3)) {
                (void)connect_rooms(i, i+3);
            }
            if (i < (MAXROOMS-2)) {
                if (rooms[i+1].is_room & R_NOTHING) {
                    if (connect_rooms(i, i+2)) {
                        rooms[i+1].is_room = R_CROSS;
                    }
                }
            }
            if (i < (MAXROOMS-6)) {
                if (rooms[i+3].is_room & R_NOTHING) {
                    if (connect_rooms(i, i+6)) {
                        rooms[i+3].is_room = R_CROSS;
                    }
                }
            }
            if (is_all_connected()) {
                break;
            }
        }
        fill_out_level();
    }
    if (!has_amulet() && (cur_level >= AMULET_LEVEL)) {
        put_amulet();
    }
}