From: Eric S. Raymond Date: Sat, 1 Jul 2017 16:51:12 +0000 (-0400) Subject: Forther break apart the magic enconding of travel arrays. X-Git-Tag: takebird~139 X-Git-Url: https://jxself.org/git/?a=commitdiff_plain;h=50bbbbceee15210951842f5bd88b66167f43c0ca;p=open-adventure.git Forther break apart the magic enconding of travel arrays. --- diff --git a/main.c b/main.c index 306ce73..fc4f9be 100644 --- a/main.c +++ b/main.c @@ -628,7 +628,7 @@ static bool playermove( int motion) BUG(CONDITIONAL_TRAVEL_ENTRY_WITH_NO_ALTERATION); // LCOV_EXCL_LINE ++te_tmp; } while - (T_HIGH(travel[travel_entry]) == T_HIGH(travel[te_tmp])); + ((T_DESTINATION(travel[travel_entry]) == T_DESTINATION(travel[te_tmp])) && (T_CONDITION(travel[travel_entry]) == T_CONDITION(travel[te_tmp]))); travel_entry = te_tmp; } @@ -670,7 +670,7 @@ static bool playermove( int motion) BUG(CONDITIONAL_TRAVEL_ENTRY_WITH_NO_ALTERATION); // LCOV_EXCL_LINE ++te_tmp; } while - (T_HIGH(travel[travel_entry]) == T_HIGH(travel[te_tmp])); + ((T_DESTINATION(travel[travel_entry]) == T_DESTINATION(travel[te_tmp])) && (T_CONDITION(travel[travel_entry]) == T_CONDITION(travel[te_tmp]))); travel_entry = te_tmp; continue; /* goto L12 */ case 3: diff --git a/make_dungeon.py b/make_dungeon.py index 5618e63..b893e4b 100755 --- a/make_dungeon.py +++ b/make_dungeon.py @@ -146,6 +146,7 @@ typedef struct {{ typedef struct {{ const long motion; + const long cond; const long dest; const bool stop; }} travelop_t; @@ -155,10 +156,9 @@ typedef struct {{ * inherited from FORTRAN, someday. To understand these, read the * encoding description for travel. */ -#define T_DESTINATION(entry) MOD((entry).dest, 1000) -#define T_CONDITION(entry) ((entry).dest / 1000) +#define T_DESTINATION(entry) (entry).dest +#define T_CONDITION(entry) (entry).cond #define T_NODWARVES(entry) (T_CONDITION(entry) == 100) -#define T_HIGH(entry) ((entry).dest) #define T_TERMINATE(entry) ((entry).motion == 1) #define L_SPEAK(loc) ((loc) - 500) @@ -670,7 +670,7 @@ def buildtravel(locs, objs): # # In order to de-crypticize the runtime code, we're going to break these # magic numbers up into a struct. - travel = [[0, 0, False]] + travel = [[0, 0, 0, False]] tkey = [0] oldloc = 0 while ltravel: @@ -681,22 +681,23 @@ def buildtravel(locs, objs): tkey.append(len(travel)) oldloc = loc elif travel: - travel[-1][2] = not travel[-1][2] + travel[-1][-1] = not travel[-1][-1] while rule: - travel.append([rule.pop(0), newloc, False]) - travel[-1][2] = True + travel.append([rule.pop(0), newloc // 1000, newloc % 1000, False]) + travel[-1][-1] = True return (travel, tkey) def get_travel(travel): template = """ {{ .motion = {}, + .cond = {}, .dest = {}, .stop = {}, }}, """ out = "" for entry in travel: - out += template.format(entry[0], entry[1], entry[2]).lower() + out += template.format(entry[0], entry[1], entry[2], entry[3]).lower() out = out[:-1] # trim trailing newline return out