Towards a more readable generated file.
[open-adventure.git] / make_dungeon.py
index 576601d675f3ee4142ef37962082e306e1d40c11..45b9334c09e5427de996dfb76233e0849a6c4516 100755 (executable)
@@ -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 {{
 {}
 }};
@@ -353,7 +355,7 @@ def get_turn_thresholds(trn):
     return trn_str
 
 def get_locations(loc):
-    template = """    {{ // {}
+    template = """    {{ // {}: {}
         .description = {{
             .small = {},
             .big = {},
@@ -368,12 +370,12 @@ def get_locations(loc):
         long_d = make_c_string(item[1]["description"]["long"])
         sound = item[1].get("sound", "SILENT")
         loud = "true" if item[1].get("loud") else "false"
-        loc_str += template.format(i, short_d, long_d, sound, loud)
+        loc_str += template.format(i, item[0], short_d, long_d, sound, loud)
     loc_str = loc_str[:-1] # trim trailing newline
     return loc_str
 
 def get_objects(obj):
-    template = """    {{ // {}
+    template = """    {{ // {}: {}
         .words = {},
         .inventory = {},
         .plac = {},
@@ -442,14 +444,12 @@ 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)
         treasure = "true" if attr.get("treasure") else "false"
-        obj_str += template.format(i, words_str, i_msg, locs[0], locs[1], treasure, descriptions_str, sounds_str, texts_str, changes_str)
+        obj_str += template.format(i, item[0], words_str, i_msg, locs[0], locs[1], treasure, descriptions_str, sounds_str, texts_str, changes_str)
     obj_str = obj_str[:-1] # trim trailing newline
     return obj_str
 
@@ -761,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,
@@ -780,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"]),