Starchart and base-attack tweaks.
[super-star-trek.git] / src / reports.c
index a33e0ba107e80a6bb8a3c27184597c1db1f30687..5d7c3b1750de58edebfa98a1e2fae93ba2997502 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-void attakreport(bool curt)
+void attackreport(bool curt)
 /* report status of bases under attack */
 {
     if (!curt) {
@@ -55,40 +55,55 @@ void report(void)
     skip(1);
     prout(_("You %s a %s%s %s game."),
          game.alldone? _("were playing") : _("are playing"), s1, s2, s3);
-    if (game.skill>SKILL_GOOD && game.thawed && !game.alldone) prout(_("No plaque is allowed."));
-    if (game.tourn) prout(_("This is tournament game %d."), game.tourn);
+    if (game.skill>SKILL_GOOD && game.thawed && !game.alldone)
+       prout(_("No plaque is allowed."));
+    if (game.tourn)
+       prout(_("This is tournament game %d."), game.tourn);
     prout(_("Your secret password is \"%s\""),game.passwd);
-    proutn(_("%d of %d Klingons have been killed"), KLINGKILLED, INKLINGTOT);
-    if (NKILLC) prout(_(", including %d Commander%s."), NKILLC, NKILLC==1?"":_("s"));
-    else if (NKILLK + NKILLSC > 0) prout(_(", but no Commanders."));
-    else prout(".");
-    if (game.skill > SKILL_FAIR) prout(_("The Super Commander has %sbeen destroyed."),
-                                 game.state.nscrem?_("not "):"");
+    proutn(_("%d of %d Klingons have been killed"), 
+          ((game.inkling + game.incom + game.inscom) - (game.state.remkl + game.state.remcom + game.state.nscrem)), 
+          (game.inkling + game.incom + game.inscom));
+    if (game.incom - game.state.remcom)
+       prout(_(", including %d Commander%s."), game.incom - game.state.remcom, (game.incom - game.state.remcom)==1?"":_("s"));
+    else if (game.inkling - game.state.remkl + (game.inscom - game.state.nscrem) > 0)
+       prout(_(", but no Commanders."));
+    else
+       prout(".");
+    if (game.skill > SKILL_FAIR)
+       prout(_("The Super Commander has %sbeen destroyed."),
+             game.state.nscrem?_("not "):"");
     if (game.state.rembase != game.inbase) {
        proutn(_("There "));
-       if (game.inbase-game.state.rembase==1) proutn(_("has been 1 base"));
+       if (game.inbase-game.state.rembase==1)
+           proutn(_("has been 1 base"));
        else {
            proutn(_("have been %d bases"), game.inbase-game.state.rembase);
        }
        prout(_(" destroyed, %d remaining."), game.state.rembase);
     }
-    else prout(_("There are %d bases."), game.inbase);
+    else
+       prout(_("There are %d bases."), game.inbase);
     if (!damaged(DRADIO) || game.condition == docked || game.iseenit) {
-       /* Don't report this if not seen and
-          either the radio is dead or not at base! */
-       attakreport(false);
+       // Don't report this if not seen and
+       // either the radio is dead or not at base!
+       attackreport(false);
        game.iseenit = true;
     }
-    if (game.casual) prout(_("%d casualt%s suffered so far."),
-                     game.casual, game.casual==1? "y" : "ies");
-    if (game.nhelp) prout(_("There were %d call%s for help."),
-                    game.nhelp, game.nhelp==1 ? "" : _("s"));
+    if (game.casual) 
+       prout(_("%d casualt%s suffered so far."),
+             game.casual, game.casual==1? "y" : "ies");
+    if (game.nhelp)
+       prout(_("There were %d call%s for help."),
+             game.nhelp, game.nhelp==1 ? "" : _("s"));
     if (game.ship == IHE) {
        proutn(_("You have "));
-       if (game.nprobes) proutn("%d", game.nprobes);
-       else proutn(_("no"));
+       if (game.nprobes)
+           proutn("%d", game.nprobes);
+       else
+           proutn(_("no"));
        proutn(_(" deep space probe"));
-       if (game.nprobes!=1) proutn(_("s"));
+       if (game.nprobes!=1)
+           proutn(_("s"));
        prout(".");
     }
     if ((!damaged(DRADIO) || game.condition == docked)
@@ -138,8 +153,7 @@ void lrscan(void)
            if (!VALID_QUADRANT(x, y))
                proutn("  -1");
            else {
-               if (!damaged(DRADIO))
-                   game.state.galaxy[x][y].charted = true;
+               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;
@@ -153,7 +167,7 @@ void lrscan(void)
     }
 }
 
-void dreprt(void) 
+void damagereport(void) 
 /* damage report */
 {
     bool jdam = false;
@@ -173,21 +187,61 @@ void dreprt(void)
                  game.docfac*game.damage[i]+0.005);
        }
     }
