LOC pulled into game structure block.
authorEric S. Raymond <esr@thyrsus.com>
Wed, 7 Jun 2017 11:50:09 +0000 (07:50 -0400)
committerEric S. Raymond <esr@thyrsus.com>
Wed, 7 Jun 2017 11:50:09 +0000 (07:50 -0400)
actions1.c
actions2.c
advent.h
funcs.h
main.c

index 56aded5de2f5565933439c50af5bb886870b9a38..7f06ead0f4cc729eedcff90d9ab47cb86e731b8b 100644 (file)
@@ -122,18 +122,18 @@ L5010:    if(WD2 > 0) return(2800);
         return(2600);
 
 L5100: if(K != GRATE) goto L5110;
-       if(LOC == 1 || LOC == 4 || LOC == 7)K=DPRSSN;
-       if(LOC > 9 && LOC < 15)K=ENTRNC;
+       if(game.loc == 1 || game.loc == 4 || game.loc == 7)K=DPRSSN;
+       if(game.loc > 9 && game.loc < 15)K=ENTRNC;
        if(K != GRATE) return(8);
-L5110: if(K == DWARF && ATDWRF(LOC) > 0) goto L5010;
-       if((LIQ(0) == K && HERE(BOTTLE)) || K == LIQLOC(LOC)) goto L5010;
+L5110: if(K == DWARF && ATDWRF(game.loc) > 0) goto L5010;
+       if((LIQ(0) == K && HERE(BOTTLE)) || K == LIQLOC(game.loc)) goto L5010;
        if(OBJ != OIL || !HERE(URN) || game.prop[URN] == 0) goto L5120;
        OBJ=URN;
         goto L5010;
 L5120: if(OBJ != PLANT || !AT(PLANT2) || game.prop[PLANT2] == 0) goto L5130;
        OBJ=PLANT2;
         goto L5010;
-L5130: if(OBJ != KNIFE || game.knfloc != LOC) goto L5140;
+L5130: if(OBJ != KNIFE || game.knfloc != game.loc) goto L5140;
        game.knfloc= -1;
        SPK=116;
         return(2011);
@@ -156,8 +156,8 @@ L5190:      if((VERB == FIND || VERB == INVENT) && WD2 <= 0) goto L5010;
 
 /*  Carry, no object given yet.  OK if only one object present. */
 
-L8010: if(game.atloc[LOC] == 0 || game.link[game.atloc[LOC]] != 0 || ATDWRF(LOC) > 0) return(8000);
-       OBJ=game.atloc[LOC];
+L8010: if(game.atloc[game.loc] == 0 || game.link[game.atloc[game.loc]] != 0 || ATDWRF(game.loc) > 0) return(8000);
+       OBJ=game.atloc[game.loc];
 
 /*  Transitive carry/drop are in separate file. */
 
@@ -220,7 +220,7 @@ L9046:      K=0;
        if(VERB == LOCK)SPK=61;
        if(SPK != 124) return(2011);
        DSTROY(CLAM);
-       DROP(OYSTER,LOC);
+       DROP(OYSTER,game.loc);
        DROP(PEARL,105);
         return(2011);
 
@@ -238,10 +238,10 @@ L9048:    if(VERB == LOCK) goto L9049;
 
 L9049: SPK=172;
        if(game.prop[CHAIN] != 0)SPK=34;
-       if(LOC != PLAC[CHAIN])SPK=173;
+       if(game.loc != PLAC[CHAIN])SPK=173;
        if(SPK != 172) return(2011);
        game.prop[CHAIN]=2;
-       if(TOTING(CHAIN))DROP(CHAIN,LOC);
+       if(TOTING(CHAIN))DROP(CHAIN,game.loc);
        game.fixed[CHAIN]= -1;
         return(2011);
 
@@ -292,7 +292,7 @@ L9090:      if((!TOTING(OBJ)) && (OBJ != ROD || !TOTING(ROD2)))SPK=29;
        if(OBJ != ROD || !TOTING(OBJ) || (!HERE(BIRD) && (game.closng || !AT(FISSUR))))
                return(2011);
        if(HERE(BIRD))SPK=206+MOD(game.prop[BIRD],2);
-       if(SPK == 206 && LOC == game.place[STEPS] && game.prop[JADE] < 0) goto L9094;
+       if(SPK == 206 && game.loc == game.place[STEPS] && game.prop[JADE] < 0) goto L9094;
        if(game.closed) return(18999);
        if(game.closng || !AT(FISSUR)) return(2011);
        if(HERE(BIRD))RSPEAK(SPK);
@@ -300,7 +300,7 @@ L9090:      if((!TOTING(OBJ)) && (OBJ != ROD || !TOTING(ROD2)))SPK=29;
        PSPEAK(FISSUR,2-game.prop[FISSUR]);
         return(2012);
 
-L9094: DROP(JADE,LOC);
+L9094: DROP(JADE,game.loc);
        game.prop[JADE]=0;
        game.tally=game.tally-1;
        SPK=208;
@@ -358,7 +358,7 @@ L9140:      if(OBJ == FOOD) goto L8142;
 /*  Drink.  If no object, assume water and look for it here.  If water is in
  *  the bottle, drink that, else must be at a water loc, so drink stream. */
 
