printfs have been banished. All outputnow goes through prout/proutn/prouts.
[super-star-trek.git] / battle.c
index 184bc7cf144ca1df8a5953a779c2da5842e446da..d47671174b0b67fa631c1fbf091d34005c4327d0 100644 (file)
--- a/battle.c
+++ b/battle.c
@@ -14,7 +14,7 @@ void doshield(int i) {
                                action = NRG;\r
                        else {\r
                                chew();\r
-                               if (damage[DSHIELD]) {\r
+                               if (game.damage[DSHIELD]) {\r
                                        prout("Shields damaged and down.");\r
                                        return;\r
                                }\r
@@ -30,7 +30,7 @@ void doshield(int i) {
                                proutn("Energy to transfer to shields- ");\r
                                action = NRG;\r
                        }\r
-                       else if (damage[DSHIELD]) {\r
+                       else if (game.damage[DSHIELD]) {\r
                                prout("Shields damaged and down.");\r
                                return;\r
                        }\r
@@ -152,18 +152,16 @@ void ram(int ibumpd, int ienm, int ix, int iy) {
        crmshp();\r
        prout(" heavily damaged.");\r
        icas = 10.0+20.0*Rand();\r
-       proutn("***Sickbay reports ");\r
-       crami(icas, 1);\r
-       prout(" casualties.");\r
+       prout("***Sickbay reports %d casualties", icas);\r
        casual += icas;\r
-       for (l=1; l <= ndevice; l++) {\r
+       for (l=1; l <= NDEVICES; l++) {\r
                if (l == DDRAY) continue; // Don't damage deathray \r
-               if (damage[l] < 0) continue;\r
+               if (game.damage[l] < 0) continue;\r
                extradm = (10.0*type*Rand()+1.0)*damfac;\r
-               damage[l] += Time + extradm; /* Damage for at least time of travel! */\r
+               game.damage[l] += Time + extradm; /* Damage for at least time of travel! */\r
        }\r
        shldup = 0;\r
-       if (state.remkl) {\r
+       if (game.state.remkl) {\r
                pause(2);\r
                dreprt();\r
        }\r
@@ -197,7 +195,7 @@ void torpedo(double course, double r, int inx, int iny, double *hit) {
                proutn(" - ");\r
                cramf(y, 0, 1);\r
                proutn("   ");\r
-               iquad=quad[ix][iy];\r
+               iquad=game.quad[ix][iy];\r
                if (iquad==IHDOT) continue;\r
                /* hit something */\r
                skip(1);\r
@@ -223,11 +221,11 @@ void torpedo(double course, double r, int inx, int iny, double *hit) {
                                jx=ix+xx+0.5;\r
                                jy=iy+yy+0.5;\r
                                if (jx<1 || jx>10 || jy<1 ||jy > 10) return;\r
-                               if (quad[jx][jy]==IHBLANK) {\r
+                               if (game.quad[jx][jy]==IHBLANK) {\r
                                        finish(FHOLE);\r
                                        return;\r
                                }\r
-                               if (quad[jx][jy]!=IHDOT) {\r
+                               if (game.quad[jx][jy]!=IHDOT) {\r
                                        /* can't move into object */\r
                                        return;\r
                                }\r
@@ -249,15 +247,15 @@ void torpedo(double course, double r, int inx, int iny, double *hit) {
                        case IHK:\r
                                /* find the enemy */\r
                                for (ll=1; ll <= nenhere; ll++)\r
-                                       if (ix==kx[ll] && iy==ky[ll]) break;\r
-                               kp = fabs(kpower[ll]);\r
+                                       if (ix==game.kx[ll] && iy==game.ky[ll]) break;\r
+                               kp = fabs(game.kpower[ll]);\r
                                h1 = 700.0 + 100.0*Rand() -\r
                                         1000.0*sqrt(square(ix-inx)+square(iy-iny))*\r
                                         fabs(sin(bullseye-angle));\r
                                h1 = fabs(h1);\r
                                if (kp < h1) h1 = kp;\r
-                               kpower[ll] -= (kpower[ll]<0 ? -h1 : h1);\r
-                               if (kpower[ll] == 0) {\r
+                               game.kpower[ll] -= (game.kpower[ll]<0 ? -h1 : h1);\r
+                               if (game.kpower[ll] == 0) {\r
                                        deadkl(ix, iy, iquad, ix, iy);\r
                                        return;\r
                                }\r
@@ -274,47 +272,47 @@ void torpedo(double course, double r, int inx, int iny, double *hit) {
                                        prout(" damaged but not destroyed.");\r
                                        return;\r
                                }\r
-                               if (quad[jx][jy]==IHBLANK) {\r
+                               if (game.quad[jx][jy]==IHBLANK) {\r
                                        prout(" buffeted into black hole.");\r
                                        deadkl(ix, iy, iquad, jx, jy);\r
                                        return;\r
                                }\r
-                               if (quad[jx][jy]!=IHDOT) {\r
+                               if (game.quad[jx][jy]!=IHDOT) {\r
                                        /* can't move into object */\r
                                        prout(" damaged but not destroyed.");\r
                                        return;\r
                                }\r
                                prout(" damaged--");\r
-                               kx[ll] = jx;\r
-                               ky[ll] = jy;\r
+                               game.kx[ll] = jx;\r
+                               game.ky[ll] = jy;\r
                                shoved = 1;\r
                                break;\r
                        case IHB: /* Hit a base */\r
                                prout("***STARBASE DESTROYED..");\r
-                               if (starch[quadx][quady] < 0) starch[quadx][quady] = 0;\r
-                               for (ll=1; ll<=state.rembase; ll++) {\r
-                                       if (state.baseqx[ll]==quadx && state.baseqy[ll]==quady) {\r
-                                               state.baseqx[ll]=state.baseqx[state.rembase];\r
-                                               state.baseqy[ll]=state.baseqy[state.rembase];\r
+                               if (game.starch[quadx][quady] < 0) game.starch[quadx][quady] = 0;\r
+                               for (ll=1; ll<=game.state.rembase; ll++) {\r
+                                       if (game.state.baseqx[ll]==quadx && game.state.baseqy[ll]==quady) {\r
+                                               game.state.baseqx[ll]=game.state.baseqx[game.state.rembase];\r
+                                               game.state.baseqy[ll]=game.state.baseqy[game.state.rembase];\r
                                                break;\r
                                        }\r
                                }\r
-                               quad[ix][iy]=IHDOT;\r
-                               state.rembase--;\r
+                               game.quad[ix][iy]=IHDOT;\r
+                               game.state.rembase--;\r
                                basex=basey=0;\r
-                               state.galaxy[quadx][quady] -= 10;\r
-                               state.basekl++;\r
+                               game.state.galaxy[quadx][quady] -= 10;\r
+                               game.state.basekl++;\r
                                newcnd();\r
                                return;\r
                        case IHP: /* Hit a planet */\r
                                crmena(1, iquad, 2, ix, iy);\r
                                prout(" destroyed.");\r
-                               state.nplankl++;\r
-                               state.newstuf[quadx][quady] -= 1;\r
-                               state.plnets[iplnet] = nulplanet;\r
+                               game.state.nplankl++;\r
+                               game.state.newstuf[quadx][quady] -= 1;\r
+                               DESTROY(&game.state.plnets[iplnet]);\r
                                iplnet = 0;\r
                                plnetx = plnety = 0;\r
-                               quad[ix][iy] = IHDOT;\r
+                               game.quad[ix][iy] = IHDOT;\r
                                if (landed==1) {\r
                                        /* captain parishes on planet */\r
                                        finish(FDPLANET);\r
@@ -337,7 +335,7 @@ void torpedo(double course, double r, int inx, int iny, double *hit) {
                                proutn("Mr. Spock-");\r
                                prouts("  \"Facinating!\"");\r
                                skip(1);\r
-                               quad[ix][iy] = IHDOT;\r
+                               game.quad[ix][iy] = IHDOT;\r
                                return;\r
                        case IHBLANK: /* Black hole */\r
                                skip(1);\r
@@ -357,7 +355,7 @@ void torpedo(double course, double r, int inx, int iny, double *hit) {
                                h1 = fabs(h1);\r
                                if (h1 >= 600) {\r
                                        prout(" destroyed.");\r
-                                       quad[ix][iy] = IHDOT;\r
+                                       game.quad[ix][iy] = IHDOT;\r
                                        ithere = 0;\r
                                        ithx = ithy = 0;\r
                                        return;\r
@@ -367,7 +365,7 @@ void torpedo(double course, double r, int inx, int iny, double *hit) {
                                        return;\r
                                }\r
                                prout(" disappears.");\r
-                               quad[ix][iy] = IHWEB;\r
+                               game.quad[ix][iy] = IHWEB;\r
                                ithere = ithx = ithy = 0;\r
                                {\r
                                        int dum, my;\r
@@ -385,13 +383,13 @@ void torpedo(double course, double r, int inx, int iny, double *hit) {
                break;\r
        }\r
        if (shoved) {\r
-               quad[jx][jy]=iquad;\r
-               quad[ix][iy]=IHDOT;\r
+               game.quad[jx][jy]=iquad;\r
+               game.quad[ix][iy]=IHDOT;\r
                proutn(" displaced by blast to");\r
                cramlc(2, jx, jy);\r
                skip(1);\r
                for (ll=1; ll<=nenhere; ll++)\r
-                       kdist[ll] = kavgd[ll] = sqrt(square(sectx-kx[ll])+square(secty-ky[ll]));\r
+                       game.kdist[ll] = game.kavgd[ll] = sqrt(square(sectx-game.kx[ll])+square(secty-game.ky[ll]));\r
                sortkl();\r
                return;\r
        }\r
@@ -412,13 +410,13 @@ static void fry(double hit) {
        /* Select devices and cause damage */\r
        for (l = 1; l <= ncrit; l++) {\r
                do {\r
-                       j = ndevice*Rand()+1.0;\r
+                       j = NDEVICES*Rand()+1.0;\r
                        /* Cheat to prevent shuttle damage unless on ship */\r
-               } while (damage[j] < 0.0 || (j == DSHUTTL && iscraft != 1) ||\r
+               } while (game.damage[j] < 0.0 || (j == DSHUTTL && iscraft != 1) ||\r
                                 j == DDRAY);\r
                cdam[l] = j;\r
                extradm = (hit*damfac)/(ncrit*(75.0+25.0*Rand()));\r
-               damage[j] += extradm;\r
+               game.damage[j] += extradm;\r
                if (l > 1) {\r
                        for (ll=2; ll<=l && j != cdam[ll-1]; ll++) ;\r
                        if (ll<=l) continue;\r
@@ -429,7 +427,7 @@ static void fry(double hit) {
                proutn(device[j]);\r
        }\r
        prout(" damaged.");\r
-       if (damage[DSHIELD] && shldup) {\r
+       if (game.damage[DSHIELD] && shldup) {\r
                prout("***Shields knocked down.");\r
                shldup=0;\r
        }\r
@@ -461,15 +459,15 @@ void attack(int k) {
        skip(1);\r
        if (skill <= 2) i = 2;\r
        for (l=1; l <= nenhere; l++) {\r
-               if (kpower[l] < 0) continue;    /* too weak to attack */\r
+               if (game.kpower[l] < 0) continue;       /* too weak to attack */\r
                /* compute hit strength and diminsh shield power */\r
                r = Rand();\r
                /* Increase chance of photon torpedos if docked or enemy energy low */\r
                if (condit == IHDOCKED) r *= 0.25;\r
-               if (kpower[l] < 500) r *= 0.25; \r
-               jx = kx[l];\r
-               jy = ky[l];\r
-               iquad = quad[jx][jy];\r
+               if (game.kpower[l] < 500) r *= 0.25; \r
+               jx = game.kx[l];\r
+               jy = game.ky[l];\r
+               iquad = game.quad[jx][jy];\r
                itflag = (iquad == IHK && r > 0.0005) || k == 0 ||\r
                        (iquad==IHC && r > 0.015) ||\r
                        (iquad==IHR && r > 0.3) ||\r
@@ -479,24 +477,24 @@ void attack(int k) {
                        if (condit == IHDOCKED) continue; /* Don't waste the effort! */\r
                        attempt = 1; /* Attempt to attack */\r
                        dustfac = 0.8+0.05*Rand();\r
-                       hit = kpower[l]*pow(dustfac,kavgd[l]);\r
-                       kpower[l] *= 0.75;\r
+                       hit = game.kpower[l]*pow(dustfac,game.kavgd[l]);\r
+                       game.kpower[l] *= 0.75;\r
                }\r
                else { /* Enemy used photon torpedo */\r
                        double course = 1.90985*atan2((double)secty-jy, (double)jx-sectx);\r
                        hit = 0;\r
                        proutn("***TORPEDO INCOMING");\r
-                       if (damage[DSRSENS] <= 0.0) {\r
+                       if (game.damage[DSRSENS] <= 0.0) {\r
                                proutn(" From ");\r
                                crmena(0, iquad, i, jx, jy);\r
                        }\r
                        attempt = 1;\r
                        prout("--");\r
                        r = (Rand()+Rand())*0.5 -0.5;\r
-                       r += 0.002*kpower[l]*r;\r
+                       r += 0.002*game.kpower[l]*r;\r
                        torpedo(course, r, jx, jy, &hit);\r
-                       if (state.remkl==0) finish(FWON); /* Klingons did themselves in! */\r
-                       if (state.galaxy[quadx][quady] == 1000 ||\r
+                       if (game.state.remkl==0) finish(FWON); /* Klingons did themselves in! */\r
+                       if (game.state.galaxy[quadx][quady] == 1000 ||\r
                                alldone) return; /* Supernova or finished */\r
                        if (hit == 0) continue;\r
                }\r
@@ -519,11 +517,11 @@ void attack(int k) {
                ihurt = 1;\r
                cramf(hit, 0, 2);\r
                proutn(" unit hit");\r
-               if ((damage[DSRSENS] > 0 && itflag) || skill <= 2) {\r
+               if ((game.damage[DSRSENS] > 0 && itflag) || skill <= 2) {\r
                        proutn(" on the ");\r
                        crmshp();\r
                }\r
-               if (damage[DSRSENS] <= 0.0 && itflag) {\r
+               if (game.damage[DSRSENS] <= 0.0 && itflag) {\r
                        proutn(" from ");\r
                        crmena(0, iquad, i, jx, jy);\r
                }\r
@@ -532,7 +530,7 @@ void attack(int k) {
                if (hit > hitmax) hitmax = hit;\r
                hittot += hit;\r
                fry(hit);\r
-               printf("Hit %g energy %g\n", hit, energy);\r
+               prout("Hit %g energy %g", hit, energy);\r
                energy -= hit;\r
        }\r
        if (energy <= 0) {\r
@@ -551,32 +549,25 @@ void attack(int k) {
        else {\r
                /* Print message if starship suffered hit(s) */\r
                skip(1);\r
-               proutn("Energy left ");\r
-               cramf(energy, 0, 2);\r
-               proutn("    shields ");\r
-               if (shldup) proutn("up, ");\r
-               else if (damage[DSHIELD] == 0) proutn("down, ");\r
+               proutn("Energy left %2d    shields ", (int)energy);\r
+               if (shldup) proutn("up ");\r
+               else if (game.damage[DSHIELD] == 0) proutn("down ");\r
                else proutn("damaged, ");\r
        }\r
-       crami(percent, 1);\r
-       proutn("%   torpedoes left ");\r
-       crami(torps, 1);\r
-       skip(1);\r
+       prout("%d%%,   torpedoes left %d", percent, torps);\r
        /* Check if anyone was hurt */\r
        if (hitmax >= 200 || hittot >= 500) {\r
                int icas= hittot*Rand()*0.015;\r
                if (icas >= 2) {\r
                        skip(1);\r
-                       proutn("Mc Coy-  \"Sickbay to bridge.  We suffered ");\r
-                       crami(icas, 1);\r
-                       prout(" casualties");\r
+                       prout("Mc Coy-  \"Sickbay to bridge.  We suffered %d casualties", icas);\r
                        prout("   in that last attack.\"");\r
                        casual += icas;\r
                }\r
        }\r
        /* After attack, reset average distance to enemies */\r
        for (l = 1; l <= nenhere; l++)\r
-               kavgd[l] = kdist[l];\r
+               game.kavgd[l] = game.kdist[l];\r
        sortkl();\r
        return;\r
 }\r
@@ -590,10 +581,10 @@ void deadkl(int ix, int iy, int type, int ixx, int iyy) {
        /* Decide what kind of enemy it is and update approriately */\r
        if (type == IHR) {\r
                /* chalk up a Romulan */\r
-               state.newstuf[quadx][quady] -= 10;\r
+               game.state.newstuf[quadx][quady] -= 10;\r
                irhere--;\r
-               state.nromkl++;\r
-               state.nromrem--;\r
+               game.state.nromkl++;\r
+               game.state.nromrem--;\r
        }\r
        else if (type == IHT) {\r
                /* Killed a Tholian */\r
@@ -601,62 +592,62 @@ void deadkl(int ix, int iy, int type, int ixx, int iyy) {
        }\r
        else {\r
                /* Some type of a Klingon */\r
-               state.galaxy[quadx][quady] -= 100;\r
+               game.state.galaxy[quadx][quady] -= 100;\r
                klhere--;\r
-               state.remkl--;\r
+               game.state.remkl--;\r
                switch (type) {\r
                        case IHC:\r
                                comhere = 0;\r
-                               for (i=1; i<=state.remcom; i++)\r
-                                       if (state.cx[i]==quadx && state.cy[i]==quady) break;\r
-                               state.cx[i] = state.cx[state.remcom];\r
-                               state.cy[i] = state.cy[state.remcom];\r
-                               state.cx[state.remcom] = 0;\r
-                               state.cy[state.remcom] = 0;\r
-                               state.remcom--;\r
-                               future[FTBEAM] = 1e30;\r
-                               if (state.remcom != 0)\r
-                                       future[FTBEAM] = state.date + expran(1.0*incom/state.remcom);\r
-                               state.killc++;\r
+                               for (i=1; i<=game.state.remcom; i++)\r
+                                       if (game.state.cx[i]==quadx && game.state.cy[i]==quady) break;\r
+                               game.state.cx[i] = game.state.cx[game.state.remcom];\r
+                               game.state.cy[i] = game.state.cy[game.state.remcom];\r
+                               game.state.cx[game.state.remcom] = 0;\r
+                               game.state.cy[game.state.remcom] = 0;\r
+                               game.state.remcom--;\r
+                               game.future[FTBEAM] = 1e30;\r
+                               if (game.state.remcom != 0)\r
+                                       game.future[FTBEAM] = game.state.date + expran(1.0*incom/game.state.remcom);\r
+                               game.state.killc++;\r
                                break;\r
                        case IHK:\r
-                               state.killk++;\r
+                               game.state.killk++;\r
                                break;\r
                        case IHS:\r
-                               state.nscrem = ishere = state.isx = state.isy = isatb = iscate = 0;\r
-                               state.nsckill = 1;\r
-                               future[FSCMOVE] = future[FSCDBAS] = 1e30;\r
+                               game.state.nscrem = ishere = game.state.isx = game.state.isy = isatb = iscate = 0;\r
+                               game.state.nsckill = 1;\r
+                               game.future[FSCMOVE] = game.future[FSCDBAS] = 1e30;\r
                                break;\r
                }\r
        }\r
 \r
        /* For each kind of enemy, finish message to player */\r
-       prout(" destroyestate.");\r
-       quad[ix][iy] = IHDOT;\r
-       if (state.remkl==0) return;\r
+       prout(" destroyed.");\r
+       game.quad[ix][iy] = IHDOT;\r
+       if (game.state.remkl==0) return;\r
 \r
-       state.remtime = state.remres/(state.remkl + 4*state.remcom);\r
+       game.state.remtime = game.state.remres/(game.state.remkl + 4*game.state.remcom);\r
 \r
        if (type == IHT) return;\r
 \r
        /* Remove enemy ship from arrays describing local conditions */\r
 \r
        for (i=1; i<=nenhere; i++)\r
-               if (kx[i]==ix && ky[i]==iy) break;\r
+               if (game.kx[i]==ix && game.ky[i]==iy) break;\r
        nenhere--;\r
        if (i <= nenhere)  {\r
                for (j=i; j<=nenhere; j++) {\r
-                       kx[j] = kx[j+1];\r
-                       ky[j] = ky[j+1];\r
-                       kpower[j] = kpower[j+1];\r
-                       kavgd[j] = kdist[j] = kdist[j+1];\r
+                       game.kx[j] = game.kx[j+1];\r
+                       game.ky[j] = game.ky[j+1];\r
+                       game.kpower[j] = game.kpower[j+1];\r
+                       game.kavgd[j] = game.kdist[j] = game.kdist[j+1];\r
                }\r
        }\r
-       kx[nenhere+1] = 0;\r
-       ky[nenhere+1] = 0;\r
-       kdist[nenhere+1] = 0;\r
-       kavgd[nenhere+1] = 0;\r
-       kpower[nenhere+1] = 0;\r
+       game.kx[nenhere+1] = 0;\r
+       game.ky[nenhere+1] = 0;\r
+       game.kdist[nenhere+1] = 0;\r
+       game.kavgd[nenhere+1] = 0;\r
+       game.kpower[nenhere+1] = 0;\r
        return;\r
 }\r
 \r
@@ -688,7 +679,7 @@ void photon(void) {
 \r
        ididit = 0;\r
 \r
-       if (damage[DPHOTON]) {\r
+       if (game.damage[DPHOTON]) {\r
                prout("Photon tubes damaged.");\r
                chew();\r
                return;\r
@@ -705,8 +696,7 @@ void photon(void) {
                        return;\r
                }\r
                else if (key == IHEOL) {\r
-                       crami(torps,1);\r
-                       prout(" torpedoes left.");\r
+                       prout("%d torpedoes left.", torps);\r
                        proutn("Number of torpedoes to fire- ");\r
                        key = scan();\r
                }\r
@@ -758,9 +748,7 @@ void photon(void) {
        if (i == 1 && key == IHEOL) {\r
                /* prompt for each one */\r
                for (i = 1; i <= n; i++) {\r
-                       proutn("Target sector for torpedo number");\r
-                       crami(i, 2);\r
-                       proutn("- ");\r
+                   proutn("Target sector for torpedo number %d- ", i);\r
                        key = scan();\r
                        if (key != IHREAL) {\r
                                huh();\r
@@ -787,9 +775,7 @@ void photon(void) {
                        /* misfire! */\r
                        r = (Rand()+1.2) * r;\r
                        if (n>1) {\r
-                               prouts("***TORPEDO NUMBER");\r
-                               crami(i, 2);\r
-                               prouts(" MISFIRES.");\r
+                           prouts("***TORPEDO NUMBER %d MISFIRES", i);\r
                        }\r
                        else prouts("***TORPEDO MISFIRES.");\r
                        skip(1);\r
@@ -798,25 +784,23 @@ void photon(void) {
                        osuabor=1;\r
                        if (Rand() <= 0.2) {\r
                                prout("***Photon tubes damaged by misfire.");\r
-                               damage[DPHOTON] = damfac*(1.0+2.0*Rand());\r
+                               game.damage[DPHOTON] = damfac*(1.0+2.0*Rand());\r
                                break;\r
                        }\r
                }\r
                if (shldup != 0 || condit == IHDOCKED) r *= 1.0 + 0.0001*shield;\r
                if (n != 1) {\r
                        skip(1);\r
-                       proutn("Track for torpedo number");\r
-                       crami(i, 2);\r
-                       proutn("-   ");\r
+                       proutn("Track for torpedo number %d-  ", i);\r
                }\r
                else {\r
                        skip(1);\r
                        proutn("Torpedo track- ");\r
                }\r
                torpedo(course[i], r, sectx, secty, &dummy);\r
-               if (alldone || state.galaxy[quadx][quady]==1000) return;\r
+               if (alldone || game.state.galaxy[quadx][quady]==1000) return;\r
        }\r
-       if (state.remkl==0) finish(FWON);\r
+       if (game.state.remkl==0) finish(FWON);\r
 }\r
 \r
        \r
@@ -826,7 +810,7 @@ static void overheat(double rpow) {
                double chekbrn = (rpow-1500.)*0.00038;\r
                if (Rand() <= chekbrn) {\r
                        prout("Weapons officer Sulu-  \"Phasers overheated, sir.\"");\r
-                       damage[DPHASER] = damfac*(1.0 + Rand()) * (1.0+chekbrn);\r
+                       game.damage[DPHASER] = damfac*(1.0 + Rand()) * (1.0+chekbrn);\r
                }\r
        }\r
 }\r
@@ -862,9 +846,7 @@ static int checkshctrl(double rpow) {
        if (icas) {\r
                skip(1);\r
                prout("McCoy to bridge- \"Severe radiation burns, Jim.");\r
-               proutn("  ");\r
-               crami(icas, 1);\r
-               prout(" casualties so far.\"");\r
+               prout("  %d casualties so far.\"", icas);\r
                casual -= icas;\r
        }\r
        skip(1);\r
@@ -884,19 +866,19 @@ void phasers(void) {
 \r
        skip(1);\r
        /* SR sensors and Computer */\r
-       if (damage[DSRSENS]+damage[DCOMPTR] > 0) ipoop = 0;\r
+       if (game.damage[DSRSENS]+game.damage[DCOMPTR] > 0) ipoop = 0;\r
        if (condit == IHDOCKED) {\r
                prout("Phasers can't be fired through base shields.");\r
                chew();\r
                return;\r
        }\r
-       if (damage[DPHASER] != 0) {\r
+       if (game.damage[DPHASER] != 0) {\r
                prout("Phaser control damaged.");\r
                chew();\r
                return;\r
        }\r
        if (shldup) {\r
-               if (damage[DSHCTRL]) {\r
+               if (game.damage[DSHCTRL]) {\r
                        prout("High speed shield control damaged.");\r
                        chew();\r
                        return;\r
@@ -1017,7 +999,7 @@ void phasers(void) {
                                for (i = 1; i <= nenhere; i++) {\r
                                        hits[i] = 0.0;\r
                                        if (powrem <= 0) continue;\r
-                                       hits[i] = fabs(kpower[i])/(phasefac*pow(0.90,kdist[i]));\r
+                                       hits[i] = fabs(game.kpower[i])/(PHASEFAC*pow(0.90,game.kdist[i]));\r
                                        over = (0.01 + 0.05*Rand())*hits[i];\r
                                        temp = powrem;\r
                                        powrem -= hits[i] + over;\r
@@ -1044,7 +1026,7 @@ void phasers(void) {
                case FORCEMAN:\r
                        chew();\r
                        key = IHEOL;\r
-                       if (damage[DCOMPTR]!=0)\r
+                       if (game.damage[DCOMPTR]!=0)\r
                                prout("Battle comuter damaged, manual file only.");\r
                        else {\r
                                skip(1);\r
@@ -1058,8 +1040,8 @@ void phasers(void) {
                case MANUAL:\r
                        rpow = 0.0;\r
                        for (k = 1; k <= nenhere;) {\r
-                               int ii = kx[k], jj = ky[k];\r
-                               int ienm = quad[ii][jj];\r
+                               int ii = game.kx[k], jj = game.ky[k];\r
+                               int ienm = game.quad[ii][jj];\r
                                if (msgflag) {\r
                                        proutn("Energy available= ");\r
                                        cramf(energy-.006-(ifast?200:0), 0, 2);\r
@@ -1067,7 +1049,7 @@ void phasers(void) {
                                        msgflag = 0;\r
                                        rpow = 0.0;\r
                                }\r
-                               if (damage[DSRSENS] && !(abs(sectx-ii) < 2 && abs(secty-jj) < 2) &&\r
+                               if (game.damage[DSRSENS] && !(abs(sectx-ii) < 2 && abs(secty-jj) < 2) &&\r
                                        (ienm == IHC || ienm == IHS)) {\r
                                        cramen(ienm);\r
                                        prout(" can't be located without short range scan.");\r
@@ -1080,12 +1062,10 @@ void phasers(void) {
                                if (key == IHEOL) {\r
                                        chew();\r
                                        if (ipoop && k > kz) {\r
-                                               int irec=(fabs(kpower[k])/(phasefac*pow(0.9,kdist[k])))*\r
+                                               int irec=(fabs(game.kpower[k])/(PHASEFAC*pow(0.9,game.kdist[k])))*\r
                                                                 (1.01+0.05*Rand()) + 1.0;\r
                                                kz = k;\r
-                                               proutn("(");\r
-                                               crami(irec, 1);\r
-                                               proutn(")  ");\r
+                                               proutn("(%d)", irec);\r
                                        }\r
                                        proutn("units to fire at ");\r
                                        crmena(0, ienm, 2, ii, jj);\r
@@ -1176,26 +1156,26 @@ void hittem(double *hits) {
        for (; k <= nenhr2; k++, kk++) {\r
                if ((wham = hits[k])==0) continue;\r
                dustfac = 0.9 + 0.01*Rand();\r
-               hit = wham*pow(dustfac,kdist[kk]);\r
-               kpini = kpower[kk];\r
+               hit = wham*pow(dustfac,game.kdist[kk]);\r
+               kpini = game.kpower[kk];\r
                kp = fabs(kpini);\r
-               if (phasefac*hit < kp) kp = phasefac*hit;\r
-               kpower[kk] -= (kpower[kk] < 0 ? -kp: kp);\r
-               kpow = kpower[kk];\r
-               ii = kx[kk];\r
-               jj = ky[kk];\r
+               if (PHASEFAC*hit < kp) kp = PHASEFAC*hit;\r
+               game.kpower[kk] -= (game.kpower[kk] < 0 ? -kp: kp);\r
+               kpow = game.kpower[kk];\r
+               ii = game.kx[kk];\r
+               jj = game.ky[kk];\r
                if (hit > 0.005) {\r
                        cramf(hit, 0, 2);\r
                        proutn(" unit hit on ");\r
                }\r
                else\r
                        proutn("Very small hit on ");\r
-               ienm = quad[ii][jj];\r
+               ienm = game.quad[ii][jj];\r
                crmena(0,ienm,2,ii,jj);\r
                skip(1);\r
                if (kpow == 0) {\r
                        deadkl(ii, jj, ienm, ii, jj);\r
-                       if (state.remkl==0) finish(FWON);\r
+                       if (game.state.remkl==0) finish(FWON);\r
                        if (alldone) return;\r
                        kk--; /* don't do the increment */\r
                }\r
@@ -1206,7 +1186,7 @@ void hittem(double *hits) {
                                cramlc(2,ii,jj);\r
                                skip(1);\r
                                prout("   has just lost its firepower.\"");\r
-                               kpower[kk] = -kpow;\r
+                               game.kpower[kk] = -kpow;\r
                        }\r
        }\r
        return;\r