Another documentation update.
[super-star-trek.git] / io.c
diff --git a/io.c b/io.c
index 9b968027e78093d8a1ff1aeb839040a21809abbd..8698ab8ec9b68ab23e379a626deb566954f796de 100644 (file)
--- a/io.c
+++ b/io.c
@@ -121,7 +121,14 @@ 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 >= rows)
@@ -167,7 +174,6 @@ void prouts(char *fmt, ...)
     va_start(ap, fmt);
     vsprintf(buf, fmt, ap);
     va_end(ap);
-    skip(1);
     for (s = buf; *s; s++) {
        delay(30);
        if (game.options & OPTION_CURSES) {
@@ -219,6 +225,7 @@ void clrscr (void)
        wmove(curwnd,0,0);
        wrefresh(curwnd);
    }
+   linecount = 0;
 }
 
 void textcolor (int color)
@@ -302,11 +309,11 @@ void drawmaps(short l)
     if (game.options & OPTION_CURSES) {
        if (l == 1)
            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);
@@ -320,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);
     }
 } 
 
@@ -346,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) {
@@ -370,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);
        }
     }
 }