-L9150: if(OBJ == 0 && LIQLOC(LOC) != WATER && (LIQ(0) != WATER || !HERE(BOTTLE)))
+L9150: if(OBJ == 0 && LIQLOC(game.loc) != WATER && (LIQ(0) != WATER || !HERE(BOTTLE)))
                return(8000);
        if(OBJ == BLOOD) goto L9153;
        if(OBJ != 0 && OBJ != WATER)SPK=110;
@@ -379,10 +379,10 @@ L9153:    DSTROY(BLOOD);
 L9160: if(OBJ != LAMP)SPK=76;
        if(OBJ != URN || game.prop[URN] != 2) return(2011);
        DSTROY(URN);
-       DROP(AMBER,LOC);
+       DROP(AMBER,game.loc);
        game.prop[AMBER]=1;
        game.tally=game.tally-1;
-       DROP(CAVITY,LOC);
+       DROP(CAVITY,game.loc);
        SPK=216;
         return(2011);
 
@@ -397,8 +397,8 @@ L8180:      if(YES(input,22,54,54)) score(1);
 
 /*  Find.  Might be carrying it, or it might be here.  Else give caveat. */
 
-L9190: if(AT(OBJ) || (LIQ(0) == OBJ && AT(BOTTLE)) || K == LIQLOC(LOC) || (OBJ ==
-               DWARF && ATDWRF(LOC) > 0))SPK=94;
+L9190: if(AT(OBJ) || (LIQ(0) == OBJ && AT(BOTTLE)) || K == LIQLOC(game.loc) || (OBJ ==
+               DWARF && ATDWRF(game.loc) > 0))SPK=94;
        if(game.closed)SPK=138;
        if(TOTING(OBJ))SPK=24;
         return(2011);
@@ -427,7 +427,7 @@ L9220:      return(fill());
 
 L9230: if(game.prop[ROD2] < 0 || !game.closed) return(2011);
        game.bonus=133;
-       if(LOC == 115)game.bonus=134;
+       if(game.loc == 115)game.bonus=134;
        if(HERE(ROD2))game.bonus=135;
        RSPEAK(game.bonus);
         score(0);
@@ -453,14 +453,14 @@ L8250:    K=VOCAB(WD1,3);
 L8252: game.foobar=K;
        if(K != 4) return(2009);
        game.foobar=0;
-       if(game.place[EGGS] == PLAC[EGGS] || (TOTING(EGGS) && LOC == PLAC[EGGS])) 
+       if(game.place[EGGS] == PLAC[EGGS] || (TOTING(EGGS) && game.loc == PLAC[EGGS])) 
                return(2011);
 /*  Bring back troll if we steal the eggs back from him before crossing. */
        if(game.place[EGGS] == 0 && game.place[TROLL] == 0 && game.prop[TROLL] ==
                0)game.prop[TROLL]=1;
        K=2;
        if(HERE(EGGS))K=1;
-       if(LOC == PLAC[EGGS])K=0;
+       if(game.loc == PLAC[EGGS])K=0;
        MOVE(EGGS,PLAC[EGGS]);
        PSPEAK(EGGS,K);
         return(2012);
@@ -497,7 +497,7 @@ L9280:      if(OBJ == MIRROR)SPK=148;
         return(18999);
 
 L9282: SPK=198;
-       if(TOTING(VASE))DROP(VASE,LOC);
+       if(TOTING(VASE))DROP(VASE,game.loc);
        game.prop[VASE]=2;
        game.fixed[VASE]= -1;
         return(2011);
@@ -535,7 +535,7 @@ L8305:      DATIME(&I,&K);
  *  with junk variables to bring it up to 7 values. */
        SAVWDS(game.abbnum,game.blklin,game.bonus,game.clock1,game.clock2,game.closed,game.closng);
        SAVWDS(game.detail,game.dflag,game.dkill,game.dtotal,game.foobar,game.holdng,game.iwest);
-       SAVWDS(game.knfloc,game.limit,K,game.lmwarn,LOC,game.newloc,game.numdie);
+       SAVWDS(game.knfloc,game.limit,K,game.lmwarn,game.loc,game.newloc,game.numdie);
        SAVWDS(OBJ,game.oldlc2,game.oldloc,game.oldobj,game.panic,game.saved,game.setup);
        SAVWDS(SPK,game.tally,game.thresh,game.trndex,game.trnluz,game.turns,OBJTXT[OYSTER]);
        SAVWDS(VERB,WD1,WD1X,WD2,game.wzdark,game.zzword,OBJSND[BIRD]);
@@ -562,7 +562,7 @@ L8305:      DATIME(&I,&K);
 /*  Resume.  Read a suspended game back from a file. */
 
 L8310: KK=1;
-       if(LOC == 1 && game.abbrev[1] == 1) goto L8305;
+       if(game.loc == 1 && game.abbrev[1] == 1) goto L8305;
        RSPEAK(268);
        if(!YES(input,200,54,54)) return(2012);
         goto L8305;
@@ -586,8 +586,8 @@ L9320:      if(OBJ != RUG) return(2011);
        SPK=223;
        if(game.prop[RUG] != 2) return(2011);
        game.oldlc2=game.oldloc;
-       game.oldloc=LOC;
-       game.newloc=game.place[RUG]+game.fixed[RUG]-LOC;
+       game.oldloc=game.loc;
+       game.newloc=game.place[RUG]+game.fixed[RUG]-game.loc;
        SPK=226;
        if(game.prop[SAPPH] >= 0)SPK=227;
        RSPEAK(SPK);
