X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=main.c;h=1db050f91583e7f42bfcbb2ff9ce440c1aefc0a7;hp=7a179212619ba34b306182894dde4205a0032cb9;hb=6ecd0010931a988792e672e1fe0a1192fca7b002;hpb=a8a7c50691ef3e128e0483665131f9979f6d37f0 diff --git a/main.c b/main.c index 7a17921..1db050f 100644 --- a/main.c +++ b/main.c @@ -41,7 +41,7 @@ long AMBER, AXE, BACK, BATTERY, BEAR, BIRD, BLOOD, RUBY, RUG, SAPPH, SAY, SIGN, SNAKE, STEPS, STREAM, THROW, TRIDENT, TROLL, TROLL2, URN, VASE, VEND, VOLCANO, WATER; -long WD1, WD1X, WD2, WD2X; +token_t WD1, WD1X, WD2, WD2X; FILE *logfp = NULL, *rfp = NULL; bool oldstyle = false; @@ -78,11 +78,11 @@ int main(int argc, char *argv[]) /* Options. */ #ifndef ADVENT_NOSAVE - char* opts = "l:or:s"; - char* usage = "Usage: %s [-l logfilename] [-o] [-r restorefilename] [-s] \n"; + const char* opts = "l:or:s"; + const char* usage = "Usage: %s [-l logfilename] [-o] [-r restorefilename] [-s] \n"; #else - char* opts = "l:os"; - char* usage = "Usage: %s [-l logfilename] [-o] [-s] \n"; + const char* opts = "l:os"; + const char* usage = "Usage: %s [-l logfilename] [-o] [-s] \n"; #endif while ((ch = getopt(argc, argv, opts)) != EOF) { switch (ch) { @@ -131,16 +131,6 @@ int main(int argc, char *argv[]) linenoiseHistorySetMaxLen(350); - /* Logical variables: - * - * game.closed says whether we're all the way closed - * game.closng says whether it's closing time yet - * game.clshnt says whether he's read the clue in the endgame - * game.lmwarn says whether he's been warned about lamp going dim - * 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 */ - /* Initialize our LCG PRNG with parameters tested against * Knuth vol. 2. by the original authors */ game.lcg_a = 1093; @@ -157,10 +147,11 @@ int main(int argc, char *argv[]) game.zzword = RNDVOC(3, 0); game.newloc = LOC_START; game.loc = LOC_START; - game.limit = 330; + game.limit = GAMELIMIT; if (!rfp) { game.novice = YES(arbitrary_messages[WELCOME_YOU], arbitrary_messages[CAVE_NEARBY], arbitrary_messages[NO_MESSAGE]); - if (game.novice)game.limit = 1000; + if (game.novice) + game.limit = NOVICELIMIT; } else { restore(rfp); } @@ -295,7 +286,7 @@ static 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] = NOWHERE might mean that he's thrown + * that game.place[CHEST] = LOC_NOWHERE 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) @@ -316,7 +307,7 @@ static bool spotted_by_pirate(int i) } } /* Force chest placement before player finds last treasure */ - if (game.tally == 1 && snarfed == 0 && game.place[CHEST] == NOWHERE && HERE(LAMP) && game.prop[LAMP] == 1) { + if (game.tally == 1 && snarfed == 0 && game.place[CHEST] == LOC_NOWHERE && HERE(LAMP) && game.prop[LAMP] == 1) { RSPEAK(PIRATE_SPOTTED); movechest = true; } @@ -512,7 +503,7 @@ static void croak(void) } else if (game.numdie == maximum_deaths || !YES(query, yes_response, arbitrary_messages[OK_MAN])) terminate(endgame); else { - game.place[WATER] = game.place[OIL] = NOWHERE; + game.place[WATER] = game.place[OIL] = LOC_NOWHERE; if (TOTING(LAMP)) game.prop[LAMP] = 0; for (int j = 1; j <= NOBJECTS; j++) { @@ -878,7 +869,7 @@ static void lampcheck(void) if (!game.lmwarn && HERE(LAMP)) { game.lmwarn = true; int spk = GET_BATTERIES; - if (game.place[BATTERY] == NOWHERE)spk = LAMP_DIM; + if (game.place[BATTERY] == LOC_NOWHERE)spk = LAMP_DIM; if (game.prop[BATTERY] == 1)spk = MISSING_BATTERYIES; RSPEAK(spk); } @@ -1066,23 +1057,24 @@ L2607: if (V1 == ENTER && WD2 > 0) { WD1 = WD2; WD1X = WD2X; - WD2 = 0; + wordclear(&WD2); } else { + /* FIXME: Magic numbers */ if (!((V1 != 1000 + WATER && V1 != 1000 + OIL) || (V2 != 1000 + PLANT && V2 != 1000 + DOOR))) { if (AT(V2 - 1000)) - WD2 = MAKEWD(16152118); + WD2 = MAKEWD(WORD_POUR); } if (V1 == 1000 + CAGE && V2 == 1000 + BIRD && HERE(CAGE) && HERE(BIRD)) - WD1 = MAKEWD(301200308); + WD1 = MAKEWD(WORD_CATCH); } L2620: - if (WD1 == MAKEWD(23051920)) { + if (wordeq(WD1, MAKEWD(WORD_WEST))) { ++game.iwest; if (game.iwest == 10) RSPEAK(W_IS_WEST); } - if (WD1 == MAKEWD( 715) && WD2 != 0) { + if (wordeq(WD1, MAKEWD(WORD_GO)) && !wordempty(WD2)) { if (++igo == 10) RSPEAK(GO_UNNEEDED); } @@ -1139,7 +1131,7 @@ Laction: /* Get second word for analysis. */ WD1 = WD2; WD1X = WD2X; - WD2 = 0; + wordclear(&WD2); goto L2620; case GO_UNKNOWN: /* Random intransitive verbs come here. Clear obj just in case