-    if (!jdam) prout(_("All devices functional."));
+    if (!jdam)
+       prout(_("All devices functional."));
 }
 
-void rechart(void)
+static void rechart_quad(int x, int y)
+{
+    if (game.state.galaxy[x][y].charted) {
+       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;
+    }
+}
+
+static void rechart_dsradio(void)
 /* update the chart in the Enterprise's computer from galaxy data */
 {
     int i, j;
     game.lastchart = game.state.date;
-    for_quadrants(i)
-       for_quadrants(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;
-           }
+    for (i = 1; i <= GALSIZE; i++)
+       for (j = 1; j <= GALSIZE; j++)
+           rechart_quad(i, j);
+}
+
+static void rechart_lr(void)
+/* update the chart in the Enterprise's computer from galaxy data */
+{
+    int i, j;
+    for (i = game.quadrant.x-1; i <= game.quadrant.x+1; i++) {
+       for (j = game.quadrant.y-1; j <= game.quadrant.y+1; j++) {
+           if (i == game.quadrant.x && j == game.quadrant.y)
+               continue;
+           rechart_quad(i, j);
+       }
+    }
+}
+
+static void rechart_sr(void)
+/* update the chart in the Enterprise's computer from galaxy data */
+{
+    rechart_quad(game.quadrant.x, game.quadrant.y);
+}
+
+void rechart(void)
+{
+    if (!damaged(DRADIO) || game.condition == docked) {
+       if (game.lastchart < game.state.date && game.condition == docked)
+           prout(_("Spock-  \"I revised the Star Chart from the "
+                   "starbase's records.\""));
+       rechart_dsradio();
+    } else {
+       if (!damaged(DLRSENS))
+           rechart_lr();
+       if (!damaged(DSRSENS))
+           rechart_sr();
+    }
 }
 
 void chart(void)
@@ -196,22 +250,16 @@ void chart(void)
     int i,j;
     chew();
 
-    if (!damaged(DRADIO))
-       rechart();
-
-    if (game.lastchart < game.state.date && game.condition == docked) {
-       prout(_("Spock-  \"I revised the Star Chart from the starbase's records.\""));
-       rechart();
-    }
+    rechart();
 
     prout(_("       STAR CHART FOR THE KNOWN GALAXY"));
     if (game.state.date > game.lastchart)
        prout(_("(Last surveillance update %d stardates ago)."),
              (int)(game.state.date-game.lastchart));
     prout("      1    2    3    4    5    6    7    8");
