Better project documentation.
[super-star-trek.git] / setup.c
diff --git a/setup.c b/setup.c
index 5c3174878314156308b9fc8e53236dbca1836fac..002188291aff1dafc53b7b9cf80c1ddf0dfcbca9 100644 (file)
--- a/setup.c
+++ b/setup.c
@@ -36,18 +36,8 @@ void freeze(int boss) {
                skip(1);\r
                return;\r
        }\r
-       fwrite(&state, sizeof(state), 1, fp);\r
-       fwrite(&snapsht, sizeof(snapsht), 1, fp);\r
-       fwrite(kx, sizeof(kx), 1, fp);\r
-       fwrite(ky, sizeof(ky), 1, fp);\r
-       fwrite(starch, sizeof(starch), 1, fp);\r
-       fwrite(kpower, sizeof(kpower), 1, fp);\r
-       fwrite(kdist, sizeof(kdist), 1, fp);\r
-       fwrite(kavgd, sizeof(kavgd), 1, fp);\r
-       fwrite(damage, sizeof(damage), 1, fp);\r
-       fwrite(future, sizeof(future), 1, fp);\r
-       fwrite(&frozen, sizeof(frozen), 1, fp);\r
-       fwrite(passwd, sizeof(passwd), 1, fp);\r
+       strcpy(game.magic, SSTMAGIC);\r
+       fwrite(&game, sizeof(game), 1, fp);\r
 \r
        fclose(fp);\r
 \r
