Capture clock variables into the game-state block.
[open-adventure.git] / init.c
diff --git a/init.c b/init.c
index 69901c1c8b91d39e16b25d553ae7d02035b700a9..8b2b1b07dc2607a67515eaa233eafac56471af84 100644 (file)
--- a/init.c
+++ b/init.c
@@ -3,9 +3,7 @@
 #include <stdio.h>
 #include <stdbool.h>
 
-#include "misc.h"
-#include "main.h"
-#include "share.h"
+#include "advent.h"
 #include "funcs.h"
 #include "database.h"
 
@@ -14,7 +12,7 @@
  */
 
 /*  Current limits:
- *     12500 words of message text (LINES, LINSIZ).
+ *     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).
  *     300 locations
  *     100 objects */
 
+/* Note: 
+ *  - the object count limit has been abstracted as NOBJECTS
+ *  - the random message limit has been abstracted as RTXSIZE
+ */
 
 /*  Description of the database format
  *
@@ -89,7 +91,8 @@
  *     prop value is N/100.  The N/100 is used only to distinguish multiple
  *     messages from multi-line messages; the prop info actually requires all
  *     messages for an object to be present and consecutive.  Properties which
- *     produce no message should be given the message ">$<".
+ *     produce no message should be given the message ">$<". (The magic value
+ *     100 is now mostly abstracted out as NOBJECTS.)
  *  Section 6: Arbitrary messages.  Same format as sections 1, 2, and 5, except
  *     the numbers bear no relation to anything (except for special verbs
  *     in section 4).
@@ -179,14 +182,14 @@ static int finish_init(void) {
        PLACE[I]=0;
        PROP[I]=0;
        LINK[I]=0;
-       {long x = I+100; LINK[x]=0;}
+       {long x = I+NOBJECTS; 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(IABS(TRAVEL[K]),1000) == 1)COND[I]=2;
+       if(MOD(labs(TRAVEL[K]),1000) == 1)COND[I]=2;
 L1102: ATLOC[I]=0;
        } /* end loop */
 
@@ -197,16 +200,16 @@ L1102:    ATLOC[I]=0;
  *  "PLAC" and "FIXD".  Also, since two-placed objects are typically best
  *  described last, we'll drop them first. */
 
-       /* 1106 */ for (I=1; I<=100; I++) {
-       K=101-I;
+       /* 1106 */ for (I=1; I<=NOBJECTS; I++) {
+       K=NOBJECTS + 1 - I;
        if(FIXD[K] <= 0) goto L1106;
-       DROP(K+100,FIXD[K]);
+       DROP(K+NOBJECTS,FIXD[K]);
        DROP(K,PLAC[K]);
 L1106: /*etc*/ ;
        } /* end loop */
 
-       for (I=1; I<=100; I++) {
-       K=101-I;
+       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]);
        } /* end loop */
@@ -311,10 +314,10 @@ L1106:    /*etc*/ ;
        SAY=VOCWRD(190125,2);
        THROW=VOCWRD(2008181523,2);
 
-/*  Initialise the dwarves.  DLOC is loc of dwarves, hard-wired in.  ODLOC is
+/*  Initialise the dwarves.  game.dloc is loc of dwarves, hard-wired in.  game.odloc is
  *  prior loc of each dwarf, initially garbage.  DALTLC is alternate initial loc
  *  for dwarf, in case one of them starts out on top of the adventurer.  (No 2
- *  of the 5 initial locs are adjacent.)  DSEEN is true if dwarf has seen him.
+ *  of the 5 initial locs are adjacent.)  game.dseen is true if dwarf has seen him.
  *  DFLAG controls the level of activation of all this:
  *     0       No dwarf stuff yet (wait until reaches Hall Of Mists)
  *     1       Reached Hall Of Mists, but hasn't met first dwarf
@@ -327,23 +330,23 @@ L1106:    /*etc*/ ;
 
        CHLOC=114;
        CHLOC2=140;
-       for (I=1; I<=6; I++) {
-       DSEEN[I]=false;
+       for (I=1; I<=NDWARVES; I++) {
+               game.dseen[I]=false;
        } /* end loop */
        DFLAG=0;
-       DLOC[1]=19;
-       DLOC[2]=27;
-       DLOC[3]=33;
-       DLOC[4]=44;
-       DLOC[5]=64;
-       DLOC[6]=CHLOC;
+       game.dloc[1]=19;
+       game.dloc[2]=27;
+       game.dloc[3]=33;
+       game.dloc[4]=44;
+       game.dloc[5]=64;
+       game.dloc[6]=CHLOC;
        DALTLC=18;
 
 /*  Other random flags and counters, as follows:
  *     ABBNUM  How often we should print non-abbreviated descriptions
  *     BONUS   Used to determine amount of bonus if he reaches closing
- *     CLOCK1  Number of turns from finding last treasure till closing
- *     CLOCK2  Number of turns from first warning till blinding flash
+ *     game.clock1     Number of turns from finding last treasure till closing
+ *     game.clock2     Number of turns from first warning till blinding flash
  *     CONDS   Min value for cond(loc) if loc has any hints
  *     DETAIL  How often we've said "not allowed to give more detail"
  *     DKILL   Number of dwarves killed (unused in scoring, needed for msg)
@@ -380,8 +383,8 @@ L1106:      /*etc*/ ;
        DKILL=0;
        FOOBAR=0;
        BONUS=0;
-       CLOCK1=30;
-       CLOCK2=50;
+       game.clock1=30;
+       game.clock2=50;
        CONDS=SETBIT(11);
        SAVED=0;
        CLOSNG=false;