Move more globals into the game state block.
[open-adventure.git] / main.c
diff --git a/main.c b/main.c
index b3310bb535e5076b12aac31cc57e4271a69119b5..3239fc32d6f05ab4dd088aaee269bf53e6f194f0 100644 (file)
--- a/main.c
+++ b/main.c
@@ -14,8 +14,8 @@
 
 struct game_t game;
 
 
 struct game_t game;
 
-long ABB[186], ATLOC[186], DFLAG,
-               FIXED[NOBJECTS+1], HOLDNG,
+long ABB[186], ATLOC[186],
+               FIXED[NOBJECTS+1],
                LINK[NOBJECTS*2 + 1], LNLENG, LNPOSN,
                PARMS[26], PLACE[NOBJECTS+1],
                SETUP = 0;
                LINK[NOBJECTS*2 + 1], LNLENG, LNPOSN,
                PARMS[26], PLACE[NOBJECTS+1],
                SETUP = 0;
@@ -25,13 +25,11 @@ long AMBER, ATTACK, AXE, BACK, BATTER, BEAR, BIRD, BLOOD,
                BOTTLE, CAGE, CAVE, CAVITY, CHAIN, CHASM, CHEST,
                CLAM, CLSHNT, COINS, DALTLC,
                DOOR, DPRSSN, DRAGON, DWARF, EGGS,
                BOTTLE, CAGE, CAVE, CAVITY, CHAIN, CHASM, CHEST,
                CLAM, CLSHNT, COINS, DALTLC,
                DOOR, DPRSSN, DRAGON, DWARF, EGGS,
-               EMRALD, ENTER, ENTRNC, FIND, FISSUR, FOOBAR, FOOD,
+               EMRALD, ENTER, ENTRNC, FIND, FISSUR, FOOD,
                GRATE, HINT, HINTED[21], HINTLC[21],
                GRATE, HINT, HINTED[21], HINTLC[21],
-               I, INVENT, IGO, IWEST, J, JADE, K, K2, KEYS, KK,
-               KNFLOC, KNIFE, KQ, L, LAMP, LIMIT, LL,
-               LMWARN, LOC, LOCK, LOOK,
-               MAGZIN, MAXDIE, MAXTRS,
-               MESSAG, MIRROR, MXSCOR,
+               I, INVENT, IGO, J, JADE, K, K2, KEYS, KK,
+               KNIFE, KQ, L, LAMP, LL, LOC, LOCK, LOOK,
+               MAGZIN, MAXDIE, MAXTRS, MESSAG, MIRROR, MXSCOR,
                NEWLOC, NOVICE, NUGGET, NUL, NUMDIE, OBJ,
                OGRE, OIL, OLDOBJ, OYSTER,
                PANIC, PEARL, PILLOW, PLANT, PLANT2, PROP[NOBJECTS+1], PYRAM,
                NEWLOC, NOVICE, NUGGET, NUL, NUMDIE, OBJ,
                OGRE, OIL, OLDOBJ, OYSTER,
                PANIC, PEARL, PILLOW, PLANT, PLANT2, PROP[NOBJECTS+1], PYRAM,
