Save/resume fail test coverage -- test works in Docker now
[open-adventure.git] / newdungeon.py
index a4b046e9ed5b124f454f28011f13afd00de032e7..5888f83f64c8e100e63eec5df0c07a288b2a5e92 100755 (executable)
@@ -28,7 +28,7 @@ def write_regular_messages(name, h, c):
         h += "  {},\n".format(key)
     h += "};\n\n"
     
-    c += "char* {}[] = {{\n".format(name)   
+    c += "const char* {}[] = {{\n".format(name)   
     index = 0
     for key, text in dungeon[name]:
         if text == None:
@@ -47,27 +47,33 @@ with open(yaml_name, "r") as f:
 h = """#include <stdio.h>
 
 typedef struct {
-  char* inventory;
-  char** longs;
+  const char* inventory;
+  const char** longs;
 } object_description_t;
 
 typedef struct {
-  char* small;
-  char* big;
+  const char* small;
+  const char* big;
 } descriptions_t;
 
 typedef struct {
   descriptions_t description;
 } location_t;
 
+typedef struct {
+  const char* query;
+  const char* yes_response;
+} obituary_t;
+
 extern location_t locations[];
 extern object_description_t object_descriptions[];
-extern char* arbitrary_messages[];
-extern char* class_messages[];
-extern char* turn_threshold_messages[];
+extern const char* arbitrary_messages[];
+extern const char* class_messages[];
+extern const char* turn_threshold_messages[];
+extern obituary_t obituaries[];
 
 extern size_t CLSSES;
-
+extern int maximum_deaths;
 """
 
 c = """#include "{}"
@@ -118,7 +124,7 @@ for key, data in dungeon["object_descriptions"]:
     c += "    .inventory = {},\n".format(data["inventory"])
     try:
         data["longs"][0]
-        c += "    .longs = (char* []) {\n"
+        c += "    .longs = (const char* []) {\n"
         for l in data["longs"]:
             l = c_escape(l)
             c += "      \"{}\",\n".format(l)
@@ -126,13 +132,32 @@ for key, data in dungeon["object_descriptions"]:
     except (TypeError, IndexError):
         c += "    .longs = NULL,\n"
     c += "  },\n"
-h += "};"
-c += "};"
+h += "};\n\n"
+c += "};\n\n"
+
+c += "obituary_t obituaries[] = {\n"
+for obit in dungeon["obituaries"]:
+
+    query = quotewrap(c_escape(obit["query"]))
+    yes_response = quotewrap(c_escape(obit["yes_response"]))
+
+    c += """  {{
+    .query = {},
+    .yes_response = {},
+  }},
+""".format(query, yes_response)
+
+c += "};\n"
 
 c += """
 size_t CLSSES = {};
 """.format(len(dungeon["class_messages"]))
 
+c += """
+int maximum_deaths = {};
+""".format(len(dungeon["obituaries"]))
+
+
 # finally, write out the files
 d = {
     h_name: h,