Continuing gotoicide.

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

91
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,9 +543,10 @@ static bool playermove(FILE *cmdin, token_t verb)
game.oldloc=game.loc; game.oldloc=game.loc;
L9: L9:
for (;;) {
LL=labs(TRAVEL[KK]); LL=labs(TRAVEL[KK]);
if(MOD(LL,1000) == 1 || MOD(LL,1000) == K) if(MOD(LL,1000) == 1 || MOD(LL,1000) == K)
goto L10; break;
if(TRAVEL[KK] < 0) { if(TRAVEL[KK] < 0) {
/* Non-applicable motion. Various messages depending on /* Non-applicable motion. Various messages depending on
* word given. */ * word given. */
@ -537,29 +562,36 @@ L9:
return true; return true;
} }
KK=KK+1; KK=KK+1;
goto L9; }
LL=LL/1000;
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)
goto L14;
if(TOTING(K) || (game.newloc > 200 && AT(K)))
goto L16;
goto L12;
}
if (game.prop[K] != game.newloc/100-3) if (game.prop[K] != game.newloc/100-3)
goto L16; goto L16;
L12: if(TRAVEL[KK] < 0)BUG(25); L12:
do {
if(TRAVEL[KK] < 0)BUG(25);
KK=KK+1; KK=KK+1;
game.newloc=labs(TRAVEL[KK])/1000; game.newloc=labs(TRAVEL[KK])/1000;
if(game.newloc == LL) goto L12; } 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:
L14: if(game.newloc != 0 && !PCT(game.newloc)) goto L12; game.newloc=MOD(LL,1000);
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) {