The quad global gets pulled into the frozen structure.
[super-star-trek.git] / battle.c
index 9a83fba3898309a5bc148bc2481e2c8b40f294e3..2633a32f97829a480004336f66671c2bde642efb 100644 (file)
--- a/battle.c
+++ b/battle.c
@@ -163,7 +163,7 @@ void ram(int ibumpd, int ienm, int ix, int iy) {
                damage[l] += Time + extradm; /* Damage for at least time of travel! */\r
        }\r
        shldup = 0;\r
-       if (d.remkl) {\r
+       if (state.remkl) {\r
                pause(2);\r
                dreprt();\r
        }\r
@@ -197,7 +197,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=frozen.quad[ix][iy];\r
                if (iquad==IHDOT) continue;\r
                /* hit something */\r
                skip(1);\r
@@ -223,11 +223,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 (frozen.quad[jx][jy]==IHBLANK) {\r
                                        finish(FHOLE);\r
                                        return;\r
                                }\r
-                               if (quad[jx][jy]!=IHDOT) {\r
+                               if (frozen.quad[jx][jy]!=IHDOT) {\r
                                        /* can't move into object */\r
                                        return;\r
                                }\r
@@ -274,12 +274,12 @@ 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 (frozen.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 (frozen.quad[jx][jy]!=IHDOT) {\r
                                        /* can't move into object */\r
                                        prout(" damaged but not destroyed.");\r
                                        return;\r
@@ -292,29 +292,29 @@ void torpedo(double course, double r, int inx, int iny, double *hit) {
                        case IHB: /* Hit a base */\r
                                prout("***STARBASE DESTROYED..");\r
                                if (starch[quadx][quady] < 0) starch[quadx][quady] = 0;\r
-                               for (ll=1; ll<=d.rembase; ll++) {\r
-                                       if (d.baseqx[ll]==quadx && d.baseqy[ll]==quady) {\r
-                                               d.baseqx[ll]=d.baseqx[d.rembase];\r
-                                               d.baseqy[ll]=d.baseqy[d.rembase];\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
                                                break;\r
                                        }\r
                                }\r
-                               quad[ix][iy]=IHDOT;\r
-                               d.rembase--;\r
+                               frozen.quad[ix][iy]=IHDOT;\r
+                               state.rembase--;\r
                                basex=basey=0;\r
-                               d.galaxy[quadx][quady] -= 10;\r
-                               d.basekl++;\r
+                               state.galaxy[quadx][quady] -= 10;\r
+                               state.basekl++;\r
                                newcnd();\r
                                return;\r
                        case IHP: /* Hit a planet */\r
                                crmena(1, iquad, 2, ix, iy);\r
                                prout(" destroyed.");\r
-                               d.nplankl++;\r
-                               d.newstuf[quadx][quady] -= 1;\r
-                               d.plnets[iplnet] = nulplanet;\r
+                               state.nplankl++;\r
+                               state.newstuf[quadx][quady] -= 1;\r
+                               state.plnets[iplnet] = nulplanet;\r
                                iplnet = 0;\r
                                plnetx = plnety = 0;\r
-                               quad[ix][iy] = IHDOT;\r
+                               frozen.quad[ix][iy] = IHDOT;\r
                                if (landed==1) {\r
                                        /* captain parishes on planet */\r
                                        finish(FDPLANET);\r
@@ -337,7 +337,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
+                               frozen.quad[ix][iy] = IHDOT;\r
                                return;\r
                        case IHBLANK: /* Black hole */\r
                                skip(1);\r
@@ -357,7 +357,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
+                                       frozen.quad[ix][iy] = IHDOT;\r
                                        ithere = 0;\r
                                        ithx = ithy = 0;\r
                                        return;\r
@@ -367,7 +367,7 @@ void torpedo(double course, double r, int inx, int iny, double *hit) {
                                        return;\r
                                }\r
                                prout(" disappears.");\r
-                               quad[ix][iy] = IHWEB;\r
+                               frozen.quad[ix][iy] = IHWEB;\r
                                ithere = ithx = ithy = 0;\r
                                {\r
                                        int dum, my;\r
@@ -385,8 +385,8 @@ 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
+               frozen.quad[jx][jy]=iquad;\r
+               frozen.quad[ix][iy]=IHDOT;\r
                proutn(" displaced by blast to");\r
                cramlc(2, jx, jy);\r
                skip(1);\r
@@ -469,7 +469,7 @@ void attack(int k) {
                if (kpower[l] < 500) r *= 0.25; \r
                jx = kx[l];\r
                jy = ky[l];\r
-               iquad = quad[jx][jy];\r
+               iquad = frozen.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
@@ -495,8 +495,8 @@ void attack(int k) {
                        r = (Rand()+Rand())*0.5 -0.5;\r
                        r += 0.002*kpower[l]*r;\r
                        torpedo(course, r, jx, jy, &hit);\r
-                       if (d.remkl==0) finish(FWON); /* Klingons did themselves in! */\r
-                       if (d.galaxy[quadx][quady] == 1000 ||\r
+                       if (state.remkl==0) finish(FWON); /* Klingons did themselves in! */\r
+                       if (state.galaxy[quadx][quady] == 1000 ||\r
                                alldone) return; /* Supernova or finished */\r
                        if (hit == 0) continue;\r
                }\r
@@ -590,10 +590,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
-               d.newstuf[quadx][quady] -= 10;\r
+               state.newstuf[quadx][quady] -= 10;\r
                irhere--;\r
-               d.nromkl++;\r
-               d.nromrem--;\r
+               state.nromkl++;\r
+               state.nromrem--;\r
        }\r
        else if (type == IHT) {\r
                /* Killed a Tholian */\r
@@ -601,41 +601,41 @@ void deadkl(int ix, int iy, int type, int ixx, int iyy) {
        }\r
        else {\r
                /* Some type of a Klingon */\r
-               d.galaxy[quadx][quady] -= 100;\r
+               state.galaxy[quadx][quady] -= 100;\r
                klhere--;\r
-               d.remkl--;\r
+               state.remkl--;\r
                switch (type) {\r
                        case IHC:\r
                                comhere = 0;\r
-                               for (i=1; i<=d.remcom; i++)\r
-                                       if (d.cx[i]==quadx && d.cy[i]==quady) break;\r
-                               d.cx[i] = d.cx[d.remcom];\r
-                               d.cy[i] = d.cy[d.remcom];\r
-                               d.cx[d.remcom] = 0;\r
-                               d.cy[d.remcom] = 0;\r
-                               d.remcom--;\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 (d.remcom != 0)\r
-                                       future[FTBEAM] = d.date + expran(1.0*incom/d.remcom);\r
-                               d.killc++;\r
+                               if (state.remcom != 0)\r
+                                       future[FTBEAM] = state.date + expran(1.0*incom/state.remcom);\r
+                               state.killc++;\r
                                break;\r
                        case IHK:\r
-                               d.killk++;\r
+                               state.killk++;\r
                                break;\r
                        case IHS:\r
-                               d.nscrem = ishere = d.isx = d.isy = isatb = iscate = 0;\r
-                               d.nsckill = 1;\r
+                               state.nscrem = ishere = state.isx = state.isy = isatb = iscate = 0;\r
+                               state.nsckill = 1;\r
                                future[FSCMOVE] = future[FSCDBAS] = 1e30;\r
                                break;\r
                }\r
        }\r
 \r
        /* For each kind of enemy, finish message to player */\r
-       prout(" destroyed.");\r
-       quad[ix][iy] = IHDOT;\r
-       if (d.remkl==0) return;\r
+       prout(" destroyestate.");\r
+       frozen.quad[ix][iy] = IHDOT;\r
+       if (state.remkl==0) return;\r
 \r
-       d.remtime = d.remres/(d.remkl + 4*d.remcom);\r
+       state.remtime = state.remres/(state.remkl + 4*state.remcom);\r
 \r
        if (type == IHT) return;\r
 \r
@@ -814,9 +814,9 @@ void photon(void) {
                        proutn("Torpedo track- ");\r
                }\r
                torpedo(course[i], r, sectx, secty, &dummy);\r
-               if (alldone || d.galaxy[quadx][quady]==1000) return;\r
+               if (alldone || state.galaxy[quadx][quady]==1000) return;\r
        }\r
-       if (d.remkl==0) finish(FWON);\r
+       if (state.remkl==0) finish(FWON);\r
 }\r
 \r
        \r
@@ -1059,7 +1059,7 @@ void phasers(void) {
                        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 ienm = frozen.quad[ii][jj];\r
                                if (msgflag) {\r
                                        proutn("Energy available= ");\r
                                        cramf(energy-.006-(ifast?200:0), 0, 2);\r
@@ -1190,12 +1190,12 @@ void hittem(double *hits) {
                }\r
                else\r
                        proutn("Very small hit on ");\r
-               ienm = quad[ii][jj];\r
+               ienm = frozen.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 (d.remkl==0) finish(FWON);\r
+                       if (state.remkl==0) finish(FWON);\r
                        if (alldone) return;\r
                        kk--; /* don't do the increment */\r
                }\r