X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=reports.c;h=8b01a6d5d00f34bddd93c189ec58387889539a97;hp=32ee650d8b71c90623e5eadf9c9567b41b711d51;hb=760ecf730c119682b414153a629ec2adc224434f;hpb=f32d2d732216b19d96c2e31b5aa3b977f9646354 diff --git a/reports.c b/reports.c index 32ee650..8b01a6d 100644 --- a/reports.c +++ b/reports.c @@ -2,22 +2,6 @@ #include #include #include -#include "conio.h" -#include "sstlinux.h" - -#ifdef SERGEEV -int 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); - return waddstr(conio_scr,buffer); -} -#else -#define c_printf proutn -#endif /* SERGEEV */ void attakreport(int l) { if (!l) { @@ -39,9 +23,7 @@ void attakreport(int l) { if (isatb == 1) proutn("Base in %i - %i attacked by S. Alive until %.1f", game.state.isx, game.state.isy, game.future[FSCDBAS]); } -#ifdef SERGEEV clreol(); -#endif /* SERGEEV */ } @@ -147,12 +129,12 @@ void lrscan(void) { for (x = quadx-1; x <= quadx+1; x++) { proutn(" "); for (y = quady-1; y <= quady+1; y++) { - if (x == 0 || x > 8 || y == 0 || y > 8) + if (x == 0 || x > GALSIZE || y == 0 || y > GALSIZE) proutn(" -1"); else { - if (game.state.galaxy[x][y]<1000) proutn(" %3d", game.state.galaxy[x][y]); + if (game.state.galaxy[x][y] 0 ? game.state.galaxy[x][y]+1000 : 1; + game.starch[x][y] = game.damage[DRADIO] > 0 ? game.state.galaxy[x][y]+SUPERNOVA_PLACE : 1; } } prout(" "); @@ -184,16 +166,16 @@ void chart(int nn) { char *cp; chew(); if (stdamtim != 1e30 && stdamtim != game.state.date && condit == IHDOCKED) { - c_printf("Spock- \"I revised the Star Chart from the starbase's records.\"\n\r"); + proutn("Spock- \"I revised the Star Chart from the starbase's records.\"\n\r"); } - if (nn == 0) c_printf(" STAR CHART FOR THE KNOWN GALAXY\n\r"); + if (nn == 0) proutn(" STAR CHART FOR THE KNOWN GALAXY\n\r"); if (stdamtim != 1e30) { if (condit == IHDOCKED) { /* We are docked, so restore chart from base information */ stdamtim = game.state.date; - for (i=1; i <= 8 ; i++) - for (j=1; j <= 8; j++) - if (game.starch[i][j] == 1) game.starch[i][j] = game.state.galaxy[i][j]+1000; + for (i=1; i <= GALSIZE ; i++) + for (j=1; j <= GALSIZE; j++) + if (game.starch[i][j] == 1) game.starch[i][j] = game.state.galaxy[i][j]+SUPERNOVA_PLACE; } else { proutn("(Last surveillance update %d stardates ago.", @@ -202,187 +184,174 @@ void chart(int nn) { } prout(" 1 2 3 4 5 6 7 8"); - for (i = 1; i <= 8; i++) { - c_printf("%d |", i); - for (j = 1; j <= 8; j++) { - char buf[4]; - c_printf(" "); + for (i = 1; i <= GALSIZE; i++) { + proutn("%d |", i); + for (j = 1; j <= GALSIZE; j++) { + char buf[4]; + proutn(" "); if (game.starch[i][j] < 0) strcpy(buf, ".1."); else if (game.starch[i][j] == 0) strcpy(buf, "..."); - else if (game.starch[i][j] > 999) - if ((i==quadx)&&(j==quady)){ -#ifdef SERGEEV - gotoxy(wherex()-1,wherey()); -#endif /* SERGEEV */ - if (game.starch[i][i]<2000) - sprintf(buf, "%03d", game.starch[i][j]-1000); - else - strcpy(buf, "***"); - } - else - if (game.starch[i][j]<2000) - sprintf(buf, "%03d", game.starch[i][j]-1000); - else - strcpy(buf, "***"); - else if ((i==quadx)&&(j==quady)){ -#ifdef SERGEEV - gotoxy(wherex()-1,wherey()); -#endif /* SERGEEV */ - sprintf(buf, "%03d", game.state.galaxy[i][j]); - } - else if (game.state.galaxy[i][j]>=1000) + else if (game.state.galaxy[i][j]>=SUPERNOVA_PLACE) strcpy(buf, "***"); else sprintf(buf, "%03d", game.state.galaxy[i][j]); for (cp = buf; cp < buf + sizeof(buf); cp++) if (*cp == '0') *cp = '.'; - c_printf(buf); + proutn(buf); } - c_printf(" |"); - if (i<8) c_printf("\n\r"); + proutn(" |"); + if (i0.0 ? game.state.galaxy[quadx][quady]+1000:1; - scan(); - if (isit("chart")) nn = TRUE; - rightside = FALSE; - chew(); - c_printf(" 1 2 3 4 5 6 7 8 9 10\n\r"); - break; - case 2: // REQUEST - leftside=FALSE; - break; - case 3: // STATUS - chew(); - leftside = FALSE; - skip(1); + static char requests[][3] = + {"","da","co","po","ls","wa","en","to","sh","kl","ti"}; + char *cp = NULL; + int leftside=TRUE, rightside=TRUE, i, j, jj, k=0, nn=FALSE, t, dam=0; + int goodScan=TRUE; + switch (l) { + case SCAN_FULL: // SRSCAN + if (game.damage[DSRSENS] != 0) { + /* Allow base's sensors if docked */ + if (condit != IHDOCKED) { + prout(" S.R. SENSORS DAMAGED!"); + goodScan=FALSE; + } + else + prout(" [Using Base's sensors]"); + } + else proutn(" Short-range scan\n\r"); + if (goodScan) game.starch[quadx][quady] = game.damage[DRADIO]>0.0 ? game.state.galaxy[quadx][quady]+SUPERNOVA_PLACE:1; + scan(); + if (isit("chart")) nn = TRUE; + if (isit("no")) rightside = FALSE; + chew(); + proutn(" 1 2 3 4 5 6 7 8 9 10\n\r"); + break; + case SCAN_REQUEST: + while (scan() == IHEOL) + proutn("Information desired? "); + chew(); + for (k = 1; k <= sizeof(requests)/sizeof(requests[0]); k++) + if (strncmp(citem,requests[k],min(2,strlen(citem)))==0) + break; + if (k > sizeof(requests)/sizeof(requests[0])) { + prout("UNRECOGNIZED REQUEST. Legal requests are:\n" + " date, condition, position, lsupport, warpfactor,\n" + " energy, torpedoes, shields, klingons, time."); + return FALSE; } - if (condit != IHDOCKED) newcnd(); - for (i = 1; i <= 10; i++) { - jj = (k!=0 ? k : i); - if (leftside) { - proutn("%2d ", i); - for (j = 1; j <= 10; j++) { - if (goodScan || (abs(i-sectx)<= 1 && abs(j-secty) <= 1)){ - if ((game.quad[i][j]==IHMATER0)||(game.quad[i][j]==IHMATER1)||(game.quad[i][j]==IHMATER2)||(game.quad[i][j]==IHE)||(game.quad[i][j]==IHF)){ - switch (condit) { - case IHRED: textcolor(RED); break; - case IHGREEN: textcolor(GREEN); break; - case IHYELLOW: textcolor(YELLOW); break; - case IHDOCKED: textcolor(LIGHTGRAY); break; - case IHDEAD: textcolor(WHITE); - } -#ifdef SERGEEV - if (game.quad[i][j]!=ship) highvideo(); -#endif /* SERGEEV */ - } -#ifdef SERGEEV - if (game.quad[i][j] & 128) highvideo(); -#endif /* SERGEEV */ - c_printf("%c ",game.quad[i][j] & 127); - textcolor(LIGHTGRAY); - } - else - proutn("- "); + // no "break" + case SCAN_STATUS: // STATUS + chew(); + leftside = FALSE; + skip(1); + case SCAN_NO_LEFTSIDE: // REQUEST + leftside=FALSE; + break; + } + if (condit != IHDOCKED) newcnd(); + for (i = 1; i <= QUADSIZE; i++) { + jj = (k!=0 ? k : i); + if (leftside) { + proutn("%2d ", i); + for (j = 1; j <= QUADSIZE; j++) { + if (goodScan || (abs(i-sectx)<= 1 && abs(j-secty) <= 1)){ + if ((game.quad[i][j]==IHMATER0)||(game.quad[i][j]==IHMATER1)||(game.quad[i][j]==IHMATER2)||(game.quad[i][j]==IHE)||(game.quad[i][j]==IHF)){ + switch (condit) { + case IHRED: textcolor(RED); break; + case IHGREEN: textcolor(GREEN); break; + case IHYELLOW: textcolor(YELLOW); break; + case IHDOCKED: textcolor(CYAN); break; + case IHDEAD: textcolor(BROWN); } + if (game.quad[i][j] != ship) + highvideo(); + } + if (game.quad[i][j] & DAMAGED) + highvideo(); + proutn("%c ",game.quad[i][j] & ~DAMAGED); + textcolor(DEFAULT); } - if (rightside) { - switch (jj) { - case 1: - proutn("Stardate %.1f, Time Left %.2f", game.state.date, game.state.remtime); - break; - case 2: - if (condit != IHDOCKED) newcnd(); - switch (condit) { - case IHRED: cp = "RED"; break; - case IHGREEN: cp = "GREEN"; break; - case IHYELLOW: cp = "YELLOW"; break; - case IHDOCKED: cp = "DOCKED"; break; - case IHDEAD: cp="DEAD"; break; - } - for (t=0;t<=NDEVICES;t++) - if (game.damage[t]>0) dam++; - proutn("Condition %s, %i DAMAGES", cp, dam); - break; - case 3: - proutn("Position %d - %d , %d - %d", - quadx, quady, sectx, secty); - break; - case 4: - proutn("Life Support "); - if (game.damage[DLIFSUP] != 0.0) { - if (condit == IHDOCKED) - proutn("DAMAGED, Base provides"); - else - proutn("DAMAGED, reserves=%4.2f", lsupres); - } - else - proutn("ACTIVE"); - break; - case 5: - proutn("Warp Factor %.1f", warpfac); - break; - case 6: - proutn("Energy %.2f", energy); - break; - case 7: - proutn("Torpedoes %d", torps); - break; - case 8: - proutn("Shields "); - if (game.damage[DSHIELD] != 0) - proutn("DAMAGED,"); - else if (shldup) - proutn("UP,"); - else - proutn("DOWN,"); - proutn(" %d%% %.1f units", - (int)((100.0*shield)/inshld + 0.5), shield); - break; - case 9: - proutn("Klingons Left %d", game.state.remkl); - break; - case 10: - attakreport(1); - break; - } + else + proutn("- "); + } + } + if (rightside) { + switch (jj) { + case 1: + proutn("Stardate %.1f, Time Left %.2f", game.state.date, game.state.remtime); + break; + case 2: + if (condit != IHDOCKED) newcnd(); + switch (condit) { + case IHRED: cp = "RED"; break; + case IHGREEN: cp = "GREEN"; break; + case IHYELLOW: cp = "YELLOW"; break; + case IHDOCKED: cp = "DOCKED"; break; + case IHDEAD: cp="DEAD"; break; + } + for (t=0;t<=NDEVICES;t++) + if (game.damage[t]>0) dam++; + proutn("Condition %s, %i DAMAGES", cp, dam); + break; + case 3: + proutn("Position %d - %d , %d - %d", + quadx, quady, sectx, secty); + break; + case 4: + proutn("Life Support "); + if (game.damage[DLIFSUP] != 0.0) { + if (condit == IHDOCKED) + proutn("DAMAGED, Base provides"); + else + proutn("DAMAGED, reserves=%4.2f", lsupres); } - if (i<10) c_printf("\n\r"); - if (k!=0) return(goodScan); + else + proutn("ACTIVE"); + break; + case 5: + proutn("Warp Factor %.1f", warpfac); + break; + case 6: + proutn("Energy %.2f", energy); + if (icrystl) + proutn(" (have crystals)"); + break; + case 7: + proutn("Torpedoes %d", torps); + break; + case 8: + proutn("Shields "); + if (game.damage[DSHIELD] != 0) + proutn("DAMAGED,"); + else if (shldup) + proutn("UP,"); + else + proutn("DOWN,"); + proutn(" %d%% %.1f units", + (int)((100.0*shield)/inshld + 0.5), shield); + break; + case 9: + proutn("Klingons Left %d", game.state.remkl); + break; + case 10: + attakreport(1); + break; + } } - if (nn) chart(1); -#ifdef SERGEEV - proutn(""); -#else - skip(2); -#endif /* SERGEEV */ - return(goodScan); + if (iix1) ix2 = 1; - else ix2=10; + else ix2=QUADSIZE; if (quadx>iy1) iy2 = 1; - else iy2=10; + else iy2=QUADSIZE; } - if (ix1 > 8 || ix1 < 1 || iy1 > 8 || iy1 < 1 || - ix2 > 10 || ix2 < 1 || iy2 > 10 || iy2 < 1) { + if (ix1 > GALSIZE || ix1 < 1 || iy1 > GALSIZE || iy1 < 1 || + ix2 > QUADSIZE || ix2 < 1 || iy2 > QUADSIZE || iy2 < 1) { huh(); return; }