Global-variable elimination.

This commit is contained in:
Eric S. Raymond 2017-06-07 14:45:30 -04:00
parent 73e8d7fd87
commit 7555eb7de3
3 changed files with 36 additions and 39 deletions

View file

@ -141,7 +141,7 @@ extern long AMBER, ATTACK, AXE, BACK, BATTER, BEAR,
EMRALD, ENTER, ENTRNC, FIND, FISSUR, FOOD, GRATE, HINT, INVENT, EMRALD, ENTER, ENTRNC, FIND, FISSUR, FOOD, GRATE, HINT, INVENT,
JADE, KEYS, KNIFE, LAMP, LOCK, LOOK, MAGZIN, MESSAG, MIRROR, NUGGET, NUL, JADE, KEYS, KNIFE, LAMP, LOCK, LOOK, MAGZIN, MESSAG, MIRROR, NUGGET, NUL,
OGRE, OIL, OYSTER, PANIC, PEARL, PILLOW, PLANT, PLANT2, PYRAM, OGRE, OIL, OYSTER, PANIC, PEARL, PILLOW, PLANT, PLANT2, PYRAM,
RESER, ROD, ROD2, RUBY, RUG, SAPPH, SAY, SCORE, SECT, SIGN, SNAKE, RESER, ROD, ROD2, RUBY, RUG, SAPPH, SAY, SECT, SIGN, SNAKE,
STEPS, STICK, STREAM, THROW, TRIDNT, TROLL, TROLL2, STEPS, STICK, STREAM, THROW, TRIDNT, TROLL, TROLL2,
URN, VASE, VEND, VOLCAN, WATER; URN, VASE, VEND, VOLCAN, WATER;
/* evrything else */ /* evrything else */

2
main.c
View file

@ -25,7 +25,7 @@ long AMBER, ATTACK, AXE, BACK, BATTER, BEAR, BIRD, BLOOD,
KNIFE, L, LAMP, LOCK, LOOK, MAGZIN, MAXDIE, KNIFE, L, LAMP, LOCK, LOOK, MAGZIN, MAXDIE,
MESSAG, MIRROR, NUGGET, NUL, OGRE, OIL, OYSTER, MESSAG, MIRROR, NUGGET, NUL, OGRE, OIL, OYSTER,
PEARL, PILLOW, PLANT, PLANT2, PYRAM, RESER, ROD, ROD2, PEARL, PILLOW, PLANT, PLANT2, PYRAM, RESER, ROD, ROD2,
RUBY, RUG, SAPPH, SAY, SCORE, SECT, SIGN, SNAKE, SPK, RUBY, RUG, SAPPH, SAY, SECT, SIGN, SNAKE, SPK,
STEPS, STICK, STREAM, THROW, TRIDNT, TROLL, TROLL2, STEPS, STICK, STREAM, THROW, TRIDNT, TROLL, TROLL2,
URN, V1, V2, VASE, VEND, URN, V1, V2, VASE, VEND,
VOLCAN, VRSION = 25, WATER, WD1, WD1X, WD2, WD2X; VOLCAN, VRSION = 25, WATER, WD1, WD1X, WD2, WD2X;

71
score.c
View file

