Goto elimination.
[open-adventure.git] / init.c
diff --git a/init.c b/init.c
index 4bb7cc2b5a19f6c7d569503c418f33b2dda208ac..5d64098ecd4d12f5743f9818be425d245dd33bdc 100644 (file)
--- a/init.c
+++ b/init.c
  *     12600 words of message text (LINES, LINSIZ).
  *     885 travel options (TRAVEL, TRVSIZ).
  *     330 vocabulary words (KTAB, ATAB, TABSIZ).
- *     185 locations (LTEXT, STEXT, KEY, COND, ABB, ATLOC, LOCSND, LOCSIZ).
- *     100 objects (PLAC, PLACE, FIXD, FIXED, LINK (TWICE), PTEXT, PROP,
+ *     185 locations (LTEXT, STEXT, KEY, COND, abbrev, game.atloc, LOCSND, LOCSIZ).
+ *     100 objects (PLAC, game.place, FIXD, game.fixed, game.link (TWICE), PTEXT, game.prop,
  *                    OBJSND, OBJTXT).
  *      35 "action" verbs (ACTSPK, VRBSIZ).
  *     277 random messages (RTEXT, RTXSIZ).
  *      12 different player classifications (CTEXT, CVAL, CLSMAX).
- *      20 hints (HINTLC, HINTED, HINTS, HNTSIZ).
+ *      20 hints (game.hintlc, game.hinted, HINTS, HNTSIZ).
  *         5 "# of turns" threshholds (TTEXT, TRNVAL, TRNSIZ).
  *  There are also limits which cannot be exceeded due to the structure of
  *  the database.  (E.G., The vocabulary uses n/1000 to determine word type,
@@ -32,7 +32,8 @@
 
 /* Note: 
  *  - the object count limit has been abstracted as NOBJECTS
- *  - the random message limit has been abstracted as RTXSIZE
+ *  - the random message limit has been abstracted as RTXSIZ
+ *  - maximum locations limit has been abstracted as LOCSIZ
  */
 
 /*  Description of the database format
@@ -61,9 +62,9 @@
  *             If M=100        unconditional, but forbidden to dwarves.
  *             If 100<M<=200   he must be carrying object M-100.
  *             If 200<M<=300   must be carrying or in same room as M-200.
- *             If 300<M<=400   PROP(M % 100) must *not* be 0.
- *             If 400<M<=500   PROP(M % 100) must *not* be 1.
- *             If 500<M<=600   PROP(M % 100) must *not* be 2, etc.
+ *             If 300<M<=400   game.prop(M % 100) must *not* be 0.
+ *             If 400<M<=500   game.prop(M % 100) must *not* be 1.
+ *             If 500<M<=600   game.prop(M % 100) must *not* be 2, etc.
  *     If the condition (if any) is not met, then the next *different*
  *     "destination" value is used (unless it fails to meet *its* conditions,
  *     in which case the next is found, etc.).  Typically, the next dest will
@@ -75,8 +76,8 @@
  *     him to 22 if he's carrying object 10, and otherwise will go to 14.
  *             11      303008  49
  *             11      9       50
- *     This says that, from 11, 49 takes him to 8 unless PROP(3)=0, in which
- *     case he goes to 9.  Verb 50 takes him to 9 regardless of PROP(3).
+ *     This says that, from 11, 49 takes him to 8 unless game.prop(3)=0, in which
+ *     case he goes to 9.  Verb 50 takes him to 9 regardless of game.prop(3).
  *  Section 4: Vocabulary.  Each line contains a number (n), a tab, and a
  *     five-letter word.  Call M=N/1000.  If M=0, then the word is a motion
  *     verb for use in travelling (see section 3).  Else, if M=1, the word is
  *     2 (call them N and S), N is a location and message ABS(S) from section
  *     6 is the sound heard there.  If S<0, the sound there drowns out all
  *     other noises.  If 3 numbers (call them N, S, and T), N is an object
- *     number and S+PROP(N) is the property message (from section 5) if he
- *     listens to the object, and T+PROP(N) is the text if he reads it.  If
+ *     number and S+game.prop(N) is the property message (from section 5) if he
+ *     listens to the object, and T+game.prop(N) is the text if he reads it.  If
  *     S or T is -1, the object has no sound or text, respectively.  Neither
  *     S nor T is allowed to be 0.
  *  Section 14: Turn threshholds.  Each line contains a number (N), a tab, and
@@ -178,60 +179,65 @@ void initialise(void) {
 }
 
 static int finish_init(void) {
-       for (I=1; I<=100; I++) {
-       PLACE[I]=0;
-       PROP[I]=0;
-       LINK[I]=0;
-       {long x = I+NOBJECTS; LINK[x]=0;}
+       int i;
+       for (i=1; i<=NOBJECTS; i++) {
+               game.place[i]=0;
+               game.prop[i]=0;
+               game.link[i]=0;
+               {long x = i+NOBJECTS; game.link[x]=0;}
        } /* end loop */
 
-       /* 1102 */ for (I=1; I<=LOCSIZ; I++) {
-       ABB[I]=0;
-       if(LTEXT[I] == 0 || KEY[I] == 0) goto L1102;
-       K=KEY[I];
-       if(MOD(labs(TRAVEL[K]),1000) == 1)COND[I]=2;
-L1102: ATLOC[I]=0;
+       for (i=1; i<=LOCSIZ; i++) {
+               game.abbrev[i]=0;
+               if (!(LTEXT[i] == 0 || KEY[i] == 0)) {
+                       K=KEY[i];
+                       if(MOD(labs(TRAVEL[K]),1000) == 1)COND[i]=2;
+               }
+               game.atloc[i]=0;
        } /* end loop */
 
-/*  Set up the ATLOC and LINK arrays as described above.  We'll use the DROP
- *  subroutine, which prefaces new objects on the lists.  Since we want things
- *  in the other order, we'll run the loop backwards.  If the object is in two
- *  locs, we drop it twice.  This also sets up "PLACE" and "fixed" as copies of
- *  "PLAC" and "FIXD".  Also, since two-placed objects are typically best
+/*  Set up the game.atloc and game.link arrays as described above.
+ *  We'll use the DROP subroutine, which prefaces new objects on the
+ *  lists.  Since we want things in the other order, we'll run the
+ *  loop backwards.  If the object is in two locs, we drop it twice.
+ *  This also sets up "game.place" and "fixed" as copies of "PLAC" and
+ *  "FIXD".  Also, since two-placed objects are typically best
  *  described last, we'll drop them first. */
 
-       /* 1106 */ for (I=1; I<=NOBJECTS; I++) {
-       K=NOBJECTS + 1 - I;
-       if(FIXD[K] <= 0) goto L1106;
-       DROP(K+NOBJECTS,FIXD[K]);
-       DROP(K,PLAC[K]);
-L1106: /*etc*/ ;
+       for (i=1; i<=NOBJECTS; i++) {
+               K=NOBJECTS + 1 - i;
+               if(FIXD[K] > 0) {
+                       DROP(K+NOBJECTS,FIXD[K]);
+                       DROP(K,PLAC[K]);
+               }
        } /* end loop */
 
-       for (I=1; I<=NOBJECTS; I++) {
-       K=NOBJECTS + 1 - I;
-       FIXED[K]=FIXD[K];
-       if(PLAC[K] != 0 && FIXD[K] <= 0)DROP(K,PLAC[K]);
+       for (i=1; i<=NOBJECTS; i++) {
+               K=NOBJECTS + 1 - i;
+               game.fixed[K]=FIXD[K];
+               if(PLAC[K] != 0 && FIXD[K] <= 0)
+                       DROP(K,PLAC[K]);
        } /* end loop */
 
-/*  Treasures, as noted earlier, are objects 50 through MAXTRS (CURRENTLY 79).
+/*  Treasures, as noted earlier, are objects MINTRS through MAXTRS
  *  Their props are initially -1, and are set to 0 the first time they are
- *  described.  TALLY keeps track of how many are not yet found, so we know
+ *  described.  game.tally keeps track of how many are not yet found, so we know
  *  when to close the cave. */
 
-       MAXTRS=79;
-       TALLY=0;
-       for (I=50; I<=MAXTRS; I++) {
-       if(PTEXT[I] != 0)PROP[I]= -1;
-       TALLY=TALLY-PROP[I];
+       game.tally=0;
+       for (i=MINTRS; i<=MAXTRS; i++) {
+               if(PTEXT[i] != 0)
+                       game.prop[i]= -1;
+               game.tally=game.tally-game.prop[i];
        } /* end loop */
 
-/*  Clear the hint stuff.  HINTLC(I) is how long he's been at LOC with cond bit
- *  I.  HINTED(I) is true iff hint I has been used. */
+/*  Clear the hint stuff.  game.hintlc[i] is how long he's been at LOC
+ *  with cond bit i.  game.hinted[i] is true iff hint i has been
+ *  used. */
 
-       for (I=1; I<=HNTMAX; I++) {
-       HINTED[I]=false;
-       HINTLC[I]=0;
+       for (i=1; i<=HNTMAX; i++) {
+               game.hinted[i]=false;
+               game.hintlc[i]=0;
        } /* end loop */
 
 /*  Define some handy mnemonics.  These correspond to object numbers. */
@@ -330,8 +336,8 @@ L1106:      /*etc*/ ;
 
        game.chloc=114;
        game.chloc2=140;
-       for (I=1; I<=NDWARVES; I++) {
-               game.dseen[I]=false;
+       for (i=1; i<=NDWARVES; i++) {
+               game.dseen[i]=false;
        } /* end loop */
        game.dflag=0;
        game.dloc[1]=19;
@@ -340,7 +346,6 @@ L1106:      /*etc*/ ;
        game.dloc[4]=44;
        game.dloc[5]=64;
        game.dloc[6]=game.chloc;
-       DALTLC=18;
 
 /*  Other random flags and counters, as follows:
  *     game.abbnum     How often we should print non-abbreviated descriptions
@@ -352,33 +357,32 @@ L1106:    /*etc*/ ;
  *     game.dkill      # of dwarves killed (unused in scoring, needed for msg)
  *     game.foobar     Current progress in saying "FEE FIE FOE FOO".
  *     game.holdng     Number of objects being carried
- *     IGO     How many times he's said "go XXX" instead of "XXX"
+ *     igo             How many times he's said "go XXX" instead of "XXX"
  *     game.iwest      How many times he's said "west" instead of "w"
  *     game.knfloc     0 if no knife here, loc if knife here, -1 after caveat
  *     game.limit      Lifetime of lamp (not set here)
- *     MAXDIE  Number of reincarnation messages available (up to 5)
- *     NUMDIE  Number of times killed so far
- *     THRESH  Next #turns threshhold (-1 if none)
- *     TRNDEX  Index in TRNVAL of next threshhold (section 14 of database)
- *     TRNLUZ  # points lost so far due to number of turns used
- *     TURNS   Tallies how many commands he's given (ignores yes/no)
+ *     MAXDIE          Number of reincarnation messages available (up to 5)
+ *     game.numdie     Number of times killed so far
+ *     game.thresh     Next #turns threshhold (-1 if none)
+ *     game.trndex     Index in TRNVAL of next threshhold (section 14 of database)
+ *     game.trnluz     # points lost so far due to number of turns used
+ *     game.turns      Tallies how many commands he's given (ignores yes/no)
  *     Logicals were explained earlier */
 
-       TURNS=0;
-       TRNDEX=1;
-       THRESH= -1;
-       if(TRNVLS > 0)THRESH=MOD(TRNVAL[1],100000)+1;
-       TRNLUZ=0;
+       game.turns=0;
+       game.trndex=1;
+       game.thresh= -1;
+       if(TRNVLS > 0)game.thresh=MOD(TRNVAL[1],100000)+1;
+       game.trnluz=0;
        game.lmwarn=false;
-       IGO=0;
        game.iwest=0;
        game.knfloc=0;
        game.detail=0;
        game.abbnum=5;
-       for (I=0; I<=4; I++) {
-       {long x = 2*I+81; if(RTEXT[x] != 0)MAXDIE=I+1;}
+       for (i=0; i<=4; i++) {
+       {long x = 2*i+81; if(RTEXT[x] != 0)MAXDIE=i+1;}
        } /* end loop */
-       NUMDIE=0;
+       game.numdie=0;
        game.holdng=0;
        game.dkill=0;
        game.foobar=0;
@@ -386,13 +390,13 @@ L1106:    /*etc*/ ;
        game.clock1=30;
        game.clock2=50;
        game.conds=SETBIT(11);
-       SAVED=0;
+       game.saved=0;
        game.closng=false;
-       PANIC=false;
+       game.panic=false;
        game.closed=false;
-       CLSHNT=false;
-       NOVICE=false;
-       SETUP=1;
+       game.clshnt=false;
+       game.novice=false;
+       game.setup=1;
        game.blklin=true;
 
        /* if we can ever think of how, we should save it at this point */