@@ -97,7 +95,7 @@ int main(int argc, char *argv[]) {
  *  game.closed says whether we're all the way closed
  *  game.closng says whether it's closing time yet
  *  CLSHNT says whether he's read the clue in the endgame
  *  game.closed says whether we're all the way closed
  *  game.closng says whether it's closing time yet
  *  CLSHNT says whether he's read the clue in the endgame
- *  LMWARN says whether he's been warned about lamp going dim
+ *  game.lmwarn says whether he's been warned about lamp going dim
  *  NOVICE says whether he asked for instructions at start-up
  *  PANIC says whether he's found out he's trapped in the cave
  *  game.wzdark says whether the loc he's leaving was dark */
  *  NOVICE says whether he asked for instructions at start-up
  *  PANIC says whether he's found out he's trapped in the cave
  *  game.wzdark says whether the loc he's leaving was dark */
@@ -135,8 +133,8 @@ L1: SETUP= -1;
        NOVICE=YES(stdin, 65,1,0);
        NEWLOC=1;
        LOC=1;
        NOVICE=YES(stdin, 65,1,0);
        NEWLOC=1;
        LOC=1;
-       LIMIT=330;
-       if(NOVICE)LIMIT=1000;
+       game.limit=330;
+       if(NOVICE)game.limit=1000;
 
        if (logfp)
            fprintf(logfp, "seed %ld\n", seedval);
 
        if (logfp)
            fprintf(logfp, "seed %ld\n", seedval);
@@ -199,16 +197,16 @@ L74:      LOC=NEWLOC;
  *  end in maze, but c'est la vie.  They'll wait for him outside the dead end. */
 
        if(LOC == 0 || FORCED(LOC) || CNDBIT(NEWLOC,3)) goto L2000;
  *  end in maze, but c'est la vie.  They'll wait for him outside the dead end. */
 
        if(LOC == 0 || FORCED(LOC) || CNDBIT(NEWLOC,3)) goto L2000;
-       if(DFLAG != 0) goto L6000;
-       if(INDEEP(LOC))DFLAG=1;
+       if(game.dflag != 0) goto L6000;
+       if(INDEEP(LOC))game.dflag=1;
         goto L2000;
 
 /*  When we encounter the first dwarf, we kill 0, 1, or 2 of the 5 dwarves.  If
  *  any of the survivors is at loc, replace him with the alternate. */
 
         goto L2000;
 
 /*  When we encounter the first dwarf, we kill 0, 1, or 2 of the 5 dwarves.  If
  *  any of the survivors is at loc, replace him with the alternate. */
 
-L6000: if(DFLAG != 1) goto L6010;
+L6000: if(game.dflag != 1) goto L6010;
        if(!INDEEP(LOC) || (PCT(95) && (!CNDBIT(LOC,4) || PCT(85)))) goto L2000;
        if(!INDEEP(LOC) || (PCT(95) && (!CNDBIT(LOC,4) || PCT(85)))) goto L2000;
-       DFLAG=2;
+       game.dflag=2;
        for (I=1; I<=2; I++) {
        J=1+randrange(NDWARVES-1);
        if(PCT(50))game.dloc[J]=0;
        for (I=1; I<=2; I++) {
        J=1+randrange(NDWARVES-1);
        if(PCT(50))game.dloc[J]=0;
@@ -300,8 +298,8 @@ L6025:      RSPEAK(186);
 L6027: game.dtotal=game.dtotal+1;
        if(game.odloc[I] != game.dloc[I]) goto L6030;
        ATTACK=ATTACK+1;
 L6027: game.dtotal=game.dtotal+1;
        if(game.odloc[I] != game.dloc[I]) goto L6030;
        ATTACK=ATTACK+1;
-       if(KNFLOC >= 0)KNFLOC=LOC;
-       if(randrange(1000) < 95*(DFLAG-2))STICK=STICK+1;
+       if(game.knfloc >= 0)game.knfloc=LOC;
+       if(randrange(1000) < 95*(game.dflag-2))STICK=STICK+1;
 L6030: /*etc*/ ;
        } /* end loop */
 
 L6030: /*etc*/ ;
        } /* end loop */
 
@@ -313,7 +311,7 @@ L6030:      /*etc*/ ;
        SETPRM(1,game.dtotal,0);
        RSPEAK(4+1/game.dtotal);
        if(ATTACK == 0) goto L2000;
        SETPRM(1,game.dtotal,0);
        RSPEAK(4+1/game.dtotal);
        if(ATTACK == 0) goto L2000;
-       if(DFLAG == 2)DFLAG=3;
+       if(game.dflag == 2)game.dflag=3;
        SETPRM(1,ATTACK,0);
        K=6;
        if(ATTACK > 1)K=250;
        SETPRM(1,ATTACK,0);
        K=6;
        if(ATTACK > 1)K=250;
@@ -413,15 +411,15 @@ L2603:    if(!game.closed) goto L2605;
        if(TOTING(I) && PROP[I] < 0)PROP[I]= -1-PROP[I];
        } /* end loop */
 L2605: game.wzdark=DARK(0);
        if(TOTING(I) && PROP[I] < 0)PROP[I]= -1-PROP[I];
        } /* end loop */
 L2605: game.wzdark=DARK(0);
