typedef long token_t; /* word token - someday this will be a character array */
typedef long vocab_t; /* index into a vocabulary array */
-extern long ABB[], ATLOC[], BLKLIN, DFLAG, DLOC[], FIXED[], HOLDNG,
+struct game_t {
+ long dseen[NDWARVES+1];
+ long dloc[NDWARVES+1];
+ long odloc[NDWARVES+1];
+};
+
+extern struct game_t game;
+
+extern long ABB[], ATLOC[], BLKLIN, DFLAG, FIXED[], HOLDNG,
LINK[], LNLENG, LNPOSN,
PARMS[], PLACE[];
extern char rawbuf[LINESIZE], INLINE[LINESIZE+1], MAP1[], MAP2[];
BOTTLE, CAGE, CAVE, CAVITY, CHAIN, CHASM, CHEST, CHLOC, CHLOC2,
CLAM, CLOCK1, CLOCK2, CLOSED, CLOSNG, CLSHNT,
COINS, CONDS, DALTLC, DETAIL,
- DKILL, DOOR, DPRSSN, DRAGON, DSEEN[], DTOTAL, DWARF, EGGS,
+ DKILL, DOOR, DPRSSN, DRAGON, DTOTAL, DWARF, EGGS,
EMRALD, ENTER, ENTRNC, FIND, FISSUR, FOOBAR, FOOD,
GRATE, HINT, HINTED[], HINTLC[],
I, INVENT, IGO, IWEST, J, JADE, K, K2, KEYS, KK,
KNFLOC, KNIFE, KQ, L, LAMP, LIMIT, LL,
- LMWARN, LOC, LOCK, LOOK,
+ LMWARN, LOC, LOCK, LOOK,
MAGZIN, MAXDIE, MAXTRS, MESSAG, MIRROR, MXSCOR,
NEWLOC, NOVICE, NUGGET, NUL, NUMDIE, OBJ,
- ODLOC[], OGRE, OIL, OLDLC2, OLDLOC, OLDOBJ, OYSTER,
+ OGRE, OIL, OLDLC2, OLDLOC, OLDOBJ, OYSTER,
PANIC, PEARL, PILLOW, PLANT, PLANT2, PROP[], PYRAM,
RESER, ROD, ROD2, RUBY, RUG, SAPPH, SAVED, SAY,
SCORE, SECT, SETUP, SIGN, SNAKE, SPK, STEPS, STICK,
#include "advent.h"
#include "database.h"
+struct game_t game;
+
long ABB[186], ATLOC[186], BLKLIN = true, DFLAG,
- DLOC[7], FIXED[NOBJECTS+1], HOLDNG,
+ FIXED[NOBJECTS+1], HOLDNG,
LINK[NOBJECTS*2 + 1], LNLENG, LNPOSN,
PARMS[26], PLACE[NOBJECTS+1],
SETUP = 0;
BOTTLE, CAGE, CAVE, CAVITY, CHAIN, CHASM, CHEST, CHLOC, CHLOC2,
CLAM, CLOCK1, CLOCK2, CLOSED, CLOSNG, CLSHNT,
COINS, CONDS, DALTLC, DETAIL,
- DKILL, DOOR, DPRSSN, DRAGON, DSEEN[NDWARVES+1], DTOTAL, DWARF, EGGS,
+ DKILL, DOOR, DPRSSN, DRAGON, DTOTAL, DWARF, EGGS,
EMRALD, ENTER, ENTRNC, FIND, FISSUR, FOOBAR, FOOD,
GRATE, HINT, HINTED[21], HINTLC[21],
I, INVENT, IGO, IWEST, J, JADE, K, K2, KEYS, KK,
MAGZIN, MAXDIE, MAXTRS,
MESSAG, MIRROR, MXSCOR,
NEWLOC, NOVICE, NUGGET, NUL, NUMDIE, OBJ,
- ODLOC[NDWARVES+1], OGRE, OIL, OLDLC2, OLDLOC, OLDOBJ, OYSTER,
+ OGRE, OIL, OLDLC2, OLDLOC, OLDOBJ, OYSTER,
PANIC, PEARL, PILLOW, PLANT, PLANT2, PROP[NOBJECTS+1], PYRAM,
RESER, ROD, ROD2, RUBY, RUG, SAPPH, SAVED, SAY,
SCORE, SECT, SIGN, SNAKE, SPK, STEPS, STICK,
L71: if(NEWLOC == LOC || FORCED(LOC) || CNDBIT(LOC,3)) goto L74;
/* 73 */ for (I=1; I<=NDWARVES-1; I++) {
- if(ODLOC[I] != NEWLOC || !DSEEN[I]) goto L73;
+ if(game.odloc[I] != NEWLOC || !game.dseen[I]) goto L73;
NEWLOC=LOC;
RSPEAK(2);
goto L74;
DFLAG=2;
for (I=1; I<=2; I++) {
J=1+randrange(NDWARVES-1);
- if(PCT(50))DLOC[J]=0;
+ if(PCT(50))game.dloc[J]=0;
} /* end loop */
for (I=1; I<=NDWARVES-1; I++) {
- if(DLOC[I] == LOC)DLOC[I]=DALTLC;
- ODLOC[I]=DLOC[I];
+ if(game.dloc[I] == LOC)game.dloc[I]=DALTLC;
+ game.odloc[I]=game.dloc[I];
} /* end loop */
RSPEAK(3);
DROP(AXE,LOC);
ATTACK=0;
STICK=0;
/* 6030 */ for (I=1; I<=NDWARVES; I++) {
- if(DLOC[I] == 0) goto L6030;
+ if(game.dloc[I] == 0) goto L6030;
/* Fill TK array with all the places this dwarf might go. */
J=1;
- KK=DLOC[I];
+ KK=game.dloc[I];
KK=KEY[KK];
if(KK == 0) goto L6016;
L6012: NEWLOC=MOD(labs(TRAVEL[KK])/1000,1000);
{long x = J-1;
- if(NEWLOC > 300 || !INDEEP(NEWLOC) || NEWLOC == ODLOC[I] || (J > 1 &&
- NEWLOC == TK[x]) || J >= 20 || NEWLOC == DLOC[I] ||
+ if(NEWLOC > 300 || !INDEEP(NEWLOC) || NEWLOC == game.odloc[I] || (J > 1 &&
+ NEWLOC == TK[x]) || J >= 20 || NEWLOC == game.dloc[I] ||
FORCED(NEWLOC) || (I == 6 && CNDBIT(NEWLOC,3)) ||
labs(TRAVEL[KK])/1000000 == 100) goto L6014;}
TK[J]=NEWLOC;
J=J+1;
L6014: KK=KK+1;
{long x = KK-1; if(TRAVEL[x] >= 0) goto L6012;}
-L6016: TK[J]=ODLOC[I];
+L6016: TK[J]=game.odloc[I];
if(J >= 2)J=J-1;
J=1+randrange(J);
- ODLOC[I]=DLOC[I];
- DLOC[I]=TK[J];
- DSEEN[I]=(DSEEN[I] && INDEEP(LOC)) || (DLOC[I] == LOC || ODLOC[I] == LOC);
- if(!DSEEN[I]) goto L6030;
- DLOC[I]=LOC;
+ 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);
+ if(!game.dseen[I]) goto L6030;
+ game.dloc[I]=LOC;
if(I != 6) goto L6027;
/* The pirate's spotted him. He leaves him alone once we've found chest. K
} /* end loop */
if(TALLY == 1 && K == 0 && PLACE[CHEST] == 0 && HERE(LAMP) && PROP[LAMP]
== 1) goto L6025;
- if(ODLOC[6] != DLOC[6] && PCT(20))RSPEAK(127);
+ if(game.odloc[6] != game.dloc[6] && PCT(20))RSPEAK(127);
goto L6030;
L6021: if(PLACE[CHEST] != 0) goto L6022;
if(TOTING(J))DROP(J,CHLOC);
L6023: /*etc*/ ;
} /* end loop */
-L6024: DLOC[6]=CHLOC;
- ODLOC[6]=CHLOC;
- DSEEN[6]=false;
+L6024: game.dloc[6]=CHLOC;
+ game.odloc[6]=CHLOC;
+ game.dseen[6]=false;
goto L6030;
L6025: RSPEAK(186);
/* This threatening little dwarf is in the room with him! */
L6027: DTOTAL=DTOTAL+1;
- if(ODLOC[I] != DLOC[I]) goto L6030;
+ 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;
/* Figure out the new location
*
* Given the current location in "LOC", and a motion verb number in "K", put
- * the new location in "NEWLOC". The current loc is saved in "OLDLOC" in case
- * he wants to retreat. The current OLDLOC is saved in OLDLC2, in case he
- * dies. (if he does, NEWLOC will be limbo, and OLDLOC will be what killed
+ * the new location in "NEWLOC". The current loc is saved in "OLgame.dloc" in case
+ * he wants to retreat. The current OLgame.dloc is saved in OLDLC2, in case he
+ * dies. (if he does, NEWLOC will be limbo, and OLgame.dloc will be what killed
* him, so we need OLDLC2, which is the last place he was safe.) */
L8: KK=KEY[LOC];
L10000: PROP[GRATE]=0;
PROP[FISSUR]=0;
for (I=1; I<=NDWARVES; I++) {
- DSEEN[I]=false;
- DLOC[I]=0;
+ game.dseen[I]=false;
+ game.dloc[I]=0;
} /* end loop */
MOVE(TROLL,0);
MOVE(TROLL+NOBJECTS,0);