#include <stdbool.h>
#include "common.h"
+#include "newdb.h"
#define LINESIZE 100
#define NDWARVES 6 /* number of dwarves */
long fixed[NOBJECTS + 1];
long link[NOBJECTS * 2 + 1];
long place[NOBJECTS + 1];
- long hinted[HNTSIZ + 1];
- long hintlc[HNTSIZ + 1];
+ long hinted[HINT_COUNT];
+ long hintlc[HINT_COUNT];
long prop[NOBJECTS + 1];
};
extern struct game_t game;
-extern long LNLENG, LNPOSN, PARMS[];
+extern long LNLENG, LNPOSN;
extern char rawbuf[LINESIZE], INLINE[LINESIZE + 1];
extern const char ascii_to_advent[];
extern const char advent_to_ascii[];
#define READ_MODE "rb"
#define WRITE_MODE "wb"
extern void* xmalloc(size_t size);
-extern char* xstrdup(const char*);
extern void packed_to_token(long, char token[]);
extern void token_to_packed(char token[], long*);
-extern void speak(const char*);
+extern void vspeak(const char*, va_list);
extern bool wordeq(token_t, token_t);
extern bool wordempty(token_t);
extern void wordclear(token_t *);
-extern void PSPEAK(vocab_t, int);
-extern void RSPEAK(vocab_t);
-extern void SETPRM(long, long, long);
+extern void speak(const char*, ...);
+extern void pspeak(vocab_t, int, ...);
+extern void rspeak(vocab_t, ...);
extern bool GETIN(FILE *, token_t*, token_t*, token_t*, token_t*);
extern void echo_input(FILE*, char*, char*);
extern char* get_input(void);
extern int resume(void);
extern int restore(FILE *);
+/* Symbols for cond bits - used by following macros */
+#define COND_LIT 0 /* Light */
+#define COND_OILY 1 /* If bit 2 is on: on for oil, off for water */
+#define COND_FLUID 2 /* Liquid asset, see bit 1 */
+#define COND_NOARRR 3 /* Pirate doesn't go here unless following */
+#define COND_NOBACK 4 /* Cannot use "back" to move away */
+/* Bits past 10 indicate areas of interest to "hint" routines */
+#define COND_HBASE 10 /* Base for location hint bits */
+#define COND_HCAVE 11 /* Trying to get into cave */
+#define COND_HBIRD 12 /* Trying to catch bird */
+#define COND_HSNAKE 13 /* Trying to deal with snake */
+#define COND_HMAZE 14 /* Lost in maze */
+#define COND_HDARK 15 /* Pondering dark room */
+#define COND_HWITT 16 /* At Witt's End */
+#define COND_HCLIFF 17 /* Cliff with urn */
+#define COND_HWOODS 18 /* Lost in forest */
+#define COND_HOGRE 19 /* Trying to deal with ogre */
+#define COND_HJADE 20 /* Found all treasures except jade */
+
/*
* MOD(N,M) = Arithmetic modulus
* AT(OBJ) = true if on either side of two-placed object
#define LIQLOC(LOC) (LIQ2((MOD(COND[LOC]/2*2,8)-5)*MOD(COND[LOC]/4,2)+1))
#define CNDBIT(L,N) (TSTBIT(COND[L],N))
#define FORCED(LOC) (COND[LOC] == 2)
-#define DARK(DUMMY) ((!CNDBIT(game.loc,LIGHT)) && (game.prop[LAMP] == 0 || !HERE(LAMP)))
+#define DARK(DUMMY) ((!CNDBIT(game.loc,COND_LIT)) && (game.prop[LAMP] == 0 || !HERE(LAMP)))
#define PCT(N) (randrange(100) < (N))
#define GSTONE(OBJ) ((OBJ) == EMERALD || (OBJ) == RUBY || (OBJ) == AMBER || (OBJ) == SAPPH)
#define FOREST(LOC) ((LOC) >= LOC_FOREST1 && (LOC) <= LOC_FOREST22)
#define GO_ACTION 40000
#define GO_DWARFWAKE 19000
-/* Symbols for cond bits */
-#define LIGHT 0 /* Light */
-#define OILY 1 /* If bit 2 is on: on for oil, off for water */
-#define FLUID 2 /* Liquid asset, see bit 1 */
-#define NOARRR 3 /* Pirate doesn't go here unless following player */
-#define NOBACK 4 /* Cannot use "back" to move away */
-/* Bits past 10 indicate areas of interest to "hint" routines */
-#define HBASE 10 /* Base for location hint bits */
-#define HCAVE 11 /* Trying to get into cave */
-#define HBIRD 12 /* Trying to catch bird */
-#define HSNAKE 13 /* Trying to deal with snake */
-#define HMAZE 14 /* Lost in maze */
-#define HDARK 15 /* Pondering dark room */
-#define HWITT 16 /* At Witt's End */
-#define HCLIFF 17 /* Cliff with urn */
-#define HWOODS 18 /* Lost in forest */
-#define HOGRE 19 /* Trying to deal with ogre */
-#define HJADE 20 /* Found all treasures except jade */
-
/* Special object statuses in game.place - can also be a location number (> 0) */
#define CARRIED -1 /* Player is toting it */