Remove actspk[].
[open-adventure.git] / newdungeon.py
index 64592e5fb5de9a861eb94aec858abc013bed4145..b27e5c71db6293ff9aa99b3de2bec10130135513 100755 (executable)
@@ -92,6 +92,11 @@ typedef struct {{
   const char** words;
 }} motion_t;
 
+typedef struct {{
+  const char** words;
+  const long message;
+}} action_t;
+
 extern const location_t locations[];
 extern const object_t objects[];
 extern const char* arbitrary_messages[];
@@ -100,8 +105,8 @@ extern const turn_threshold_t turn_thresholds[];
 extern const obituary_t obituaries[];
 extern const hint_t hints[];
 extern long conditions[];
-extern const long actspk[];
 extern const motion_t motions[];
+extern const action_t actions[];
 
 #define NLOCATIONS     {}
 #define NOBJECTS       {}
@@ -109,7 +114,7 @@ extern const motion_t motions[];
 #define NCLASSES       {}
 #define NDEATHS                {}
 #define NTHRESHOLDS    {}
-#define NVERBS         {}
+#define NACTIONS       {}
 #define NTRAVEL                {}
 
 enum arbitrary_messages_refs {{
@@ -128,6 +133,10 @@ enum motion_refs {{
 {}
 }};
 
+enum action_refs {{
+{}
+}};
+
 /* State definitions */
 
 {}
@@ -171,12 +180,11 @@ long conditions[] = {{
 {}
 }};
 
-const long actspk[] = {{
-    NO_MESSAGE,
+const motion_t motions[] = {{
 {}
 }};
 
-const motion_t motions[] = {{
+const action_t actions[] = {{
 {}
 }};
 
@@ -398,12 +406,6 @@ def recompose(type_word, value):
         sys.stderr.write("%s is not a known word classifier\n" % attrs["type"])
         sys.exit(1)
 
-def get_actspk(actspk):
-    res = ""
-    for (i, word) in actspk.items():
-        res += "    %s,\n" % word
-    return res
-
 def buildtravel(locs, objs, voc):
     ltravel = []
     lkeys = []
@@ -465,8 +467,8 @@ def buildtravel(locs, objs, voc):
                 tt += [verbmap[e] for e in rule["verbs"]]
                 if not rule["verbs"]:
                     tt.append(1)
-                #print(tuple(tt))
-    return (ltravel, lkeys)
+                ltravel.append(tuple(tt))
+    return (tuple(ltravel), lkeys)
 
 def get_motions(motions):
     template = """    {{
@@ -484,6 +486,31 @@ def get_motions(motions):
         mot_str += template.format(words_str)
     return mot_str
 
+def get_actions(actions):
+    template = """    {{
+        .words = {},
+        .message = {},
+    }},
+"""
+    act_str = ""
+    for action in actions:
+        contents = action[1]
+        
+        if contents["words"] == None:
+            words_str = "NULL"
+        else:
+            c_words = [make_c_string(s) for s in contents["words"]]
+            words_str = "(const char* []) {" + ", ".join(c_words) + "}"
+
+        if contents["message"] == None:
+            message = "NO_MESSAGE"
+        else:
+            message = contents["message"]
+            
+        act_str += template.format(words_str, message)
+    act_str = act_str[:-1] # trim trailing newline
+    return act_str
+
 if __name__ == "__main__":
     with open(yaml_name, "r") as f:
         db = yaml.load(f)
@@ -492,6 +519,7 @@ if __name__ == "__main__":
     msgnames = [el[0] for el in db["arbitrary_messages"]]
     objnames = [el[0] for el in db["objects"]]
     (travel, key) = buildtravel(db["locations"], db["objects"], db["vocabulary"])
+    # FIXME: pack the Section 3 representation into the runtime format.
 
     c = c_template.format(
         h_name,
@@ -503,8 +531,8 @@ if __name__ == "__main__":
         get_obituaries(db["obituaries"]),
         get_hints(db["hints"], db["arbitrary_messages"]),
         get_condbits(db["locations"]),
-        get_actspk(db["actspk"]),
         get_motions(db["motions"]),
+        get_actions(db["actions"]),
     )
 
     h = h_template.format(
@@ -514,12 +542,13 @@ if __name__ == "__main__":
         len(db["classes"])-1,
         len(db["obituaries"]),
         len(db["turn_thresholds"]),
-        len(db["actspk"]),
+        len(db["actions"]),
         len(travel),
         get_refs(db["arbitrary_messages"]),
         get_refs(db["locations"]),
         get_refs(db["objects"]),
         get_refs(db["motions"]),
+        get_refs(db["actions"]),
         statedefines,
     )