X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=main.c;h=6841ceee77e880b09c3704e0e2895952011aef42;hb=609b308ed11257e8fb7ff55f683cad1e6d660616;hp=08d709287cd34b849a59ef1c4b75c879709c2d02;hpb=18767d52dd053cf6c851ded2597697674ca255c1;p=open-adventure.git diff --git a/main.c b/main.c index 08d7092..6841cee 100644 --- a/main.c +++ b/main.c @@ -6,6 +6,7 @@ #include #include #include +#include #include "main.h" #include "misc.h" @@ -15,7 +16,7 @@ long ABB[186], ATAB[331], ATLOC[186], BLKLIN = true, DFLAG, KTAB[331], *LINES, LINK[201], LNLENG, LNPOSN, PARMS[26], PLACE[101], PTEXT[101], RTEXT[278], SETUP = 0, TABSIZ = 330; -signed char INLINE[LINESIZE], MAP1[129], MAP2[129]; +signed char INLINE[LINESIZE+1], MAP1[129], MAP2[129]; long ABBNUM, ACTSPK[36], AMBER, ATTACK, AXE, BACK, BATTER, BEAR, BIRD, BLOOD, BONUS, BOTTLE, CAGE, CAVE, CAVITY, CHAIN, CHASM, CHEST, CHLOC, CHLOC2, @@ -39,6 +40,8 @@ long ABBNUM, ACTSPK[36], AMBER, ATTACK, AXE, BACK, BATTER, BEAR, BIRD, BLOOD, BO TRVSIZ = 885, TTEXT[6], TURNS, URN, V1, V2, VASE, VEND, VERB, VOLCAN, VRBSIZ = 35, VRSION = 25, WATER, WD1, WD1X, WD2, WD2X, WZDARK = false, ZZWORD; +FILE *logfp; +bool oldstyle = false; extern void initialise(); extern void score(long); @@ -49,6 +52,7 @@ extern int action(long); */ int main(int argc, char *argv[]) { + int ch; /* Adventure (rev 2: 20 treasures) */ @@ -58,6 +62,23 @@ int main(int argc, char *argv[]) { * Errata fixed: 78/12/25 */ +/* Options. */ + + while ((ch = getopt(argc, argv, "l:o")) != EOF) { + switch (ch) { + case 'l': + logfp = fopen(optarg, "w+"); + if (logfp == NULL) + fprintf(stderr, + "advent: can't open logfile %s for write\n", + optarg); + break; + case 'o': + oldstyle = true; + break; + } + } + /* Logical variables: * * CLOSED says whether we're all the way closed @@ -90,8 +111,6 @@ int main(int argc, char *argv[]) { RSPEAK(201); exit(0); - - /* Start-up, dwarf stuff */ L1: SETUP= -1; @@ -112,7 +131,7 @@ L2: if(!OUTSID(NEWLOC) || NEWLOC == 0 || !CLOSNG) goto L71; 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 + * the dwarf's blocking his way. If coming from place forbidden to pirate * (dwarves rooted in place) let him get out (and attacked). */ L71: if(NEWLOC == LOC || FORCED(LOC) || CNDBIT(LOC,3)) goto L74; @@ -146,19 +165,19 @@ L74: LOC=NEWLOC; L6000: if(DFLAG != 1) goto L6010; if(!INDEEP(LOC) || (PCT(95) && (!CNDBIT(LOC,4) || PCT(85)))) goto L2000; DFLAG=2; - /* 6001 */ for (I=1; I<=2; I++) { + for (I=1; I<=2; I++) { J=1+RAN(5); -L6001: if(PCT(50))DLOC[J]=0; + if(PCT(50))DLOC[J]=0; } /* end loop */ - /* 6002 */ for (I=1; I<=5; I++) { + for (I=1; I<=5; I++) { if(DLOC[I] == LOC)DLOC[I]=DALTLC; -L6002: ODLOC[I]=DLOC[I]; + ODLOC[I]=DLOC[I]; } /* end loop */ RSPEAK(3); DROP(AXE,LOC); goto L2000; -/* Things are in full swing. move each dwarf at random, except if he's seen us +/* Things are in full swing. Move each dwarf at random, except if he's seen us * he sticks with us. Dwarves stay deep inside. If wandering at random, * they don't back up unless there's no alternative. If they don't have to * move, they attack. And, of course, dead dwarves don't do much of anything. */ @@ -347,8 +366,8 @@ L2602: /*etc*/ ; L2603: if(!CLOSED) goto L2605; if(PROP[OYSTER] < 0 && TOTING(OYSTER))PSPEAK(OYSTER,1); - /* 2604 */ for (I=1; I<=100; I++) { -L2604: if(TOTING(I) && PROP[I] < 0)PROP[I]= -1-PROP[I]; + for (I=1; I<=100; I++) { + if(TOTING(I) && PROP[I] < 0)PROP[I]= -1-PROP[I]; } /* end loop */ L2605: WZDARK=DARK(0); if(KNFLOC > 0 && KNFLOC != LOC)KNFLOC=0; @@ -450,8 +469,8 @@ 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 "NEWLOC". the current loc is saved in "OLDLOC" in case - * he wants to retreat. the current OLDLOC is saved in OLDLC2, in case he + * the new location in "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, NEWLOC will be limbo, and OLDLOC will be what killed * him, so we need OLDLC2, which is the last place he was safe.) */ @@ -495,7 +514,7 @@ L16: NEWLOC=MOD(LL,1000); NEWLOC=LOC; goto L2; -/* Special motions come here. labelling convention: statement numbers NNNXX +/* Special motions come here. Labelling convention: statement numbers NNNXX * (XX=00-99) are used for special case number NNN (NNN=301-500). */ L30000: NEWLOC=NEWLOC-300; @@ -618,8 +637,8 @@ L50: SPK=12; /* "You're dead, Jim." * - * If the current loc is zero, it means the clown got himself killed. we'll - * allow this maxdie times. maxdie is automatically set based on the number of + * If the current loc is zero, it means the clown got himself killed. We'll + * allow this maxdie times. MAXDIE is automatically set based on the number of * 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 @@ -749,7 +768,7 @@ L41000: if(TALLY == 1 && PROP[JADE] < 0) goto L40010; * oil, since there are beanstalks which we don't want to be able to water, * since the code can't handle it. Also, we can have no keys, since there is a * grate (having moved the fixed object!) there separating him from all the - * treasures. most of these problems arise from the use of negative prop + * treasures. Most of these problems arise from the use of negative prop * numbers to suppress the object descriptions until he's actually moved the * objects. */ @@ -759,16 +778,16 @@ L41000: if(TALLY == 1 && PROP[JADE] < 0) goto L40010; * 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 mt. king. Also, he's + * to the treasure accessible only via the hall of the mountain king. Also, he's * been in giant room (to get eggs), so we can refer to it. Also also, he's * gotten the pearl, so we know the bivalve is an oyster. *And*, the dwarves * must have been activated, since we've found chest. */ L10000: PROP[GRATE]=0; PROP[FISSUR]=0; - /* 10010 */ for (I=1; I<=6; I++) { + for (I=1; I<=6; I++) { DSEEN[I]=false; -L10010: DLOC[I]=0; + DLOC[I]=0; } /* end loop */ MOVE(TROLL,0); MOVE(TROLL+100,0); @@ -808,7 +827,7 @@ L11000: PROP[BOTTLE]=PUT(BOTTLE,115,1); OLDLOC=115; NEWLOC=115; -/* Leave the grate with normal (non-negative) property. reuse sign. */ +/* Leave the grate with normal (non-negative) property. Reuse sign. */ I=PUT(GRATE,116,0); I=PUT(SIGN,116,0); @@ -822,8 +841,8 @@ L11000: PROP[BOTTLE]=PUT(BOTTLE,115,1); PROP[MIRROR]=PUT(MIRROR,115,0); FIXED[MIRROR]=116; - /* 11010 */ for (I=1; I<=100; I++) { -L11010: if(TOTING(I))DSTROY(I); + for (I=1; I<=100; I++) { + if(TOTING(I))DSTROY(I); } /* end loop */ RSPEAK(132);