Ejemplo n.º 1
0
void mv_mons(void)
{
    object *monster, *next_monster;
    boolean flew;

    if (haste_self % 2)
    {
        return;
    }

    monster = level_monsters.next_monster;

    while (monster)
    {
        next_monster = monster->next_monster;
        if (monster->m_flags & HASTED) {
            mon_disappeared = 0;
            mv_monster(monster, rogue.row, rogue.col);
            if (mon_disappeared)
            {
                goto NM;
            }
        } else if (monster->m_flags & SLOWED) {
            monster->slowed_toggle = !monster->slowed_toggle;
            if (monster->slowed_toggle)
            {
                goto NM;
            }
        }
        if ((monster->m_flags & CONFUSED) && move_confused(monster))
        {
            goto NM;
        }
        flew = 0;
        if ((monster->m_flags & FLIES) && !(monster->m_flags & NAPPING)
                && !mon_can_go(monster, rogue.row, rogue.col))
        {
            flew = 1;
            mv_monster(monster, rogue.row, rogue.col);
        }
        if (!(flew && mon_can_go(monster, rogue.row, rogue.col)))
        {
            mv_monster(monster, rogue.row, rogue.col);
        }
NM:
        monster = next_monster;
    }
}
Ejemplo n.º 2
0
int
seek_gold(object *monster)
{
    short i, j, rn, s;

    if ((rn = get_room_number(monster->row, monster->col)) < 0) {
	return 0;
    }
    for (i = rooms[rn].top_row + 1; i < rooms[rn].bottom_row; i++) {
	for (j = rooms[rn].left_col + 1; j < rooms[rn].right_col; j++) {
	    if ((gold_at(i, j)) && !(dungeon[i][j] & MONSTER)) {
		monster->m_flags |= CAN_FLIT;
		s = mon_can_go(monster, i, j);
		monster->m_flags &= (~CAN_FLIT);
		if (s) {
		    move_mon_to(monster, i, j);
		    monster->m_flags |= ASLEEP;
		    monster->m_flags &= (~(WAKENS | SEEKS_GOLD));
		    return 1;
		}
		monster->m_flags &= (~SEEKS_GOLD);
		monster->m_flags |= CAN_FLIT;
		mv_monster(monster, i, j);
		monster->m_flags &= (~CAN_FLIT);
		monster->m_flags |= SEEKS_GOLD;
		return 1;
	    }
	}
    }
    return 0;
}
Ejemplo n.º 3
0
void mv_aquatars(void)
{
    object *monster;

    monster = level_monsters.next_monster;

    while (monster)
    {
        if ((monster->m_char == 'A')
                && mon_can_go(monster, rogue.row, rogue.col))
        {
            mv_monster(monster, rogue.row, rogue.col);
            monster->m_flags |= ALREADY_MOVED;
        }
        monster = monster->next_monster;
    }
}