X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=main.c;h=3c4d448ab56009f5f505b6aeb5510fe211e7ee5e;hp=5b65e077b8565fd5b392e89c86beceb414152546;hb=ab94051da166ca2be050c0d5725774f2edf3e7ee;hpb=9714bf8c82c37b1c320e078285fca03d81eea614 diff --git a/main.c b/main.c index 5b65e07..3c4d448 100644 --- a/main.c +++ b/main.c @@ -19,7 +19,6 @@ #include #include #include -#include #include #include "advent.h" #include "linenoise/linenoise.h" @@ -27,7 +26,25 @@ #define DIM(a) (sizeof(a)/sizeof(a[0])) -struct game_t game; +struct game_t game = { + .dloc[1] = LOC_KINGHALL, + .dloc[2] = LOC_WESTBANK, + .dloc[3] = LOC_Y2, + .dloc[4] = LOC_ALIKE3, + .dloc[5] = LOC_COMPLEX, + + /* Sixth dwarf is special (the pirate). He always starts at his + * chest's eventual location inside the maze. This loc is saved + * in chloc for ref. The dead end in the other maze has its + * loc stored in chloc2. */ + .dloc[6] = LOC_DEADEND12, + .chloc = LOC_DEADEND12, + .chloc2 = LOC_DEADEND13, + .abbnum = 5, + .clock1 = WARNTIME, + .clock2 = FLASHTIME, + .blklin = true +}; FILE *logfp = NULL, *rfp = NULL; bool oldstyle = false; @@ -120,17 +137,8 @@ int main(int argc, char *argv[]) linenoiseHistorySetMaxLen(350); - /* Initialize our LCG PRNG with parameters tested against - * Knuth vol. 2. by the original authors */ - game.lcg_a = 1093; - game.lcg_c = 221587; - game.lcg_m = 1048576; - srand(time(NULL)); - long seedval = (long)rand(); - set_seed(seedval); - /* Initialize game variables */ - initialise(); + long seedval = initialise(); /* Start-up, dwarf stuff */ make_zzword(game.zzword); @@ -371,9 +379,12 @@ static bool dwarfmove(void) if (PCT(50)) game.dloc[j] = 0; } + + /* Alternate initial loc for dwarf, in case one of them + * starts out on top of the adventurer. */ for (int i = 1; i <= NDWARVES - 1; i++) { if (game.dloc[i] == game.loc) - game.dloc[i] = DALTLC; + game.dloc[i] = DALTLC; // game.odloc[i] = game.dloc[i]; } rspeak(DWARF_RAN); @@ -1102,12 +1113,12 @@ L2607: wordclear(&command.wd2); } else { /* FIXME: Magic numbers related to vocabulary */ - if (!((V1 != 1000 + WATER && V1 != 1000 + OIL) || - (V2 != 1000 + PLANT && V2 != 1000 + DOOR))) { + if (!((V1 != PROMOTE_WORD(WATER) && V1 != PROMOTE_WORD(OIL)) || + (V2 != PROMOTE_WORD(PLANT) && V2 != PROMOTE_WORD(DOOR)))) { if (AT(V2 - 1000)) command.wd2 = token_to_packed("POUR"); } - if (V1 == 1000 + CAGE && V2 == 1000 + BIRD && HERE(CAGE) && HERE(BIRD)) + if (V1 == PROMOTE_WORD(CAGE) && V2 == PROMOTE_WORD(BIRD) && HERE(CAGE) && HERE(BIRD)) command.wd1 = token_to_packed("CATCH"); } L2620: @@ -1130,7 +1141,7 @@ Lookup: rspeak(DONT_KNOW, command.wd1, command.wd1x); goto L2600; } - /* FIXME: magic numbers related to vocabulary */ + /* FIXME: magic numbers related to vocabulary */ kmod = MOD(defn, 1000); switch (defn / 1000) { case 0: