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,
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, L, LAMP, LOCK, LOOK,
MAGZIN, MAXDIE, MAXTRS, MESSAG, MIRROR, MXSCOR,
MAGZIN, MAXDIE, MAXTRS, MESSAG, MIRROR, MXSCOR,
- NUGGET, NUL, OBJ, OGRE, OIL, OYSTER, PEARL, PILLOW,
+ NUGGET, NUL, 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,
PLANT, PLANT2, PYRAM, RESER, ROD, ROD2, RUBY, RUG, SAPPH, SAY,
SCORE, SECT, SIGN, SNAKE, SPK, STEPS, STICK,
STREAM, THROW, TK[21], TRIDNT, TROLL, TROLL2,
game.zzword=RNDVOC(3,0);
game.novice=YES(stdin, 65,1,0);
game.newloc=1;
game.zzword=RNDVOC(3,0);
game.novice=YES(stdin, 65,1,0);
game.newloc=1;
/* Can't leave cave once it's closing (except by main office). */
if(!OUTSID(game.newloc) || game.newloc == 0 || !game.closng) goto L71;
RSPEAK(130);
/* Can't leave cave once it's closing (except by main office). */
if(!OUTSID(game.newloc) || game.newloc == 0 || !game.closng) goto L71;
RSPEAK(130);
* the dwarf's blocking his way. If coming from place forbidden to pirate
* (dwarves rooted in place) let him get out (and attacked). */
* the dwarf's blocking his way. If coming from place forbidden to pirate
* (dwarves rooted in place) let him get out (and attacked). */
/* 73 */ for (I=1; I<=NDWARVES-1; I++) {
if(game.odloc[I] != game.newloc || !game.dseen[I]) goto L73;
/* 73 */ for (I=1; I<=NDWARVES-1; I++) {
if(game.odloc[I] != game.newloc || !game.dseen[I]) goto L73;
/* Dwarf stuff. See earlier comments for description of variables. Remember
* sixth dwarf is pirate and is thus very different except for motion rules. */
/* Dwarf stuff. See earlier comments for description of variables. Remember
* sixth dwarf is pirate and is thus very different except for motion rules. */
* 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. */
* 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. */
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;
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;
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++) {
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++) {
* 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). */
* 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). */
K=0;
/* 6020 */ for (J=50; J<=MAXTRS; J++) {
/* Pirate won't take pyramid from plover room or dark room (too easy!). */
K=0;
/* 6020 */ for (J=50; J<=MAXTRS; J++) {
/* Pirate won't take pyramid from plover room or dark room (too easy!). */
MOVE(MESSAG,game.chloc2);
L6022: RSPEAK(128);
/* 6023 */ for (J=50; J<=MAXTRS; J++) {
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);
-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;
/* Print out descriptions of objects at this location. If not closing and
* property value is negative, tally off another treasure. Rug is special
/* Print out descriptions of objects at this location. If not closing and
* property value is negative, tally off another treasure. Rug is special
- 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;
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
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). */
* 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). */
/* 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
* to finish the loop. Ignore "HINTS" < 4 (special stuff, see database notes).
*/
/* 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
* to finish the loop. Ignore "HINTS" < 4 (special stuff, see database notes).
*/
I=0;
if (!GETIN(cmdin, WD1,WD1X,WD2,WD2X))
return false;
I=0;
if (!GETIN(cmdin, WD1,WD1X,WD2,WD2X))
return false;
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;
* "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
* "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
* table must include "useless" entries going through passage, which can never
* be used for actual motion, but can be spotted by "go back". */
* table must include "useless" entries going through passage, which can never
* be used for actual motion, but can be spotted by "go back". */
* 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. */
* 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. */
* 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;
* 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.prop[LAMP]=PUT(LAMP,115,0);
game.prop[ROD]=PUT(ROD,115,0);
game.prop[DWARF]=PUT(DWARF,115,0);
game.prop[LAMP]=PUT(LAMP,115,0);
game.prop[ROD]=PUT(ROD,115,0);
game.prop[DWARF]=PUT(DWARF,115,0);