X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=make_dungeon.py;h=e56bb8fa89a7c9875ea120d0dced7826637c8f55;hp=e7e37ae2c6baeaa23177901de65824468e45d0c5;hb=7740b163c86d1e16339c1f7952f9511f951dd5d3;hpb=e05f959974ec2802362d25b8305a26e58d14a753 diff --git a/make_dungeon.py b/make_dungeon.py index e7e37ae..e56bb8f 100755 --- a/make_dungeon.py +++ b/make_dungeon.py @@ -153,6 +153,7 @@ typedef struct {{ const long motion; const long cond; const long dest; + const bool nodwarves; const bool stop; }} travelop_t; @@ -161,9 +162,6 @@ typedef struct {{ * inherited from FORTRAN, someday. To understand these, read the * encoding description for travel. */ -#define T_DESTINATION(entry) (entry).dest -#define T_CONDITION(entry) (entry).cond -#define T_NODWARVES(entry) (T_CONDITION(entry) == 100) #define T_TERMINATE(entry) ((entry).motion == 1) #define L_SPEAK(loc) ((loc) - 500) @@ -631,7 +629,9 @@ def buildtravel(locs, objs): raise ValueError def cencode(cond, name): if cond is None: - return 0; + return 0 + elif cond == ["nodwarves"]: + return 100 elif cond[0] == "pct": return cond[1] elif cond[0] == "carry": @@ -647,7 +647,6 @@ def buildtravel(locs, objs): sys.stderr.write("dungeon: unknown object name %s in with clause of \n" % (cond[1], name)) sys.exit(1) elif cond[0] == "not": - # FIXME: Allow named as well as numbered states try: obj = objnames.index(cond[1]) if type(cond[2]) == int: @@ -704,7 +703,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, 0, False]] + travel = [[0, 0, 0, False, False]] tkey = [0] oldloc = 0 while ltravel: @@ -717,7 +716,12 @@ def buildtravel(locs, objs): elif travel: travel[-1][-1] = not travel[-1][-1] while rule: - travel.append([rule.pop(0), newloc // 1000, newloc % 1000, False]) + cond = newloc // 1000 + travel.append([rule.pop(0), + cond, + newloc % 1000, + cond==100, + False]) travel[-1][-1] = True return (travel, tkey) @@ -726,12 +730,13 @@ def get_travel(travel): .motion = {}, .cond = {}, .dest = {}, + .nodwarves = {}, .stop = {}, }}, """ out = "" for entry in travel: - out += template.format(entry[0], entry[1], entry[2], entry[3]).lower() + out += template.format(*entry).lower() out = out[:-1] # trim trailing newline return out