-       if(KNFLOC > 0 && KNFLOC != LOC)KNFLOC=0;
+       if(game.knfloc > 0 && game.knfloc != LOC)game.knfloc=0;
        I=0;
        if (!GETIN(cmdin, WD1,WD1X,WD2,WD2X))
            return false;
 
        I=0;
        if (!GETIN(cmdin, WD1,WD1X,WD2,WD2X))
            return false;
 
-/*  Every input, check "FOOBAR" flag.  If zero, nothing's going on.  If pos,
+/*  Every input, check "game.foobar" flag.  If zero, nothing's going on.  If pos,
  *  make neg.  If neg, he skipped a word, so make it zero. */
 
  *  make neg.  If neg, he skipped a word, so make it zero. */
 
-L2607: FOOBAR=(FOOBAR>0 ? -FOOBAR : 0);
+L2607: game.foobar=(game.foobar>0 ? -game.foobar : 0);
        TURNS=TURNS+1;
        if(TURNS == THRESH) {
        SPEAK(TTEXT[TRNDEX]);
        TURNS=TURNS+1;
        if(TURNS == THRESH) {
        SPEAK(TTEXT[TRNDEX]);
@@ -437,11 +435,11 @@ L2607:    FOOBAR=(FOOBAR>0 ? -FOOBAR : 0);
        if(game.clock1 == 0) goto L10000;
        if(game.clock1 < 0)game.clock2=game.clock2-1;
        if(game.clock2 == 0) goto L11000;
        if(game.clock1 == 0) goto L10000;
        if(game.clock1 < 0)game.clock2=game.clock2-1;
        if(game.clock2 == 0) goto L11000;
-       if(PROP[LAMP] == 1)LIMIT=LIMIT-1;
-       if(LIMIT <= 30 && HERE(BATTER) && PROP[BATTER] == 0 && HERE(LAMP)) goto
+       if(PROP[LAMP] == 1)game.limit=game.limit-1;
+       if(game.limit <= 30 && HERE(BATTER) && PROP[BATTER] == 0 && HERE(LAMP)) goto
                L12000;
                L12000;
-       if(LIMIT == 0) goto L12400;
-       if(LIMIT <= 30) goto L12200;
+       if(game.limit == 0) goto L12400;
+       if(game.limit <= 30) goto L12200;
 L19999: K=43;
        if(LIQLOC(LOC) == WATER)K=70;
        V1=VOCAB(WD1,-1);
 L19999: K=43;
        if(LIQLOC(LOC) == WATER)K=70;
        V1=VOCAB(WD1,-1);
@@ -454,8 +452,8 @@ L19999: K=43;
 L2610: if(V1 == 1000+CAGE && V2 == 1000+BIRD && HERE(CAGE) && HERE(BIRD))
                WD1=MAKEWD(301200308);
 L2620: if(WD1 == MAKEWD(23051920)) {
 L2610: if(V1 == 1000+CAGE && V2 == 1000+BIRD && HERE(CAGE) && HERE(BIRD))
                WD1=MAKEWD(301200308);
 L2620: if(WD1 == MAKEWD(23051920)) {
-               IWEST=IWEST+1;
-               if(IWEST == 10)RSPEAK(17);
+               game.iwest=game.iwest+1;
+               if(game.iwest == 10)RSPEAK(17);
        }
        if(WD1 != MAKEWD( 715) || WD2 == 0) goto L2630;
        IGO=IGO+1;
        }
        if(WD1 != MAKEWD( 715) || WD2 == 0) goto L2630;
        IGO=IGO+1;
@@ -578,7 +576,7 @@ L30000: NEWLOC=NEWLOC-300;
  *  be used for actual motion, but can be spotted by "go back". */
 
 L30100: NEWLOC=99+100-LOC;     /* ESR: an instance of NOBJECTS? */
  *  be used for actual motion, but can be spotted by "go back". */
 
 L30100: NEWLOC=99+100-LOC;     /* ESR: an instance of NOBJECTS? */
-       if(HOLDNG == 0 || (HOLDNG == 1 && TOTING(EMRALD))) return true;
+       if(game.holdng == 0 || (game.holdng == 1 && TOTING(EMRALD))) return true;
        NEWLOC=LOC;
        RSPEAK(117);
        return true;
        NEWLOC=LOC;
        RSPEAK(117);
        return true;
@@ -759,7 +757,7 @@ L40010: HINTLC[HINT]=0;
        SETPRM(1,HINTS[HINT][2],HINTS[HINT][2]);
        RSPEAK(261);
        HINTED[HINT]=YES(cmdin,175,HINTS[HINT][4],54);
        SETPRM(1,HINTS[HINT][2],HINTS[HINT][2]);
        RSPEAK(261);
        HINTED[HINT]=YES(cmdin,175,HINTS[HINT][4],54);
-       if(HINTED[HINT] && LIMIT > 30)LIMIT=LIMIT+30*HINTS[HINT][2];
+       if(HINTED[HINT] && game.limit > 30)game.limit=game.limit+30*HINTS[HINT][2];
 L40020: HINTLC[HINT]=0;
 L40030:  goto L2602;
 
 L40020: HINTLC[HINT]=0;
 L40030:  goto L2602;
 
@@ -774,7 +772,7 @@ L40200: if(PLACE[BIRD] == LOC && TOTING(ROD) && OLDOBJ == BIRD) goto L40010;
 L40300: if(HERE(SNAKE) && !HERE(BIRD)) goto L40010;
         goto L40020;
 
 L40300: if(HERE(SNAKE) && !HERE(BIRD)) goto L40010;
         goto L40020;
 
-L40400: if(ATLOC[LOC] == 0 && ATLOC[game.oldloc] == 0 && ATLOC[game.oldlc2] == 0 && HOLDNG >
+L40400: if(ATLOC[LOC] == 0 && ATLOC[game.oldloc] == 0 && ATLOC[game.oldlc2] == 0 && game.holdng >
                1) goto L40010;
         goto L40020;
 
                1) goto L40010;
         goto L40020;
 
@@ -783,7 +781,7 @@ L40500: if(PROP[EMRALD] != -1 && PROP[PYRAM] == -1) goto L40010;
 
 L40600:  goto L40010;
 
 
 L40600:  goto L40010;
 
-L40700: if(DFLAG == 0) goto L40010;
+L40700: if(game.dflag == 0) goto L40010;
         goto L40020;
 
 L40800: if(ATLOC[LOC] == 0 && ATLOC[game.oldloc] == 0 && ATLOC[game.oldlc2] == 0) goto
         goto L40020;
 
 L40800: if(ATLOC[LOC] == 0 && ATLOC[game.oldloc] == 0 && ATLOC[game.oldlc2] == 0) goto
@@ -910,19 +908,19 @@ L11000: PROP[BOTTLE]=PUT(BOTTLE,115,1);
 L12000: RSPEAK(188);
        PROP[BATTER]=1;
        if(TOTING(BATTER))DROP(BATTER,LOC);
 L12000: RSPEAK(188);
        PROP[BATTER]=1;
        if(TOTING(BATTER))DROP(BATTER,LOC);
-       LIMIT=LIMIT+2500;
-       LMWARN=false;
+       game.limit=game.limit+2500;
+       game.lmwarn=false;
         goto L19999;
 
         goto L19999;
 
-L12200: if(LMWARN || !HERE(LAMP)) goto L19999;
-       LMWARN=true;
+L12200: if(game.lmwarn || !HERE(LAMP)) goto L19999;
+       game.lmwarn=true;
        SPK=187;
        if(PLACE[BATTER] == 0)SPK=183;
        if(PROP[BATTER] == 1)SPK=189;
        RSPEAK(SPK);
         goto L19999;
 
        SPK=187;
        if(PLACE[BATTER] == 0)SPK=183;
        if(PROP[BATTER] == 1)SPK=189;
        RSPEAK(SPK);
         goto L19999;
 
-L12400: LIMIT= -1;
+L12400: game.limit= -1;
        PROP[LAMP]=0;
        if(HERE(LAMP))RSPEAK(184);
         goto L19999;
        PROP[LAMP]=0;
        if(HERE(LAMP))RSPEAK(184);
         goto L19999;