X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=reports.c;h=3f654cf9a39e3f848e9e5cb78344b71eaf249526;hp=e5d261be0f97b41c11686f1c44b14db8cbecf652;hb=e536fe754b3a9be00dcaee8f6ec50ea2d8c7a184;hpb=0e15d77aa2e0088f1bd917f2f27d170851dbeb56 diff --git a/reports.c b/reports.c index e5d261b..3f654cf 100644 --- a/reports.c +++ b/reports.c @@ -3,212 +3,237 @@ #include #include -void attakreport(int curt) { - if (!curt) { +void attakreport(int curt) +{ + if (!curt) { if (game.future[FCDBAS] < 1e30) { - prout("Starbase in %s is currently under Commander attack.", - cramlc(quadrant, batx, baty)); - prout("It can hold out until Stardate %d.", - (int)game.future[FCDBAS]); + prout("Starbase in %s is currently under Commander attack.", + cramlc(quadrant, batx, baty)); + prout("It can hold out until Stardate %d.", + (int)game.future[FCDBAS]); } if (isatb == 1) { - prout("Starbase in %s is under Super-commander attack.", - cramlc(quadrant, game.state.isx, game.state.isy)); - prout("It can hold out until Stardate %d.", - (int)game.future[FSCDBAS]); + prout("Starbase in %s is under Super-commander attack.", + cramlc(quadrant, game.state.isx, game.state.isy)); + prout("It can hold out until Stardate %d.", + (int)game.future[FSCDBAS]); } - } else { + } else { if (game.future[FCDBAS] < 1e30) - proutn("Base in %i - %i attacked by C. Alive until %.1f", batx, baty, game.future[FCDBAS]); + proutn("Base in %i - %i attacked by C. Alive until %.1f", batx, baty, game.future[FCDBAS]); if (isatb == 1) - proutn("Base in %i - %i attacked by S. Alive until %.1f", game.state.isx, game.state.isy, game.future[FSCDBAS]); - } - clreol(); + proutn("Base in %i - %i attacked by S. Alive until %.1f", game.state.isx, game.state.isy, game.future[FSCDBAS]); + } + clreol(); } -void report(void) { - char *s1,*s2,*s3; +void report(void) +{ + char *s1,*s2,*s3; - chew(); - s1 = (thawed?"thawed ":""); - switch (length) { - case 1: s2="short"; break; - case 2: s2="medium"; break; - case 4: s2="long"; break; - default: s2="unknown length"; break; - } - switch (skill) { - case 1: s3="novice"; break; - case 2: s3="fair"; break; - case 3: s3="good"; break; - case 4: s3="expert"; break; - case 5: s3="emeritus"; break; - default: s3="skilled"; break; - } - prout(""); - prout("You %s playing a %s%s %s game.", - alldone? "were": "are now", s1, s2, s3); - if (skill>3 && thawed && !alldone) prout("No plaque is allowed."); - if (tourn) prout("This is tournament game %d.", tourn); - prout("Your secret password is \"%s\"",game.passwd); - proutn("%d of %d Klingons have been killed", - game.state.killk+game.state.killc+game.state.nsckill, inkling); - if (game.state.killc) prout(", including %d Commander%s.", game.state.killc, game.state.killc==1?"":"s"); - else if (game.state.killk+game.state.nsckill > 0) prout(", but no Commanders."); - else prout("."); - if (skill > 2) prout("The Super Commander has %sbeen destroyed.", - game.state.nscrem?"not ":""); - if (game.state.rembase != inbase) { - proutn("There "); - if (inbase-game.state.rembase==1) proutn("has been 1 base"); - else { - proutn("have been %d bases", inbase-game.state.rembase); - } - prout(" destroyed, %d remaining.", game.state.rembase); - } - else prout("There are %d bases.", inbase); - if (game.damage[DRADIO] == 0.0 || condit == IHDOCKED || iseenit) { - /* Don't report this if not seen and - either the radio is dead or not at base! */ - attakreport(0); - iseenit = 1; - } - if (casual) prout("%d casualt%s suffered so far.", - casual, casual==1? "y" : "ies"); - if (nhelp) prout("There were %d call%s for help.", - nhelp, nhelp==1 ? "" : "s"); - if (ship == IHE) { - proutn("You have "); - if (nprobes) proutn("%d", nprobes); - else proutn("no"); - proutn(" deep space probe"); - if (nprobes!=1) proutn("s"); - prout("."); - } - if ((game.damage[DRADIO] == 0.0 || condit == IHDOCKED)&& - game.future[FDSPROB] != 1e30) { - if (isarmed) - proutn("An armed deep space probe is in"); - else - proutn("A deep space probe is in"); - proutn(cramlc(quadrant, probecx, probecy)); - prout("."); + chew(); + s1 = (thawed?"thawed ":""); + switch (length) { + case 1: s2="short"; break; + case 2: s2="medium"; break; + case 4: s2="long"; break; + default: s2="unknown length"; break; + } + switch (skill) { + case SKILL_NOVICE: s3="novice"; break; + case SKILL_FAIR: s3="fair"; break; + case SKILL_GOOD: s3="good"; break; + case SKILL_EXPERT: s3="expert"; break; + case SKILL_EMERITUS: s3="emeritus"; break; + default: s3="skilled"; break; + } + prout(""); + prout("You %s playing a %s%s %s game.", + alldone? "were": "are now", s1, s2, s3); + if (skill>SKILL_GOOD && thawed && !alldone) prout("No plaque is allowed."); + if (tourn) prout("This is tournament game %d.", tourn); + prout("Your secret password is \"%s\"",game.passwd); + proutn("%d of %d Klingons have been killed", + game.state.killk+game.state.killc+game.state.nsckill, inkling); + if (game.state.killc) prout(", including %d Commander%s.", game.state.killc, game.state.killc==1?"":"s"); + else if (game.state.killk+game.state.nsckill > 0) prout(", but no Commanders."); + else prout("."); + if (skill > SKILL_FAIR) prout("The Super Commander has %sbeen destroyed.", + game.state.nscrem?"not ":""); + if (game.state.rembase != inbase) { + proutn("There "); + if (inbase-game.state.rembase==1) proutn("has been 1 base"); + else { + proutn("have been %d bases", inbase-game.state.rembase); } - if (icrystl) { - if (cryprob <= .05) - prout("Dilithium crystals aboard ship... not yet used."); - else { - int i=0; - double ai = 0.05; - while (cryprob > ai) { - ai *= 2.0; - i++; - } - prout("Dilithium crystals have been used %d time%s.", - i, i==1? "" : "s"); - } + prout(" destroyed, %d remaining.", game.state.rembase); + } + else prout("There are %d bases.", inbase); + if (game.damage[DRADIO] == 0.0 || condit == IHDOCKED || iseenit) { + /* Don't report this if not seen and + either the radio is dead or not at base! */ + attakreport(0); + iseenit = 1; + } + if (casual) prout("%d casualt%s suffered so far.", + casual, casual==1? "y" : "ies"); + if (nhelp) prout("There were %d call%s for help.", + nhelp, nhelp==1 ? "" : "s"); + if (ship == IHE) { + proutn("You have "); + if (nprobes) proutn("%d", nprobes); + else proutn("no"); + proutn(" deep space probe"); + if (nprobes!=1) proutn("s"); + prout("."); + } + if ((game.damage[DRADIO] == 0.0 || condit == IHDOCKED)&& + game.future[FDSPROB] != 1e30) { + if (isarmed) + proutn("An armed deep space probe is in"); + else + proutn("A deep space probe is in"); + proutn(cramlc(quadrant, probecx, probecy)); + prout("."); + } + if (icrystl) { + if (cryprob <= .05) + prout("Dilithium crystals aboard ship... not yet used."); + else { + int i=0; + double ai = 0.05; + while (cryprob > ai) { + ai *= 2.0; + i++; + } + prout("Dilithium crystals have been used %d time%s.", + i, i==1? "" : "s"); } - skip(1); + } + skip(1); } -void lrscan(void) { - int x, y; - chew(); - if (game.damage[DLRSENS] != 0.0) { - /* Now allow base's sensors if docked */ - if (condit != IHDOCKED) { - prout("LONG-RANGE SENSORS DAMAGED."); - return; - } - proutn("Starbase's long-range scan"); +void lrscan(void) +{ + int x, y; + chew(); + if (game.damage[DLRSENS] != 0.0) { + /* Now allow base's sensors if docked */ + if (condit != IHDOCKED) { + prout("LONG-RANGE SENSORS DAMAGED."); + return; } - else { - prout("Long-range scan"); - } - for (x = quadx-1; x <= quadx+1; x++) { - proutn(" "); - for (y = quady-1; y <= quady+1; y++) { - if (x == 0 || x > GALSIZE || y == 0 || y > GALSIZE) - proutn(" -1"); - else { - if (game.state.galaxy[x][y] 0 ? game.state.galaxy[x][y]+SUPERNOVA_PLACE : 1; - } - } - prout(" "); + proutn("Starbase's long-range scan"); + } + else { + prout("Long-range scan"); + } + for (x = quadx-1; x <= quadx+1; x++) { + proutn(" "); + for (y = quady-1; y <= quady+1; y++) { + if (x == 0 || x > GALSIZE || y == 0 || y > GALSIZE) + proutn(" -1"); + else { + if (!game.damage[DRADIO]) + game.state.galaxy[x][y].charted = TRUE; + game.state.chart[x][y].klingons = game.state.galaxy[x][y].klingons; + game.state.chart[x][y].starbase = game.state.galaxy[x][y].starbase; + game.state.chart[x][y].stars = game.state.galaxy[x][y].stars; + if (game.state.galaxy[x][y].supernova) + proutn("***"); + else + proutn(" %-3d", game.state.chart[x][y].klingons*100 + game.state.chart[x][y].starbase * 10 + game.state.chart[x][y].stars); + } } + prout(" "); + } } -void dreprt(void) { - int jdam = FALSE, i; - chew(); +void dreprt(void) +{ + int jdam = FALSE, i; + chew(); - for (i = 1; i <= NDEVICES; i++) { - if (game.damage[i] > 0.0) { - if (!jdam) { - prout("DEVICE -REPAIR TIMES-"); - prout(" IN FLIGHT DOCKED"); - jdam = TRUE; - } - prout(" %16s %8.2f %8.2f", - device[i], - game.damage[i]+0.05, - docfac*game.damage[i]+0.005); - } + for (i = 0; i < NDEVICES; i++) { + if (game.damage[i] > 0.0) { + if (!jdam) { + prout("DEVICE -REPAIR TIMES-"); + prout(" IN FLIGHT DOCKED"); + jdam = TRUE; + } + prout(" %16s %8.2f %8.2f", + device[i], + game.damage[i]+0.05, + docfac*game.damage[i]+0.005); } - if (!jdam) prout("All devices functional."); + } + if (!jdam) prout("All devices functional."); } -void chart(int nn) { - int i,j; - char *cp; - chew(); - if (stdamtim != 1e30 && stdamtim != game.state.date && condit == IHDOCKED) { - proutn("Spock- \"I revised the Star Chart from the starbase's records.\"\n\r"); +void rechart(void) +/* update the chart in the Enterprise's computer from galaxy data */ +{ + int i, j; + stdamtim = game.state.date; + for (i=1; i <= GALSIZE ; i++) + for (j=1; j <= GALSIZE; j++) + if (game.state.galaxy[i][j].charted) { + game.state.chart[i][j].klingons = game.state.galaxy[i][j].klingons; + game.state.chart[i][j].starbase = game.state.galaxy[i][j].starbase; + game.state.chart[i][j].stars = game.state.galaxy[i][j].stars; + } +} + +void chart(int nn) +{ + int i,j; + char *cp; + chew(); + if (stdamtim != 1e30 && stdamtim != game.state.date && condit == IHDOCKED) { + proutn("Spock- \"I revised the Star Chart from the starbase's records.\"\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 */ + rechart(); } - 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 <= 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.", - (int)(game.state.date-stdamtim)); - } + else if (game.state.date-stdamtim) { + prout("(Last surveillance update %d stardates ago).", + (int)(game.state.date-stdamtim)); } + } + else if (game.damage[DRADIO] == 0.0) + rechart(); - prout(" 1 2 3 4 5 6 7 8"); - for (i = 1; i <= GALSIZE; i++) { - proutn("%d |", i); - for (j = 1; j <= GALSIZE; j++) { - char buf[4]; - proutn(" "); - if (game.starch[i][j] == CHART_UNKNOWN) - strcpy(buf, ".1."); - else if (game.starch[i][j] == 0) - strcpy(buf, "..."); - 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 = '.'; - proutn(buf); - } - proutn(" |"); - if (i0) dam++; + for (t=0;t0) + dam++; proutn("Condition %s, %i DAMAGES", cp, dam); break; case 3: @@ -293,22 +320,13 @@ static void status(int req) { case 10: attakreport(1); break; - /* - * Note: attakreport() can in some cases produce two lines of - * output. If that happens, and QUADSIZE is the normal 10, items - * 11 and up will be printed past the bottom of the quadrant display. - * Under the curses display logic they will get lost because they're - * written outside the report window. - */ - case 11: /* ESR */ - proutn("Bases Left %d", game.state.rembase); - break; } } -int srscan(int l) { +int srscan(int l) +{ static char requests[][3] = - {"","da","co","po","ls","wa","en","to","sh","kl","ti", "ba"}; + {"","da","co","po","ls","wa","en","to","sh","kl","ti"}; int leftside=TRUE, rightside=TRUE, i, j, jj, req=0, nn=FALSE; int goodScan=TRUE; switch (l) { @@ -323,7 +341,12 @@ int srscan(int l) { 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; + if (goodScan && !game.damage[DRADIO]) { + game.state.chart[quadx][quady].klingons = game.state.galaxy[quadx][quady].klingons; + game.state.chart[quadx][quady].starbase = game.state.galaxy[quadx][quady].starbase; + game.state.chart[quadx][quady].stars = game.state.galaxy[quadx][quady].stars; + game.state.galaxy[quadx][quady].charted = TRUE; + } scan(); if (isit("chart")) nn = TRUE; if (isit("no")) rightside = FALSE; @@ -373,147 +396,148 @@ int srscan(int l) { } -void eta(void) { - int ix1, ix2, iy1, iy2, prompt=FALSE; - int wfl; - double ttime, twarp, tpower; - if (game.damage[DCOMPTR] != 0.0) { - prout("COMPUTER DAMAGED, USE A POCKET CALCULATOR."); - skip(1); - return; +void eta(void) +{ + int ix1, ix2, iy1, iy2, prompt=FALSE; + int wfl; + double ttime, twarp, tpower; + if (game.damage[DCOMPTR] != 0.0) { + prout("COMPUTER DAMAGED, USE A POCKET CALCULATOR."); + skip(1); + return; + } + if (scan() != IHREAL) { + prompt = TRUE; + chew(); + proutn("Destination quadrant and/or sector? "); + if (scan()!=IHREAL) { + huh(); + return; } + } + iy1 = aaitem +0.5; + if (scan() != IHREAL) { + huh(); + return; + } + ix1 = aaitem + 0.5; + if (scan() == IHREAL) { + iy2 = aaitem + 0.5; if (scan() != IHREAL) { - prompt = TRUE; + huh(); + return; + } + ix2 = aaitem + 0.5; + } + else { + if (quady>ix1) ix2 = 1; + else ix2=QUADSIZE; + if (quadx>iy1) iy2 = 1; + else iy2=QUADSIZE; + } + + if (ix1 > GALSIZE || ix1 < 1 || iy1 > GALSIZE || iy1 < 1 || + ix2 > QUADSIZE || ix2 < 1 || iy2 > QUADSIZE || iy2 < 1) { + huh(); + return; + } + dist = sqrt(square(iy1-quadx+0.1*(iy2-sectx))+ + square(ix1-quady+0.1*(ix2-secty))); + wfl = FALSE; + + if (prompt) prout("Answer \"no\" if you don't know the value:"); + while (TRUE) { + chew(); + proutn("Time or arrival date? "); + if (scan()==IHREAL) { + ttime = aaitem; + if (ttime > game.state.date) ttime -= game.state.date; // Actually a star date + if (ttime <= 1e-10 || + (twarp=(floor(sqrt((10.0*dist)/ttime)*10.0)+1.0)/10.0) > 10) { + prout("We'll never make it, sir."); chew(); - proutn("Destination quadrant and/or sector? "); - if (scan()!=IHREAL) { - huh(); - return; - } + return; + } + if (twarp < 1.0) twarp = 1.0; + break; } - iy1 = aaitem +0.5; - if (scan() != IHREAL) { + chew(); + proutn("Warp factor? "); + if (scan()== IHREAL) { + wfl = TRUE; + twarp = aaitem; + if (twarp<1.0 || twarp > 10.0) { huh(); return; + } + break; } - ix1 = aaitem + 0.5; - if (scan() == IHREAL) { - iy2 = aaitem + 0.5; - if (scan() != IHREAL) { + prout("Captain, certainly you can give me one of these."); + } + while (TRUE) { + chew(); + ttime = (10.0*dist)/square(twarp); + tpower = dist*twarp*twarp*twarp*(shldup+1); + if (tpower >= energy) { + prout("Insufficient energy, sir."); + if (shldup==0 || tpower > energy*2.0) { + if (!wfl) return; + proutn("New warp factor to try? "); + if (scan() == IHREAL) { + wfl = TRUE; + twarp = aaitem; + if (twarp<1.0 || twarp > 10.0) { huh(); return; + } + continue; + } + else { + chew(); + skip(1); + return; } - ix2 = aaitem + 0.5; + } + prout("But if you lower your shields,"); + proutn("remaining"); + tpower /= 2; } - else { - if (quady>ix1) ix2 = 1; - else ix2=QUADSIZE; - if (quadx>iy1) iy2 = 1; - else iy2=QUADSIZE; + else + proutn("Remaining"); + prout(" energy will be %.2f.", energy-tpower); + if (wfl) { + prout("And we will arrive at stardate %.2f.", + game.state.date+ttime); } - - if (ix1 > GALSIZE || ix1 < 1 || iy1 > GALSIZE || iy1 < 1 || - ix2 > QUADSIZE || ix2 < 1 || iy2 > QUADSIZE || iy2 < 1) { + else if (twarp==1.0) + prout("Any warp speed is adequate."); + else { + prout("Minimum warp needed is %.2f,", twarp); + prout("and we will arrive at stardate %.2f.", + game.state.date+ttime); + } + if (game.state.remtime < ttime) + prout("Unfortunately, the Federation will be destroyed by then."); + if (twarp > 6.0) + prout("You'll be taking risks at that speed, Captain"); + if ((isatb==1 && game.state.isy == ix1 && game.state.isx == iy1 && + game.future[FSCDBAS]< ttime+game.state.date)|| + (game.future[FCDBAS] 10.0) { huh(); return; + } } - dist = sqrt(square(iy1-quadx+0.1*(iy2-sectx))+ - square(ix1-quady+0.1*(ix2-secty))); - wfl = FALSE; - - if (prompt) prout("Answer \"no\" if you don't know the value:"); - while (TRUE) { - chew(); - proutn("Time or arrival date? "); - if (scan()==IHREAL) { - ttime = aaitem; - if (ttime > game.state.date) ttime -= game.state.date; // Actually a star date - if (ttime <= 1e-10 || - (twarp=(floor(sqrt((10.0*dist)/ttime)*10.0)+1.0)/10.0) > 10) { - prout("We'll never make it, sir."); - chew(); - return; - } - if (twarp < 1.0) twarp = 1.0; - break; - } - chew(); - proutn("Warp factor? "); - if (scan()== IHREAL) { - wfl = TRUE; - twarp = aaitem; - if (twarp<1.0 || twarp > 10.0) { - huh(); - return; - } - break; - } - prout("Captain, certainly you can give me one of these."); - } - while (TRUE) { - chew(); - ttime = (10.0*dist)/square(twarp); - tpower = dist*twarp*twarp*twarp*(shldup+1); - if (tpower >= energy) { - prout("Insufficient energy, sir."); - if (shldup==0 || tpower > energy*2.0) { - if (!wfl) return; - proutn("New warp factor to try? "); - if (scan() == IHREAL) { - wfl = TRUE; - twarp = aaitem; - if (twarp<1.0 || twarp > 10.0) { - huh(); - return; - } - continue; - } - else { - chew(); - skip(1); - return; - } - } - prout("But if you lower your shields,"); - proutn("remaining"); - tpower /= 2; - } - else - proutn("Remaining"); - prout(" energy will be %.2f.", energy-tpower); - if (wfl) { - prout("And we will arrive at stardate %.2f.", - game.state.date+ttime); - } - else if (twarp==1.0) - prout("Any warp speed is adequate."); - else { - prout("Minimum warp needed is %.2f,", twarp); - prout("and we will arrive at stardate %.2f.", - game.state.date+ttime); - } - if (game.state.remtime < ttime) - prout("Unfortunately, the Federation will be destroyed by then."); - if (twarp > 6.0) - prout("You'll be taking risks at that speed, Captain"); - if ((isatb==1 && game.state.isy == ix1 && game.state.isx == iy1 && - game.future[FSCDBAS]< ttime+game.state.date)|| - (game.future[FCDBAS] 10.0) { - huh(); - return; - } - } - else { - chew(); - skip(1); - return; - } + else { + chew(); + skip(1); + return; } + } }