#define BATTERYLIFE 2500 // turn limit increment from batteries
#define WORD_NOT_FOUND -1 // "Word not found" flag value for the vocab hash functions.
#define WORD_EMPTY 0 // "Word empty" flag value for the vocab hash functions
+#define PIT_KILL_PROB 35 // Percentage probability of dying from fall in pit.
#define CARRIED -1 // Player is toting it
#define READ_MODE "rb" // b is not needed for POSIX but harmless
#define WRITE_MODE "wb" // b is not needed for POSIX but harmless
int saved; // point penalty for saves
int tally; // count of treasures gained
int thresh; // current threshold for endgame scoring tier
- turn_t trndex; // FIXME: not used, remove on next format bump
+ bool seenbigwords; // have we red the grafitti in the Giant's Room?
turn_t trnluz; // # points lost so far due to turns used
turn_t turns; // counts commands given (ignores yes/no)
char zzword[TOKLEN + 1]; // randomly generated magic word from bird
command_state_t state;
} command_t;
+/*
+ * Bump on save format change.
+ *
+ * Note: Verify that the tests run clean before bumping this, then rebuild the check
+ * files afterwards. Otherwise you will get a spurious failure due to the old version
+ * having been generated into a check file.
+ */
+#define SAVE_VERSION 30
+
+/*
+ * Goes at start of gile so sabes can be identified by file(1) and the like.
+ */
+#define ADVENT_MAGIC "open-adventure\n"
+
+/*
+ * If you change the first three members, the resume function may not properly
+ * reject saves from older versions. Later members can change, but bump the version
+ * when you do that.
+ */
+struct save_t {
+ char magic[sizeof(ADVENT_MAGIC)];
+ int32_t version;
+ int32_t canary;
+ struct game_t game;
+};
+
extern struct game_t game;
+extern struct save_t save;
extern struct settings_t settings;
extern char *myreadline(const char *);
extern int32_t randrange(int32_t);
extern int score(enum termination);
extern void terminate(enum termination) __attribute__((noreturn));
-extern int savefile(FILE *, int32_t);
+extern int savefile(FILE *);
#if defined ADVENT_AUTOSAVE
extern void autosave(void);
#endif
extern phase_codes_t action(command_t);
extern void state_change(obj_t, int);
extern bool is_valid(struct game_t);
-
-void bug(enum bugtype, const char *) __attribute__((__noreturn__));
+extern void bug(enum bugtype, const char *) __attribute__((__noreturn__));
/* represent an empty command word */
static const command_word_t empty_command_word = {