X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=io.c;h=8698ab8ec9b68ab23e379a626deb566954f796de;hp=b3d2438d0b3ed289edd7a92c39790b696c5100da;hb=6b396c7a585fcf5c54caf29c527b195999d23bfe;hpb=e536fe754b3a9be00dcaee8f6ec50ea2d8c7a184 diff --git a/io.c b/io.c index b3d2438..8698ab8 100644 --- a/io.c +++ b/io.c @@ -9,7 +9,7 @@ #include "sst.h" #include "sstlinux.h" -static int linecount; /* for paging */ +static int rows, linecount; /* for paging */ WINDOW *curwnd; @@ -29,8 +29,9 @@ static void outro(void) void iostart(void) { - if (game.options & OPTION_CURSES) { - + if (!(game.options & OPTION_CURSES)) { + rows = atoi(getenv("LINES")); + } else { if (atexit(outro)){ fprintf(stderr,"Unable to register outro(), exiting...\n"); exit(1); @@ -44,15 +45,15 @@ void iostart(void) (void)cbreak(); #ifdef A_COLOR { - start_color(); - init_pair(COLOR_BLACK, COLOR_BLACK, COLOR_BLACK); - init_pair(COLOR_GREEN, COLOR_GREEN, COLOR_BLACK); - init_pair(COLOR_RED, COLOR_RED, COLOR_BLACK); - init_pair(COLOR_CYAN, COLOR_CYAN, COLOR_BLACK); - init_pair(COLOR_WHITE, COLOR_WHITE, COLOR_BLACK); - init_pair(COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLACK); - init_pair(COLOR_BLUE, COLOR_BLUE, COLOR_BLACK); - init_pair(COLOR_YELLOW, COLOR_YELLOW, COLOR_BLACK); + start_color(); + init_pair(COLOR_BLACK, COLOR_BLACK, COLOR_BLACK); + init_pair(COLOR_GREEN, COLOR_GREEN, COLOR_BLACK); + init_pair(COLOR_RED, COLOR_RED, COLOR_BLACK); + init_pair(COLOR_CYAN, COLOR_CYAN, COLOR_BLACK); + init_pair(COLOR_WHITE, COLOR_WHITE, COLOR_BLACK); + init_pair(COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLACK); + init_pair(COLOR_BLUE, COLOR_BLUE, COLOR_BLACK); + init_pair(COLOR_YELLOW, COLOR_YELLOW, COLOR_BLACK); } #endif /* A_COLOR */ //(void)noecho(); @@ -108,7 +109,7 @@ void pause_game(int i) fgets(buf, sizeof(buf), stdin); if (i != 0) { int j; - for (j = 0; j < 24; j++) + for (j = 0; j < rows; j++) putchar('\n'); } linecount = 0; @@ -120,10 +121,17 @@ void skip(int i) { while (i-- > 0) { if (game.options & OPTION_CURSES) { - proutn("\n\r"); + if (curwnd == message_window && linecount >= getmaxy(curwnd) - 3) { + pause_game(0); + clrscr(); + } else { + proutn("\n"); + if (curwnd == message_window) + linecount++; + } } else { linecount++; - if (linecount >= 24) + if (linecount >= rows) pause_game(0); else putchar('\n'); @@ -166,9 +174,8 @@ void prouts(char *fmt, ...) va_start(ap, fmt); vsprintf(buf, fmt, ap); va_end(ap); - skip(1); for (s = buf; *s; s++) { - delay(500); + delay(30); if (game.options & OPTION_CURSES) { waddch(curwnd, *s); wrefresh(curwnd); @@ -218,6 +225,7 @@ void clrscr (void) wmove(curwnd,0,0); wrefresh(curwnd); } + linecount = 0; } void textcolor (int color) @@ -300,12 +308,12 @@ void drawmaps(short l) { if (game.options & OPTION_CURSES) { if (l == 1) - sensor(FALSE); + sensor(); + setwnd(srscan_window); + wmove(curwnd, 0, 0); + enqueue("no"); + srscan(SCAN_FULL); if (l != 2) { - setwnd(srscan_window); - wmove(curwnd, 0, 0); - enqueue("no"); - srscan(SCAN_FULL); setwnd(report_window); wclear(report_window); wmove(report_window, 0, 0); @@ -319,25 +327,28 @@ void drawmaps(short l) } } +static void put_srscan_sym(int x, int y, char sym) +{ + wmove(srscan_window, x+1, y*2+2); + waddch(srscan_window, sym); + wrefresh(srscan_window); +} + void boom(int ii, int jj) /* enemy fall down, go boom */ { if (game.options & OPTION_CURSES) { - setwnd(srscan_window); drawmaps(2); - wmove(srscan_window, ii*2+3, jj+2); + setwnd(srscan_window); wattron(srscan_window, A_REVERSE); - waddch(srscan_window, game.quad[ii][jj]); - wrefresh(srscan_window); + put_srscan_sym(ii, jj, game.quad[ii][jj]); sound(500); delay(1000); nosound(); - wmove(srscan_window, ii*2+3, jj+2); wattroff(srscan_window, A_REVERSE); - waddch(srscan_window, game.quad[ii][jj]); - wrefresh(srscan_window); - setwnd(message_window); + put_srscan_sym(ii, jj, game.quad[ii][jj]); delay(500); + setwnd(message_window); } } @@ -345,16 +356,18 @@ void warble(void) /* sound and visual effects for teleportation */ { if (game.options & OPTION_CURSES) { - drawmaps(1); + drawmaps(2); setwnd(message_window); sound(50); + } + prouts(" . . . . . "); + if (game.options & OPTION_CURSES) { delay(1000); nosound(); - } else - prouts(" . . . . . "); + } } -void tracktorpedo(int x, int y, int ix, int iy, int wait, int l, int i, int n, int iquad) +void tracktorpedo(int ix, int iy, int l, int i, int n, int iquad) /* torpedo-track animation */ { if (!game.options & OPTION_CURSES) { @@ -369,30 +382,31 @@ void tracktorpedo(int x, int y, int ix, int iy, int wait, int l, int i, int n, i } } else if (l==4 || l==9) skip(1); - proutn("%d - %d ", (int)x, (int)y); + proutn("%d - %d ", ix, iy); } else { if (game.damage[DSRSENS]==0 || condit==IHDOCKED) { - drawmaps(2); - delay((wait!=1)*400); - if ((game.quad[ix][iy]==IHDOT)||(game.quad[ix][iy]==IHBLANK)){ - game.quad[ix][iy]='+'; + if (i != 1 && l == 1) { drawmaps(2); - game.quad[ix][iy]=iquad; + delay(400); + } + if ((iquad==IHDOT)||(iquad==IHBLANK)){ + put_srscan_sym(ix, iy, '+'); sound(l*10); delay(100); nosound(); + put_srscan_sym(ix, iy, iquad); } else { - game.quad[ix][iy] |= DAMAGED; - drawmaps(2); - game.quad[ix][iy]=iquad; + wattron(curwnd, A_REVERSE); + put_srscan_sym(ix, iy, iquad); sound(500); delay(1000); nosound(); wattroff(curwnd, A_REVERSE); + put_srscan_sym(ix, iy, iquad); } } else { - proutn("%d - %d ", (int)x, (int)y); + proutn("%d - %d ", ix, iy); } } }