Abolish HNTMAX and HNTSIZ in favor of HINT_COUNT.
[open-adventure.git] / advent.h
index f578eb0a4818ebf78e02967c4e8322c2a62bc6f6..a4714614c6df892448d863ec5406b65d26e383ed 100644 (file)
--- a/advent.h
+++ b/advent.h
@@ -3,6 +3,7 @@
 #include <stdbool.h>
 
 #include "common.h"
+#include "newdb.h"
 
 #define LINESIZE       100
 #define NDWARVES       6               /* number of dwarves */
@@ -32,9 +33,9 @@ struct game_t {
     long chloc2;
     long clock1;
     long clock2;
-    long clshnt;
-    long closed;
-    long closng;
+    bool clshnt;       /* has player read the clue in the endgame? */
+    bool closed;       /* whether we're all the way closed */
+    bool closng;       /* whether it's closing time yet */
     long conds;
     long detail;
     long dflag;
@@ -45,22 +46,22 @@ struct game_t {
     long iwest;
     long knfloc;
     long limit;
-    long lmwarn;
+    bool lmwarn;       /* has player been warned about lamp going dim? */
     long loc;
     long newloc;
-    long novice;
+    bool novice;       /* asked for instructions at start-up? */
     long numdie;
     long oldloc;
     long oldlc2;
     long oldobj;
-    long panic;
+    bool panic;                /* has player found out he's trapped in the cave? */
     long saved;
     long tally;
     long thresh;
     long trndex;
     long trnluz;
     long turns;
-    long wzdark;
+    bool wzdark;       /* whether the loc he's leaving was dark */
     long zzword;
     long abbrev[LOCSIZ + 1];
     long atloc[LOCSIZ + 1];
@@ -70,14 +71,14 @@ struct game_t {
     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[];
@@ -90,10 +91,14 @@ extern bool oldstyle, editline, prompt;
 extern void* xmalloc(size_t size);
 extern char* xstrdup(const char*);
 extern void packed_to_token(long, char token[]);
-extern void speak(const char*);
-extern void PSPEAK(vocab_t, int);
-extern void RSPEAK(vocab_t);
-extern void SETPRM(long, long, long);
+extern void token_to_packed(char token[], long*);
+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 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);
@@ -177,8 +182,16 @@ extern long AMBER, ATTACK, AXE, BACK, BATTERY, BEAR,
 
 enum speechpart {unknown, intransitive, transitive};
 
+struct command_t {
+    enum speechpart part;
+    vocab_t verb;
+    vocab_t obj;
+    token_t wd1, wd1x;
+    token_t wd2, wd2x;
+};
+
 void initialise(void);
-int action(FILE *input, enum speechpart part, long verb, token_t obj);
+int action(FILE *input, struct command_t *command);
 
 /* Phase codes for action returns.
  * These were at one time FORTRAN line numbers.
@@ -223,5 +236,83 @@ int action(FILE *input, enum speechpart part, long verb, token_t obj);
 /* hack to ignore GCC Unused Result */
 #define IGNORE(r) do{if (r){}}while(0)
 
+/*
+ * FIXME: These constants should be replaced by strings, at their usage sites.
+ * They are sixbit-packed representations of vocabulary words.  This, and code
+ * left in misc.c, is the only place left in the runtime that knows about 
+ * word packing.
+ */
+#define WORD_AXE       12405
+#define WORD_BATTERY   201202005
+#define WORD_BEAR      2050118
+#define WORD_BIRD      2091804
+#define WORD_BLOOD     212151504
+#define WORD_BOTTLE    215202012
+#define WORD_CAGE      3010705
+#define WORD_CATCH     301200308
+#define WORD_CAVITY    301220920
+#define WORD_CHASM     308011913
+#define WORD_CLAM      3120113
+#define WORD_DOOR      4151518
+#define WORD_DRAGON    418010715
+#define WORD_DWARF     423011806
+#define WORD_FISSURE   609191921
+#define WORD_FOOD      6151504
+#define WORD_GO                715
+#define WORD_GRATE     718012005
+#define WORD_KEYS      11052519
+#define WORD_KNIFE     1114090605
+#define WORD_LAMP      12011316
+#define WORD_MAGAZINE  1301070126
+#define WORD_MESSAG    1305191901
+#define WORD_MIRROR    1309181815
+#define WORD_OGRE      15071805
+#define WORD_OIL       150912
+#define WORD_OYSTER    1525192005
+#define WORD_PILLOW    1609121215
+#define WORD_PLANT     1612011420
+#define WORD_POUR      16152118
+#define WORD_RESER     1805190518
+#define WORD_ROD       181504
+#define WORD_SIGN      19090714
+#define WORD_SNAKE     1914011105
+#define WORD_STEPS     1920051619
+#define WORD_TROLL     2018151212
+#define WORD_URN       211814
+#define WORD_VEND      1755140409
+#define WORD_VOLCANO   1765120301
+#define WORD_WATER     1851200518
+#define WORD_AMBER     113020518
+#define WORD_CHAIN     308010914
+#define WORD_CHEST     308051920
+#define WORD_COINS     315091419
+#define WORD_EGGS      5070719
+#define WORD_EMERALD   513051801
+#define WORD_JADE      10010405
+#define WORD_NUGGET    7151204
+#define WORD_PEARL     1605011812
+#define WORD_PYRAMID   1625180113
+#define WORD_RUBY      18210225
+#define WORD_RUG       182107
+#define WORD_SAPPH     1901161608
+#define WORD_TRIDENT   2018090405
+#define WORD_VASE      22011905
+#define WORD_BACK      2010311
+#define WORD_CAVE      3012205
+#define WORD_DPRSSN    405161805
+#define WORD_ENTER     514200518
+#define WORD_ENTRNC    514201801
+#define WORD_LOOK      12151511
+#define WORD_NUL       14211212
+#define WORD_STREAM    1920180501
+#define WORD_FIND      6091404
+#define WORD_INVENT    914220514
+#define WORD_LOCK      12150311
+#define WORD_SAY       190125
+#define WORD_THROW     2008181523
+#define WORD_WEST      23051920
+#define WORD_YES       250519
+#define WORD_YINIT     25
+
 /* end */