Refactoring step - change some visibilities.
[open-adventure.git] / advent.h
index a1fc4542da778986a9f4e83315ab96144d61f69a..faf298e04af52eee8aed786dbfcecd0b56c235b1 100644 (file)
--- a/advent.h
+++ b/advent.h
@@ -1,3 +1,10 @@
+/*
+ * Dungeon types and macros.
+ *
+ * SPDX-FileCopyrightText: 1977, 2005 by Will Crowther and Don Woods
+ * SPDX-FileCopyrightText: 2017 by Eric S. Raymond
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdbool.h>
@@ -13,7 +20,7 @@
 #define LCG_M 1048576L
 
 #define LINESIZE       1024
-#define TOKLEN         5          // # sigificant characters in a token */
+#define TOKLEN         5          // # outputting characters in a token */
 #define NDWARVES       6          // number of dwarves
 #define PIRATE         NDWARVES   // must be NDWARVES-1 when zero-origin
 #define DALTLC         LOC_NUGGET // alternate dwarf location
 #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
 
 /* Special object-state values - integers > 0 are object-specific */
-#define STATE_NOTFOUND  -1       // 'Not found" state of treasures */
+#define STATE_NOTFOUND  -1       // 'Not found" state of treasures
 #define STATE_FOUND    0         // After discovered, before messed with
 #define STATE_IN_CAVITY        1         // State value common to all gemstones
 
 
 /* Map a state property value to a negative range, where the object cannot be
  * picked up but the value can be recovered later.  Avoid colliding with -1,
- * which has its own meaning. */
+ * which has its own meaning as STATE_NOTFOUND. */
 #define STASHED(obj)   (-1 - game.prop[obj])
 
+#define PROMPT "> "
+
 /*
  *  DESTROY(N)  = Get rid of an item by putting it in LOC_NOWHERE
  *  MOD(N,M)    = Arithmetic modulus
@@ -79,7 +89,7 @@
 #define FOREST(LOC)  CNDBIT(LOC, COND_FOREST)
 #define OUTSID(LOC)  (CNDBIT(LOC, COND_ABOVE) || FOREST(LOC))
 #define INSIDE(LOC)  (!OUTSID(LOC) || LOC == LOC_BUILDING)
-#define INDEEP(LOC)  ((LOC) >= LOC_MISTHALL && !OUTSID(LOC))
+#define INDEEP(LOC)  CNDBIT((LOC),COND_DEEP)
 #define BUG(x)       bug(x, #x)
 
 enum bugtype {
@@ -106,7 +116,6 @@ typedef enum scorebonus {none, splatter, defeat, victory} score_t;
 
 /* Phase codes for action returns.
  * These were at one time FORTRAN line numbers.
- * The values don't matter, but perturb their order at your peril.
  */
 typedef enum {
     GO_TERMINATE,
@@ -169,7 +178,7 @@ struct game_t {
     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
@@ -194,6 +203,11 @@ struct settings_t {
     FILE *logfp;
     bool oldstyle;
     bool prompt;
+    char **argv;
+    int argc;
+    int optind;
+    FILE *scriptfp;
+    int debug;
 };
 
 typedef struct {
@@ -212,9 +226,32 @@ typedef struct {
     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   29
+
+/*
+ * 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 {
+    int64_t savetime;
+    int32_t mode;              /* not used, must be present for version detection */
+    int32_t version;
+    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 bool get_command_input(command_t *);
 extern void clear_command(command_t *);
 extern void speak(const char*, ...);
@@ -222,11 +259,11 @@ extern void sspeak(int msg, ...);
 extern void pspeak(vocab_t, enum speaktype, bool, int, ...);
 extern void rspeak(vocab_t, ...);
 extern void echo_input(FILE*, const char*, const char*);
-extern bool silent_yes(void);
-extern bool yes(const char*, const char*, const char*);
+extern bool silent_yes_or_no(void);
+extern bool yes_or_no(const char*, const char*, const char*);
 extern void juggle(obj_t);
 extern void move(obj_t, loc_t);
-extern loc_t put(obj_t, int, int);
+extern loc_t put(obj_t, loc_t, int);
 extern void carry(obj_t, loc_t);
 extern void drop(obj_t, loc_t);
 extern int atdwrf(loc_t);
@@ -237,6 +274,9 @@ extern int32_t randrange(int32_t);
 extern int score(enum termination);
 extern void terminate(enum termination) __attribute__((noreturn));
 extern int savefile(FILE *, int32_t);
+#if defined ADVENT_AUTOSAVE
+extern void autosave(void);
+#endif
 extern int suspend(void);
 extern int resume(void);
 extern int restore(FILE *);
@@ -244,8 +284,7 @@ extern int initialise(void);
 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 = {