X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=newdungeon.py;h=dc9a34357f1ab7968ffb3f11f560b7c821fdbfcf;hp=2daae0cbe85431a49057b39ae9152a3c72138d1e;hb=60126c3dac4788cd5c01f5da6bb50986aeaac0d3;hpb=178c7ff983eab757d3752d64b9c9b0cd46a4bee7 diff --git a/newdungeon.py b/newdungeon.py index 2daae0c..dc9a343 100755 --- a/newdungeon.py +++ b/newdungeon.py @@ -2,10 +2,10 @@ # This is the new open-adventure dungeon generator. It'll eventually replace the existing dungeon.c It currently outputs a .h and .c pair for C code. -import json -import collections +import yaml +import sys -json_name = "adventure.json" +yaml_name = "adventure.yaml" h_name = "newdb.h" c_name = "newdb.c" @@ -19,27 +19,27 @@ def c_escape(string): def write_regular_messages(name, h, c): - h += "enum {}_refs {{\n".format(name) - c += "char* {}[] = {{\n".format(name) + if name != "short_location_descriptions": + h += "enum {}_refs {{\n".format(name) + for key, text in dungeon[name]: + h += " {},\n".format(key) + h += "};\n\n" + c += "char* {}[] = {{\n".format(name) index = 0 - for key, text in dungeon[name].items(): - h += " {},\n".format(key) + for key, text in dungeon[name]: if text == None: c += " NULL,\n" else: text = c_escape(text) c += " \"{}\",\n".format(text) - index += 1 - - h += "};\n\n" c += "};\n\n" return (h, c) -with open(json_name, "r") as f: - dungeon = json.load(f, object_pairs_hook = collections.OrderedDict) +with open(yaml_name, "r") as f: + dungeon = yaml.load(f) h = """#include @@ -74,7 +74,7 @@ for name in [ h += "enum object_descriptions_refs {\n" c += "object_description_t object_descriptions[] = {\n" -for key, data in dungeon["object_descriptions"].items(): +for key, data in dungeon["object_descriptions"]: try: data["inventory"] = "\"{}\"".format(c_escape(data["inventory"])) except AttributeError: @@ -87,7 +87,7 @@ for key, data in dungeon["object_descriptions"].items(): c += " .longs = (char* []) {\n" for l in data["longs"]: l = c_escape(l) - c += " \"{}\"\n".format(l) + c += " \"{}\",\n".format(l) c += " },\n" except (TypeError, IndexError): c += " .longs = NULL,\n" @@ -95,6 +95,11 @@ for key, data in dungeon["object_descriptions"].items(): h += "};" c += "};" +c += """ +size_t CLSSES = {}; +""".format(len(dungeon["class_messages"])) + +# finally, write out the files d = { h_name: h, c_name: c,