projects
/
open-adventure.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Generate newdb.[ch] at build time, parallel with database.[ch].
[open-adventure.git]
/
newdungeon.py
diff --git
a/newdungeon.py
b/newdungeon.py
index 2daae0cbe85431a49057b39ae9152a3c72138d1e..dc9a34357f1ab7968ffb3f11f560b7c821fdbfcf 100755
(executable)
--- 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.
# 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
collection
s
+import
yaml
+import
sy
s
-
json_name = "adventure.json
"
+
yaml_name = "adventure.yaml
"
h_name = "newdb.h"
c_name = "newdb.c"
h_name = "newdb.h"
c_name = "newdb.c"
@@
-19,27
+19,27
@@
def c_escape(string):
def write_regular_messages(name, h, c):
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
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)
if text == None:
c += " NULL,\n"
else:
text = c_escape(text)
c += " \"{}\",\n".format(text)
-
index += 1
index += 1
-
- h += "};\n\n"
c += "};\n\n"
return (h, c)
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 <stdio.h>
h = """#include <stdio.h>
@@
-74,7
+74,7
@@
for name in [
h += "enum object_descriptions_refs {\n"
c += "object_description_t object_descriptions[] = {\n"
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:
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 += " .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"
c += " },\n"
except (TypeError, IndexError):
c += " .longs = NULL,\n"
@@
-95,6
+95,11
@@
for key, data in dungeon["object_descriptions"].items():
h += "};"
c += "};"
h += "};"
c += "};"
+c += """
+size_t CLSSES = {};
+""".format(len(dungeon["class_messages"]))
+
+# finally, write out the files
d = {
h_name: h,
c_name: c,
d = {
h_name: h,
c_name: c,