- }},
-""".format(short, long)
-
-c += "};\n\n"
-h += "};\n\n"
-
-h += "enum object_descriptions_refs {\n"
-c += "object_description_t object_descriptions[] = {\n"
-for key, data in dungeon["object_descriptions"]:
- try:
- data["inventory"] = "\"{}\"".format(c_escape(data["inventory"]))
- except AttributeError:
- data["inventory"] = "NULL"
- h += " {},\n".format(key)
- c += " {\n"
- c += " .inventory = {},\n".format(data["inventory"])
- try:
- data["longs"][0]
- c += " .longs = (const char* []) {\n"
- for l in data["longs"]:
- l = c_escape(l)
- c += " \"{}\",\n".format(l)
- c += " },\n"
- except (TypeError, IndexError):
- c += " .longs = NULL,\n"
- c += " },\n"
-h += "};"
-c += "};"
-
-c += """
-size_t CLSSES = {};
-""".format(len(dungeon["class_messages"]))
-
-# finally, write out the files
-d = {
- h_name: h,
- c_name: c,
-}
-for filename, string in d.items():
- with open(filename, "w") as f:
- f.write(string)
+"""
+ obj_str = ""
+ for item in obj:
+ i_msg = make_c_string(item[1]["inventory"])
+ longs_str = ""
+ if item[1]["longs"] == None:
+ longs_str = " " * 12 + "NULL,"
+ else:
+ for l_msg in item[1]["longs"]:
+ longs_str += " " * 12 + make_c_string(l_msg) + ",\n"
+ longs_str = longs_str[:-1] # trim trailing newline
+ obj_str += template.format(i_msg, longs_str)
+ obj_str = obj_str[:-1] # trim trailing newline
+ return obj_str
+
+def get_obituaries(obit):
+ template = """ {{
+ .query = {},
+ .yes_response = {},
+ }},
+"""
+ obit_str = ""
+ for o in obit:
+ query = make_c_string(o["query"])
+ yes = make_c_string(o["yes_response"])
+ obit_str += template.format(query, yes)
+ obit_str = obit_str[:-1] # trim trailing newline
+ return obit_str
+
+def get_hints(hnt, arb):
+ template = """ {{
+ .number = {},
+ .penalty = {},
+ .turns = {},
+ .question = {},
+ .hint = {},
+ }},
+"""
+ hnt_str = ""
+ md = dict(arb)
+ for item in hnt:
+ number = item["number"]
+ penalty = item["penalty"]
+ turns = item["turns"]
+ question = make_c_string(md[item["question"]])
+ hint = make_c_string(md[item["hint"]])
+ hnt_str += template.format(number, penalty, turns, question, hint)
+ hnt_str = hnt_str[:-1] # trim trailing newline
+ return hnt_str
+
+
+if __name__ == "__main__":
+ with open(yaml_name, "r") as f:
+ db = yaml.load(f)
+
+ h = h_template.format(
+ len(db["hints"]),
+ get_refs(db["arbitrary_messages"]),
+ get_refs(db["locations"]),
+ get_refs(db["object_descriptions"]),
+ )
+
+ c = c_template.format(
+ h_name,
+ get_arbitrary_messages(db["arbitrary_messages"]),
+ get_class_messages(db["classes"]),
+ get_turn_thresholds(db["turn_thresholds"]),
+ get_locations(db["locations"]),
+ get_object_descriptions(db["object_descriptions"]),
+ get_obituaries(db["obituaries"]),
+ get_hints(db["hints"], db["arbitrary_messages"]),
+ len(db["classes"]),
+ len(db["obituaries"]),
+ len(db["turn_thresholds"]),
+ )
+
+ with open(h_name, "w") as hf:
+ hf.write(h)
+
+ with open(c_name, "w") as cf:
+ cf.write(c)