X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=make_dungeon.py;h=836d1483a8480d08616df65323613c61d965fb59;hp=e56bb8fa89a7c9875ea120d0dced7826637c8f55;hb=ca7ac4063f162290491c68124a13d75f2f5c010a;hpb=1d41d9a2f886e355111830d20e3005d182766bbe diff --git a/make_dungeon.py b/make_dungeon.py index e56bb8f..836d148 100755 --- a/make_dungeon.py +++ b/make_dungeon.py @@ -141,7 +141,7 @@ typedef struct {{ typedef struct {{ const string_group_t words; - const long message; + const char* message; }} action_t; typedef struct {{ @@ -192,6 +192,8 @@ extern const char *ignore; #define NTRAVEL {} #define NKEYS {} +#define BIRD_ENDSTATE {} + enum arbitrary_messages_refs {{ {} }}; @@ -407,18 +409,15 @@ def get_objects(obj): else: labels = [] for l_msg in attr["descriptions"]: - if not isinstance(l_msg, str): - labels.append(l_msg) - l_msg = l_msg[1] descriptions_str += " " * 12 + make_c_string(l_msg) + ",\n" + for label in attr.get("states", []): + labels.append(label) descriptions_str = descriptions_str[:-1] # trim trailing newline if labels: global statedefines statedefines += "/* States for %s */\n" % item[0] - for (i, (label, message)) in enumerate(labels): - if len(message) >= 45: - message = message[:45] + "..." - statedefines += "#define %s\t%d /* %s */\n" % (label, i, message) + for (i, label) in enumerate(labels): + statedefines += "#define %s\t%d\n" % (label, i) statedefines += "\n" sounds_str = "" if attr.get("sounds") == None: @@ -445,9 +444,7 @@ def get_objects(obj): immovable = attr.get("immovable", False) try: if type(locs) == str: - locs = [locnames.index(locs), -1 if immovable else 0] - else: - locs = [locnames.index(x) for x in locs] + locs = [locs, -1 if immovable else 0] except IndexError: sys.stderr.write("dungeon: unknown object location in %s\n" % locs) sys.exit(1) @@ -651,6 +648,8 @@ def buildtravel(locs, objs): obj = objnames.index(cond[1]) if type(cond[2]) == int: state = cond[2] + elif cond[2] in objs[obj][1].get("states", []): + state = objs[obj][1].get("states").index(cond[2]) else: for (i, stateclause) in enumerate(objs[obj][1]["descriptions"]): if type(stateclause) == list: @@ -762,13 +761,17 @@ if __name__ == "__main__": get_hints(db["hints"], db["arbitrary_messages"]), get_condbits(db["locations"]), get_motions(db["motions"]), - get_actions(db["actions"]), + get_specials(db["actions"]), get_specials(db["specials"]), bigdump(tkey), get_travel(travel), ignore, ) + # 0-origin index of birds's last song. Bird should + # die after player hears this. + deathbird = len(dict(db["objects"])["BIRD"]["sounds"]) - 1 + h = h_template.format( len(db["locations"])-1, len(db["objects"])-1, @@ -781,6 +784,7 @@ if __name__ == "__main__": len(db["specials"]), len(travel), len(tkey), + deathbird, get_refs(db["arbitrary_messages"]), get_refs(db["locations"]), get_refs(db["objects"]),