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; } }
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(); } }
/* * 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; } }
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; } }