X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=newdungeon.py;h=b27e5c71db6293ff9aa99b3de2bec10130135513;hb=2aa5f1dd6114eb021535eff7e4891874efe82095;hp=64592e5fb5de9a861eb94aec858abc013bed4145;hpb=f9edfc51515853c21418c1d55b681a71681a748c;p=open-adventure.git diff --git a/newdungeon.py b/newdungeon.py index 64592e5..b27e5c7 100755 --- a/newdungeon.py +++ b/newdungeon.py @@ -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, )