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);
		}
	}
}
Beispiel #3
0
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);
	}
}
Beispiel #5
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);
        }
    }
}