示例#1
0
文件: use.c 项目: masoo/rogueclone2s
void
hallucinate(void)
{
    object *obj, *monster;
    short ch;

    if (blind) {
	return;
    }

    obj = level_objects.next_object;

    while (obj) {
	ch = mvinch_rogue(obj->row, obj->col);
	if (((ch < 'A') || (ch > 'Z')) &&
	    ((obj->row != rogue.row) || (obj->col != rogue.col)))
	    if ((ch != ' ') && (ch != '.') && (ch != '#') && (ch != '+')) {
		addch_rogue(gr_obj_char());
	    }
	obj = obj->next_object;
    }
    monster = level_monsters.next_monster;

    while (monster) {
	ch = mvinch_rogue(monster->row, monster->col);
	if ((ch >= 'A') && (ch <= 'Z')) {
	    addch_rogue(get_rand('A', 'Z'));
	}
	monster = monster->next_monster;
    }
}
示例#2
0
void
save_screen(void)
{
    FILE *fp;
    short i, j;
    char buf[ROGUE_COLUMNS + 2];
    boolean found_non_blank;

    if ((fp = fopen("rogue.screen", "w")) != NULL) {
	for (i = 0; i < ROGUE_LINES; i++) {
	    found_non_blank = 0;
	    for (j = (ROGUE_COLUMNS - 1); j >= 0; j--) {
		buf[j] = mvinch_rogue(i, j);
		if (!found_non_blank) {
		    if ((buf[j] != ' ') || (j == 0)) {
			buf[j + ((j == 0) ? 0 : 1)] = 0;
			found_non_blank = 1;
		    }
		}
	    }
	    fputs(buf, fp);
	    putc('\n', fp);
	}
	fclose(fp);
    } else {
	sound_bell();
    }
}
示例#3
0
/*
 * rw_dungeon
 * セーブデータからのダンジョン情報の保存と復元
 */
void
rw_dungeon(FILE *fp, boolean rw)
{
    short i, j;
    char buf[ROGUE_COLUMNS];

    if (rw) {    // 書き込み時実行
	for (i = 0; i < ROGUE_LINES; i++) {
	    r_write(fp, (char *) dungeon[i], (ROGUE_COLUMNS * sizeof(dungeon[0][0])));
	    for (j = 0; j < ROGUE_COLUMNS; j++) {
		buf[j] = mvinch_rogue(i, j);
	    }
	    r_write(fp, buf, ROGUE_COLUMNS);
	}
	return;
    } else {    // 読み込み時実行
	for (i = 0; i < ROGUE_LINES; i++) {
	    r_read(fp, (char *) dungeon[i], (ROGUE_COLUMNS * sizeof(dungeon[0][0])));
	    r_read(fp, buf, ROGUE_COLUMNS);

	    if ( i < ROGUE_LINES - 1 ) {
		for (j = 0; j < ROGUE_COLUMNS; j++) {
		    mvaddch_rogue(i, j, (unsigned char) buf[j]);
		}
	    } else {
		print_stats(STAT_ALL);
	    }
	}
	return;
    }
}
示例#4
0
void
inventory(object *pack, unsigned short mask)
{
    object *obj;
    short i, j, maxlen, n;
    short row, col;
    char *p;
    char *msg = "  =スペースを押してください=";
    short len = 30;

    if (!(obj = pack->next_object)) {
	message(mesg[26], 0);
	return;
    }
#define	Protected(obj)	((obj->what_is & ARMOR) && obj->is_protected)
nextpage:
    i = 0;
    maxlen = len;
    while (obj && i < ROGUE_LINES - 2) {
	if (obj->what_is & mask) {
	    p = descs[i];
	    *p++ = ' ';
	    *p++ = obj->ichar;
	    *p++ = Protected(obj) ? '}' : ')';
	    *p++ = ' ';
	    get_desc(obj, p, 0);
	    if ((n = strlen(descs[i])) > maxlen) {
		maxlen = n;
	    }
	    i++;
	}
	obj = obj->next_object;
    }
    (void) strcpy(descs[i++], msg);

    if (i == 0) {
	return;
    }

    col = ROGUE_COLUMNS - (maxlen + 2);
    for (row = 0; row < i; row++) {
	if (row > 0) {
	    for (j = col; j < ROGUE_COLUMNS; j++) {
		descs[row - 1][j - col] = mvinch_rogue(row, j);
	    }
	    descs[row - 1][j - col] = 0;
	}
	mvaddstr_rogue(row, col, descs[row]);
	clrtoeol();
    }
    refresh();
    wait_for_ack();

    move(0, 0);
    clrtoeol();
#if defined( COLOR )
    for (j = 1; j < i; j++) {
	move(j, col);
	for (p = descs[j - 1]; *p; p++) {
	    addch_rogue(*p);
	}
    }
#else /* not COLOR */
    for (j = 1; j < i; j++) {		/* by Yasha */
	move(j, col);			/* by Yasha */
	clrtoeol();			/* by Yasha */
	addstr_rogue(descs[j - 1]);	/* by Yasha */
    }					/* by Yasha */
    move(ROGUE_LINES - 1, 0);		/* by Yasha */
    clrtoeol();				/* by Yasha */
    print_stats(STAT_ALL);		/* by Yasha */
#endif /* not COLOR */

    if (obj) {
	goto nextpage;
    }
}