Magic-number elimination.

This commit is contained in:
Eric S. Raymond 2023-04-10 10:28:18 -04:00
parent 82c3ae5e65
commit 4d4e8dce96
3 changed files with 6 additions and 24 deletions

View file

@ -61,6 +61,7 @@
#define PROP_SET_FOUND(obj) (game.objects[obj].prop = STATE_FOUND)
#define PROP_SET_NOT_FOUND(obj) (game.objects[obj].prop = STATE_NOTFOUND)
#define PROP_IS_NOTFOUND2(g, o) (g.objects[o].prop == STATE_NOTFOUND)
#define PROP_IS_INVALID(val) (val < -MAX_STATE - 1 || val > MAX_STATE)
#else
#define PROP_STASHED(obj) (-game.objects[obj].prop)
#define PROP_IS_STASHED(obj) (game.objects[obj].prop < 0)
@ -70,9 +71,8 @@
#define PROP_SET_FOUND(obj) do {game.objects[obj].found = true; game.objects[obj].prop = STATE_FOUND;} while(0)
#define PROP_SET_NOT_FOUND(obj) game.objects[obj].found = false
#define PROP_IS_NOTFOUND2(g, o) (!g.objects[o].found)
#define PROP_IS_INVALID(val) (val < -MAX_STATE || val > MAX_STATE)
#endif
/* Magic number -2 allows a PROP_STASHED version of state 1 */
#define PROP_IS_INVALID(val) (val < -2 || val > 1)
#define PROMPT "> "

View file

@ -136,6 +136,7 @@ def get_objects(obj):
}},
}},
"""
max_state = 0
obj_str = ""
for (i, item) in enumerate(obj):
attr = item[1]
@ -159,6 +160,7 @@ def get_objects(obj):
statedefines += "/* States for %s */\n" % item[0]
for (n, label) in enumerate(labels):
statedefines += "#define %s\t%d\n" % (label, n)
max_state = max(max_state, n)
statedefines += "\n"
sounds_str = ""
if attr.get("sounds") is None:
@ -192,6 +194,7 @@ def get_objects(obj):
treasure = "true" if attr.get("treasure") else "false"
obj_str += template.format(i, item[0], words_str, i_msg, locs[0], locs[1], treasure, descriptions_str, sounds_str, texts_str, changes_str)
obj_str = obj_str[:-1] # trim trailing newline
statedefines += "/* Maximum state value */\n#define MAX_STATE %d\n" % max_state
return obj_str
def get_obituaries(obit):

View file

@ -230,28 +230,7 @@ bool is_valid(struct game_t valgame)
/* Check that properties of objects aren't beyond expected */
for (obj_t obj = 0; obj <= NOBJECTS; obj++) {
if (PROP_IS_INVALID(valgame.objects[obj].prop)) {
switch (obj) {
case RUG:
case DRAGON:
case BIRD:
case BOTTLE:
case PLANT:
case PLANT2:
case TROLL:
case URN:
case EGGS:
case VASE:
case CHAIN:
if (valgame.objects[obj].prop == 2) // There are multiple different states, but it's convenient to clump them together
continue; // LCOV_EXCL_LINE
/* FALLTHRU */
case BEAR:
if (valgame.objects[BEAR].prop == CONTENTED_BEAR || valgame.objects[BEAR].prop == BEAR_DEAD)
continue;
/* FALLTHRU */
default:
return false; // LCOV_EXCL_LINE
}
return false; // LCOV_EXCL_LINE
}
}