X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=io.c;h=025aa162f00daa03cc6fc3eee2fda805180df7d6;hb=634c187043cf4af8328069b8c1fe410efab2e4c7;hp=444a5cb2c2923e509a3702b16756d729a5fc735b;hpb=4be633b9c4830f6cf8c7213c91a31d3ea12f313c;p=super-star-trek.git diff --git a/io.c b/io.c index 444a5cb..025aa16 100644 --- a/io.c +++ b/io.c @@ -9,13 +9,13 @@ #include #include "conio.h" -#include "sstlinux.h" #include "sst.h" +#include "sstlinux.h" #ifndef SERGEEV static int linecount; /* for paging */ -#endif /* SERGEEV */ static int screenheight = 24, screenwidth = 80; +#endif /* SERGEEV */ #ifndef SERGEEV static int curses = FALSE; #else /* SERGEEV */ @@ -23,16 +23,20 @@ static int curses = TRUE; #endif /* SERGEEV */ #ifdef SERGEEV -wnd wnds[6]={{1,1,80,25}, /* FULLSCREEN_WINDOW */ - {1,1,25,12}, /* LEFTUPPER_WINDOW */ - {26,2,80,12}, /* SRSCAN_WINDOW */ - {65,1,80,10}, /* LRSCAN_WINDOW */ - {1,13,80,23}, /* LOWER_WINDOW */ - {1,24,80,25}, /* BOTTOM_WINDOW */ +typedef struct { + int wndleft,wndtop,wndright,wndbottom; +} wnd; +static wnd wnds[6]={{1,1,80,25}, /* FULLSCREEN_WINDOW */ + {1,1,25,12}, /* LEFTUPPER_WINDOW */ + {26,2,80,12}, /* SRSCAN_WINDOW */ + {65,1,80,10}, /* LRSCAN_WINDOW */ + {1,13,80,23}, /* LOWER_WINDOW */ + {1,24,80,25}, /* BOTTOM_WINDOW */ }; short curwnd; #endif /* SERGEEV */ +#ifndef SERGEEV static void outro(int sig) { /* wrap up, either normally or due to signal */ if (curses) { @@ -49,9 +53,11 @@ static void fastexit(int sig) { putchar('\n'); exit(0); } +#endif /* SERGEEV */ void iostart(int usecurses) { #ifdef SERGEEV + initconio(); textattr(7); clrscr(); setwnd(FULLSCREEN_WINDOW); @@ -165,9 +171,11 @@ void skip(int i) { } #else /* SERGEEV */ while (i-- > 0) proutn("\n\r"); +#endif /* SERGEEV */ } static void vproutn(char *fmt, va_list ap) { +#ifdef SERGEEV char *s, *p; vasprintf(&s, fmt, ap); p=s; @@ -253,8 +261,8 @@ static void vprouts(char *fmt, va_list ap) { } free(s); } - #endif /* SERGEEV */ + void prouts(char *fmt, ...) { #ifndef SERGEEV clock_t endTime; @@ -285,20 +293,6 @@ void prouts(char *fmt, ...) { #endif /* SERGEEV */ } -void c_printf (char *format, ... ) -{ - char buffer[BUFSIZ]; /* Well, BUFSIZ is from ncurses... */ - va_list argp; - va_start(argp,format); - vsprintf(buffer,format,argp); - va_end(argp); -#ifdef SERGEEV - waddstr(conio_scr,buffer); -#else - proutn(buffer); -#endif /* SERGEEV */ -} - void cgetline(char *line, int max) { if (curses) { #ifndef SERGEEV @@ -345,21 +339,46 @@ void drawmaps(short l) { if (l==1) sensor(); if (l!=2) setwnd(LEFTUPPER_WINDOW); gotoxy(1,1); - strcpy(line,"s"); - srscan(1); + enqueue("no"); + srscan(SCAN_FULL); if (l!=2){ setwnd(SRSCAN_WINDOW); clrscr(); - srscan(2); + srscan(SCAN_NO_LEFTSIDE); setwnd(LRSCAN_WINDOW); clrscr(); - strcpy(line,"l"); + enqueue("l"); lrscan(); _setcursortype(_NORMALCURSOR); } #endif /* SERGEEV */ } +void boom(int ii, int jj) +/* enemy fall down, go boom */ +{ +#ifdef SERGEEV + int crx, cry; + crx=wherex(); + cry=wherey(); + setwnd(LEFTUPPER_WINDOW); + drawmaps(2); + gotoxy(jj*2+3,ii+2); + highvideo(); + proutn("%c", game.quad[ii][jj]); + gotoxy(wherex()-1,wherey()); + sound(500); + delay(1000); + nosound(); + lowvideo(); + proutn("%c", game.quad[ii][jj]); + setwnd(LOWER_WINDOW); + gotoxy(crx,cry); + _setcursortype(_NORMALCURSOR); + delay(500); +#endif /* SERGEEV */ +} + void warble(void) /* sound and visual effects for teleportation */ { @@ -378,6 +397,62 @@ void warble(void) #endif /* SERGEEV */ } +void tracktorpedo(int x, int y, int ix, int iy, int wait, int l, int i, int n, int iquad) +/* torpedo-track animation */ +{ +#ifndef SERGEEV + if (l == 1) { + if (n != 1) { + skip(1); + proutn("Track for torpedo number %d- ", i); + } + else { + skip(1); + proutn("Torpedo track- "); + } + } else if (l==4 || l==9) + skip(1); + proutn("%d - %d ", (int)x, (int)y); +#else + if (game.damage[DSRSENS]==0 || condit==IHDOCKED) { + drawmaps(2); + delay((wait!=1)*400); + gotoxy(iy*2+3,ix+2); + if ((game.quad[ix][iy]==IHDOT)||(game.quad[ix][iy]==IHBLANK)){ + game.quad[ix][iy]='+'; + drawmaps(2); + game.quad[ix][iy]=iquad; + sound(l*10); + delay(100); + nosound(); + } + else { + game.quad[ix][iy]|=128; + drawmaps(2); + game.quad[ix][iy]=iquad; + _setcursortype(_NOCURSOR); + sound(500); + delay(1000); + nosound(); + lowvideo(); + _setcursortype(_NORMALCURSOR); + } + } else { + proutn("%d - %d ", (int)x, (int)y); + } +#endif /* SERGEEV */ +} + +void makechart(void) { +#ifdef SERGEEV + _setcursortype(_NOCURSOR); + setwnd(LOWER_WINDOW); + clrscr(); + chart(0); + _setcursortype(_NORMALCURSOR); +#endif /* SERGEEV */ +} + void setpassword(void) { #ifndef SERGEEV while (TRUE) {