X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;ds=sidebyside;f=make_dungeon.py;h=b893e4b266cf6c8c862d04db450b8fda5ffcdde3;hb=e66b4561d457352d76582828fbfa3bd83d8b8a4c;hp=7e18d76c41da7851a2c0b9deaa5989dc5a18ad88;hpb=3f580acc0565587e4fab1f2181f4ff859e9c3aef;p=open-adventure.git diff --git a/make_dungeon.py b/make_dungeon.py index 7e18d76..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) @@ -175,6 +175,7 @@ extern const action_t actions[]; extern const action_t specials[]; extern const travelop_t travel[]; extern const long tkey[]; +extern const char *ignore; #define NLOCATIONS {} #define NOBJECTS {} @@ -266,12 +267,14 @@ const action_t specials[] = {{ {} }}; -{} +const long tkey[] = {{{}}}; const travelop_t travel[] = {{ {} }}; +const char *ignore = \"{}\"; + /* end */ """ @@ -519,6 +522,11 @@ def get_motions(motions): else: words_str = get_string_group(contents["words"]) mot_str += template.format(words_str) + global ignore + if contents.get("oldstyle", True) == False: + for word in contents["words"]: + if len(word) == 1: + ignore += word.upper() return mot_str def get_actions(actions): @@ -542,6 +550,11 @@ def get_actions(actions): message = contents["message"] act_str += template.format(words_str, message) + global ignore + if contents.get("oldstyle", True) == False: + for word in contents["words"]: + if len(word) == 1: + ignore += word.upper() act_str = act_str[:-1] # trim trailing newline return act_str @@ -552,7 +565,7 @@ def bigdump(arr): if out and out[-1] == ' ': out = out[:-1] out += "\n " - out += str(arr[i]) + ", " + out += str(arr[i]).lower() + ", " out = out[:-2] + "\n" return out @@ -657,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: @@ -668,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 @@ -697,7 +711,7 @@ if __name__ == "__main__": (travel, tkey) = buildtravel(db["locations"], db["objects"]) - + ignore = "" c = c_template.format( h_name, get_arbitrary_messages(db["arbitrary_messages"]), @@ -711,8 +725,9 @@ if __name__ == "__main__": get_motions(db["motions"]), get_actions(db["actions"]), get_actions(db["specials"]), - "const long tkey[] = {%s};" % bigdump(tkey), + bigdump(tkey), get_travel(travel), + ignore, ) h = h_template.format(