Generate newdb.[ch] at build time, parallel with database.[ch].
Having two data compile jobs is a temporary situation. Eventually newdb.[ch] will supersede database.[ch].
This commit is contained in:
parent
178c7ff983
commit
60126c3dac
5 changed files with 1154 additions and 1317 deletions
11
Makefile
11
Makefile
|
@ -22,7 +22,7 @@ ifeq ($(UNAME_S),Linux)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
OBJS=main.o init.o actions.o score.o misc.o saveresume.o common.o newdb.o
|
OBJS=main.o init.o actions.o score.o misc.o saveresume.o common.o newdb.o
|
||||||
SOURCES=$(OBJS:.o=.c) dungeon.c advent.h common.h adventure.text Makefile control linenoise/linenoise.[ch]
|
SOURCES=$(OBJS:.o=.c) dungeon.c advent.h common.h adventure.text Makefile control linenoise/linenoise.[ch] newdungeon.py
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
$(CC) $(CCFLAGS) $(DBX) -c $<
|
$(CC) $(CCFLAGS) $(DBX) -c $<
|
||||||
|
@ -30,7 +30,7 @@ SOURCES=$(OBJS:.o=.c) dungeon.c advent.h common.h adventure.text Makefile contro
|
||||||
advent: $(OBJS) database.o linenoise.o
|
advent: $(OBJS) database.o linenoise.o
|
||||||
$(CC) $(CCFLAGS) $(DBX) -o advent $(OBJS) database.o linenoise.o $(LDFLAGS) $(LIBS)
|
$(CC) $(CCFLAGS) $(DBX) -o advent $(OBJS) database.o linenoise.o $(LDFLAGS) $(LIBS)
|
||||||
|
|
||||||
main.o: advent.h database.h database.c common.h
|
main.o: advent.h database.h database.c common.h newdb.h
|
||||||
|
|
||||||
init.o: advent.h database.h database.c common.h
|
init.o: advent.h database.h database.c common.h
|
||||||
|
|
||||||
|
@ -47,11 +47,15 @@ common.o: common.h
|
||||||
database.o: database.c database.h common.h
|
database.o: database.c database.h common.h
|
||||||
$(CC) $(CCFLAGS) $(DBX) -c database.c
|
$(CC) $(CCFLAGS) $(DBX) -c database.c
|
||||||
|
|
||||||
newdb.o: newdb.h
|
newdb.o: newdb.c newdb.h
|
||||||
|
$(CC) $(CCFLAGS) $(DBX) -c newdb.c
|
||||||
|
|
||||||
database.c database.h: dungeon
|
database.c database.h: dungeon
|
||||||
./dungeon
|
./dungeon
|
||||||
|
|
||||||
|
newdb.c newdb.h:
|
||||||
|
./newdungeon.py
|
||||||
|
|
||||||
linenoise.o: linenoise/linenoise.h
|
linenoise.o: linenoise/linenoise.h
|
||||||
$(CC) -c linenoise/linenoise.c
|
$(CC) -c linenoise/linenoise.c
|
||||||
|
|
||||||
|
@ -60,6 +64,7 @@ dungeon: dungeon.o common.o
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.o advent *.html database.[ch] dungeon *.gcno *.gcda
|
rm -f *.o advent *.html database.[ch] dungeon *.gcno *.gcda
|
||||||
|
rm -f newdb.c newdb.h
|
||||||
rm -f README advent.6 MANIFEST *.tar.gz
|
rm -f README advent.6 MANIFEST *.tar.gz
|
||||||
rm -f *~
|
rm -f *~
|
||||||
cd tests; $(MAKE) --quiet clean
|
cd tests; $(MAKE) --quiet clean
|
||||||
|
|
1299
adventure.json
1299
adventure.json
File diff suppressed because it is too large
Load diff
1124
adventure.yaml
Normal file
1124
adventure.yaml
Normal file
File diff suppressed because it is too large
Load diff
|
@ -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 yaml
|
||||||
import collections
|
import sys
|
||||||
|
|
||||||
json_name = "adventure.json"
|
yaml_name = "adventure.yaml"
|
||||||
h_name = "newdb.h"
|
h_name = "newdb.h"
|
||||||
c_name = "newdb.c"
|
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)
|
if name != "short_location_descriptions":
|
||||||
c += "char* {}[] = {{\n".format(name)
|
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():
|
for key, text in dungeon[name]:
|
||||||
h += " {},\n".format(key)
|
|
||||||
if text == None:
|
if text == None:
|
||||||
c += " NULL,\n"
|
c += " NULL,\n"
|
||||||
else:
|
else:
|
||||||
text = c_escape(text)
|
text = c_escape(text)
|
||||||
c += " \"{}\",\n".format(text)
|
c += " \"{}\",\n".format(text)
|
||||||
|
|
||||||
index += 1
|
index += 1
|
||||||
|
|
||||||
h += "};\n\n"
|
|
||||||
c += "};\n\n"
|
c += "};\n\n"
|
||||||
|
|
||||||
return (h, c)
|
return (h, c)
|
||||||
|
|
||||||
with open(json_name, "r") as f:
|
with open(yaml_name, "r") as f:
|
||||||
dungeon = json.load(f, object_pairs_hook = collections.OrderedDict)
|
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"
|
h += "enum object_descriptions_refs {\n"
|
||||||
c += "object_description_t object_descriptions[] = {\n"
|
c += "object_description_t object_descriptions[] = {\n"
|
||||||
for key, data in dungeon["object_descriptions"].items():
|
for key, data in dungeon["object_descriptions"]:
|
||||||
try:
|
try:
|
||||||
data["inventory"] = "\"{}\"".format(c_escape(data["inventory"]))
|
data["inventory"] = "\"{}\"".format(c_escape(data["inventory"]))
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
|
@ -87,7 +87,7 @@ for key, data in dungeon["object_descriptions"].items():
|
||||||
c += " .longs = (char* []) {\n"
|
c += " .longs = (char* []) {\n"
|
||||||
for l in data["longs"]:
|
for l in data["longs"]:
|
||||||
l = c_escape(l)
|
l = c_escape(l)
|
||||||
c += " \"{}\"\n".format(l)
|
c += " \"{}\",\n".format(l)
|
||||||
c += " },\n"
|
c += " },\n"
|
||||||
except (TypeError, IndexError):
|
except (TypeError, IndexError):
|
||||||
c += " .longs = NULL,\n"
|
c += " .longs = NULL,\n"
|
||||||
|
@ -95,6 +95,11 @@ for key, data in dungeon["object_descriptions"].items():
|
||||||
h += "};"
|
h += "};"
|
||||||
c += "};"
|
c += "};"
|
||||||
|
|
||||||
|
c += """
|
||||||
|
size_t CLSSES = {};
|
||||||
|
""".format(len(dungeon["class_messages"]))
|
||||||
|
|
||||||
|
# finally, write out the files
|
||||||
d = {
|
d = {
|
||||||
h_name: h,
|
h_name: h,
|
||||||
c_name: c,
|
c_name: c,
|
||||||
|
|
|
@ -62,7 +62,9 @@ a "seed" command) will replay reliably, including random events.
|
||||||
|
|
||||||
The adventure.text file is no longer required at runtime. Instead, it
|
The adventure.text file is no longer required at runtime. Instead, it
|
||||||
is compiled at build time to a source module containing C structures,
|
is compiled at build time to a source module containing C structures,
|
||||||
which is then linked to the advent binary.
|
which is then linked to the advent binary. There is an adventure.yaml file
|
||||||
|
as well; this is also compiled to C code, and will eventually replace
|
||||||
|
adventure.text altogether.
|
||||||
|
|
||||||
The game-save format has changed. This was done to simplify the
|
The game-save format has changed. This was done to simplify the
|
||||||
FORTRAN-derived code that formerly implemented the save/restore
|
FORTRAN-derived code that formerly implemented the save/restore
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue