void create_monster(void) { short row, col; short i; boolean found = 0; object *monster; row = rogue.row; col = rogue.col; for (i = 0; i < 9; i++) { rand_around(i, &row, &col); if (((row == rogue.row) && (col == rogue.col)) || (row < MIN_ROW) || (row > (DROWS-2)) || (col < 0) || (col > (DCOLS-1))) { continue; } if ((!(dungeon[row][col] & MONSTER)) && (dungeon[row][col] & (FLOOR|TUNNEL|STAIRS|DOOR))) { found = 1; break; } } if (found) { monster = gr_monster((object *)0, 0); put_m_at(row, col, monster); mvaddch(row, col, gmc(monster)); if (monster->m_flags & (WANDERS | WAKENS)) { wake_up(monster); } } else { messagef(0, "you hear a faint cry of anguish in the distance"); } }
void wanderer(void) { object *monster; short row, col, i; boolean found = 0; monster = NULL; /* XXXGCC -Wuninitialized [powerpc] */ for (i = 0; ((i < 15) && (!found)); i++) { monster = gr_monster(NULL, 0); if (!(monster->m_flags & (WAKENS | WANDERS))) { free_object(monster); } else { found = 1; } } if (found) { found = 0; wake_up(monster); for (i = 0; ((i < 25) && (!found)); i++) { gr_row_col(&row, &col, (FLOOR | TUNNEL | STAIRS | OBJECT)); if (!rogue_can_see(row, col)) { put_m_at(row, col, monster); found = 1; } } if (!found) { free_object(monster); } } }
void party_monsters(int rn, int n) { int i, j; short row, col; object *monster; boolean found; n += n; for (i = 0; i < MONSTERS; i++) { mon_tab[i].first_level -= (cur_level % 3); } for (i = 0; i < n; i++) { if (no_room_for_monster(rn)) { break; } for (j = found = 0; ((!found) && (j < 250)); j++) { row = get_rand(rooms[rn].top_row + 1, rooms[rn].bottom_row - 1); col = get_rand(rooms[rn].left_col + 1, rooms[rn].right_col-1); if ((!(dungeon[row][col] & MONSTER)) && (dungeon[row][col] & (FLOOR | TUNNEL))) { found = 1; } } if (found) { monster = gr_monster((object *) 0, 0); if (!(monster->m_flags & IMITATES)) { monster->m_flags |= WAKENS; } put_m_at(row, col, monster); } } for (i = 0; i < MONSTERS; i++) { mon_tab[i].first_level += (cur_level % 3); } }
void put_mons(void) { short i; short n; object *monster; short row, col; n = get_rand(4, 6); for (i = 0; i < n; i++) { monster = gr_monster(NULL, 0); if ((monster->m_flags & WANDERS) && coin_toss()) { wake_up(monster); } gr_row_col(&row, &col, (FLOOR | TUNNEL | STAIRS | OBJECT)); put_m_at(row, col, monster); } }
void wanderer(void) { object *monster; int row, col; int i; boolean found = 0; for (i = 0; ((i < 15) && (!found)); i++) { monster = gr_monster((object *) 0, 0); if (!(monster->m_flags & (WAKENS | WANDERS))) { free_object(monster); } else { found = 1; } } if (found) { found = 0; wake_up(monster); for (i = 0; ((i < 25) && (!found)); i++) { gr_row_col(&row, &col, (FLOOR | TUNNEL | STAIRS | OBJECT)); if (!rogue_can_see(row, col)) { put_m_at(row, col, monster); found = 1; } } if (!found) { free_object(monster); } } }