@@ -596,7 +596,7 @@ L9320:      if(OBJ != RUG) return(2011);
 /*  Listen.  Intransitive only.  Print stuff based on objsnd/locsnd. */
 
 L8330: SPK=228;
-       K=LOCSND[LOC];
+       K=LOCSND[game.loc];
        if(K == 0) goto L8332;
        RSPEAK(labs(K));
        if(K < 0) return(2012);
@@ -613,11 +613,11 @@ L8335:    /*etc*/ ;
 
 /*  Z'ZZZ (word gets recomputed at startup; different each game). */
 
-L8340: if(!AT(RESER) && LOC != game.fixed[RESER]-1) return(2011);
+L8340: if(!AT(RESER) && game.loc != game.fixed[RESER]-1) return(2011);
        PSPEAK(RESER,game.prop[RESER]+1);
        game.prop[RESER]=1-game.prop[RESER];
        if(AT(RESER)) return(2012);
-       game.oldlc2=LOC;
+       game.oldlc2=game.loc;
        game.newloc=0;
        RSPEAK(241);
         return(2);
index 3de30be2374832e54612cc7fd4a9aed4ef42ed19..8952a602518a4b0099862a5b9b587c3b7686f4b1 100644 (file)
@@ -37,8 +37,8 @@ L9017:        SPK=92;
        if(SPK/2 == 13) return(2011);
        game.prop[BIRD]=1;
 L9014: if((OBJ == BIRD || OBJ == CAGE) && (game.prop[BIRD] == 1 || -1-game.prop[BIRD] ==
-               1))CARRY(BIRD+CAGE-OBJ,LOC);
-       CARRY(OBJ,LOC);
+               1))CARRY(BIRD+CAGE-OBJ,game.loc);
+       CARRY(OBJ,game.loc);
        K=LIQ(0);
        if(OBJ == BOTTLE && K != 0)game.place[K]= -1;
        if(!GSTONE(OBJ) || game.prop[OBJ] == 0) return(2009);