-    for_quadrants(i) {
+    for (i = 1; i <= GALSIZE; i++) {
        proutn("%d |", i);
-       for_quadrants(j) {
+       for (j = 1; j <= GALSIZE; j++) {
            char buf[4];
            if ((game.options & OPTION_SHOWME) && i == game.quadrant.x && j == game.quadrant.y)
                proutn("<");
@@ -232,7 +280,8 @@ void chart(void)
                proutn(" ");
        }
        proutn("  |");
-       if (i<GALSIZE) skip(1);
+       if (i<GALSIZE)
+           skip(1);
     }
 }
 
@@ -270,7 +319,8 @@ void status(int req)
     );
 
     RQ(2,
-       if (game.condition != docked) newcnd();
+       if (game.condition != docked)
+           newcnd();
        switch (game.condition) {
            case red: cp = _("RED"); break;
            case green: cp = _("GREEN"); break;
@@ -328,13 +378,13 @@ void status(int req)
     );
 
     RQ(9,
-        prstat(_("Klingons Left"), "%d", KLINGREM);
+        prstat(_("Klingons Left"), "%d", game.state.remkl + game.state.remcom + game.state.nscrem);
     );
 
     RQ(10,
        if (game.options & OPTION_WORLDS) {
            int plnet = game.state.galaxy[game.quadrant.x][game.quadrant.y].planet;
-           if (plnet != NOPLANET && game.state.plnets[plnet].inhabited != UNINHABITED)
+           if (plnet != NOPLANET && game.state.planets[plnet].inhabited != UNINHABITED)
                prstat(_("Major system"), "%s", systnames[plnet]);
            else
                prout(_("Sector is uninhabited"));
@@ -342,7 +392,7 @@ void status(int req)
     );
 
     RQ(11,
-       attakreport(!req);
+       attackreport(!req);
     );
 
 #undef RQ
@@ -383,18 +433,18 @@ void srscan(void)
        else
            prout(_("  [Using Base's sensors]"));
     }
-    else prout(_("     Short-range scan"));
-    if (goodScan && !damaged(DRADIO)) { 
-       game.state.chart[game.quadrant.x][game.quadrant.y].klingons = game.state.galaxy[game.quadrant.x][game.quadrant.y].klingons;
-       game.state.chart[game.quadrant.x][game.quadrant.y].starbase = game.state.galaxy[game.quadrant.x][game.quadrant.y].starbase;
-       game.state.chart[game.quadrant.x][game.quadrant.y].stars = game.state.galaxy[game.quadrant.x][game.quadrant.y].stars;
+    else
+       prout(_("     Short-range scan"));
+    if (goodScan) {
        game.state.galaxy[game.quadrant.x][game.quadrant.y].charted = true;
+       rechart();
     }
     prout("    1 2 3 4 5 6 7 8 9 10");
-    if (game.condition != docked) newcnd();
+    if (game.condition != docked)
+       newcnd();
     for (i = 1; i <= QUADSIZE; i++) {
        proutn("%2d  ", i);
-       for_sectors(j) {
+       for (j = 1; j <= QUADSIZE; j++) {
            sectscan(goodScan, i, j);
        }
        skip(1);
@@ -437,10 +487,14 @@ void eta(void)
        w2.x = aaitem + 0.5;
     }
     else {
-       if (game.quadrant.y>w1.x) w2.x = 1;
-       else w2.x=QUADSIZE;
-       if (game.quadrant.x>w1.y) w2.y = 1;
-       else w2.y=QUADSIZE;
+       if (game.quadrant.y>w1.x)
+           w2.x = 1;
+       else
+           w2.x=QUADSIZE;
+       if (game.quadrant.x>w1.y)
+           w2.y = 1;
+       else
+           w2.y=QUADSIZE;
     }
 
     if (!VALID_QUADRANT(w1.x, w1.y) || !VALID_SECTOR(w2.x, w2.y)) {
@@ -451,20 +505,23 @@ void eta(void)
                square(w1.x-game.quadrant.x+0.1*(w2.x-game.sector.x)));
     wfl = false;
 
-    if (prompt) prout(_("Answer \"no\" if you don't know the value:"));
+    if (prompt)
+       prout(_("Answer \"no\" if you don't know the value:"));
     for (;;) {
        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 > game.state.date)
+               ttime -= game.state.date; // Actually a star date
            if (ttime <= 1e-10 ||
                (twarp=(floor(sqrt((10.0*game.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;
+           if (twarp < 1.0)
+               twarp = 1.0;
            break;
        }
        chew();
@@ -487,7 +544,8 @@ void eta(void)
        if (tpower >= game.energy) {
            prout(_("Insufficient energy, sir."));
            if (!game.shldup || tpower > game.energy*2.0) {
-               if (!wfl) return;
+               if (!wfl)
+                   return;
                proutn(_("New warp factor to try? "));
                if (scan() == IHREAL) {
                    wfl = true;
@@ -548,7 +606,7 @@ void eta(void)
                        
 }
 
-#if BSD_BUG_FOR_BUG
+#ifdef BSD_BUG_FOR_BUG
 /*
  *     A visual scan is made in a particular direction of three sectors
  *     in the general direction specified.  This takes time, and