BOTTLE, CAGE, CAVE, CAVITY, CHAIN, CHASM, CHEST,
CLAM, COINS, DOOR, DPRSSN, DRAGON, DWARF, EGGS,
EMRALD, ENTER, ENTRNC, FIND, FISSUR, FOOD,
- GRATE, HINT, I, INVENT, J, JADE, K, KEYS,
- KNIFE, L, LAMP, LOCK, LOOK, MAGZIN,
+ GRATE, HINT, INVENT, JADE, KEYS,
+ KNIFE, 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,
+ RUBY, RUG, SAPPH, SAY, SIGN, SNAKE,
STEPS, STREAM, THROW, TRIDNT, TROLL, TROLL2,
- URN, VASE, VEND,
- VOLCAN, VRSION = 25, WATER, WD1, WD1X, WD2, WD2X;
+ URN, VASE, VEND, VOLCAN, WATER;
+long I, K, SPK, WD1, WD1X, WD2, WD2X;
+
FILE *logfp;
bool oldstyle = false;
lcg_state lcgstate;
return true;
game.dflag=2;
for (I=1; I<=2; I++) {
- J=1+randrange(NDWARVES-1);
+ int j=1+randrange(NDWARVES-1);
if(PCT(50))
- game.dloc[J]=0;
+ game.dloc[j]=0;
}
for (I=1; I<=NDWARVES-1; I++) {
if(game.dloc[I] == game.loc)
if(game.dloc[I] == 0)
continue;
/* Fill TK array with all the places this dwarf might go. */
- J=1;
+ int j=1;
kk=KEY[game.dloc[I]];
if(kk != 0)
do {
bool avoided = (game.newloc > 300 ||
!INDEEP(game.newloc) ||
game.newloc == game.odloc[I] ||
- (J > 1 && game.newloc == TK[J-1]) ||
- J >= 20 ||
+ (j > 1 && game.newloc == TK[j-1]) ||
+ j >= 20 ||
game.newloc == game.dloc[I] ||
FORCED(game.newloc) ||
(I == PIRATE && CNDBIT(game.newloc,3)) ||
labs(TRAVEL[kk])/1000000 == 100);
if (!avoided) {
- TK[J++] = game.newloc;
+ TK[j++] = game.newloc;
}
++kk;
} while
(TRAVEL[kk-1] >= 0);
- TK[J]=game.odloc[I];
- if(J >= 2)
- --J;
- J=1+randrange(J);
+ TK[j]=game.odloc[I];
+ if(j >= 2)
+ --j;
+ j=1+randrange(j);
game.odloc[I]=game.dloc[I];
- game.dloc[I]=TK[J];
+ game.dloc[I]=TK[j];
game.dseen[I]=(game.dseen[I] && INDEEP(game.loc)) || (game.dloc[I] == game.loc || game.odloc[I] == game.loc);
if(!game.dseen[I]) continue;
game.dloc[I]=game.loc;
if(game.loc == game.chloc || game.prop[CHEST] >= 0)
continue;
K=0;
- for (J=MINTRS; J<=MAXTRS; J++) {
+ for (int j=MINTRS; j<=MAXTRS; j++) {
/* Pirate won't take pyramid from plover room or dark
* room (too easy!). */
- if(J == PYRAM && (game.loc == PLAC[PYRAM] || game.loc == PLAC[EMRALD]))
+ if(j == PYRAM && (game.loc == PLAC[PYRAM] || game.loc == PLAC[EMRALD]))
goto L6020;
- if(TOTING(J)) {
+ if(TOTING(j)) {
goto L6021;
}
L6020:
- if(HERE(J))
+ if(HERE(j))
K=1;
}
+ /* Force chest placement before player finds last treasure */
if(game.tally == 1 && K == 0 && game.place[CHEST] == 0 && HERE(LAMP) && game.prop[LAMP] == 1) {
RSPEAK(186);
MOVE(CHEST,game.chloc);
MOVE(MESSAG,game.chloc2);
- goto L6024;
+ game.dloc[PIRATE]=game.chloc;
+ game.odloc[PIRATE]=game.chloc;
+ game.dseen[PIRATE]=false;
+ continue;
}
if(game.odloc[PIRATE] != game.dloc[PIRATE] && PCT(20))
RSPEAK(127);
MOVE(MESSAG,game.chloc2);
}
RSPEAK(128);
- for (J=MINTRS; J<=MAXTRS; J++) {
- if (!(J == PYRAM && (game.loc == PLAC[PYRAM] || game.loc == PLAC[EMRALD]))) {
- if(AT(J) && game.fixed[J] == 0)
- CARRY(J,game.loc);
- if(TOTING(J))
- DROP(J,game.chloc);
+ for (int j=MINTRS; j<=MAXTRS; j++) {
+ if (!(j == PYRAM && (game.loc == PLAC[PYRAM] || game.loc == PLAC[EMRALD]))) {
+ if(AT(j) && game.fixed[j] == 0)
+ CARRY(j,game.loc);
+ if(TOTING(j))
+ DROP(j,game.chloc);
}
}
- L6024:
game.dloc[PIRATE]=game.chloc;
game.odloc[PIRATE]=game.chloc;
game.dseen[PIRATE]=false;
return false;
}
+static void croak(FILE *cmdin)
+/* Okay, he's dead. Let's get on with it. */
+{
+ if(game.closng) {
+ /* He died during closing time. No resurrection. Tally up a
+ * death and exit. */
+ RSPEAK(131);
+ ++game.numdie;
+ score(0);
+ } else {
+ ++game.numdie;
+ if(!YES(cmdin,79+game.numdie*2,80+game.numdie*2,54))
+ score(0);
+ if(game.numdie == MAXDIE)
+ score(0);
+ game.place[WATER]=0;
+ game.place[OIL]=0;
+ if(TOTING(LAMP))
+ game.prop[LAMP]=0;
+ for (int j=1; j<=NOBJECTS; j++) {
+ int i=NOBJECTS + 1 - j;
+ if(TOTING(i)) {
+ int k=game.oldlc2;
+ if(i == LAMP)
+ k=1;
+ DROP(i,k);
+ }
+ }
+ game.loc=3;
+ game.oldloc=game.loc;
+ }
+}
+
static bool do_command(FILE *cmdin) {
long LL, KQ, VERB, KK, K2, V1, V2;
long obj, i;
game.loc=game.newloc;
if (!dwarfmove())
- goto L99;
+ croak(cmdin);
/* Describe the current location and (maybe) get next command. */
/* Print text for current loc. */
-L2000: if(game.loc == 0) goto L99;
+L2000: if(game.loc == 0)
+ croak(cmdin);
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;
L4000: I=4000; VERB=K; goto Laction;
L4090: I=4090; goto Laction;
-L5000: I=5000;
+L5000: I=5000; obj = K;
Laction:
switch (action(cmdin, I, VERB, obj)) {
case 2: return true;
game.fixed[BEAR]= -1;
game.prop[BEAR]=3;
game.oldlc2=game.newloc;
- goto L99;
+ croak(cmdin);
+ goto L2000;
/* End of specials. */
-
L21: LL=MOD((labs(TRAVEL[KK])/1000),1000);
if(LL != K) {
- if(LL <= 300) {
- J=KEY[LL];
- if(FORCED(LL) && MOD((labs(TRAVEL[J])/1000),1000) == K)
- K2=KK;
- }
- if(TRAVEL[KK] < 0)
- goto L23;
- KK=KK+1;
- goto L21;
-
-L23: KK=K2;
- if(KK == 0) {
- RSPEAK(140);
- return true;
- }
+ if(LL <= 300) {
+ if(FORCED(LL) && MOD((labs(TRAVEL[KEY[LL]])/1000),1000) == K)
+ K2=KK;
+ }
+ if(TRAVEL[KK] < 0)
+ goto L23;
+ KK=KK+1;
+ goto L21;
+
+ L23: KK=K2;
+ if(KK == 0) {
+ RSPEAK(140);
+ return true;
+ }
}
K=MOD(labs(TRAVEL[KK]),1000);
L90: RSPEAK(23);
game.oldlc2=game.loc;
-
-/* Okay, he's dead. Let's get on with it. */
-
-L99: if(game.closng) {
- /* He died during closing time. No resurrection. Tally up a
- * death and exit. */
- RSPEAK(131);
- ++game.numdie;
- score(0);
- } else {
- ++game.numdie;
- if(!YES(cmdin,79+game.numdie*2,80+game.numdie*2,54))
- score(0);
- if(game.numdie == MAXDIE)
- score(0);
- game.place[WATER]=0;
- game.place[OIL]=0;
- if(TOTING(LAMP))
- game.prop[LAMP]=0;
- for (J=1; J<=NOBJECTS; J++) {
- I=NOBJECTS + 1 - J;
- if(TOTING(I)) {
- K=game.oldlc2;
- if(I == LAMP)
- K=1;
- DROP(I,K);
- }
- }
- game.loc=3;
- game.oldloc=game.loc;
- goto L2000;
- }
+ croak(cmdin);
+ goto L2000;
/* Cave closing and scoring */