@@ -68,11 +68,11 @@ int discard(bool just_do_it) {
 L9021: K=LIQ(0);
        if(K == OBJ)OBJ=BOTTLE;
        if(OBJ == BOTTLE && K != 0)game.place[K]=0;
-       if(OBJ == CAGE && game.prop[BIRD] == 1)DROP(BIRD,LOC);
-       DROP(OBJ,LOC);
+       if(OBJ == CAGE && game.prop[BIRD] == 1)DROP(BIRD,game.loc);
+       DROP(OBJ,game.loc);
        if(OBJ != BIRD) return(2012);
        game.prop[BIRD]=0;
-       if(FOREST(LOC))game.prop[BIRD]=2;
+       if(FOREST(game.loc))game.prop[BIRD]=2;
         return(2012);
 
 L9023: if(!(GSTONE(OBJ) && AT(CAVITY) && game.prop[CAVITY] != 0)) goto L9024;
@@ -94,7 +94,7 @@ L9023:        if(!(GSTONE(OBJ) && AT(CAVITY) && game.prop[CAVITY] != 0)) goto L9024;
 
 L9024: if(OBJ != COINS || !HERE(VEND)) goto L9025;
        DSTROY(COINS);
-       DROP(BATTER,LOC);
+       DROP(BATTER,game.loc);
        PSPEAK(BATTER,0);
         return(2012);
 
@@ -114,7 +114,7 @@ L9026:      if(OBJ != BEAR || !AT(TROLL)) goto L9027;
        game.prop[TROLL]=2;
         goto L9021;
 
-L9027: if(OBJ == VASE && LOC != PLAC[PILLOW]) goto L9028;
+L9027: if(OBJ == VASE && game.loc != PLAC[PILLOW]) goto L9028;
        RSPEAK(54);
         goto L9021;
 
@@ -130,7 +130,7 @@ L9028:      game.prop[VASE]=2;
  *  (bird, clam, machine).  Ambiguous if 2 enemies, or no enemies but 2 others. */
 
 int attack(FILE *input) {
-       I=ATDWRF(LOC);
+       I=ATDWRF(game.loc);
        if(OBJ != 0) goto L9124;
        if(I > 0)OBJ=DWARF;
        if(HERE(SNAKE))OBJ=OBJ*NOBJECTS+SNAKE;
@@ -190,7 +190,7 @@ L9126:      if(OBJ == 0)SPK=44;
        if(game.place[OBJ] == PLAC[DRAGON] || game.place[OBJ] == FIXD[DRAGON])MOVE(OBJ,K);
        /*etc*/ ;
        } /* end loop */
-       LOC=K;
+       game.loc=K;
        K=NUL;
         return(8);
 
@@ -199,7 +199,7 @@ L9128:      RSPEAK(SPK);
        DSTROY(OGRE);
        K=0;
        for (I=1; I < PIRATE; I++) {
-               if(game.dloc[I] == LOC) {
+               if(game.dloc[I] == game.loc) {
                        K=K+1;
                        game.dloc[I]=61;
                        game.dseen[I]=false;
@@ -219,7 +219,7 @@ int throw(FILE *cmdin) {
        if(OBJ >= 50 && OBJ <= MAXTRS && AT(TROLL)) goto L9178;
        if(OBJ == FOOD && HERE(BEAR)) goto L9177;
        if(OBJ != AXE) return(discard(false));
-       I=ATDWRF(LOC);
+       I=ATDWRF(game.loc);
        if(I > 0) goto L9172;
        SPK=152;
        if(AT(DRAGON) && game.prop[DRAGON] == 0) goto L9175;
@@ -239,13 +239,13 @@ L9172:    SPK=48;
        game.dkill=game.dkill+1;
        if(game.dkill == 1)SPK=149;
 L9175: RSPEAK(SPK);
-       DROP(AXE,LOC);
+       DROP(AXE,game.loc);
        K=NUL;
         return(8);
 
 /*  This'll teach him to throw the axe at the bear! */
 L9176: SPK=164;
-       DROP(AXE,LOC);
+       DROP(AXE,game.loc);
        game.fixed[AXE]= -1;
        game.prop[AXE]=1;
        JUGGLE(BEAR);
@@ -317,19 +317,19 @@ int fill() {
        if(OBJ != 0 && OBJ != BOTTLE) return(2011);
        if(OBJ == 0 && !HERE(BOTTLE)) return(8000);
        SPK=107;
-       if(LIQLOC(LOC) == 0)SPK=106;
+       if(LIQLOC(game.loc) == 0)SPK=106;
        if(HERE(URN) && game.prop[URN] != 0)SPK=214;
        if(LIQ(0) != 0)SPK=105;
        if(SPK != 107) return(2011);
-       game.prop[BOTTLE]=MOD(COND[LOC],4)/2*2;
+       game.prop[BOTTLE]=MOD(COND[game.loc],4)/2*2;
        K=LIQ(0);
        if(TOTING(BOTTLE))game.place[K]= -1;
        if(K == OIL)SPK=108;
         return(2011);
 
 L9222: SPK=29;
-       if(LIQLOC(LOC) == 0)SPK=144;
-       if(LIQLOC(LOC) == 0 || !TOTING(VASE)) return(2011);
+       if(LIQLOC(game.loc) == 0)SPK=144;
+       if(LIQLOC(game.loc) == 0 || !TOTING(VASE)) return(2011);
        RSPEAK(145);
        game.prop[VASE]=2;
        game.fixed[VASE]= -1;
index a5b2c9a01e32f51b620fb3844dd50eecdbb242eb..548098c0a9d82bf5c0ed096f9344692924689527 100644 (file)
--- a/advent.h
+++ b/advent.h
@@ -37,6 +37,7 @@ struct game_t {
     long knfloc;
     long limit;
     long lmwarn;
+    long loc;
     long newloc;
     long novice;
     long numdie;
@@ -135,7 +136,7 @@ extern long AMBER, ATTACK, AXE, BACK, BATTER, BEAR,
    CLAM, COINS, DALTLC, DOOR, DPRSSN, DRAGON, DWARF, EGGS,
    EMRALD, ENTER, ENTRNC, FIND, FISSUR, FOOD,
    GRATE, HINT, I, INVENT, IGO, J, JADE, K, K2, KEYS, KK,
-   KNIFE, KQ, L, LAMP, LOC, LOCK, LOOK,
+   KNIFE, KQ, L, LAMP, LOCK, LOOK,
    MAGZIN, MAXDIE, MAXTRS, MESSAG, MIRROR, MXSCOR, NUGGET, NUL, OBJ,
    OGRE, OIL, OLDOBJ, OYSTER, PANIC, PEARL, PILLOW, PLANT, PLANT2, PYRAM,
    RESER, ROD, ROD2, RUBY, RUG, SAPPH, SAY,
diff --git a/funcs.h b/funcs.h
index abad0ebfe20d9de0e054ee2f836c003d937a7974..4d1942d99c9c28eb8593bd0296269f1ca24be24f 100644 (file)
--- a/funcs.h
+++ b/funcs.h
  *  TOTING(OBJ) = true if the OBJ is being carried */
 
 #define TOTING(OBJ)    (game.place[OBJ] == -1)
-#define AT(OBJ) (game.place[OBJ] == LOC || game.fixed[OBJ] == LOC)
+#define AT(OBJ) (game.place[OBJ] == game.loc || game.fixed[OBJ] == game.loc)
 #define HERE(OBJ)      (AT(OBJ) || TOTING(OBJ))
 #define LIQ2(PBOTL)    ((1-(PBOTL))*WATER+((PBOTL)/2)*(WATER+OIL))
 #define LIQ(DUMMY)     (LIQ2(game.prop[BOTTLE]<0 ? -1-game.prop[BOTTLE] : game.prop[BOTTLE]))
 #define LIQLOC(LOC)    (LIQ2((MOD(COND[LOC]/2*2,8)-5)*MOD(COND[LOC]/4,2)+1))
 #define CNDBIT(L,N)    (TSTBIT(COND[L],N))
 #define FORCED(LOC)    (COND[LOC] == 2)
-#define DARK(DUMMY)    ((!CNDBIT(LOC,0)) && (game.prop[LAMP] == 0 || !HERE(LAMP)))
+#define DARK(DUMMY)    ((!CNDBIT(game.loc,0)) && (game.prop[LAMP] == 0 || !HERE(LAMP)))
 #define PCT(N) (randrange(100) < (N))
 #define GSTONE(OBJ)    ((OBJ) == EMRALD || (OBJ) == RUBY || (OBJ) == AMBER || (OBJ) == SAPPH)
 #define FOREST(LOC)    ((LOC) >= 145 && (LOC) <= 166)
diff --git a/main.c b/main.c
index bb13110a6d77b2661d62fef3c481a9464d12c529..5eebcd02a3bfa3d72bd5b11222a20ee80163b927 100644 (file)
--- a/main.c
+++ b/main.c
@@ -22,7 +22,7 @@ long AMBER, ATTACK, AXE, BACK, BATTER, BEAR, BIRD, BLOOD,
                CLAM, COINS, DALTLC, DOOR, DPRSSN, DRAGON, DWARF, EGGS,
                EMRALD, ENTER, ENTRNC, FIND, FISSUR, FOOD,
                GRATE, HINT, I, INVENT, IGO, J, JADE, K, K2, KEYS, KK,
-               KNIFE, KQ, L, LAMP, LOC, LOCK, LOOK,
+               KNIFE, KQ, L, LAMP, LOCK, LOOK,
                MAGZIN, MAXDIE, MAXTRS, MESSAG, MIRROR, MXSCOR,
                NUGGET, NUL, OBJ, OGRE, OIL, OYSTER, PEARL, PILLOW,
                PLANT, PLANT2, PYRAM, RESER, ROD, ROD2, RUBY, RUG, SAPPH, SAY,
@@ -123,7 +123,7 @@ L1: game.setup= -1;
        game.zzword=RNDVOC(3,0);
        game.novice=YES(stdin, 65,1,0);
        game.newloc=1;
-       LOC=1;
+       game.loc=1;
        game.limit=330;
        if(game.novice)game.limit=1000;
 
@@ -160,7 +160,7 @@ static bool do_command(FILE *cmdin) {
 
        if(!OUTSID(game.newloc) || game.newloc == 0 || !game.closng) goto L71;
        RSPEAK(130);
-       game.newloc=LOC;
+       game.newloc=game.loc;
        if(!game.panic)game.clock2=15;
        game.panic=true;
 
@@ -168,15 +168,15 @@ static bool do_command(FILE *cmdin) {
  *  the dwarf's blocking his way.  If coming from place forbidden to pirate
  *  (dwarves rooted in place) let him get out (and attacked). */
 
-L71:   if(game.newloc == LOC || FORCED(LOC) || CNDBIT(LOC,3)) goto L74;
+L71:   if(game.newloc == game.loc || FORCED(game.loc) || CNDBIT(game.loc,3)) goto L74;
        /* 73 */ for (I=1; I<=NDWARVES-1; I++) {
        if(game.odloc[I] != game.newloc || !game.dseen[I]) goto L73;
-       game.newloc=LOC;
+       game.newloc=game.loc;
        RSPEAK(2);
         goto L74;
 L73:   /*etc*/ ;
        } /* end loop */
-L74:   LOC=game.newloc;
+L74:   game.loc=game.newloc;
 
 /*  Dwarf stuff.  See earlier comments for description of variables.  Remember
  *  sixth dwarf is pirate and is thus very different except for motion rules. */
@@ -188,27 +188,27 @@ L74:      LOC=game.newloc;
  *  dwarves can't meet the bear.  Also means dwarves won't follow him into dead
  *  end in maze, but c'est la vie.  They'll wait for him outside the dead end. */
 
-       if(LOC == 0 || FORCED(LOC) || CNDBIT(game.newloc,3)) goto L2000;
+       if(game.loc == 0 || FORCED(game.loc) || CNDBIT(game.newloc,3)) goto L2000;
        if(game.dflag != 0) goto L6000;
-       if(INDEEP(LOC))game.dflag=1;
+       if(INDEEP(game.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. */
 
 L6000: if(game.dflag != 1) goto L6010;
-       if(!INDEEP(LOC) || (PCT(95) && (!CNDBIT(LOC,4) || PCT(85)))) goto L2000;
+       if(!INDEEP(game.loc) || (PCT(95) && (!CNDBIT(game.loc,4) || PCT(85)))) goto L2000;
        game.dflag=2;
        for (I=1; I<=2; I++) {
        J=1+randrange(NDWARVES-1);
        if(PCT(50))game.dloc[J]=0;
        } /* end loop */
        for (I=1; I<=NDWARVES-1; I++) {
-       if(game.dloc[I] == LOC)game.dloc[I]=DALTLC;
+       if(game.dloc[I] == game.loc)game.dloc[I]=DALTLC;
        game.odloc[I]=game.dloc[I];
        } /* end loop */
        RSPEAK(3);
-       DROP(AXE,LOC);
+       DROP(AXE,game.loc);
         goto L2000;
 
 /*  Things are in full swing.  Move each dwarf at random, except if he's seen us
@@ -241,9 +241,9 @@ L6016:      TK[J]=game.odloc[I];
        J=1+randrange(J);
        game.odloc[I]=game.dloc[I];
        game.dloc[I]=TK[J];
-       game.dseen[I]=(game.dseen[I] && INDEEP(LOC)) || (game.dloc[I] == LOC || game.odloc[I] == LOC);
+       game.dseen[I]=(game.dseen[I] && INDEEP(game.loc)) || (game.dloc[I] == game.loc || game.odloc[I] == game.loc);
        if(!game.dseen[I]) goto L6030;
-       game.dloc[I]=LOC;
+       game.dloc[I]=game.loc;
        if(I != 6) goto L6027;
 
 /*  The pirate's spotted him.  He leaves him alone once we've found chest.  K
@@ -251,11 +251,11 @@ L6016:    TK[J]=game.odloc[I];
  *  the pirate be spotted.  Note that game.place(CHEST)=0 might mean that he's
  *  thrown it to the troll, but in that case he's seen the chest (game.prop=0). */
 
-       if(LOC == game.chloc || game.prop[CHEST] >= 0) goto L6030;
+       if(game.loc == game.chloc || game.prop[CHEST] >= 0) goto L6030;
        K=0;
        /* 6020 */ for (J=50; J<=MAXTRS; J++) {
 /*  Pirate won't take pyramid from plover room or dark room (too easy!). */
-       if(J == PYRAM && (LOC == PLAC[PYRAM] || LOC == PLAC[EMRALD])) goto L6020;
+       if(J == PYRAM && (game.loc == PLAC[PYRAM] || game.loc == PLAC[EMRALD])) goto L6020;
        if(TOTING(J)) goto L6021;
 L6020: if(HERE(J))K=1;
        } /* end loop */
@@ -270,8 +270,8 @@ L6021:      if(game.place[CHEST] != 0) goto L6022;
        MOVE(MESSAG,game.chloc2);
 L6022: RSPEAK(128);
        /* 6023 */ for (J=50; J<=MAXTRS; J++) {
-       if(J == PYRAM && (LOC == PLAC[PYRAM] || LOC == PLAC[EMRALD])) goto L6023;
-       if(AT(J) && game.fixed[J] == 0)CARRY(J,LOC);
+       if(J == PYRAM && (game.loc == PLAC[PYRAM] || game.loc == PLAC[EMRALD])) goto L6023;
+       if(AT(J) && game.fixed[J] == 0)CARRY(J,game.loc);
        if(TOTING(J))DROP(J,game.chloc);
 L6023: /*etc*/ ;
        } /* end loop */
@@ -290,7 +290,7 @@ L6025:      RSPEAK(186);
 L6027: game.dtotal=game.dtotal+1;
        if(game.odloc[I] != game.dloc[I]) goto L6030;
        ATTACK=ATTACK+1;
-       if(game.knfloc >= 0)game.knfloc=LOC;
+       if(game.knfloc >= 0)game.knfloc=game.loc;
        if(randrange(1000) < 95*(game.dflag-2))STICK=STICK+1;
 L6030: /*etc*/ ;
        } /* end loop */
@@ -311,24 +311,24 @@ L6030:    /*etc*/ ;
        SETPRM(1,STICK,0);
        RSPEAK(K+1+2/(1+STICK));
        if(STICK == 0) goto L2000;
-       game.oldlc2=LOC;
+       game.oldlc2=game.loc;
         goto L99;
 
 /*  Describe the current location and (maybe) get next command. */
 
 /*  Print text for current loc. */
 
-L2000: if(LOC == 0) goto L99;
-       KK=STEXT[LOC];
-       if(MOD(game.abbrev[LOC],game.abbnum) == 0 || KK == 0)KK=LTEXT[LOC];
-       if(FORCED(LOC) || !DARK(0)) goto L2001;
+L2000: if(game.loc == 0) goto L99;
+       KK=STEXT[game.loc];
+       if(MOD(game.abbrev[game.loc],game.abbnum) == 0 || KK == 0)KK=LTEXT[game.loc];
+       if(FORCED(game.loc) || !DARK(0)) goto L2001;
        if(game.wzdark && PCT(35)) goto L90;
        KK=RTEXT[16];
 L2001: if(TOTING(BEAR))RSPEAK(141);
        SPEAK(KK);
        K=1;
-       if(FORCED(LOC)) goto L8;
-       if(LOC == 33 && PCT(25) && !game.closng)RSPEAK(7);
+       if(FORCED(game.loc)) goto L8;
+       if(game.loc == 33 && PCT(25) && !game.closng)RSPEAK(7);
 
 /*  Print out descriptions of objects at this location.  If not closing and
  *  property value is negative, tally off another treasure.  Rug is special
@@ -337,8 +337,8 @@ L2001:      if(TOTING(BEAR))RSPEAK(141);
  *  are because game.prop=0 is needed to get full score. */
 
        if(DARK(0)) goto L2012;
-       game.abbrev[LOC]=game.abbrev[LOC]+1;
-       I=game.atloc[LOC];
+       game.abbrev[game.loc]=game.abbrev[game.loc]+1;
+       I=game.atloc[game.loc];
 L2004: if(I == 0) goto L2012;
        OBJ=I;
        if(OBJ > NOBJECTS)OBJ=OBJ-NOBJECTS;
@@ -360,7 +360,7 @@ L2004:      if(I == 0) goto L2012;
  *  anyone who makes such a gross blunder isn't likely to find everything
  *  else anyway (so goes the rationalisation). */
 L2006: KK=game.prop[OBJ];
-       if(OBJ == STEPS && LOC == game.fixed[STEPS])KK=1;
+       if(OBJ == STEPS && game.loc == game.fixed[STEPS])KK=1;
        PSPEAK(OBJ,KK);
 L2008: I=game.link[I];
         goto L2004;
@@ -378,10 +378,10 @@ L2012:    VERB=0;
  *  to finish the loop.  Ignore "HINTS" < 4 (special stuff, see database notes).
                */
 
-L2600: if(COND[LOC] < game.conds) goto L2603;
+L2600: if(COND[game.loc] < game.conds) goto L2603;
        /* 2602 */ for (HINT=1; HINT<=HNTMAX; HINT++) {
        if(game.hinted[HINT]) goto L2602;
-       if(!CNDBIT(LOC,HINT+10))game.hintlc[HINT]= -1;
+       if(!CNDBIT(game.loc,HINT+10))game.hintlc[HINT]= -1;
        game.hintlc[HINT]=game.hintlc[HINT]+1;
        if(game.hintlc[HINT] >= HINTS[HINT][1]) goto L40000;
 L2602: /*etc*/ ;
@@ -398,7 +398,7 @@ L2603:      if(!game.closed) goto L2605;
        if(TOTING(I) && game.prop[I] < 0)game.prop[I]= -1-game.prop[I];
        } /* end loop */
 L2605: game.wzdark=DARK(0);
-       if(game.knfloc > 0 && game.knfloc != LOC)game.knfloc=0;
+       if(game.knfloc > 0 && game.knfloc != game.loc)game.knfloc=0;
        I=0;
        if (!GETIN(cmdin, WD1,WD1X,WD2,WD2X))
            return false;
@@ -418,7 +418,7 @@ L2607:      game.foobar=(game.foobar>0 ? -game.foobar : 0);
        }
        if(VERB == SAY && WD2 > 0)VERB=0;
        if(VERB == SAY) goto L4090;
-       if(game.tally == 0 && INDEEP(LOC) && LOC != 33)game.clock1=game.clock1-1;
+       if(game.tally == 0 && INDEEP(game.loc) && game.loc != 33)game.clock1=game.clock1-1;
        if(game.clock1 == 0) goto L10000;
        if(game.clock1 < 0)game.clock2=game.clock2-1;
        if(game.clock2 == 0) goto L11000;
@@ -428,7 +428,7 @@ L2607:      game.foobar=(game.foobar>0 ? -game.foobar : 0);
        if(game.limit == 0) goto L12400;
        if(game.limit <= 30) goto L12200;
 L19999: K=43;
-       if(LIQLOC(LOC) == WATER)K=70;
+       if(LIQLOC(game.loc) == WATER)K=70;
        V1=VOCAB(WD1,-1);
        V2=VOCAB(WD2,-1);
        if(V1 == ENTER && (V2 == STREAM || V2 == 1000+WATER)) goto L2010;
@@ -502,7 +502,7 @@ L8000:      SETPRM(1,WD1,WD1X);
 
 /*  Figure out the new location
  *
- *  Given the current location in "LOC", and a motion verb number in
+ *  Given the current location in "game.loc", and a motion verb number in
  *  "K", put the new location in "game.newloc".  The current loc is saved
  *  in "game.oldloc" in case he wants to retreat.  The current
  *  game.oldloc is saved in game.oldlc2, in case he dies.  (if he
@@ -510,15 +510,15 @@ L8000:    SETPRM(1,WD1,WD1X);
  *  him, so we need game.oldlc2, which is the last place he was
  *  safe.) */
 
-L8:    KK=KEY[LOC];
-       game.newloc=LOC;
+L8:    KK=KEY[game.loc];
+       game.newloc=game.loc;
        if(KK == 0)BUG(26);
        if(K == NUL) return true;
        if(K == BACK) goto L20;
        if(K == LOOK) goto L30;
        if(K == CAVE) goto L40;
        game.oldlc2=game.oldloc;
-       game.oldloc=LOC;
+       game.oldloc=game.loc;
 
 L9:    LL=labs(TRAVEL[KK]);
        if(MOD(LL,1000) == 1 || MOD(LL,1000) == K) goto L10;
@@ -547,7 +547,7 @@ L16:        game.newloc=MOD(LL,1000);
        if(game.newloc <= 300) return true;
        if(game.newloc <= 500) goto L30000;
        RSPEAK(game.newloc-500);
-       game.newloc=LOC;
+       game.newloc=game.loc;
         return true;
 
 /*  Special motions come here.  Labelling convention: statement numbers NNNXX
@@ -562,9 +562,9 @@ L30000: game.newloc=game.newloc-300;
  *  table must include "useless" entries going through passage, which can never
  *  be used for actual motion, but can be spotted by "go back". */
 
-L30100: game.newloc=99+100-LOC;        /* ESR: an instance of NOBJECTS? */
+L30100: game.newloc=99+100-game.loc;   /* ESR: an instance of NOBJECTS? */
        if(game.holdng == 0 || (game.holdng == 1 && TOTING(EMRALD))) return true;
-       game.newloc=LOC;
+       game.newloc=game.loc;
        RSPEAK(117);
        return true;
 
@@ -572,7 +572,7 @@ L30100: game.newloc=99+100-LOC;     /* ESR: an instance of NOBJECTS? */
  *  toting it), so he's forced to use the plover-passage to get it out.  Having
  *  dropped it, go back and pretend he wasn't carrying it after all. */
 
-L30200: DROP(EMRALD,LOC);
+L30200: DROP(EMRALD,game.loc);
         goto L12;
 
 /*  Travel 303.  Troll bridge.  Must be done only as special motion so that
@@ -589,10 +589,10 @@ L30300: if(game.prop[TROLL] != 1) goto L30310;
        MOVE(TROLL,PLAC[TROLL]);
        MOVE(TROLL+NOBJECTS,FIXD[TROLL]);
        JUGGLE(CHASM);
-       game.newloc=LOC;
+       game.newloc=game.loc;
        return true;
 
-L30310: game.newloc=PLAC[TROLL]+FIXD[TROLL]-LOC;
+L30310: game.newloc=PLAC[TROLL]+FIXD[TROLL]-game.loc;
        if(game.prop[TROLL] == 0)game.prop[TROLL]=1;
        if(!TOTING(BEAR)) return true;
        RSPEAK(162);
@@ -606,16 +606,16 @@ L30310: game.newloc=PLAC[TROLL]+FIXD[TROLL]-LOC;
 
 /*  End of specials. */
 
-/*  Handle "go back".  Look for verb which goes from LOC to game.oldloc, or to game.oldlc2
+/*  Handle "go back".  Look for verb which goes from game.loc to game.oldloc, or to game.oldlc2
  *  If game.oldloc has forced-motion.  K2 saves entry -> forced loc -> previous loc. */
 
 L20:   K=game.oldloc;
        if(FORCED(K))K=game.oldlc2;
        game.oldlc2=game.oldloc;
-       game.oldloc=LOC;
+       game.oldloc=game.loc;
        K2=0;
-       if(K == LOC)K2=91;
-       if(CNDBIT(LOC,4))K2=274;
+       if(K == game.loc)K2=91;
+       if(CNDBIT(game.loc,4))K2=274;
        if(K2 == 0) goto L21;
        RSPEAK(K2);
        return true;
@@ -639,7 +639,7 @@ L23:                KK=K2;
        }
 
        K=MOD(labs(TRAVEL[KK]),1000);
-       KK=KEY[LOC];
+       KK=KEY[game.loc];
         goto L9;
 
 /*  Look.  Can't give more detail.  Pretend it wasn't dark (though it may "now"
@@ -648,13 +648,13 @@ L23:              KK=K2;
 L30:   if(game.detail < 3)RSPEAK(15);
        game.detail=game.detail+1;
        game.wzdark=false;
-       game.abbrev[LOC]=0;
+       game.abbrev[game.loc]=0;
        return true;
 
 /*  Cave.  Different messages depending on whether above ground. */
 
 L40:   K=58;
-       if(OUTSID(LOC) && LOC != 8)K=57;
+       if(OUTSID(game.loc) && game.loc != 8)K=57;
        RSPEAK(K);
        return true;
 
@@ -691,7 +691,7 @@ L50:        SPK=12;
 /*  The easiest way to get killed is to fall into a pit in pitch darkness. */
 
 L90:   RSPEAK(23);
-       game.oldlc2=LOC;
+       game.oldlc2=game.loc;
 
 /*  Okay, he's dead.  Let's get on with it. */
 
@@ -710,8 +710,8 @@ L99:        if(game.closng) goto L95;
        DROP(I,K);
 L98:   /*etc*/ ;
        } /* end loop */
-       LOC=3;
-       game.oldloc=LOC;
+       game.loc=3;
+       game.oldloc=game.loc;
         goto L2000;
 
 /*  He died during closing time.  No resurrection.  Tally up a death and exit. */
@@ -753,13 +753,13 @@ L40030:  goto L2602;
 L40100: if(game.prop[GRATE] == 0 && !HERE(KEYS)) goto L40010;
         goto L40020;
 
-L40200: if(game.place[BIRD] == LOC && TOTING(ROD) && game.oldobj == BIRD) goto L40010;
+L40200: if(game.place[BIRD] == game.loc && TOTING(ROD) && game.oldobj == BIRD) goto L40010;
         goto L40030;
 
 L40300: if(HERE(SNAKE) && !HERE(BIRD)) goto L40010;
         goto L40020;
 
-L40400: if(game.atloc[LOC] == 0 && game.atloc[game.oldloc] == 0 && game.atloc[game.oldlc2] == 0 && game.holdng >
+L40400: if(game.atloc[game.loc] == 0 && game.atloc[game.oldloc] == 0 && game.atloc[game.oldlc2] == 0 && game.holdng >
                1) goto L40010;
         goto L40020;
 
@@ -771,11 +771,11 @@ L40600:  goto L40010;
 L40700: if(game.dflag == 0) goto L40010;
         goto L40020;
 
-L40800: if(game.atloc[LOC] == 0 && game.atloc[game.oldloc] == 0 && game.atloc[game.oldlc2] == 0) goto
+L40800: if(game.atloc[game.loc] == 0 && game.atloc[game.oldloc] == 0 && game.atloc[game.oldlc2] == 0) goto
                L40010;
         goto L40030;
 
-L40900: I=ATDWRF(LOC);
+L40900: I=ATDWRF(game.loc);
        if(I < 0) goto L40020;
        if(HERE(OGRE) && I == 0) goto L40010;
         goto L40030;
@@ -859,7 +859,7 @@ L11000: game.prop[BOTTLE]=PUT(BOTTLE,115,1);
        game.prop[LAMP]=PUT(LAMP,115,0);
        game.prop[ROD]=PUT(ROD,115,0);
        game.prop[DWARF]=PUT(DWARF,115,0);
-       LOC=115;
+       game.loc=115;
        game.oldloc=115;
        game.newloc=115;
 
@@ -894,7 +894,7 @@ L11000: game.prop[BOTTLE]=PUT(BOTTLE,115,1);
 
 L12000: RSPEAK(188);
        game.prop[BATTER]=1;
-       if(TOTING(BATTER))DROP(BATTER,LOC);
+       if(TOTING(BATTER))DROP(BATTER,game.loc);
        game.limit=game.limit+2500;
        game.lmwarn=false;
         goto L19999;