void move_mon_to(object *monster, short row, short col) { short c; int mrow, mcol; mrow = monster->row; mcol = monster->col; dungeon[mrow][mcol] &= ~MONSTER; dungeon[row][col] |= MONSTER; c = mvinch(mrow, mcol); if ((c >= 'A') && (c <= 'Z')) { if (!detect_monster) { mvaddch(mrow, mcol, monster->trail_char); } else { if (rogue_can_see(mrow, mcol)) { mvaddch(mrow, mcol, monster->trail_char); } else { if (monster->trail_char == '.') { monster->trail_char = ' '; } mvaddch(mrow, mcol, monster->trail_char); } } } monster->trail_char = mvinch(row, col); if (!blind && (detect_monster || rogue_can_see(row, col))) { if ((!(monster->m_flags & INVISIBLE) || (detect_monster || see_invisible || r_see_invisible))) { mvaddch(row, col, gmc(monster)); } } if ((dungeon[row][col] & DOOR) && (get_room_number(row, col) != cur_room) && (dungeon[mrow][mcol] == FLOOR) && !blind) { mvaddch(mrow, mcol, ' '); } if (dungeon[row][col] & DOOR) { dr_course(monster, ((dungeon[mrow][mcol] & TUNNEL) ? 1 : 0), row, col); } else { monster->row = row; monster->col = col; } }
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 disappear(object *monster) { short row, col; row = monster->row; col = monster->col; dungeon[row][col] &= ~MONSTER; if (rogue_can_see(row, col)) { mvaddch_rogue(row, col, get_dungeon_char(row, col)); } take_from_pack(monster, &level_monsters); free_object(monster); mon_disappeared = 1; }
void aggravate(void) { object *monster; messagef(0, "you hear a high pitched humming noise"); monster = level_monsters.next_monster; while (monster) { wake_up(monster); monster->m_flags &= (~IMITATES); if (rogue_can_see(monster->row, monster->col)) { mvaddch(monster->row, monster->col, monster->m_char); } monster = monster->next_monster; } }
int m_confuse(object *monster) { char msg[80]; if (!rogue_can_see(monster->row, monster->col)) { return 0; } if (rand_percent(45)) { monster->m_flags &= (~CONFUSES); /* will not confuse the rogue */ return 0; } if (rand_percent(55)) { monster->m_flags &= (~CONFUSES); sprintf(msg, mesg[209], mon_name(monster)); message(msg, 1); confuse(); return 1; } return 0; }
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); } } }