@ -8,7 +8,7 @@
void score(long mode) { void score(long mode) {
/* arg is <0 if scoring, >0 if quitting, =0 if died or won */ /* arg is <0 if scoring, >0 if quitting, =0 if died or won */
long mxscor = 0; long i, score = 0, mxscor = 0;
/* The present scoring algorithm is as follows: /* The present scoring algorithm is as follows:
* Objective: Points: Present total possible: * Objective: Points: Present total possible:
@ -29,21 +29,18 @@ void score(long mode) {
* Points can also be deducted for using hints or too many turns, or for * Points can also be deducted for using hints or too many turns, or for
* saving intermediate positions. */ * saving intermediate positions. */
SCORE=0;
mxscor=0;
/* First tally up the treasures. Must be in building and not broken. /* First tally up the treasures. Must be in building and not broken.
* Give the poor guy 2 points just for finding each treasure. */ * Give the poor guy 2 points just for finding each treasure. */
for (I=50; I<=MAXTRS; I++) { for (i=MINTRS; i<=MAXTRS; i++) {
if(PTEXT[I] != 0) { if(PTEXT[i] != 0) {
K=12; K=12;
if(I == CHEST)K=14; if(i == CHEST)K=14;
if(I > CHEST)K=16; if(i > CHEST)K=16;
if(game.prop[I] >= 0) if(game.prop[i] >= 0)
SCORE=SCORE+2; score=score+2;
if(game.place[I] == 3 && game.prop[I] == 0) if(game.place[i] == 3 && game.prop[i] == 0)
SCORE=SCORE+K-2; score=score+K-2;
mxscor=mxscor+K; mxscor=mxscor+K;
} }
} /* end loop */ } /* end loop */
@ -55,48 +52,48 @@ void score(long mode) {
* "cave closed" (indicated by "game.closed"), then bonus is zero for * "cave closed" (indicated by "game.closed"), then bonus is zero for
* mundane exits or 133, 134, 135 if he blew it (so to speak). */ * mundane exits or 133, 134, 135 if he blew it (so to speak). */
SCORE=SCORE+(MAXDIE-game.numdie)*10; score=score+(MAXDIE-game.numdie)*10;
mxscor=mxscor+MAXDIE*10; mxscor=mxscor+MAXDIE*10;
if(mode == 0)SCORE=SCORE+4; if(mode == 0)score=score+4;
mxscor=mxscor+4; mxscor=mxscor+4;
if(game.dflag != 0)SCORE=SCORE+25; if(game.dflag != 0)score=score+25;
mxscor=mxscor+25; mxscor=mxscor+25;
if(game.closng)SCORE=SCORE+25; if(game.closng)score=score+25;
mxscor=mxscor+25; mxscor=mxscor+25;
if(game.closed) { if(game.closed) {
if(game.bonus == 0)SCORE=SCORE+10; if(game.bonus == 0)score=score+10;
if(game.bonus == 135)SCORE=SCORE+25; if(game.bonus == 135)score=score+25;
if(game.bonus == 134)SCORE=SCORE+30; if(game.bonus == 134)score=score+30;
if(game.bonus == 133)SCORE=SCORE+45; if(game.bonus == 133)score=score+45;
} }
mxscor=mxscor+45; mxscor=mxscor+45;
/* Did he come to Witt's End as he should? */ /* Did he come to Witt's End as he should? */
if(game.place[MAGZIN] == 108) if(game.place[MAGZIN] == 108)
SCORE=SCORE+1; score=score+1;
mxscor=mxscor+1; mxscor=mxscor+1;
/* Round it off. */ /* Round it off. */
SCORE=SCORE+2; score=score+2;
mxscor=mxscor+2; mxscor=mxscor+2;
/* Deduct for hints/turns/saves. Hints < 4 are special; see database desc. */ /* Deduct for hints/turns/saves. Hints < 4 are special; see database desc. */
for (I=1; I<=HNTMAX; I++) { for (i=1; i<=HNTMAX; i++) {
if(game.hinted[I])SCORE=SCORE-HINTS[I][2]; if(game.hinted[i])score=score-HINTS[i][2];
} /* end loop */ } /* end loop */
if(game.novice) if(game.novice)
SCORE=SCORE-5; score=score-5;
if(game.clshnt) if(game.clshnt)
SCORE=SCORE-10; score=score-10;
SCORE=SCORE-game.trnluz-game.saved; score=score-game.trnluz-game.saved;
/* Return to score command if that's where we came from. */ /* Return to score command if that's where we came from. */
if(mode < 0) { if(mode < 0) {
SETPRM(1,SCORE,mxscor); SETPRM(1,score,mxscor);
SETPRM(3,game.turns,game.turns); SETPRM(3,game.turns,game.turns);
RSPEAK(259); RSPEAK(259);
return; return;
@ -104,22 +101,22 @@ void score(long mode) {
/* that should be good enough. Let's tell him all about it. */ /* that should be good enough. Let's tell him all about it. */
if(SCORE+game.trnluz+1 >= mxscor && game.trnluz != 0)RSPEAK(242); if(score+game.trnluz+1 >= mxscor && game.trnluz != 0)RSPEAK(242);
if(SCORE+game.saved+1 >= mxscor && game.saved != 0)RSPEAK(143); if(score+game.saved+1 >= mxscor && game.saved != 0)RSPEAK(143);
SETPRM(1,SCORE,mxscor); SETPRM(1,score,mxscor);
SETPRM(3,game.turns,game.turns); SETPRM(3,game.turns,game.turns);
RSPEAK(262); RSPEAK(262);
for (I=1; I<=CLSSES; I++) { for (i=1; i<=CLSSES; i++) {
if(CVAL[I] >= SCORE) goto L20210; if(CVAL[i] >= score) goto L20210;
} /* end loop */ } /* end loop */
SPK=265; SPK=265;
goto L25000; goto L25000;
L20210: SPEAK(CTEXT[I]); L20210: SPEAK(CTEXT[i]);
SPK=264; SPK=264;
if(I >= CLSSES) goto L25000; if(i >= CLSSES) goto L25000;
I=CVAL[I]+1-SCORE; i=CVAL[i]+1-score;
SETPRM(1,I,I); SETPRM(1,i,i);
SPK=263; SPK=263;
L25000: RSPEAK(SPK); L25000: RSPEAK(SPK);
exit(0); exit(0);