struct game_t game;
-long LNLENG, LNPOSN, PARMS[26];
+long LNLENG, LNPOSN, PARMS[MAXPARMS+1];
char rawbuf[LINESIZE], INLINE[LINESIZE+1], MAP1[129], MAP2[129];
long AMBER, ATTACK, AXE, BACK, BATTER, BEAR, BIRD, BLOOD,
BOTTLE, CAGE, CAVE, CAVITY, CHAIN, CHASM, CHEST,
- CLAM, COINS, DALTLC, DOOR, DPRSSN, DRAGON, DWARF, EGGS,
+ CLAM, COINS, 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, 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,
- SCORE, SECT, SIGN, SNAKE, SPK, STEPS, STICK,
- STREAM, THROW, TK[21], TRIDNT, TROLL, TROLL2,
- URN, V1, V2, VASE, VEND, VERB,
+ GRATE, HINT, I, INVENT, J, JADE, K, KEYS,
+ KNIFE, L, LAMP, LOCK, LOOK, MAGZIN,
+ MESSAG, MIRROR, NUGGET, NUL, OGRE, OIL, OYSTER,
+ PEARL, PILLOW, PLANT, PLANT2, PYRAM, RESER, ROD, ROD2,
+ RUBY, RUG, SAPPH, SAY, SECT, SIGN, SNAKE, SPK,
+ STEPS, STICK, STREAM, THROW, TRIDNT, TROLL, TROLL2,
+ URN, V1, V2, VASE, VEND,
VOLCAN, VRSION = 25, WATER, WD1, WD1X, WD2, WD2X;
FILE *logfp;
bool oldstyle = false;
extern void initialise();
extern void score(long);
-extern int action(FILE *, long, long);
+extern int action(FILE *, long, long, long);
void sig_handler(int signo)
{
}
static bool do_command(FILE *cmdin) {
- long LL;
+ long LL, KQ, VERB, KK, K2;
+ long obj;
+ long TK[21];
+ static long IGO = 0;
/* Can't leave cave once it's closing (except by main office). */
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;
- if(OBJ == STEPS && TOTING(NUGGET)) goto L2008;
- if(game.prop[OBJ] >= 0) goto L2006;
+ obj=I;
+ if(obj > NOBJECTS)obj=obj-NOBJECTS;
+ if(obj == STEPS && TOTING(NUGGET)) goto L2008;
+ if(game.prop[obj] >= 0) goto L2006;
if(game.closed) goto L2008;
- game.prop[OBJ]=0;
- if(OBJ == RUG || OBJ == CHAIN)game.prop[OBJ]=1;
+ game.prop[obj]=0;
+ if(obj == RUG || obj == CHAIN)game.prop[obj]=1;
game.tally=game.tally-1;
/* Note: There used to be a test here to see whether the player had blown it
* so badly that he could never ever see the remaining treasures, and if so
* or trident, and the effects propagate. So the whole thing was flushed.
* 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 && game.loc == game.fixed[STEPS])KK=1;
- PSPEAK(OBJ,KK);
+L2006: KK=game.prop[obj];
+ if(obj == STEPS && game.loc == game.fixed[STEPS])KK=1;
+ PSPEAK(obj,KK);
L2008: I=game.link[I];
goto L2004;
L2011: RSPEAK(SPK);
L2012: VERB=0;
- game.oldobj=OBJ;
- OBJ=0;
+ game.oldobj=obj;
+ obj=0;
/* Check if this loc is eligible for any hints. If been here long enough,
* branch to help section (on later page). Hints all come back here eventually
/* Verb and object analysis moved to separate module. */
-L4000: I=4000; goto Laction;
+L4000: I=4000; VERB=K; goto Laction;
L4090: I=4090; goto Laction;
L5000: I=5000;
Laction:
- switch (action(cmdin, I, OBJ)) {
+ switch (action(cmdin, I, VERB, obj)) {
case 2: return true;
case 8: goto L8;
case 2000: goto L2000;
L8000: SETPRM(1,WD1,WD1X);
RSPEAK(257);
- OBJ=0;
+ obj=0;
goto L2600;
/* Figure out the new location