X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=newdungeon.py;h=60625997f907ddc4976fd39b1ce406f5d546637f;hp=27dd9f181afa1cbe74fdca5afb3ea427fab03287;hb=3b780dd57e295b57ba78649e008fede10e07cdd9;hpb=aace0b1359f15195820bf6d22a897f7c332c5eab diff --git a/newdungeon.py b/newdungeon.py index 27dd9f1..6062599 100755 --- a/newdungeon.py +++ b/newdungeon.py @@ -8,7 +8,7 @@ # movement rules to the travel array that's actually used by # playermove(). This program first compiles the YAML to a form # identical to the data in section 3 of the old adventure.text file, -# then a second stage packs that data into the travel array. +# then a second stage unpacks that data into the travel array. # # Here are the rules of the intermediate form: # @@ -138,7 +138,8 @@ typedef struct {{ }} action_t; typedef struct {{ - const long opcode; + const long motion; + const long dest; const bool stop; }} travelop_t; @@ -147,13 +148,10 @@ typedef struct {{ * inherited from FORTRAN, someday. To understand these, read the * encoding description for travel. */ -#define T_DESTINATION(entry) MOD((entry).opcode / 1000, 1000) -#define T_NODWARVES(entry) ((entry).opcode / 1000000 == 100) -#define T_MOTION(entry) MOD((entry).opcode, 1000) -#define T_TERMINATE(entry) (T_MOTION(entry) == 1) -#define T_STOP(entry) ((entry).stop) -#define T_HIGH(entry) ((entry).opcode / 1000) -#define T_LOW(entry) ((entry).opcode % 1000) +#define T_DESTINATION(entry) MOD((entry).dest, 1000) +#define T_NODWARVES(entry) ((entry).dest / 1000 == 100) +#define T_HIGH(entry) ((entry).dest) +#define T_TERMINATE(entry) ((entry).motion == 1) #define L_SPEAK(loc) ((loc) - 500) extern const location_t locations[]; @@ -622,8 +620,9 @@ def buildtravel(locs, objs, voc): # TRAVEL[TRVS - 1] = -TRAVEL[TRVS - 1]; # } # - # We're going to break the magic numbers up into a struct. - travel = [[0, False]] + # In order to de-crypticize the runtime code, we're going to break these + # magic numbers up into a struct. + travel = [[0, 0, False]] tkey = [0] oldloc = 0 while ltravel: @@ -634,21 +633,22 @@ def buildtravel(locs, objs, voc): tkey.append(len(travel)) oldloc = loc elif travel: - travel[-1][1] = not travel[-1][1] + travel[-1][2] = not travel[-1][2] while rule: - travel.append([rule.pop(0) + newloc * 1000, False]) - travel[-1][1] = True + travel.append([rule.pop(0), newloc, False]) + travel[-1][2] = True return (travel, tkey) def get_travel(travel): template = """ {{ - .opcode = {}, + .motion = {}, + .dest = {}, .stop = {}, }}, """ out = "" for entry in travel: - out += template.format(entry[0], entry[1]).lower() + out += template.format(entry[0], entry[1], entry[2]).lower() out = out[:-1] # trim trailing newline return out