From fa1f8591629eccdaf53da24c29fdf02acb84255f Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Tue, 23 May 2017 19:40:34 -0400 Subject: [PATCH] Move more globals into the state structure. --- actions1.c | 16 ++++++------ init.c | 12 ++++----- main.c | 77 +++++++++++++++++++++++++++--------------------------- main.h | 8 ++++++ score.c | 6 ++--- share.h | 8 +++--- 6 files changed, 68 insertions(+), 59 deletions(-) diff --git a/actions1.c b/actions1.c index 702e14c..5ae13cb 100644 --- a/actions1.c +++ b/actions1.c @@ -162,8 +162,8 @@ L9040: if(OBJ == CLAM || OBJ == OYSTER) goto L9046; if(OBJ == CHAIN) goto L9048; if(!game.closng) goto L9043; K=130; - if(!PANIC)game.clock2=15; - PANIC=true; + if(!game.panic)game.clock2=15; + game.panic=true; return(2010); L9043: K=34+PROP[GRATE]; @@ -476,7 +476,7 @@ L9290: if(OBJ != DWARF || !game.closed) return(2011); L8300: SPK=201; RSPEAK(260); if(!YES(input,200,54,54)) return(2012); - SAVED=SAVED+5; + game.saved=game.saved+5; KK= -1; /* This next part is shared with the "resume" code. The two cases are @@ -497,10 +497,10 @@ L8305: DATIME(I,K); SAVWDS(game.abbnum,game.blklin,game.bonus,game.clock1,game.clock2,game.closed,game.closng); SAVWDS(game.detail,game.dflag,game.dkill,game.dtotal,game.foobar,game.holdng,game.iwest); SAVWDS(game.knfloc,game.limit,LL,game.lmwarn,LOC,game.newloc,game.numdie); - SAVWDS(OBJ,OLDLC2,OLDLOC,OLDOBJ,PANIC,SAVED,SETUP); + SAVWDS(OBJ,game.oldlc2,game.oldloc,game.oldobj,game.panic,game.saved,SETUP); SAVWDS(SPK,TALLY,THRESH,TRNDEX,TRNLUZ,TURNS,OBJTXT[OYSTER]); SAVWDS(VERB,WD1,WD1X,WD2,game.wzdark,ZZWORD,OBJSND[BIRD]); - SAVWDS(OBJTXT[SIGN],CLSHNT,NOVICE,K,K,K,K); + SAVWDS(OBJTXT[SIGN],CLSHNT,game.novice,K,K,K,K); SAVARR(ABB,LOCSIZ); SAVARR(ATLOC,LOCSIZ); SAVARR(DLOC,6); @@ -546,8 +546,8 @@ L8320: if(PROP[RUG] != 2)SPK=224; L9320: if(OBJ != RUG) return(2011); SPK=223; if(PROP[RUG] != 2) return(2011); - OLDLC2=OLDLOC; - OLDLOC=LOC; + game.oldlc2=game.oldloc; + game.oldloc=LOC; game.newloc=PLACE[RUG]+FIXED[RUG]-LOC; SPK=226; if(PROP[SAPPH] >= 0)SPK=227; @@ -578,7 +578,7 @@ L8340: if(!AT(RESER) && LOC != FIXED[RESER]-1) return(2011); PSPEAK(RESER,PROP[RESER]+1); PROP[RESER]=1-PROP[RESER]; if(AT(RESER)) return(2012); - OLDLC2=LOC; + game.oldlc2=LOC; game.newloc=0; RSPEAK(241); return(2); diff --git a/init.c b/init.c index 240ad92..ae42f25 100644 --- a/init.c +++ b/init.c @@ -218,7 +218,7 @@ L1001: /*etc*/ ; /* Start new data section. Sect is the section number. */ L1002: SECT=GETNUM(OPENED); - OLDLOC= -1; + game.oldloc= -1; switch (SECT) { case 0: return(0); case 1: goto L1004; case 2: goto L1004; case 3: goto L1030; case 4: goto L1040; case 5: goto L1004; case 6: goto L1004; case 7: goto L1050; case 8: goto L1060; case @@ -241,8 +241,8 @@ L1006: KK=KK+1; LINES[KK]=GETTXT(false,false,false,KK); if(LINES[KK] != -1) goto L1006; LINES[LINUSE]=KK; - if(LOC == OLDLOC) goto L1005; - OLDLOC=LOC; + if(LOC == game.oldloc) goto L1005; + game.oldloc=LOC; LINES[LINUSE]= -KK; if(SECT == 14) goto L1014; if(SECT == 10) goto L1012; @@ -587,12 +587,12 @@ L1106: /*etc*/ ; game.clock1=30; game.clock2=50; CONDS=SETBIT(11); - SAVED=0; + game.saved=0; game.closng=false; - PANIC=false; + game.panic=false; game.closed=false; CLSHNT=false; - NOVICE=false; + game.novice=false; SETUP=1; /* if we can ever think of how, we should save it at this point */ diff --git a/main.c b/main.c index 6f59f7d..e813181 100644 --- a/main.c +++ b/main.c @@ -29,11 +29,10 @@ long ACTSPK[36], AMBER, ATTACK, AXE, BACK, BATTER, BEAR, BIRD, BLOOD, KNIFE, KQ, L, LAMP, LINSIZ = 12500, LINUSE, LL, LOC, LOCK, LOCSIZ = 185, LOCSND[186], LOOK, LTEXT[186], MAGZIN, MAXDIE, MAXTRS, MESH = 123456789, - MESSAG, MIRROR, MXSCOR, - NOVICE, NUGGET, NUL, OBJ, OBJSND[101], - OBJTXT[101], ODLOC[7], OGRE, OIL, OLDLC2, OLDLOC, OLDOBJ, OYSTER, - PANIC, PEARL, PILLOW, PLAC[101], PLANT, PLANT2, PROP[101], PYRAM, - RESER, ROD, ROD2, RTXSIZ = 277, RUBY, RUG, SAPPH, SAVED, SAY, + MESSAG, MIRROR, MXSCOR, NUGGET, NUL, OBJ, OBJSND[101], + OBJTXT[101], ODLOC[7], OGRE, OIL, OYSTER, + PEARL, PILLOW, PLAC[101], PLANT, PLANT2, PROP[101], PYRAM, + RESER, ROD, ROD2, RTXSIZ = 277, RUBY, RUG, SAPPH, SAY, SCORE, SECT, SIGN, SNAKE, SPK, STEPS, STEXT[186], STICK, STREAM, TABNDX, TALLY, THRESH, THROW, TK[21], TRAVEL[886], TRIDNT, TRNDEX, TRNLUZ, TRNSIZ = 5, TRNVAL[6], TRNVLS, TROLL, TROLL2, TRVS, @@ -88,8 +87,8 @@ int main(int argc, char *argv[]) { * game.closng says whether it's closing time yet * CLSHNT says whether he's read the clue in the endgame * game.lmwarn says whether he's been warned about lamp going dim - * NOVICE says whether he asked for instructions at start-up - * PANIC says whether he's found out he's trapped in the cave + * game.novice says whether he asked for instructions at start-up + * game.panic says whether he's found out he's trapped in the cave * game.wzdark says whether the loc he's leaving was dark */ #include "funcs.h" @@ -119,11 +118,11 @@ int main(int argc, char *argv[]) { L1: SETUP= -1; I=RAN(-1); ZZWORD=RNDVOC(3,0)+MESH*2; - NOVICE=YES(stdin, 65,1,0); + game.novice=YES(stdin, 65,1,0); game.newloc=1; LOC=1; game.limit=330; - if(NOVICE)game.limit=1000; + if(game.novice)game.limit=1000; for (;;) { do_command(stdin); @@ -137,8 +136,8 @@ static void do_command(FILE *cmdin) { L2: if(!OUTSID(game.newloc) || game.newloc == 0 || !game.closng) goto L71; RSPEAK(130); game.newloc=LOC; - if(!PANIC)game.clock2=15; - PANIC=true; + if(!game.panic)game.clock2=15; + game.panic=true; /* See if a dwarf has seen him and has come from where he wants to go. If so, * the dwarf's blocking his way. If coming from place forbidden to pirate @@ -287,7 +286,7 @@ L6030: /*etc*/ ; SETPRM(1,STICK,0); RSPEAK(K+1+2/(1+STICK)); if(STICK == 0) goto L2000; - OLDLC2=LOC; + game.oldlc2=LOC; goto L99; @@ -351,7 +350,7 @@ L2010: SPK=K; L2011: RSPEAK(SPK); L2012: VERB=0; - OLDOBJ=OBJ; + game.oldobj=OBJ; OBJ=0; /* Check if this loc is eligible for any hints. If been here long enough, @@ -478,11 +477,13 @@ L8000: SETPRM(1,WD1,WD1X); /* Figure out the new location * - * Given the current location in "LOC", and a motion verb number in "K", put - * the new location in "game.newloc". The current loc is saved in "OLDLOC" in case - * he wants to retreat. The current OLDLOC is saved in OLDLC2, in case he - * dies. (if he does, game.newloc will be limbo, and OLDLOC will be what killed - * him, so we need OLDLC2, which is the last place he was safe.) */ + * Given the current location in "LOC", and a motion verb number in + * "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 + * does, game.newloc will be limbo, and game.oldloc will be what + * killed him, so we need game.oldlc2, which is the last place he was + * safe.) */ L8: KK=KEY[LOC]; game.newloc=LOC; @@ -491,8 +492,8 @@ L8: KK=KEY[LOC]; if(K == BACK) goto L20; if(K == LOOK) goto L30; if(K == CAVE) goto L40; - OLDLC2=OLDLOC; - OLDLOC=LOC; + game.oldlc2=game.oldloc; + game.oldloc=LOC; L9: LL=IABS(TRAVEL[KK]); if(MOD(LL,1000) == 1 || MOD(LL,1000) == K) goto L10; @@ -575,18 +576,18 @@ L30310: game.newloc=PLAC[TROLL]+FIXD[TROLL]-LOC; DROP(BEAR,game.newloc); FIXED[BEAR]= -1; PROP[BEAR]=3; - OLDLC2=game.newloc; + game.oldlc2=game.newloc; goto L99; /* End of specials. */ -/* Handle "go back". Look for verb which goes from LOC to OLDLOC, or to OLDLC2 - * If OLDLOC has forced-motion. K2 saves entry -> forced loc -> previous loc. */ +/* Handle "go back". Look for verb which goes from LOC to game.oldloc, or to game.oldlc2 + * If game.oldloc has forced-motion. K2 saves entry -> forced loc -> previous loc. */ -L20: K=OLDLOC; - if(FORCED(K))K=OLDLC2; - OLDLC2=OLDLOC; - OLDLOC=LOC; +L20: K=game.oldloc; + if(FORCED(K))K=game.oldlc2; + game.oldlc2=game.oldloc; + game.oldloc=LOC; K2=0; if(K == LOC)K2=91; if(CNDBIT(LOC,4))K2=274; @@ -652,7 +653,7 @@ L50: SPK=12; * snide messages available. Each death results in a message (81, 83, etc.) * which offers reincarnation; if accepted, this results in message 82, 84, * etc. The last time, if he wants another chance, he gets a snide remark as - * we exit. When reincarnated, all objects being carried get dropped at OLDLC2 + * we exit. When reincarnated, all objects being carried get dropped at game.oldlc2 * (presumably the last place prior to being killed) without change of props. * the loop runs backwards to assure that the bird is dropped before the cage. * (this kluge could be changed once we're sure all references to bird and cage @@ -660,12 +661,12 @@ L50: SPK=12; * it in the cave). It is turned off and left outside the building (only if he * was carrying it, of course). He himself is left inside the building (and * heaven help him if he tries to xyzzy back into the cave without the lamp!). - * OLDLOC is zapped so he can't just "retreat". */ + * game.oldloc is zapped so he can't just "retreat". */ /* The easiest way to get killed is to fall into a pit in pitch darkness. */ L90: RSPEAK(23); - OLDLC2=LOC; + game.oldlc2=LOC; /* Okay, he's dead. Let's get on with it. */ @@ -679,13 +680,13 @@ L99: if(game.closng) goto L95; /* 98 */ for (J=1; J<=100; J++) { I=101-J; if(!TOTING(I)) goto L98; - K=OLDLC2; + K=game.oldlc2; if(I == LAMP)K=1; DROP(I,K); L98: /*etc*/ ; } /* end loop */ LOC=3; - OLDLOC=LOC; + game.oldloc=LOC; goto L2000; /* He died during closing time. No resurrection. Tally up a death and exit. */ @@ -727,13 +728,13 @@ L40030: goto L2602; L40100: if(PROP[GRATE] == 0 && !HERE(KEYS)) goto L40010; goto L40020; -L40200: if(PLACE[BIRD] == LOC && TOTING(ROD) && OLDOBJ == BIRD) goto L40010; +L40200: if(PLACE[BIRD] == LOC && TOTING(ROD) && game.oldobj == BIRD) goto L40010; goto L40030; L40300: if(HERE(SNAKE) && !HERE(BIRD)) goto L40010; goto L40020; -L40400: if(ATLOC[LOC] == 0 && ATLOC[OLDLOC] == 0 && ATLOC[OLDLC2] == 0 && game.holdng > +L40400: if(ATLOC[LOC] == 0 && ATLOC[game.oldloc] == 0 && ATLOC[game.oldlc2] == 0 && game.holdng > 1) goto L40010; goto L40020; @@ -745,7 +746,7 @@ L40600: goto L40010; L40700: if(game.dflag == 0) goto L40010; goto L40020; -L40800: if(ATLOC[LOC] == 0 && ATLOC[OLDLOC] == 0 && ATLOC[OLDLC2] == 0) goto +L40800: if(ATLOC[LOC] == 0 && ATLOC[game.oldloc] == 0 && ATLOC[game.oldlc2] == 0) goto L40010; goto L40030; @@ -785,7 +786,7 @@ L41000: if(TALLY == 1 && PROP[JADE] < 0) goto L40010; /* When the first warning comes, we lock the grate, destroy the bridge, kill * all the dwarves (and the pirate), remove the troll and bear (unless dead), * and set "game.closng" to true. Leave the dragon; too much trouble to move it. - * from now until game.clock2 runs out, he cannot unlock the grate, move to any + * from now until clock2 runs out, he cannot unlock the grate, move to any * location outside the cave, or create the bridge. Nor can he be * resurrected if he dies. Note that the snake is already gone, since he got * to the treasure accessible only via the hall of the mountain king. Also, he's @@ -814,7 +815,7 @@ L10000: PROP[GRATE]=0; game.closng=true; goto L19999; -/* ONCE HE'S PANICKED, AND game.clock2 HAS RUN OUT, WE COME HERE TO SET UP THE +/* ONCE HE'S PANICKED, AND CLOCK2 HAS RUN OUT, WE COME HERE TO SET UP THE * STORAGE ROOM. THE ROOM HAS TWO LOCS, HARDWIRED AS 115 (NE) AND 116 (SW). * AT THE NE END, WE PLACE EMPTY BOTTLES, A NURSERY OF PLANTS, A BED OF * OYSTERS, A PILE OF LAMPS, RODS WITH STARS, SLEEPING DWARVES, AND HIM. AT @@ -834,7 +835,7 @@ L11000: PROP[BOTTLE]=PUT(BOTTLE,115,1); PROP[ROD]=PUT(ROD,115,0); PROP[DWARF]=PUT(DWARF,115,0); LOC=115; - OLDLOC=115; + game.oldloc=115; game.newloc=115; /* Leave the grate with normal (non-negative) property. Reuse sign. */ diff --git a/main.h b/main.h index dfc27bd..0e4feb0 100644 --- a/main.h +++ b/main.h @@ -32,8 +32,16 @@ struct game_t { long lmwarn; /* LOC will go here */ long newloc; + /* OBJ will go here */ long numdie; + long oldlc2; + long oldloc; + long oldobj; + long panic; + long saved; /* more state will go here */ long wzdark; + /* more state will go here */ + long novice; }; extern struct game_t game; diff --git a/score.c b/score.c index 484a9e7..3940dd1 100644 --- a/score.c +++ b/score.c @@ -83,9 +83,9 @@ L20020: MXSCOR=MXSCOR+45; for (I=1; I<=HNTMAX; I++) { if(HINTED[I])SCORE=SCORE-HINTS[I][2]; } /* end loop */ - if(NOVICE)SCORE=SCORE-5; + if(game.novice)SCORE=SCORE-5; if(CLSHNT)SCORE=SCORE-10; - SCORE=SCORE-TRNLUZ-SAVED; + SCORE=SCORE-TRNLUZ-game.saved; /* Return to score command if that's where we came from. */ @@ -94,7 +94,7 @@ L20020: MXSCOR=MXSCOR+45; /* that should be good enough. Let's tell him all about it. */ if(SCORE+TRNLUZ+1 >= MXSCOR && TRNLUZ != 0)RSPEAK(242); - if(SCORE+SAVED+1 >= MXSCOR && SAVED != 0)RSPEAK(143); + if(SCORE+game.saved+1 >= MXSCOR && game.saved != 0)RSPEAK(143); SETPRM(1,SCORE,MXSCOR); SETPRM(3,TURNS,TURNS); RSPEAK(262); diff --git a/share.h b/share.h index 7beee36..4d4058a 100644 --- a/share.h +++ b/share.h @@ -11,10 +11,10 @@ extern long ACTSPK[], AMBER, ATTACK, AXE, BACK, BATTER, BEAR, KNIFE, KQ, L, LAMP, LINSIZ, LINUSE, LL, LOC, LOCK, LOCSIZ, LOCSND[], LOOK, LTEXT[], MAGZIN, MAXDIE, MAXTRS, MESH, MESSAG, MIRROR, MXSCOR, - NOVICE, NUGGET, NUL, OBJ, OBJSND[], - OBJTXT[], ODLOC[], OGRE, OIL, OLDLC2, OLDLOC, OLDOBJ, OYSTER, - PANIC, PEARL, PILLOW, PLAC[], PLANT, PLANT2, PROP[], PYRAM, - RESER, ROD, ROD2, RTXSIZ, RUBY, RUG, SAPPH, SAVED, SAY, + NUGGET, NUL, OBJ, OBJSND[], + OBJTXT[], ODLOC[], OGRE, OIL, OYSTER, + PEARL, PILLOW, PLAC[], PLANT, PLANT2, PROP[], PYRAM, + RESER, ROD, ROD2, RTXSIZ, RUBY, RUG, SAPPH, SAY, SCORE, SECT, SETUP, SIGN, SNAKE, SPK, STEPS, STEXT[], STICK, STREAM, TABNDX, TALLY, THRESH, THROW, TK[], TRAVEL[], TRIDNT, TRNDEX, TRNLUZ, TRNSIZ, TRNVAL[], TRNVLS, TROLL, TROLL2, TRVS, -- 2.31.1