Put the long and short location descriptions into a 'locations' data structure.
They're renamed 'small' and 'big' to avoid colliding with C reserved words.
This commit is contained in:
parent
da883d53c0
commit
1322a347ae
4 changed files with 792 additions and 388 deletions
1122
adventure.yaml
1122
adventure.yaml
File diff suppressed because it is too large
Load diff
2
init.c
2
init.c
|
@ -184,7 +184,7 @@ void initialise(void)
|
||||||
|
|
||||||
for (i=1; i<=LOCSIZ; i++) {
|
for (i=1; i<=LOCSIZ; i++) {
|
||||||
game.abbrev[i]=0;
|
game.abbrev[i]=0;
|
||||||
if (!(long_location_descriptions[i] == 0 || KEY[i] == 0)) {
|
if (!(locations[i].description.big == 0 || KEY[i] == 0)) {
|
||||||
k=KEY[i];
|
k=KEY[i];
|
||||||
if(MOD(labs(TRAVEL[k]),1000) == 1)COND[i]=2;
|
if(MOD(labs(TRAVEL[k]),1000) == 1)COND[i]=2;
|
||||||
}
|
}
|
||||||
|
|
4
main.c
4
main.c
|
@ -936,9 +936,9 @@ static bool do_command(FILE *cmdin)
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (game.loc == 0)
|
if (game.loc == 0)
|
||||||
croak(cmdin);
|
croak(cmdin);
|
||||||
char* msg = short_location_descriptions[game.loc];
|
char* msg = locations[game.loc].description.small;
|
||||||
if (MOD(game.abbrev[game.loc],game.abbnum) == 0 || msg == 0)
|
if (MOD(game.abbrev[game.loc],game.abbnum) == 0 || msg == 0)
|
||||||
msg=long_location_descriptions[game.loc];
|
msg=locations[game.loc].description.big;
|
||||||
if (!FORCED(game.loc) && DARK(game.loc)) {
|
if (!FORCED(game.loc) && DARK(game.loc)) {
|
||||||
/* The easiest way to get killed is to fall into a pit in
|
/* The easiest way to get killed is to fall into a pit in
|
||||||
* pitch darkness. */
|
* pitch darkness. */
|
||||||
|
|
|
@ -17,13 +17,16 @@ def c_escape(string):
|
||||||
string = string.replace("'", "\\'")
|
string = string.replace("'", "\\'")
|
||||||
return string
|
return string
|
||||||
|
|
||||||
|
def quotewrap(string):
|
||||||
|
"""Wrap a string in double quotes."""
|
||||||
|
return '"' + string + '"'
|
||||||
|
|
||||||
def write_regular_messages(name, h, c):
|
def write_regular_messages(name, h, c):
|
||||||
|
|
||||||
if name != "short_location_descriptions":
|
h += "enum {}_refs {{\n".format(name)
|
||||||
h += "enum {}_refs {{\n".format(name)
|
for key, text in dungeon[name]:
|
||||||
for key, text in dungeon[name]:
|
h += " {},\n".format(key)
|
||||||
h += " {},\n".format(key)
|
h += "};\n\n"
|
||||||
h += "};\n\n"
|
|
||||||
|
|
||||||
c += "char* {}[] = {{\n".format(name)
|
c += "char* {}[] = {{\n".format(name)
|
||||||
index = 0
|
index = 0
|
||||||
|
@ -48,8 +51,16 @@ typedef struct {
|
||||||
char** longs;
|
char** longs;
|
||||||
} object_description_t;
|
} object_description_t;
|
||||||
|
|
||||||
extern char* long_location_descriptions[];
|
typedef struct {
|
||||||
extern char* short_location_descriptions[];
|
char* small;
|
||||||
|
char* big;
|
||||||
|
} descriptions_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
descriptions_t description;
|
||||||
|
} location_t;
|
||||||
|
|
||||||
|
extern location_t locations[];
|
||||||
extern object_description_t object_descriptions[];
|
extern object_description_t object_descriptions[];
|
||||||
extern char* arbitrary_messages[];
|
extern char* arbitrary_messages[];
|
||||||
extern char* class_messages[];
|
extern char* class_messages[];
|
||||||
|
@ -65,13 +76,36 @@ c = """#include "{}"
|
||||||
|
|
||||||
for name in [
|
for name in [
|
||||||
"arbitrary_messages",
|
"arbitrary_messages",
|
||||||
"long_location_descriptions",
|
|
||||||
"short_location_descriptions",
|
|
||||||
"class_messages",
|
"class_messages",
|
||||||
"turn_threshold_messages",
|
"turn_threshold_messages",
|
||||||
]:
|
]:
|
||||||
h, c = write_regular_messages(name, h, c)
|
h, c = write_regular_messages(name, h, c)
|
||||||
|
|
||||||
|
h += "enum locations_refs {\n"
|
||||||
|
c += "location_t locations[] = {\n"
|
||||||
|
for key, data in dungeon["locations"]:
|
||||||
|
h += " {},\n".format(key)
|
||||||
|
|
||||||
|
try:
|
||||||
|
short = quotewrap(c_escape(data["description"]["short"]))
|
||||||
|
except AttributeError:
|
||||||
|
short = "NULL"
|
||||||
|
try:
|
||||||
|
long = quotewrap(c_escape(data["description"]["long"]))
|
||||||
|
except AttributeError:
|
||||||
|
long = "NULL"
|
||||||
|
|
||||||
|
c += """ {{
|
||||||
|
.description = {{
|
||||||
|
.small = {},
|
||||||
|
.big = {},
|
||||||
|
}},
|
||||||
|
}},
|
||||||
|
""".format(short, long)
|
||||||
|
|
||||||
|
c += "};\n\n"
|
||||||
|
h += "};\n\n"
|
||||||
|
|
||||||
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"]:
|
for key, data in dungeon["object_descriptions"]:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue