X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=main.c;h=27a7a090c8a0a05b51f3899d70f55aac16b1d471;hb=dc6a5751ed04ff15103c9852c8dc7427298b6945;hp=374df37c49c38d57dd8e9a7e4a61ce0e6f51cdba;hpb=b373ba447d3954d150ca1148725623e3f271b597;p=open-adventure.git diff --git a/main.c b/main.c index 374df37..27a7a09 100644 --- a/main.c +++ b/main.c @@ -122,20 +122,9 @@ int main(int argc, char *argv[]) set_seed(seedval); /* Initialize game variables */ - if (!game.setup) - initialise(); - - /* Unlike earlier versions, adventure is no longer restartable. (This - * lets us get away with modifying things such as OBJSND(BIRD) without - * having to be able to undo the changes later.) If a "used" copy is - * rerun, we come here and tell the player to run a fresh copy. */ - if (game.setup <= 0) { - RSPEAK(201); - exit(0); - } + initialise(); /* Start-up, dwarf stuff */ - game.setup= -1; game.zzword=RNDVOC(3,0); game.novice=YES(stdin, 65,1,0); game.newloc=1; @@ -146,7 +135,7 @@ int main(int argc, char *argv[]) if (logfp) fprintf(logfp, "seed %ld\n", seedval); - /* interpret commands ubtil EOF or interrupt */ + /* interpret commands until EOF or interrupt */ for (;;) { if (!do_command(stdin)) break; @@ -182,7 +171,7 @@ static void checkhints(FILE *cmdin) for (int hint=1; hint<=HNTMAX; hint++) { if (game.hinted[hint]) continue; - if (!CNDBIT(game.loc,hint+10)) + if (!CNDBIT(game.loc,hint+HBASE)) game.hintlc[hint]= -1; ++game.hintlc[hint]; /* Come here if he's been long enough at required loc(s) for some @@ -275,7 +264,7 @@ bool spotted_by_pirate(int i) /* The pirate's spotted him. He leaves him alone once we've * found chest. K counts if a treasure is here. If not, and * tally=1 for an unseen chest, let the pirate be spotted. - * Note that game.place(CHEST)=0 might mean that he's thrown + * Note that game.place[CHEST]=0 might mean that he's thrown * it to the troll, but in that case he's seen the chest * (game.prop=0). */ if (game.loc == game.chloc || game.prop[CHEST] >= 0) @@ -284,9 +273,7 @@ bool spotted_by_pirate(int i) 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 (HERE(j)) - k=1; + if (j==PYRAM && (game.loc==PLAC[PYRAM] || game.loc==PLAC[EMRALD])) { return true; } if (TOTING(j)) { @@ -308,7 +295,6 @@ bool spotted_by_pirate(int i) game.dloc[PIRATE]=game.chloc; game.odloc[PIRATE]=game.chloc; game.dseen[PIRATE]=false; - return true; } if (HERE(j)) @@ -348,7 +334,7 @@ static bool dwarfmove(void) * means dwarves won't follow him into dead end in maze, but * c'est la vie. They'll wait for him outside the dead * end. */ - if (game.loc == 0 || FORCED(game.loc) || CNDBIT(game.newloc,3)) + if (game.loc == 0 || FORCED(game.loc) || CNDBIT(game.newloc,NOARRR)) return true; /* Dwarf activity level ratchets up */ @@ -362,7 +348,7 @@ static bool dwarfmove(void) * the 5 dwarves. If any of the survivors is at loc, * replace him with the alternate. */ if (game.dflag == 1) { - if (!INDEEP(game.loc) || (PCT(95) && (!CNDBIT(game.loc,4) || PCT(85)))) + if (!INDEEP(game.loc) || (PCT(95) && (!CNDBIT(game.loc,NOBACK) || PCT(85)))) return true; game.dflag=2; for (int i=1; i<=2; i++) { @@ -398,15 +384,15 @@ static bool dwarfmove(void) if (kk != 0) do { game.newloc=MOD(labs(TRAVEL[kk])/1000,1000); - /* Have we avoided a dwarf enciounter? */ - bool avoided = (game.newloc > 300 || + /* Have we avoided a dwarf encounter? */ + bool avoided = (SPECIAL(game.newloc) || !INDEEP(game.newloc) || game.newloc == game.odloc[i] || (j > 1 && game.newloc == TK[j-1]) || j >= 20 || game.newloc == game.dloc[i] || FORCED(game.newloc) || - (i == PIRATE && CNDBIT(game.newloc,3)) || + (i == PIRATE && CNDBIT(game.newloc,NOARRR)) || labs(TRAVEL[kk])/1000000 == 100); if (!avoided) { TK[j++] = game.newloc; @@ -538,12 +524,12 @@ static bool playermove(FILE *cmdin, token_t verb, int motion) game.oldloc=game.loc; K2=0; if (motion == game.loc)K2=91; - if (CNDBIT(game.loc,4))K2=274; + if (CNDBIT(game.loc,NOBACK))K2=274; if (K2 == 0) { for (;;) { LL=MOD((labs(TRAVEL[KK])/1000),1000); if (LL != motion) { - if (LL <= 300) { + if (!SPECIAL(LL)) { if (FORCED(LL) && MOD((labs(TRAVEL[KEY[LL]])/1000),1000) == motion) K2=KK; } @@ -621,7 +607,7 @@ static bool playermove(FILE *cmdin, token_t verb, int motion) for (;;) { game.newloc=LL/1000; motion=MOD(game.newloc,100); - if (game.newloc <= 300) { + if (!SPECIAL(game.newloc)) { if (game.newloc <= 100) { if (game.newloc == 0 || PCT(game.newloc)) break; @@ -642,10 +628,10 @@ static bool playermove(FILE *cmdin, token_t verb, int motion) } game.newloc=MOD(LL,1000); - if (game.newloc <= 300) + if (!SPECIAL(game.newloc)) return true; if (game.newloc <= 500) { - game.newloc=game.newloc-300; + game.newloc=game.newloc-SPECIALBASE; switch (game.newloc) { case 1: @@ -915,7 +901,7 @@ static void listobjects(void) static bool do_command(FILE *cmdin) /* Get and execute a command */ { - long KQ, VERB, KK, V1, V2; + long KQ, VERB, V1, V2; long i, k, KMOD; static long igo = 0; static long obj = 0; @@ -933,7 +919,7 @@ static bool do_command(FILE *cmdin) * wants to go. If so, the dwarf's blocking his way. If * coming from place forbidden to pirate (dwarves rooted in * place) let him get out (and attacked). */ - if (game.newloc != game.loc && !FORCED(game.loc) && !CNDBIT(game.loc,3)) { + if (game.newloc != game.loc && !FORCED(game.loc) && !CNDBIT(game.loc,NOARRR)) { for (i=1; i<=NDWARVES-1; i++) { if (game.odloc[i] == game.newloc && game.dseen[i]) { game.newloc=game.loc;