コード例 #1
0
ファイル: hit.c プロジェクト: AhmadTux/DragonFlyBSD
boolean
mon_damage(object *monster, short damage)
{
	const char *mn;
	short row, col;

	monster->hp_to_kill -= damage;

	if (monster->hp_to_kill <= 0) {
		row = monster->row;
		col = monster->col;
		dungeon[row][col] &= ~MONSTER;
		mvaddch(row, col, (int)get_dungeon_char(row, col));

		fight_monster = NULL;
		cough_up(monster);
		mn = mon_name(monster);
		sprintf(hit_message+strlen(hit_message), "defeated the %s", mn);
		message(hit_message, 1);
		hit_message[0] = 0;
		add_exp(monster->kill_exp, 1);
		take_from_pack(monster, &level_monsters);

		if (monster->m_flags & HOLDS) {
			being_held = 0;
		}
		free_object(monster);
		return(0);
	}
	return(1);
}
コード例 #2
0
ファイル: trap.c プロジェクト: naota/rogueclone2s-utf8
void
search(short n, boolean is_auto)
{
    short s, i, j, row, col, t;
    short shown = 0, found = 0;
    static boolean reg_search;

    for (i = -1; i <= 1; i++) {
	for (j = -1; j <= 1; j++) {
	    row = rogue.row + i;
	    col = rogue.col + j;
	    if ((row < MIN_ROW) || (row >= (ROGUE_LINES - 1)) ||
		(col < 0) || (col >= ROGUE_COLUMNS)) {
		continue;
	    }
	    if (dungeon[row][col] & HIDDEN) {
		found++;
	    }
	}
    }
    for (s = 0; s < n; s++) {
	for (i = -1; i <= 1; i++) {
	    for (j = -1; j <= 1; j++) {
		row = rogue.row + i;
		col = rogue.col + j;
		if ((row < MIN_ROW) || (row >= (ROGUE_LINES - 1)) ||
		    (col < 0) || (col >= ROGUE_COLUMNS)) {
		    continue;
		}
		if (dungeon[row][col] & HIDDEN) {
		    if (rand_percent(17 + (rogue.exp + ring_exp))) {
			dungeon[row][col] &= (~HIDDEN);
			if ((!blind) && ((row != rogue.row) ||
					 (col != rogue.col))) {
			    mvaddch_rogue(row, col,
					  get_dungeon_char(row, col));
			}
			shown++;
			if (dungeon[row][col] & TRAP) {
			    t = trap_at(row, col);
			    message(trap_strings[t * 2], 1);
			}
		    }
		}
		if (((shown == found) && (found > 0)) || interrupted) {
		    return;
		}
	    }
	}
	if ((!is_auto) && (reg_search = !reg_search)) {
	    (void) reg_move();
	}
    }
}
コード例 #3
0
ファイル: use.c プロジェクト: AhmadTux/DragonFlyBSD
void
tele(void)
{
	mvaddch(rogue.row, rogue.col, get_dungeon_char(rogue.row, rogue.col));

	if (cur_room >= 0) {
		darken_room(cur_room);
	}
	put_player(get_room_number(rogue.row, rogue.col));
	being_held = 0;
	bear_trap = 0;
}
コード例 #4
0
ファイル: spechit.c プロジェクト: naota/rogueclone2s-utf8
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;
}
コード例 #5
0
ファイル: spechit.c プロジェクト: naota/rogueclone2s-utf8
int
check_imitator(object *monster)
{
    char msg[80];

    if (monster->m_flags & IMITATES) {
	wake_up(monster);
	if (!blind) {
	    mvaddch_rogue(monster->row, monster->col,
			  get_dungeon_char(monster->row, monster->col));
	    check_message();
	    sprintf(msg, mesg[206], mon_name(monster));
	    message(msg, 1);
	}
	return 1;
    }
    return 0;
}
コード例 #6
0
ファイル: spechit.c プロジェクト: naota/rogueclone2s-utf8
int
try_to_cough(short row, short col, object *obj)
{
    if ((row < MIN_ROW) || (row > (ROGUE_LINES - 2)) || (col < 0)
	|| (col > (ROGUE_COLUMNS - 1))) {
	return 0;
    }
    if ((!(dungeon[row][col] & (OBJECT | STAIRS | TRAP))) &&
	(dungeon[row][col] & (TUNNEL | FLOOR | DOOR))) {
	place_at(obj, row, col);
	if (((row != rogue.row) || (col != rogue.col)) &&
	    (!(dungeon[row][col] & MONSTER))) {
	    mvaddch_rogue(row, col, get_dungeon_char(row, col));
	}
	return 1;
    }
    return 0;
}
コード例 #7
0
ファイル: spechit.c プロジェクト: naota/rogueclone2s-utf8
int
flame_broil(object *monster)
{
    short row, col;

    if ((!mon_sees(monster, rogue.row, rogue.col)) || coin_toss()) {
	return 0;
    }
    row = rogue.row - monster->row;
    col = rogue.col - monster->col;
    if (row < 0) {
	row = -row;
    }
    if (col < 0) {
	col = -col;
    }
    if (((row != 0) && (col != 0) && (row != col)) || ((row > 7) || (col > 7))) {
	return 0;
    }
    if ((!blind) && (!rogue_is_around(monster->row, monster->col))) {
	row = monster->row;
	col = monster->col;
	get_closer(&row, &col, rogue.row, rogue.col);
	standout();
	do {
	    mvaddch_rogue(row, col, '~');
	    refresh();
	    get_closer(&row, &col, rogue.row, rogue.col);
	} while ((row != rogue.row) || (col != rogue.col));
	standend();
	row = monster->row;
	col = monster->col;
	get_closer(&row, &col, rogue.row, rogue.col);
	do {
	    mvaddch_rogue(row, col, get_dungeon_char(row, col));
	    refresh();
	    get_closer(&row, &col, rogue.row, rogue.col);
	} while ((row != rogue.row) || (col != rogue.col));
    }
    mon_hit(monster, flame_name, 1);
    return 1;
}