Continuing gotoicide.

This commit is contained in:
Eric S. Raymond 2017-06-09 14:18:09 -04:00
parent c8ebabdf3b
commit b425de4f28

131
main.c
View file

@ -496,7 +496,31 @@ static bool playermove(FILE *cmdin, token_t verb)
K2=0; K2=0;
if(K == game.loc)K2=91; if(K == game.loc)K2=91;
if(CNDBIT(game.loc,4))K2=274; if(CNDBIT(game.loc,4))K2=274;
if(K2 == 0) goto L21; if(K2 == 0) {
L21:
LL=MOD((labs(TRAVEL[KK])/1000),1000);
if(LL != K) {
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);
KK=KEY[game.loc];
goto L9;
}
RSPEAK(K2); RSPEAK(K2);
return true; return true;
} }
@ -519,47 +543,55 @@ static bool playermove(FILE *cmdin, token_t verb)
game.oldloc=game.loc; game.oldloc=game.loc;
L9: L9:
LL=labs(TRAVEL[KK]); for (;;) {
if(MOD(LL,1000) == 1 || MOD(LL,1000) == K) LL=labs(TRAVEL[KK]);
goto L10; if(MOD(LL,1000) == 1 || MOD(LL,1000) == K)
if(TRAVEL[KK] < 0) { break;
/* Non-applicable motion. Various messages depending on if(TRAVEL[KK] < 0) {
* word given. */ /* Non-applicable motion. Various messages depending on
SPK=12; * word given. */
if(K >= 43 && K <= 50)SPK=52; SPK=12;
if(K == 29 || K == 30)SPK=52; if(K >= 43 && K <= 50)SPK=52;
if(K == 7 || K == 36 || K == 37)SPK=10; if(K == 29 || K == 30)SPK=52;
if(K == 11 || K == 19)SPK=11; if(K == 7 || K == 36 || K == 37)SPK=10;
if(verb == FIND || verb == INVENT)SPK=59; if(K == 11 || K == 19)SPK=11;
if(K == 62 || K == 65)SPK=42; if(verb == FIND || verb == INVENT)SPK=59;
if(K == 17)SPK=80; if(K == 62 || K == 65)SPK=42;
RSPEAK(SPK); if(K == 17)SPK=80;
return true; RSPEAK(SPK);
return true;
}
KK=KK+1;
} }
KK=KK+1; LL=LL/1000;
goto L9;
L10: LL=LL/1000; L11:
L11: game.newloc=LL/1000; game.newloc=LL/1000;
K=MOD(game.newloc,100); /* ESR: an instance of NOBJECTS? */ K=MOD(game.newloc,100);
if(game.newloc <= 300) if(game.newloc <= 300) {
goto L13; if(game.newloc <= 100)
if(game.prop[K] != game.newloc/100-3) goto L14;
if(TOTING(K) || (game.newloc > 200 && AT(K)))
goto L16;
goto L12;
}
if (game.prop[K] != game.newloc/100-3)
goto L16; goto L16;
L12: if(TRAVEL[KK] < 0)BUG(25); L12:
KK=KK+1; do {
game.newloc=labs(TRAVEL[KK])/1000; if(TRAVEL[KK] < 0)BUG(25);
if(game.newloc == LL) goto L12; KK=KK+1;
game.newloc=labs(TRAVEL[KK])/1000;
} while
(game.newloc == LL);
LL=game.newloc; LL=game.newloc;
goto L11; goto L11;
L13: if(game.newloc <= 100) L14:
goto L14; if(game.newloc != 0 && !PCT(game.newloc))
if(TOTING(K) || (game.newloc > 200 && AT(K))) goto L16; goto L12;
goto L12; L16:
game.newloc=MOD(LL,1000);
L14: if(game.newloc != 0 && !PCT(game.newloc)) goto L12;
L16: game.newloc=MOD(LL,1000);
if(game.newloc <= 300) return true; if(game.newloc <= 300) return true;
if(game.newloc <= 500) { if(game.newloc <= 500) {
game.newloc=game.newloc-300; game.newloc=game.newloc-300;
@ -570,8 +602,9 @@ L16: game.newloc=MOD(LL,1000);
* emerald. Note: travel table must include "useless" * emerald. Note: travel table must include "useless"
* entries going through passage, which can never be used for * entries going through passage, which can never be used for
* actual motion, but can be spotted by "go back". */ * actual motion, but can be spotted by "go back". */
game.newloc=99+100-game.loc; /* ESR: an instance of NOBJECTS? */ game.newloc=99+100-game.loc;
if(game.holdng == 0 || (game.holdng == 1 && TOTING(EMRALD))) return true; if(game.holdng == 0 || (game.holdng == 1 && TOTING(EMRALD)))
return true;
game.newloc=game.loc; game.newloc=game.loc;
RSPEAK(117); RSPEAK(117);
return true; return true;
@ -620,28 +653,6 @@ L16: game.newloc=MOD(LL,1000);
RSPEAK(game.newloc-500); RSPEAK(game.newloc-500);
game.newloc=game.loc; game.newloc=game.loc;
return true; return true;
L21: LL=MOD((labs(TRAVEL[KK])/1000),1000);
if(LL != K) {
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);
KK=KEY[game.loc];
goto L9;
} }
static bool do_command(FILE *cmdin) { static bool do_command(FILE *cmdin) {