static long LNLENG;
static long LNPOSN;
static char INLINE[LINESIZE+1];
-static long NEWLOC;
static long OLDLOC;
+static long MAXDIE;
// Storage for what comes out of the database
long LINUSE;
* the word following the end of the line). The pointer is negative if this is
* first line of a message. The text-pointer arrays contain indices of
* pointer-words in lines. STEXT(N) is short description of location N.
- * LTEXT(N) is long description. PTEXT(N) points to message for PROP(N)=0.
+ * LTEXT(N) is long description. PTEXT(N) points to message for game.prop(N)=0.
* Successive prop messages are found by chasing pointers. RTEXT contains
* section 6's stuff. CTEXT(N) points to a player-class message. TTEXT is for
* section 14. We also clear COND (see description of section 9 for details). */
while(true)
{
- long SECT=GETNUM(database);
+ long sect=GETNUM(database);
OLDLOC= -1;
- switch (SECT)
+ switch (sect)
{
case 0: return(0);
- case 1: read_messages(database, SECT); break;
- case 2: read_messages(database, SECT); break;
+ case 1: read_messages(database, sect); break;
+ case 2: read_messages(database, sect); break;
case 3: read_section3_stuff(database); break;
case 4: read_vocabulary(database); break;
- case 5: read_messages(database, SECT); break;
- case 6: read_messages(database, SECT); break;
+ case 5: read_messages(database, sect); break;
+ case 6: read_messages(database, sect); break;
case 7: read_initial_locations(database); break;
case 8: read_action_verb_message_nr(database); break;
case 9: read_conditions(database); break;
- case 10: read_messages(database, SECT); break;
+ case 10: read_messages(database, sect); break;
case 11: read_hints(database); break;
case 12: break;
case 13: read_sound_text(database); break;
- case 14: read_messages(database, SECT); break;
+ case 14: read_messages(database, sect); break;
default: BUG(9);
}
}
/* Sections 1, 2, 5, 6, 10, 14. Read messages and set up pointers. */
-void read_messages(FILE* database, long SECT)
+void read_messages(FILE* database, long sect)
{
long KK=LINUSE;
while(true)
{
- long LOC;
+ long loc;
LINUSE=KK;
- LOC=GETNUM(database);
+ loc=GETNUM(database);
if(LNLENG >= LNPOSN+70)BUG(0);
- if(LOC == -1) return;
+ if(loc == -1) return;
if(LNLENG < LNPOSN)BUG(1);
do {
KK=KK+1;
}
while(LINES[KK] != -1);
LINES[LINUSE]=KK;
- if(LOC == OLDLOC) continue;
- OLDLOC=LOC;
+ if(loc == OLDLOC) continue;
+ OLDLOC=loc;
LINES[LINUSE]= -KK;
- if(SECT == 14)
+ if(sect == 14)
{
TRNVLS=TRNVLS+1;
if(TRNVLS > TRNSIZ)BUG(11);
TTEXT[TRNVLS]=LINUSE;
- TRNVAL[TRNVLS]=LOC;
+ TRNVAL[TRNVLS]=loc;
continue;
}
- if(SECT == 10)
+ if(sect == 10)
{
CLSSES=CLSSES+1;
if(CLSSES > CLSMAX)BUG(11);
CTEXT[CLSSES]=LINUSE;
- CVAL[CLSSES]=LOC;
+ CVAL[CLSSES]=loc;
continue;
}
- if(SECT == 6)
+ if(sect == 6)
{
- if(LOC > RTXSIZ)BUG(6);
- RTEXT[LOC]=LINUSE;
+ if(loc > RTXSIZ)BUG(6);
+ RTEXT[loc]=LINUSE;
continue;
}
- if(SECT == 5)
+ if(sect == 5)
{
- if(LOC > 0 && LOC <= NOBJECTS)PTEXT[LOC]=LINUSE;
+ if(loc > 0 && loc <= NOBJECTS)PTEXT[loc]=LINUSE;
continue;
}
- if(LOC > LOCSIZ)BUG(10);
- if(SECT == 1)
+ if(loc > LOCSIZ)BUG(10);
+ if(sect == 1)
{
- LTEXT[LOC]=LINUSE;
+ LTEXT[loc]=LINUSE;
continue;
}
- STEXT[LOC]=LINUSE;
+ STEXT[loc]=LINUSE;
}
}
/* The stuff for section 3 is encoded here. Each "from-location" gets a
* contiguous section of the "TRAVEL" array. Each entry in travel is
- * NEWLOC*1000 + KEYWORD (from section 4, motion verbs), and is negated if
+ * newloc*1000 + KEYWORD (from section 4, motion verbs), and is negated if
* this is the last entry for this location. KEY(N) is the index in travel
* of the first option at location N. */
void read_section3_stuff(FILE* database)
{
- long LOC;
- while((LOC=GETNUM(database)) != -1)
+ long loc;
+ while((loc=GETNUM(database)) != -1)
{
- long NEWLOC=GETNUM(NULL);
+ long newloc=GETNUM(NULL);
long L;
- if(KEY[LOC] == 0)
+ if(KEY[loc] == 0)
{
- KEY[LOC]=TRVS;
+ KEY[loc]=TRVS;
}
else
{
}
while((L=GETNUM(NULL)) != 0)
{
- TRAVEL[TRVS]=NEWLOC*1000+L;
+ TRAVEL[TRVS]=newloc*1000+L;
TRVS=TRVS+1;
if(TRVS == TRVSIZ)BUG(3);
}
/* Read default message numbers for action verbs, store in ACTSPK. */
void read_action_verb_message_nr(FILE* database)
{
- long VERB;
- while((VERB=GETNUM(database)) != -1)
+ long verb;
+ while((verb=GETNUM(database)) != -1)
{
- ACTSPK[VERB]=GETNUM(NULL);
+ ACTSPK[verb]=GETNUM(NULL);
}
}
long K;
while((K=GETNUM(database)) != -1)
{
- long LOC;
- while((LOC=GETNUM(NULL)) != 0)
+ long loc;
+ while((loc=GETNUM(NULL)) != 0)
{
- if(is_set(COND[LOC],K)) BUG(8);
- COND[LOC]=COND[LOC] + (1l << K);
+ if(is_set(COND[loc],K)) BUG(8);
+ COND[loc]=COND[loc] + (1l << K);
}
}
}
/* Finish constructing internal data format */
/* Having read in the database, certain things are now constructed.
- * PROPS are set to zero. We finish setting up COND by checking for
+ * game.propS are set to zero. We finish setting up COND by checking for
* forced-motion travel entries. The PLAC and FIXD arrays are used
* to set up game.atloc(N) as the first object at location N, and
* game.link(OBJ) as the next object at the same location as OBJ.
void write_files(FILE* c_file, FILE* header_file)
{
+ int i, MAXDIE;
+ for (i=0; i<=4; i++) {
+ long x = 2*i+81;
+ if(RTEXT[x] != 0)
+ MAXDIE=i+1;
+ }
+
// preprocessor defines for the header
fprintf(header_file, "#include \"sizes.h\"\n");
fprintf(header_file, "#define RTXSIZ 277\n");
fprintf(header_file, "#define TRVSIZ 885\n");
fprintf(header_file, "#define TOKLEN %d\n", TOKLEN);
fprintf(header_file, "#define HINTLEN %d\n", HINTLEN);
+ fprintf(header_file, "#define MAXDIE %d\n", MAXDIE);
fprintf(header_file, "\n");
// include the header in the C file