From 7f7f49b7396135f53e31c03d28ecc4d69b8b4584 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Thu, 22 Jun 2017 17:28:39 -0400 Subject: [PATCH] Switch fully over to YAML generation of condition bits. COND is gone. --- actions.c | 2 +- advent.h | 8 ++++---- dungeon.c | 15 ++++----------- init.c | 16 +++++++++++++++- main.c | 2 +- newdungeon.py | 4 ++-- 6 files changed, 27 insertions(+), 20 deletions(-) diff --git a/actions.c b/actions.c index 45dd8b6..a17abde 100644 --- a/actions.c +++ b/actions.c @@ -552,7 +552,7 @@ int fill(token_t verb, token_t obj) if (LIQUID() != 0) spk = BOTTLE_FULL; if (spk == BOTTLED_WATER) { - game.prop[BOTTLE] = MOD(COND[game.loc], 4) / 2 * 2; + game.prop[BOTTLE] = MOD(conditions[game.loc], 4) / 2 * 2; k = LIQUID(); if (TOTING(BOTTLE)) game.place[k] = CARRIED; diff --git a/advent.h b/advent.h index 979196f..f52ea8e 100644 --- a/advent.h +++ b/advent.h @@ -149,10 +149,10 @@ extern int restore(FILE *); #define HERE(OBJ) (AT(OBJ) || TOTING(OBJ)) #define LIQ2(PBOTL) ((1-(PBOTL))*WATER+((PBOTL)/2)*(WATER+OIL)) #define LIQUID() (LIQ2(game.prop[BOTTLE]<0 ? -1-game.prop[BOTTLE] : game.prop[BOTTLE])) -#define LIQLOC(LOC) (LIQ2((MOD(COND[LOC]/2*2,8)-5)*MOD(COND[LOC]/4,2)+1)) -#define CNDBIT(L,N) (TSTBIT(COND[L],N)) -#define FORCED(LOC) (COND[LOC] == 2) -#define DARK(DUMMY) ((!CNDBIT(game.loc,COND_LIT)) && (game.prop[LAMP] == 0 || !HERE(LAMP))) +#define LIQLOC(LOC) (LIQ2((MOD(conditions[LOC]/2*2,8)-5)*MOD(conditions[LOC]/4,2)+1)) +#define CNDBIT(L,N) (TSTBIT(conditions[L],N)) +#define FORCED(LOC) (conditions[LOC] == 2) +#define DARK(DUMMY) ((!TSTBIT(conditions[game.loc],COND_LIT)) && (game.prop[LAMP] == 0 || !HERE(LAMP))) #define PCT(N) (randrange(100) < (N)) #define GSTONE(OBJ) ((OBJ) == EMERALD || (OBJ) == RUBY || (OBJ) == AMBER || (OBJ) == SAPPH) #define FOREST(LOC) ((LOC) >= LOC_FOREST1 && (LOC) <= LOC_FOREST22) diff --git a/dungeon.c b/dungeon.c index 997b49e..f34cf12 100644 --- a/dungeon.c +++ b/dungeon.c @@ -40,7 +40,6 @@ long OBJSND[NOBJECTS + 1]; long OBJTXT[NOBJECTS + 1]; long STEXT[LOCSIZ + 1]; long LTEXT[LOCSIZ + 1]; -long COND[LOCSIZ + 1]; long KEY[LOCSIZ + 1]; long LOCSND[LOCSIZ + 1]; long LINES[LINSIZ + 1]; @@ -300,16 +299,14 @@ static void read_action_verb_message_nr(FILE* database) } } -/* Read info about available liquids and other conditions, store in COND. */ +/* Read info about available liquids and other conditions. */ static void read_conditions(FILE* database) { long K; while ((K = GETNUM(database)) != -1) { long loc; while ((loc = GETNUM(NULL)) != 0) { - if (is_set(COND[loc], K)) - BUG(LOCATION_HAS_CONDITION_BIT_BEING_SET_TWICE); - COND[loc] = COND[loc] + (1L << K); + continue; /* COND is no longer used */ } } } @@ -360,8 +357,7 @@ static int read_database(FILE* database) * location N. 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. - * TTEXT is for section 14. We also clear COND (see description - * of section 9 for details). */ + * TTEXT is for section 14. */ for (int I = 1; I <= NOBJECTS; I++) { PTEXT[I] = 0; OBJSND[I] = 0; @@ -373,7 +369,6 @@ static int read_database(FILE* database) for (int I = 1; I <= LOCSIZ; I++) { STEXT[I] = 0; LTEXT[I] = 0; - COND[I] = 0; KEY[I] = 0; LOCSND[I] = 0; } @@ -440,8 +435,7 @@ static int read_database(FILE* database) /* Finish constructing internal data format */ /* Having read in the database, certain things are now constructed. - * 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 + * game.propS are set to zero. 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. * (OBJ>NOBJECTS indicates that game.fixed(OBJ-NOBJECTS)=LOC; game.link(OBJ) is @@ -488,7 +482,6 @@ static void write_file(FILE* header_file) // content variables write_1d(header_file, OBJSND, NOBJECTS + 1, "OBJSND"); write_1d(header_file, OBJTXT, NOBJECTS + 1, "OBJTXT"); - write_1d(header_file, COND, LOCSIZ + 1, "COND"); write_1d(header_file, KEY, LOCSIZ + 1, "KEY"); write_1d(header_file, LOCSND, LOCSIZ + 1, "LOCSND"); write_1d(header_file, TRAVEL, TRVSIZ + 1, "TRAVEL"); diff --git a/init.c b/init.c index 76bdc8a..5ae974f 100644 --- a/init.c +++ b/init.c @@ -184,7 +184,8 @@ void initialise(void) game.abbrev[i] = 0; if (!(locations[i].description.big == 0 || KEY[i] == 0)) { int k = KEY[i]; - if (MOD(labs(TRAVEL[k]), 1000) == 1)COND[i] = 2; + if (MOD(labs(TRAVEL[k]), 1000) == 1) + conditions[i] = 2; } game.atloc[i] = 0; } @@ -376,4 +377,17 @@ void initialise(void) game.clshnt = false; game.novice = false; game.blklin = true; + +#ifdef ODEBUG +# define NEWFLAGS ((1<= game.conds) { + if (conditions[game.loc] >= game.conds) { for (int hint = 0; hint < HINT_COUNT; hint++) { if (game.hinted[hint]) continue; diff --git a/newdungeon.py b/newdungeon.py index 092c342..624ea86 100755 --- a/newdungeon.py +++ b/newdungeon.py @@ -59,7 +59,7 @@ extern const class_t classes[]; extern turn_threshold_t turn_thresholds[]; extern obituary_t obituaries[]; extern hint_t hints[]; -extern const long conditions[]; +extern long conditions[]; extern const size_t CLSSES; extern const int maximum_deaths; @@ -114,7 +114,7 @@ hint_t hints[] = {{ {} }}; -const long conditions[] = {{ +long conditions[] = {{ {} }}; -- 2.31.1