#include "sst.h"
#include "sstlinux.h"
-static int linecount; /* for paging */
+static int rows, linecount; /* for paging */
WINDOW *curwnd;
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);
(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();
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;
{
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');
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);
wmove(curwnd,0,0);
wrefresh(curwnd);
}
+ linecount = 0;
}
void textcolor (int color)
{
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);
}
}
+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);
}
}
/* 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) {
}
} 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);
}
}
}
void setpassword(void)
{
- if (!game.options & OPTION_CURSES) {
+ if (!(game.options & OPTION_CURSES)) {
while (TRUE) {
scan();
strcpy(game.passwd, citem);