Another step in coalescing all the globals.
[super-star-trek.git] / events.c
index b94c05a76913ebaaf435b569bb68dc618d4cbff9..99591deca7b930793c69d4e7ff8a1a04616e205f 100644 (file)
--- a/events.c
+++ b/events.c
@@ -11,12 +11,12 @@ void events(void) {
        if (idebug) prout("EVENTS");\r
 #endif\r
 \r
-       if (stdamtim == 1e30 && damage[DRADIO] != 0.0) {\r
+       if (stdamtim == 1e30 && frozen.damage[DRADIO] != 0.0) {\r
                /* chart will no longer be updated because radio is dead */\r
                stdamtim = state.date;\r
                for (i=1; i <= 8 ; i++)\r
                        for (j=1; j <= 8; j++)\r
-                               if (starch[i][j] == 1) starch[i][j] = state.galaxy[i][j]+1000;\r
+                               if (frozen.starch[i][j] == 1) frozen.starch[i][j] = state.galaxy[i][j]+1000;\r
        }\r
 \r
        for (;;) {\r
@@ -25,9 +25,9 @@ void events(void) {
                if (alldone) return;\r
                datemin = fintim;\r
                for (l=1; l<=NEVENTS; l++)\r
-                       if (future[l] <= datemin) {\r
+                       if (frozen.future[l] <= datemin) {\r
                                line = l;\r
-                               datemin = future[l];\r
+                               datemin = frozen.future[l];\r
                        }\r
                xtime = datemin-state.date;\r
                state.date = datemin;\r
@@ -39,30 +39,30 @@ void events(void) {
                        return;\r
                }\r
                /* Is life support adequate? */\r
-               if (damage[DLIFSUP] && condit != IHDOCKED) {\r
-                       if (lsupres < xtime && damage[DLIFSUP] > lsupres) {\r
+               if (frozen.damage[DLIFSUP] && condit != IHDOCKED) {\r
+                       if (lsupres < xtime && frozen.damage[DLIFSUP] > lsupres) {\r
                                finish(FLIFESUP);\r
                                return;\r
                        }\r
                        lsupres -= xtime;\r
-                       if (damage[DLIFSUP] <= xtime) lsupres = inlsr;\r
+                       if (frozen.damage[DLIFSUP] <= xtime) lsupres = inlsr;\r
                }\r
                /* Fix devices */\r
                repair = xtime;\r
                if (condit == IHDOCKED) repair /= docfac;\r
                /* Don't fix Deathray here */\r
                for (l=1; l<=ndevice; l++)\r
-                       if (damage[l] > 0.0 && l != DDRAY)\r
-                               damage[l] -= (damage[l]-repair > 0.0 ? repair : damage[l]);\r
+                       if (frozen.damage[l] > 0.0 && l != DDRAY)\r
+                               frozen.damage[l] -= (frozen.damage[l]-repair > 0.0 ? repair : frozen.damage[l]);\r
                /* If radio repaired, update star chart and attack reports */\r
-               if (stdamtim != 1e30 && damage[DRADIO] == 0.0) {\r
+               if (stdamtim != 1e30 && frozen.damage[DRADIO] == 0.0) {\r
                        stdamtim = 1e30;\r
                        prout("Lt. Uhura- \"Captain, the sub-space radio is working and");\r
                        prout("   surveillance reports are coming in.");\r
                        skip(1);\r
                        for (i=1; i <= 8 ; i++)\r
                                for (j=1; j <= 8; j++)\r
-                                       if (starch[i][j] > 999) starch[i][j] = 1;\r
+                                       if (frozen.starch[i][j] > 999) frozen.starch[i][j] = 1;\r
                        if (iseenit==0) {\r
                                attakreport();\r
                                iseenit = 1;\r
@@ -78,7 +78,7 @@ void events(void) {
                                if (ipage==0) pause(1);\r
                                ipage=1;\r
                                snova(0,0);\r
-                               future[FSNOVA] = state.date + expran(0.5*intime);\r
+                               frozen.future[FSNOVA] = state.date + expran(0.5*intime);\r
                                if (state.galaxy[quadx][quady] == 1000) return;\r
                                break;\r
                        case FSPY: /* Check with spy to see if S.C. should tractor beam */\r
@@ -87,10 +87,10 @@ void events(void) {
                                        condit==IHDOCKED || isatb==1 || iscate==1) return;\r
                                if (ientesc ||\r
                                        (energy < 2000 && torps < 4 && shield < 1250) ||\r
-                                       (damage[DPHASER]>0 && (damage[DPHOTON]>0 || torps < 4)) ||\r
-                                       (damage[DSHIELD] > 0 &&\r
-                                        (energy < 2500 || damage[DPHASER] > 0) &&\r
-                                        (torps < 5 || damage[DPHOTON] > 0))) {\r
+                                       (frozen.damage[DPHASER]>0 && (frozen.damage[DPHOTON]>0 || torps < 4)) ||\r
+                                       (frozen.damage[DSHIELD] > 0 &&\r
+                                        (energy < 2500 || frozen.damage[DPHASER] > 0) &&\r
+                                        (torps < 5 || frozen.damage[DPHOTON] > 0))) {\r
                                        /* Tractor-beam her! */\r
                                        istract=1;\r
                                        yank = square(state.isx-quadx) + square(state.isy-quady);\r
@@ -100,14 +100,14 @@ void events(void) {
                        case FTBEAM: /* Tractor beam */\r
                                if (line==FTBEAM) {\r
                                        if (state.remcom == 0) {\r
-                                               future[FTBEAM] = 1e30;\r
+                                               frozen.future[FTBEAM] = 1e30;\r
                                                break;\r
                                        }\r
                                        i = Rand()*state.remcom+1.0;\r
                                        yank = square(state.cx[i]-quadx) + square(state.cy[i]-quady);\r
                                        if (istract || condit == IHDOCKED || yank == 0) {\r
                                                /* Drats! Have to reschedule */\r
-                                               future[FTBEAM] = state.date + Time +\r
+                                               frozen.future[FTBEAM] = state.date + Time +\r
                                                                                 expran(1.5*intime/state.remcom);\r
                                                break;\r
                                        }\r
@@ -135,7 +135,7 @@ void events(void) {
                                        if (Rand() >0.5) {\r
                                                prout("Galileo, left on the planet surface, is captured");\r
                                                prout("by aliens and made into a flying McDonald's.");\r
-                                               damage[DSHUTTL] = -10;\r
+                                               frozen.damage[DSHUTTL] = -10;\r
                                                iscraft = -1;\r
                                        }\r
                                        else {\r
@@ -162,7 +162,7 @@ void events(void) {
                                        resting = 0;\r
                                }\r
                                if (shldup==0) {\r
-                                       if (damage[DSHIELD]==0 && shield > 0) {\r
+                                       if (frozen.damage[DSHIELD]==0 && shield > 0) {\r
                                                doshield(2); /* Shldsup */\r
                                                shldchg=0;\r
                                        }\r
@@ -171,18 +171,18 @@ void events(void) {
                                newqad(0);\r
                                /* Adjust finish time to time of tractor beaming */\r
                                fintim = state.date+Time;\r
-                               if (state.remcom <= 0) future[FTBEAM] = 1e30;\r
-                               else future[FTBEAM] = state.date+Time+expran(1.5*intime/state.remcom);\r
+                               if (state.remcom <= 0) frozen.future[FTBEAM] = 1e30;\r
+                               else frozen.future[FTBEAM] = state.date+Time+expran(1.5*intime/state.remcom);\r
                                break;\r
                        case FSNAP: /* Snapshot of the universe (for time warp) */\r
                                snapsht = state;\r
                                state.snap = 1;\r
-                               future[FSNAP] = state.date + expran(0.5 * intime);\r
+                               frozen.future[FSNAP] = state.date + expran(0.5 * intime);\r
                                break;\r
                        case FBATTAK: /* Commander attacks starbase */\r
                                if (state.remcom==0 || state.rembase==0) {\r
                                        /* no can do */\r
-                                       future[FBATTAK] = future[FCDBAS] = 1e30;\r
+                                       frozen.future[FBATTAK] = frozen.future[FCDBAS] = 1e30;\r
                                        break;\r
                                }\r
                                i = 0;\r
@@ -198,19 +198,19 @@ void events(void) {
                                }\r
                                if (j>state.rembase) {\r
                                        /* no match found -- try later */\r
-                                       future[FBATTAK] = state.date + expran(0.3*intime);\r
-                                       future[FCDBAS] = 1e30;\r
+                                       frozen.future[FBATTAK] = state.date + expran(0.3*intime);\r
+                                       frozen.future[FCDBAS] = 1e30;\r
                                        break;\r
                                }\r
                                /* commander + starbase combination found -- launch attack */\r
                                batx = state.baseqx[j];\r
                                baty = state.baseqy[j];\r
-                               future[FCDBAS] = state.date+1.0+3.0*Rand();\r
+                               frozen.future[FCDBAS] = state.date+1.0+3.0*Rand();\r
                                if (isatb) /* extra time if SC already attacking */\r
-                                       future[FCDBAS] += future[FSCDBAS]-state.date;\r
-                               future[FBATTAK] = future[FCDBAS] +expran(0.3*intime);\r
+                                       frozen.future[FCDBAS] += frozen.future[FSCDBAS]-state.date;\r
+                               frozen.future[FBATTAK] = frozen.future[FCDBAS] +expran(0.3*intime);\r
                                iseenit = 0;\r
-                               if (damage[DRADIO] != 0.0 &&\r
+                               if (frozen.damage[DRADIO] != 0.0 &&\r
                                        condit != IHDOCKED) break; /* No warning :-( */\r
                                iseenit = 1;\r
                                if (ipage==0) pause(1);\r
@@ -221,7 +221,7 @@ void events(void) {
                                skip(1);\r
                                prout("   reports that it is under atttack and that it can");\r
                                proutn("   hold out only until stardate ");\r
-                               cramf(future[FCDBAS],1,1);\r
+                               cramf(frozen.future[FCDBAS],1,1);\r
                                prout(".\"");\r
                                if (resting) {\r
                                        skip(1);\r
@@ -234,7 +234,7 @@ void events(void) {
                                }\r
                                break;\r
                        case FSCDBAS: /* Supercommander destroys base */\r
-                               future[FSCDBAS] = 1e30;\r
+                               frozen.future[FSCDBAS] = 1e30;\r
                                isatb = 2;\r
                                if (state.galaxy[state.isx][state.isy]%100 < 10) break; /* WAS RETURN! */\r
                                ixhold = batx;\r
@@ -243,7 +243,7 @@ void events(void) {
                                baty = state.isy;\r
                        case FCDBAS: /* Commander succeeds in destroying base */\r
                                if (line==FCDBAS) {\r
-                                       future[FCDBAS] = 1e30;\r
+                                       frozen.future[FCDBAS] = 1e30;\r
                                        /* find the lucky pair */\r
                                        for (i = 1; i <= state.remcom; i++)\r
                                                if (state.cx[i]==batx && state.cy[i]==baty) break;\r
@@ -256,10 +256,10 @@ void events(void) {
                                }\r
                                /* Code merges here for any commander destroying base */\r
                                /* Not perfect, but will have to do */\r
-                               if (starch[batx][baty] == -1) starch[batx][baty] = 0;\r
+                               if (frozen.starch[batx][baty] == -1) frozen.starch[batx][baty] = 0;\r
                                /* Handle case where base is in same quadrant as starship */\r
                                if (batx==quadx && baty==quady) {\r
-                                       if (starch[batx][baty] > 999) starch[batx][baty] -= 10;\r
+                                       if (frozen.starch[batx][baty] > 999) frozen.starch[batx][baty] -= 10;\r
                                        frozen.quad[basex][basey]= IHDOT;\r
                                        basex=basey=0;\r
                                        newcnd();\r
@@ -267,7 +267,7 @@ void events(void) {
                                        prout("Spock-  \"Captain, I believe the starbase has been destroyestate.\"");\r
                                }\r
                                else if (state.rembase != 1 &&\r
-                                                (damage[DRADIO] <= 0.0 || condit == IHDOCKED)) {\r
+                                                (frozen.damage[DRADIO] <= 0.0 || condit == IHDOCKED)) {\r
                                        /* Get word via subspace radio */\r
                                        if (ipage==0) pause(1);\r
                                        ipage = 1;\r
@@ -298,13 +298,13 @@ void events(void) {
                                }\r
                                break;\r
                        case FSCMOVE: /* Supercommander moves */\r
-                               future[FSCMOVE] = state.date+0.2777;\r
+                               frozen.future[FSCMOVE] = state.date+0.2777;\r
                                if (ientesc+istract==0 &&\r
                                        isatb!=1 &&\r
                                        (iscate!=1 || justin==1)) scom(&ipage);\r
                                break;\r
                        case FDSPROB: /* Move deep space probe */\r
-                               future[FDSPROB] = state.date + 0.01;\r
+                               frozen.future[FDSPROB] = state.date + 0.01;\r
                                probex += probeinx;\r
                                probey += probeiny;\r
                                i = (int)(probex/10 +0.05);\r
@@ -315,7 +315,7 @@ void events(void) {
                                        if (i < 1 || i > 8 || j < 1 || j > 8 ||\r
                                                state.galaxy[probecx][probecy] == 1000) {\r
                                                // Left galaxy or ran into supernova\r
-                                               if (damage[DRADIO]==0.0 || condit == IHDOCKED) {\r
+                                               if (frozen.damage[DRADIO]==0.0 || condit == IHDOCKED) {\r
                                                        if (ipage==0) pause(1);\r
                                                        ipage = 1;\r
                                                        skip(1);\r
@@ -326,10 +326,10 @@ void events(void) {
                                                                proutn("is no longer transmitting");\r
                                                        prout(".\"");\r
                                                }\r
-                                               future[FDSPROB] = 1e30;\r
+                                               frozen.future[FDSPROB] = 1e30;\r
                                                break;\r
                                        }\r
-                                       if (damage[DRADIO]==0.0   || condit == IHDOCKED) {\r
+                                       if (frozen.damage[DRADIO]==0.0   || condit == IHDOCKED) {\r
                                                if (ipage==0) pause(1);\r
                                                ipage = 1;\r
                                                skip(1);\r
@@ -340,15 +340,15 @@ void events(void) {
                                }\r
                                /* Update star chart if Radio is working or have access to\r
                                   radio. */\r
-                               if (damage[DRADIO] == 0.0 || condit == IHDOCKED)\r
-                                       starch[probecx][probecy] = damage[DRADIO] > 0.0 ?\r
+                               if (frozen.damage[DRADIO] == 0.0 || condit == IHDOCKED)\r
+                                       frozen.starch[probecx][probecy] = frozen.damage[DRADIO] > 0.0 ?\r
                                                                                   state.galaxy[probecx][probecy]+1000 : 1;\r
                                proben--; // One less to travel\r
                                if (proben == 0 && isarmed &&\r
                                        state.galaxy[probecx][probecy] % 10 > 0) {\r
                                        /* lets blow the sucker! */\r
                                        snova(1,0);\r
-                                       future[FDSPROB] = 1e30;\r
+                                       frozen.future[FDSPROB] = 1e30;\r
                                        if (state.galaxy[quadx][quady] == 1000) return;\r
                                }\r
                                break;\r
@@ -405,7 +405,7 @@ void wait(void) {
                delay -= temp;\r
                /* Repair Deathray if long rest at starbase */\r
                if (origTime-delay >= 9.99 && condit == IHDOCKED)\r
-                       damage[DDRAY] = 0.0;\r
+                       frozen.damage[DDRAY] = 0.0;\r
        } while (state.galaxy[quadx][quady] != 1000); // leave if quadrant supernovas\r
 \r
        resting = 0;\r
@@ -506,7 +506,7 @@ void nova(int ix, int iy) {
                                                                shield = 0.0;\r
                                                                shldup = 0;\r
                                                                prout("***Shields knocked out.");\r
-                                                               damage[DSHIELD] += 0.005*damfac*Rand()*diff;\r
+                                                               frozen.damage[DSHIELD] += 0.005*damfac*Rand()*diff;\r
                                                        }\r
                                                }\r
                                                else energy -= 2000.0;\r
@@ -526,9 +526,9 @@ void nova(int ix, int iy) {
                                        case IHS:\r
                                        case IHR:\r
                                                for (ll = 1; ll <= nenhere; ll++)\r
-                                                       if (kx[ll]==ii && ky[ll]==jj) break;\r
-                                               kpower[ll] -= 800.0; /* If firepower is lost, die */\r
-                                               if (kpower[ll] <= 0.0) {\r
+                                                       if (frozen.kx[ll]==ii && frozen.ky[ll]==jj) break;\r
+                                               frozen.kpower[ll] -= 800.0; /* If firepower is lost, die */\r
+                                               if (frozen.kpower[ll] <= 0.0) {\r
                                                        deadkl(ii, jj, iquad, ii, jj);\r
                                                        break;\r
                                                }\r
@@ -558,10 +558,10 @@ void nova(int ix, int iy) {
                                                cramlc(2, newcx, newcy);\r
                                                frozen.quad[ii][jj] = IHDOT;\r
                                                frozen.quad[newcx][newcy] = iquad;\r
-                                               kx[ll] = newcx;\r
-                                               ky[ll] = newcy;\r
-                                               kavgd[ll] = sqrt(square(sectx-newcx)+square(secty-newcy));\r
-                                               kdist[ll] = kavgd[ll];\r
+                                               frozen.kx[ll] = newcx;\r
+                                               frozen.ky[ll] = newcy;\r
+                                               frozen.kavgd[ll] = sqrt(square(sectx-newcx)+square(secty-newcy));\r
+                                               frozen.kdist[ll] = frozen.kavgd[ll];\r
                                                skip(1);\r
                                                break;\r
                                }\r
@@ -635,7 +635,7 @@ void snova(int insx, int insy) {
 \r
                if (nqx != quady || nqy != quady || justin != 0) {\r
                        /* it isn't here, or we just entered (treat as inroute) */\r
-                       if (damage[DRADIO] == 0.0 || condit == IHDOCKED) {\r
+                       if (frozen.damage[DRADIO] == 0.0 || condit == IHDOCKED) {\r
                                skip(1);\r
                                proutn("Message from Starfleet Command       Stardate ");\r
                                cramf(state.date, 0, 1);\r
@@ -689,7 +689,7 @@ void snova(int insx, int insy) {
                /* did in the Supercommander! */\r
                state.nscrem = state.isx = state.isy = isatb = iscate = 0;\r
                iscdead = 1;\r
-               future[FSCMOVE] = future[FSCDBAS] = 1e30;\r
+               frozen.future[FSCMOVE] = frozen.future[FSCDBAS] = 1e30;\r
        }\r
        state.remkl -= kldead;\r
        if (state.remcom) {\r
@@ -702,7 +702,7 @@ void snova(int insx, int insy) {
                                state.remcom--;\r
                                kldead--;\r
                                comdead++;\r
-                               if (state.remcom==0) future[FTBEAM] = 1e30;\r
+                               if (state.remcom==0) frozen.future[FTBEAM] = 1e30;\r
                                break;\r
                        }\r
                }\r
@@ -745,9 +745,9 @@ void snova(int insx, int insy) {
        }\r
        /* mark supernova in galaxy and in star chart */\r
        if ((quadx == nqx && quady == nqy) ||\r
-               damage[DRADIO] == 0 ||\r
+               frozen.damage[DRADIO] == 0 ||\r
                condit == IHDOCKED)\r
-               starch[nqx][nqy] = 1;\r
+               frozen.starch[nqx][nqy] = 1;\r
        state.galaxy[nqx][nqy] = 1000;\r
        /* If supernova destroys last klingons give special message */\r
        if (state.remkl==0 && (nqx != quadx || nqy != quady)) {\r