@@ -60,7 +50,7 @@ void thaw(void) {
        FILE *fp;\r
        int key;\r
 \r
-       passwd[0] = '\0';\r
+       game.passwd[0] = '\0';\r
        if ((key = scan()) == IHEOL) {\r
                proutn("File name: ");\r
                key = scan();\r
@@ -79,18 +69,12 @@ void thaw(void) {
                skip(1);\r
                return;\r
        }\r
-       fread(&state, sizeof(state), 1, fp);\r
-       fread(&snapsht, sizeof(snapsht), 1, fp);\r
-       fread(kx, sizeof(kx), 1, fp);\r
-       fread(ky, sizeof(ky), 1, fp);\r
-       fread(starch, sizeof(starch), 1, fp);\r
-       fread(kpower, sizeof(kpower), 1, fp);\r
-       fread(kdist, sizeof(kdist), 1, fp);\r
-       fread(kavgd, sizeof(kavgd), 1, fp);\r
-       fread(damage, sizeof(damage), 1, fp);\r
-       fread(future, sizeof(future), 1, fp);\r
-       fread(&frozen, sizeof(frozen), 1, fp);\r
-       fread(passwd, sizeof(passwd), 1, fp);\r
+       fread(&game, sizeof(game), 1, fp);\r
+       if (strcmp(game.magic, SSTMAGIC)) {\r
+               prout("Game file format is bad, should begin with " SSTMAGIC);\r
+               skip(1);\r
+               return;\r
+       }\r
 \r
        fclose(fp);\r
 \r
@@ -109,15 +93,15 @@ void abandn(void) {
        }\r
        else {\r
                /* Must take shuttle craft to exit */\r
-               if (damage[DSHUTTL]==-1) {\r
+               if (game.damage[DSHUTTL]==-1) {\r
                        prout("Ye Faerie Queene has no shuttle craft.");\r
                        return;\r
                }\r
-               if (damage[DSHUTTL]<0) {\r
+               if (game.damage[DSHUTTL]<0) {\r
                        prout("Shuttle craft now serving Big Mac's.");\r
                        return;\r
                }\r
-               if (damage[DSHUTTL]>0) {\r
+               if (game.damage[DSHUTTL]>0) {\r
                        prout("Shuttle craft damaged.");\r
                        return;\r
                }\r
@@ -138,7 +122,7 @@ void abandn(void) {
                prout("Captain and crew escape in shuttle craft.");\r
                prout("Remainder of ship's complement beam down");\r
                prout("to nearest habitable planet.");\r
-               if (state.rembase==0) {\r
+               if (game.state.rembase==0) {\r
                        /* Ops! no place to go... */\r
                        finish(FABANDN);\r
                        return;\r
@@ -149,23 +133,23 @@ void abandn(void) {
                nprobes = 0; /* No probes */\r
                prout("You are captured by Klingons and released to");\r
                prout("the Federation in a prisoner-of-war exchange.");\r
-               nb = Rand()*state.rembase+1;\r
+               nb = Rand()*game.state.rembase+1;\r
                /* Set up quadrant and position FQ adjacient to base */\r
-               if (quadx!=state.baseqx[nb] || quady!=state.baseqy[nb]) {\r
-                       quadx = state.baseqx[nb];\r
-                       quady = state.baseqy[nb];\r
+               if (quadx!=game.state.baseqx[nb] || quady!=game.state.baseqy[nb]) {\r
+                       quadx = game.state.baseqx[nb];\r
+                       quady = game.state.baseqy[nb];\r
                        sectx = secty = 5;\r
                        newqad(1);\r
                }\r
                for (;;) {\r
                        /* position next to base by trial and error */\r
-                       frozen.quad[sectx][secty] = IHDOT;\r
+                       game.quad[sectx][secty] = IHDOT;\r
                        for (l = 1; l <= 10; l++) {\r
                                sectx = 3.0*Rand() - 1.0 + basex;\r
                                secty = 3.0*Rand() - 1.0 + basey;\r
                                if (sectx >= 1 && sectx <= 10 &&\r
                                        secty >= 1 && secty <= 10 &&\r
-                                       frozen.quad[sectx][secty] == IHDOT) break;\r
+                                       game.quad[sectx][secty] == IHDOT) break;\r
                        }\r
                        if (l < 11) break; /* found a spot */\r
                        sectx=5;\r
@@ -174,7 +158,7 @@ void abandn(void) {
                }\r
        }\r
        /* Get new commission */\r
-       frozen.quad[sectx][secty] = ship = IHF;\r
+       game.quad[sectx][secty] = ship = IHF;\r
        prout("Starfleet puts you in command of another ship,");\r
        prout("the Faerie Queene, which is antiquated but,");\r
        prout("still useable.");\r
@@ -183,8 +167,8 @@ void abandn(void) {
        iscraft=0; /* Gallileo disappears */\r
        /* Resupply ship */\r
        condit=IHDOCKED;\r
-       for (l = 1; l <= ndevice; l++) damage[l] = 0.0;\r
-       damage[DSHUTTL] = -1;\r
+       for (l = 1; l <= NDEVICES; l++) game.damage[l] = 0.0;\r
+       game.damage[DSHUTTL] = -1;\r
        energy = inenrg = 3000.0;\r
        shield = inshld = 1250.0;\r
        torps = intorps = 6;\r
@@ -217,27 +201,27 @@ void setup(void) {
        nprobes = (int)(3.0*Rand() + 2.0);      /* Give them 2-4 of these wonders */\r
        warpfac = 5.0;\r
        wfacsq = warpfac * warpfac;\r
-       for (i=0; i <= ndevice; i++) damage[i] = 0.0;\r
+       for (i=0; i <= NDEVICES; i++) game.damage[i] = 0.0;\r
        // Set up assorted game parameters\r
        batx = baty = 0;\r
-       state.date = indate = 100.0*(int)(31.0*Rand()+20.0);\r
-       state.killk = state.killc = nkinks = nhelp = resting = casual = state.nromkl = 0;\r
-       isatb = iscate = imine = icrystl = icraft = state.nsckill = state.nplankl = 0;\r
+       game.state.date = indate = 100.0*(int)(31.0*Rand()+20.0);\r
+       game.state.killk = game.state.killc = nkinks = nhelp = resting = casual = game.state.nromkl = 0;\r
+       isatb = iscate = imine = icrystl = icraft = game.state.nsckill = game.state.nplankl = 0;\r
        iscraft = 1;\r
        landed = -1;\r
        alive = 1;\r
        docfac = 0.25;\r
        for (i = 1; i <= 8; i++)\r
-               for (j = 1; j <= 8; j++) state.newstuf[i][j] = starch[i][j] = 0;\r
+               for (j = 1; j <= 8; j++) game.state.newstuf[i][j] = game.starch[i][j] = 0;\r
        // Initialize times for extraneous events\r
-       future[FSNOVA] = state.date + expran(0.5 * intime);\r
-       future[FTBEAM] = state.date + expran(1.5 * (intime / state.remcom));\r
-       future[FSNAP] = state.date + 1.0 + Rand(); // Force an early snapshot\r
-       future[FBATTAK] = state.date + expran(0.3*intime);\r
-       future[FCDBAS] = 1e30;\r
-       future[FSCMOVE] = state.nscrem ? state.date+0.2777 : 1e30;\r
-       future[FSCDBAS] = 1e30;\r
-       future[FDSPROB] = 1e30;\r
+       game.future[FSNOVA] = game.state.date + expran(0.5 * intime);\r
+       game.future[FTBEAM] = game.state.date + expran(1.5 * (intime / game.state.remcom));\r
+       game.future[FSNAP] = game.state.date + 1.0 + Rand(); // Force an early snapshot\r
+       game.future[FBATTAK] = game.state.date + expran(0.3*intime);\r
+       game.future[FCDBAS] = 1e30;\r
+       game.future[FSCMOVE] = game.state.nscrem ? game.state.date+0.2777 : 1e30;\r
+       game.future[FSCDBAS] = 1e30;\r
+       game.future[FDSPROB] = 1e30;\r
        // Starchart is functional\r
        stdamtim = 1e30;\r
        // Put stars in the galaxy\r
@@ -246,40 +230,40 @@ void setup(void) {
                for (j=1; j<=8; j++) {\r
                        int k = Rand()*9.0 + 1.0;\r
                        instar += k;\r
-                       state.galaxy[i][j] = k;\r
+                       game.state.galaxy[i][j] = k;\r
                }\r
        // Locate star bases in galaxy\r
        for (i = 1; i <= inbase; i++) {\r
                int contflag;\r
                do {\r
                        do iran8(&ix, &iy);\r
-                       while (state.galaxy[ix][iy] >= 10);\r
+                       while (game.state.galaxy[ix][iy] >= 10);\r
                        contflag = FALSE;\r
                        for (j = i-1; j > 0; j--) {\r
                                /* Improved placement algorithm to spread out bases */\r
-                               double distq = square(ix-state.baseqx[j]) + square(iy-state.baseqy[j]);\r
+                               double distq = square(ix-game.state.baseqx[j]) + square(iy-game.state.baseqy[j]);\r
                                if (distq < 6.0*(6-inbase) && Rand() < 0.75) {\r
                                        contflag = TRUE;\r
 #ifdef DEBUG\r
-                                       printf("DEBUG: Abandoning base #%d at %d-%d\n", i, ix, iy);\r
+                                       proutn("DEBUG: Abandoning base #%d at %d-%d\n", i, ix, iy);\r
 #endif\r
                                        break;\r
                                }\r
 #ifdef DEBUG\r
                                else if (distq < 6.0 * (6-inbase)) {\r
-                                       printf("DEBUG: saving base #%d, close to #%d\n", i, j);\r
+                                       proutn("DEBUG: saving base #%d, close to #%d\n", i, j);\r
                                }\r
 #endif\r
                        }\r
                } while (contflag);\r
                        \r
-               state.baseqx[i] = ix;\r
-               state.baseqy[i] = iy;\r
-               starch[ix][iy] = -1;\r
-               state.galaxy[ix][iy] += 10;\r
+               game.state.baseqx[i] = ix;\r
+               game.state.baseqy[i] = iy;\r
+               game.starch[ix][iy] = -1;\r
+               game.state.galaxy[ix][iy] += 10;\r
        }\r
        // Position ordinary Klingon Battle Cruisers\r
-       krem = inkling - incom - state.nscrem;\r
+       krem = inkling - incom - game.state.nscrem;\r
        klumper = 0.25*skill*(9.0-length)+1.0;\r
        if (klumper > 9) klumper = 9; // Can't have more than 9 in quadrant\r
        do {\r
@@ -289,8 +273,8 @@ void setup(void) {
                krem -= klump;\r
                klump *= 100;\r
                do iran8(&ix, &iy);\r
-               while (state.galaxy[ix][iy] + klump >= 1000);\r
-               state.galaxy[ix][iy] += klump;\r
+               while (game.state.galaxy[ix][iy] + klump >= 1000);\r
+               game.state.galaxy[ix][iy] += klump;\r
        } while (krem > 0);\r
        // Position Klingon Commander Ships\r
 #ifdef DEBUG\r
@@ -301,47 +285,47 @@ void setup(void) {
                        do { /* IF debugging, put commanders by bases, always! */\r
 #ifdef DEBUG\r
                                if (idebug && klumper <= inbase) {\r
-                                       ix = state.baseqx[klumper];\r
-                                       iy = state.baseqy[klumper];\r
+                                       ix = game.state.baseqx[klumper];\r
+                                       iy = game.state.baseqy[klumper];\r
                                        klumper++;\r
                                }\r
                                else\r
 #endif\r
                                        iran8(&ix, &iy);\r
                        }\r
-                       while ((state.galaxy[ix][iy] < 99 && Rand() < 0.75)||\r
-                                  state.galaxy[ix][iy]>899);\r
+                       while ((game.state.galaxy[ix][iy] < 99 && Rand() < 0.75)||\r
+                                  game.state.galaxy[ix][iy]>899);\r
                        // check for duplicate\r
                        for (j = 1; j < i; j++)\r
-                               if (state.cx[j]==ix && state.cy[j]==iy) break;\r
+                               if (game.state.cx[j]==ix && game.state.cy[j]==iy) break;\r
                } while (j < i);\r
-               state.galaxy[ix][iy] += 100;\r
-               state.cx[i] = ix;\r
-               state.cy[i] = iy;\r
+               game.state.galaxy[ix][iy] += 100;\r
+               game.state.cx[i] = ix;\r
+               game.state.cy[i] = iy;\r
        }\r
        // Locate planets in galaxy\r
-       for (i = 1; i <= inplan; i++) {\r
+       for (i = 0; i < inplan; i++) {\r
                do iran8(&ix, &iy);\r
-               while (state.newstuf[ix][iy] > 0);\r
-               state.newstuf[ix][iy] = 1;\r
-               state.plnets[i].x = ix;\r
-               state.plnets[i].y = iy;\r
-               state.plnets[i].pclass = Rand()*3.0 + 1.0; // Planet class M N or O\r
-               state.plnets[i].crystals = 1.5*Rand();          // 1 in 3 chance of crystals\r
-               state.plnets[i].known = 0;\r
+               while (game.state.newstuf[ix][iy] > 0);\r
+               game.state.newstuf[ix][iy] = 1;\r
+               game.state.plnets[i].x = ix;\r
+               game.state.plnets[i].y = iy;\r
+               game.state.plnets[i].pclass = Rand()*3.0; // Planet class M N or O\r
+               game.state.plnets[i].crystals = 1.5*Rand();             // 1 in 3 chance of crystals\r
+               game.state.plnets[i].known = unknown;\r
        }\r
        // Locate Romulans\r
-       for (i = 1; i <= state.nromrem; i++) {\r
+       for (i = 1; i <= game.state.nromrem; i++) {\r
                iran8(&ix, &iy);\r
-               state.newstuf[ix][iy] += 10;\r
+               game.state.newstuf[ix][iy] += 10;\r
        }\r
        // Locate the Super Commander\r
-       if (state.nscrem > 0) {\r
+       if (game.state.nscrem > 0) {\r
                do iran8(&ix, &iy);\r
-               while (state.galaxy[ix][iy] >= 900);\r
-               state.isx = ix;\r
-               state.isy = iy;\r
-               state.galaxy[ix][iy] += 100;\r
+               while (game.state.galaxy[ix][iy] >= 900);\r
+               game.state.isx = ix;\r
+               game.state.isy = iy;\r
+               game.state.galaxy[ix][iy] += 100;\r
        }\r
        // Place thing (in tournament game, thingx == -1, don't want one!)\r
        if (Rand() < 0.1 && thingx != -1) {\r
@@ -353,40 +337,42 @@ void setup(void) {
 \r
 //     idate = date;\r
        skip(3);\r
-       state.snap = 0;\r
+       game.state.snap = 0;\r
                \r
        if (skill == 1) {\r
-               printf("It is stardate %d. The Federation is being attacked by\n",\r
-                          (int)state.date);\r
-               printf("a deadly Klingon invasion force. As captain of the United\n"\r
-                          "Starship U.S.S. Enterprise, it is your mission to seek out\n"\r
-                          "and destroy this invasion force of %d battle cruisers.\n",\r
+               prout("It is stardate %d. The Federation is being attacked by",\r
+                          (int)game.state.date);\r
+               prout("a deadly Klingon invasion force. As captain of the United");\r
+               prout("Starship U.S.S. Enterprise, it is your mission to seek out");\r
+               prout("and destroy this invasion force of %d battle cruisers.",\r
                           inkling);\r
-               printf("You have an initial allotment of %d stardates to complete\n"\r
-                          "your mission.  As you proceed you may be given more time.\n\n"\r
-                          "You will have %d supporting starbases.\n"\r
-                          "Starbase locations-  ",\r
-                          (int)intime, inbase);\r
+               prout("You have an initial allotment of %d stardates to complete", (int)intime);\r
+               prout("your mission.  As you proceed you may be given more time.");\r
+               prout("");\r
+               prout("You will have %d supporting starbases.", inbase);\r
+               proutn("Starbase locations-  ");\r
        }\r
        else {\r
-               printf("Stardate %d.\n\n"\r
-                          "%d Klingons.\nAn unknown number of Romulans\n",\r
-                          (int)state.date, inkling);\r
-               if (state.nscrem) printf("and one (GULP) Super-Commander.\n");\r
-               printf("%d stardates\n%d starbases in  ",(int)intime, inbase);\r
+               prout("Stardate %d.", (int)game.state.date);\r
+               prout("");\r
+               prout("%d Klingons.", inkling);\r
+               prout("An unknown number of Romulans.");\r
+               if (game.state.nscrem) prout("and one (GULP) Super-Commander.");\r
+                       prout("%d stardates.",(int)intime);\r
+                       proutn("%d starbases in ", inbase);\r
        }\r
        for (i = 1; i <= inbase; i++) {\r
-               cramlc(0, state.baseqx[i], state.baseqy[i]);\r
-               if (i < inbase) proutn("  ");\r
+               proutn(cramlc(0, game.state.baseqx[i], game.state.baseqy[i]));\r
+               proutn("  ");\r
        }\r
        skip(2);\r
-       proutn("The Enterprise is currently in");\r
-       cramlc(1, quadx, quady);\r
+       proutn("The Enterprise is currently in ");\r
+       proutn(cramlc(quadrant, quadx, quady));\r
        proutn(" ");\r
-       cramlc(2, sectx, secty);\r
+        proutn(cramlc(sector, sectx, secty));\r
        skip(2);\r
        prout("Good Luck!");\r
-       if (state.nscrem) proutn("  YOU'LL NEED IT.");\r
+       if (game.state.nscrem) proutn("  YOU'LL NEED IT.");\r
        skip(1);\r
        newqad(0);\r
        if (nenhere) shldup=1.0;\r
@@ -421,7 +407,7 @@ int choose(void) {
                if (isit("frozen")) {\r
                        thaw();\r
                        chew();\r
-                       if (*passwd==0) continue;\r
+                       if (*game.passwd==0) continue;\r
                        randomize();\r
                        Rand(); Rand(); Rand(); Rand();\r
                        if (!alldone) thawed = 1; // No plaque if not finished\r
@@ -463,54 +449,54 @@ int choose(void) {
        }\r
        while (TRUE) {\r
                scan();\r
-               strcpy(passwd, citem);\r
+               strcpy(game.passwd, citem);\r
                chew();\r
-               if (*passwd != 0) break;\r
+               if (*game.passwd != 0) break;\r
                proutn("Please type in a secret password-");\r
        }\r
 #ifdef DEBUG\r
-       if (strcmp(passwd, "debug")==0) idebug = 1;\r
+       if (strcmp(game.passwd, "debug")==0) idebug = 1;\r
 #endif\r
 \r
        // Use parameters to generate initial values of things\r
        damfac = 0.5 * skill;\r
-       state.rembase = 3.0*Rand()+2.0;\r
-       inbase = state.rembase;\r
+       game.state.rembase = 3.0*Rand()+2.0;\r
+       inbase = game.state.rembase;\r
        inplan = (PLNETMAX/2) + (PLNETMAX/2+1)*Rand();\r
-       state.nromrem = (2.0+Rand())*skill;\r
-       state.nscrem = (skill > 2? 1 : 0);\r
-       state.remtime = 7.0 * length;\r
-       intime = state.remtime;\r
-       state.remkl = 2.0*intime*((skill+1 - 2*Rand())*skill*0.1+.15);\r
-       inkling = state.remkl;\r
+       game.state.nromrem = (2.0+Rand())*skill;\r
+       game.state.nscrem = (skill > 2? 1 : 0);\r
+       game.state.remtime = 7.0 * length;\r
+       intime = game.state.remtime;\r
+       game.state.remkl = 2.0*intime*((skill+1 - 2*Rand())*skill*0.1+.15);\r
+       inkling = game.state.remkl;\r
        incom = skill + 0.0625*inkling*Rand();\r
-       state.remcom= min(10, incom);\r
-       incom = state.remcom;\r
-       state.remres = (inkling+4*incom)*intime;\r
-       inresor = state.remres;\r
+       game.state.remcom= min(10, incom);\r
+       incom = game.state.remcom;\r
+       game.state.remres = (inkling+4*incom)*intime;\r
+       inresor = game.state.remres;\r
        if (inkling > 50) {\r
-               inbase = (state.rembase += 1);\r
+               inbase = (game.state.rembase += 1);\r
        }\r
        return FALSE;\r
 }\r
 \r
 void dropin(int iquad, int *ix, int *iy) {\r
        do iran10(ix, iy);\r
-       while (frozen.quad[*ix][*iy] != IHDOT);\r
-       frozen.quad[*ix][*iy] = iquad;\r
+       while (game.quad[*ix][*iy] != IHDOT);\r
+       game.quad[*ix][*iy] = iquad;\r
 }\r
 \r
 void newcnd(void) {\r
        condit = IHGREEN;\r
        if (energy < 1000.0) condit = IHYELLOW;\r
-       if (state.galaxy[quadx][quady] > 99 || state.newstuf[quadx][quady] > 9)\r
+       if (game.state.galaxy[quadx][quady] > 99 || game.state.newstuf[quadx][quady] > 9)\r
                condit = IHRED;\r
 }\r
 \r
 \r
 void newqad(int shutup) {\r
-       int quadnum = state.galaxy[quadx][quady];\r
-       int newnum = state.newstuf[quadx][quady];\r
+       int quadnum = game.state.galaxy[quadx][quady];\r
+       int newnum = game.state.newstuf[quadx][quady];\r
        int i, j, ix, iy, nplan;\r
 \r
        iattak = 1;\r
@@ -536,7 +522,7 @@ void newqad(int shutup) {
        }\r
        // Clear quadrant\r
        for (i=1; i <= 10; i++)\r
-               for (j=1; j <= 10; j++) frozen.quad[i][j] = IHDOT;\r
+               for (j=1; j <= 10; j++) game.quad[i][j] = IHDOT;\r
        // cope with supernova\r
        if (quadnum > 999) {\r
                return;\r
@@ -547,27 +533,27 @@ void newqad(int shutup) {
        nenhere = klhere + irhere;\r
 \r
        // Position Starship\r
-       frozen.quad[sectx][secty] = ship;\r
+       game.quad[sectx][secty] = ship;\r
 \r
        // Decide if quadrant needs a Tholian\r
        if ((skill < 3 && Rand() <= 0.02) ||   /* Lighten up if skill is low */\r
                (skill == 3 && Rand() <= 0.05) ||\r
                (skill > 3 && Rand() <= 0.08)\r
 #ifdef DEBUG\r
-               || strcmp(passwd, "tholianx")==0\r
+               || strcmp(game.passwd, "tholianx")==0\r
 #endif\r
                ) {\r
                do {\r
                        ithx = Rand() > 0.5 ? 10 : 1;\r
                        ithy = Rand() > 0.5 ? 10 : 1;\r
-               } while (frozen.quad[ithx][ithy] != IHDOT);\r
-               frozen.quad[ithx][ithy] = IHT;\r
+               } while (game.quad[ithx][ithy] != IHDOT);\r
+               game.quad[ithx][ithy] = IHT;\r
                ithere = 1;\r
                /* Reserve unocupied corners */\r
-               if (frozen.quad[1][1]==IHDOT) frozen.quad[1][1] = 'X';\r
-               if (frozen.quad[1][10]==IHDOT) frozen.quad[1][10] = 'X';\r
-               if (frozen.quad[10][1]==IHDOT) frozen.quad[10][1] = 'X';\r
-               if (frozen.quad[10][10]==IHDOT) frozen.quad[10][10] = 'X';\r
+               if (game.quad[1][1]==IHDOT) game.quad[1][1] = 'X';\r
+               if (game.quad[1][10]==IHDOT) game.quad[1][10] = 'X';\r
+               if (game.quad[10][1]==IHDOT) game.quad[10][1] = 'X';\r
+               if (game.quad[10][10]==IHDOT) game.quad[10][10] = 'X';\r
        }\r
 \r
        if (quadnum >= 100) {\r
@@ -575,25 +561,25 @@ void newqad(int shutup) {
                quadnum -= 100*klhere;\r
                for (i = 1; i <= klhere; i++) {\r
                        dropin(IHK, &ix, &iy);\r
-                       kx[i] = ix;\r
-                       ky[i] = iy;\r
-                       kdist[i] = kavgd[i] = sqrt(square(sectx-ix) + square(secty-iy));\r
-                       kpower[i] = Rand()*150.0 +300.0 +25.0*skill;\r
+                       game.kx[i] = ix;\r
+                       game.ky[i] = iy;\r
+                       game.kdist[i] = game.kavgd[i] = sqrt(square(sectx-ix) + square(secty-iy));\r
+                       game.kpower[i] = Rand()*150.0 +300.0 +25.0*skill;\r
                }\r
                // If we need a commander, promote a Klingon\r
-               for (i = 1; i <= state.remcom ; i++) \r
-                       if (state.cx[i]==quadx && state.cy[i]==quady) break;\r
+               for (i = 1; i <= game.state.remcom ; i++) \r
+                       if (game.state.cx[i]==quadx && game.state.cy[i]==quady) break;\r
                        \r
-               if (i <= state.remcom) {\r
-                       frozen.quad[ix][iy] = IHC;\r
-                       kpower[klhere] = 950.0+400.0*Rand()+50.0*skill;\r
+               if (i <= game.state.remcom) {\r
+                       game.quad[ix][iy] = IHC;\r
+                       game.kpower[klhere] = 950.0+400.0*Rand()+50.0*skill;\r
                        comhere = 1;\r
                }\r
 \r
                // If we need a super-commander, promote a Klingon\r
-               if (quadx == state.isx && quady == state.isy) {\r
-                       frozen.quad[kx[1]][ky[1]] = IHS;\r
-                       kpower[1] = 1175.0 + 400.0*Rand() + 125.0*skill;\r
+               if (quadx == game.state.isx && quady == game.state.isy) {\r
+                       game.quad[game.kx[1]][game.ky[1]] = IHS;\r
+                       game.kpower[1] = 1175.0 + 400.0*Rand() + 125.0*skill;\r
                        iscate = 1;\r
                        ishere = 1;\r
                }\r
@@ -601,10 +587,10 @@ void newqad(int shutup) {
        // Put in Romulans if needed\r
        for (i = klhere+1; i <= nenhere; i++) {\r
                dropin(IHR, &ix, &iy);\r
-               kx[i] = ix;\r
-               ky[i] = iy;\r
-               kdist[i] = kavgd[i] = sqrt(square(sectx-ix) + square(secty-iy));\r
-               kpower[i] = Rand()*400.0 + 450.0 + 50.0*skill;\r
+               game.kx[i] = ix;\r
+               game.ky[i] = iy;\r
+               game.kdist[i] = game.kavgd[i] = sqrt(square(sectx-ix) + square(secty-iy));\r
+               game.kpower[i] = Rand()*400.0 + 450.0 + 50.0*skill;\r
        }\r
        sortkl();\r
        // If quadrant needs a starbase, put it in\r
@@ -615,9 +601,9 @@ void newqad(int shutup) {
        \r
        if (nplan) {\r
                // If quadrant needs a planet, put it in\r
-               for (i=1; i <= inplan; i++)\r
-                       if (state.plnets[i].x == quadx && state.plnets[i].y == quady) break;\r
-               if (i <= inplan) {\r
+               for (i=0; i < inplan; i++)\r
+                       if (game.state.plnets[i].x == quadx && game.state.plnets[i].y == quady) break;\r
+               if (i < inplan) {\r
                        iplnet = i;\r
                        dropin(IHP, &plnetx, &plnety);\r
                }\r
@@ -630,7 +616,7 @@ void newqad(int shutup) {
        // Check for RNZ\r
        if (irhere > 0 && klhere == 0 && basex == 0) {\r
                neutz = 1;\r
-               if (damage[DRADIO] <= 0.0) {\r
+               if (game.damage[DRADIO] <= 0.0) {\r
                        skip(1);\r
                        prout("LT. Uhura- \"Captain, an urgent message.");\r
                        prout("  I'll put it on audio.\"  CLICK");\r
@@ -645,7 +631,7 @@ void newqad(int shutup) {
                if (thingx == quadx && thingy == quady) {\r
                        dropin(IHQUEST, &ix, &iy);\r
                        thingx = thingy = 0; // Transient\r
-                       if (damage[DSRSENS] == 0.0) {\r
+                       if (game.damage[DSRSENS] == 0.0) {\r
                                skip(1);\r
                                prout("MR. SPOCK- \"Captain, this is most unusual.");\r
                                prout("    Please examine your short-range scan.\"");\r
@@ -659,10 +645,10 @@ void newqad(int shutup) {
 \r
        // Take out X's in corners if Tholian present\r
        if (ithere) {\r
-               if (frozen.quad[1][1]=='X') frozen.quad[1][1] = IHDOT;\r
-               if (frozen.quad[1][10]=='X') frozen.quad[1][10] = IHDOT;\r
-               if (frozen.quad[10][1]=='X') frozen.quad[10][1] = IHDOT;\r
-               if (frozen.quad[10][10]=='X') frozen.quad[10][10] = IHDOT;\r
+               if (game.quad[1][1]=='X') game.quad[1][1] = IHDOT;\r
+               if (game.quad[1][10]=='X') game.quad[1][10] = IHDOT;\r
+               if (game.quad[10][1]=='X') game.quad[10][1] = IHDOT;\r
+               if (game.quad[10][10]=='X') game.quad[10][10] = IHDOT;\r
        }               \r
 }\r
 \r
@@ -677,23 +663,23 @@ void sortkl(void) {
        do {\r
                sw = FALSE;\r
                for (j = 1; j < nenhere; j++)\r
-                       if (kdist[j] > kdist[j+1]) {\r
+                       if (game.kdist[j] > game.kdist[j+1]) {\r
                                sw = TRUE;\r
-                               t = kdist[j];\r
-                               kdist[j] = kdist[j+1];\r
-                               kdist[j+1] = t;\r
-                               t = kavgd[j];\r
-                               kavgd[j] = kavgd[j+1];\r
-                               kavgd[j+1] = t;\r
-                               k = kx[j];\r
-                               kx[j] = kx[j+1];\r
-                               kx[j+1] = k;\r
-                               k = ky[j];\r
-                               ky[j] = ky[j+1];\r
-                               ky[j+1] = k;\r
-                               t = kpower[j];\r
-                               kpower[j] = kpower[j+1];\r
-                               kpower[j+1] = t;\r
+                               t = game.kdist[j];\r
+                               game.kdist[j] = game.kdist[j+1];\r
+                               game.kdist[j+1] = t;\r
+                               t = game.kavgd[j];\r
+                               game.kavgd[j] = game.kavgd[j+1];\r
+                               game.kavgd[j+1] = t;\r
+                               k = game.kx[j];\r
+                               game.kx[j] = game.kx[j+1];\r
+                               game.kx[j+1] = k;\r
+                               k = game.ky[j];\r
+                               game.ky[j] = game.ky[j+1];\r
+                               game.ky[j+1] = k;\r
+                               t = game.kpower[j];\r
+                               game.kpower[j] = game.kpower[j+1];\r
+                               game.kpower[j+1] = t;\r
                        }\r
        } while (sw);\r
 }\r