#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)
#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 "> "
}},
}},
"""
+ max_state = 0
obj_str = ""
for (i, item) in enumerate(obj):
attr = item[1]
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:
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):
/* 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
}
}